draft-ietf-beep-framework-01.txt   draft-ietf-beep-framework-02.txt 
Network Working Group M.T. Rose Network Working Group M.T. Rose
Internet-Draft Invisible Worlds, Inc. Internet-Draft Invisible Worlds, Inc.
Expires: March 12, 2001 September 11, 2000 Expires: March 26, 2001 September 25, 2000
The Blocks eXtensible eXchange Protocol Framework The Blocks Extensible Exchange Protocol Framework
draft-ietf-beep-framework-01 draft-ietf-beep-framework-02
Status of this Memo Status of this Memo
This document is an Internet-Draft and is in full conformance with This document is an Internet-Draft and is in full conformance with
all provisions of Section 10 of RFC2026. all provisions of Section 10 of RFC2026.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as other groups may also distribute working documents as
Internet-Drafts. Internet-Drafts.
skipping to change at page 1, line 31 skipping to change at page 1, line 31
months and may be updated, replaced, or obsoleted by other documents months and may be updated, replaced, or obsoleted by other documents
at any time. It is inappropriate to use Internet-Drafts as reference at any time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt. http://www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html. http://www.ietf.org/shadow.html.
This Internet-Draft will expire on March 12, 2001. This Internet-Draft will expire on March 26, 2001.
Copyright Notice Copyright Notice
Copyright (C) The Internet Society (2000). All Rights Reserved. Copyright (C) The Internet Society (2000). All Rights Reserved.
Abstract Abstract
This memo describes a generic application protocol framework for This memo describes a generic application protocol framework for
connection-oriented, asynchronous interactions. The framework connection-oriented, asynchronous interactions. The framework
permits simultaneous and independent exchanges within the context of permits simultaneous and independent exchanges within the context of
a single application user-identity, supporting both textual and a single application user-identity, supporting both textual and
binary messages. binary messages.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . 4 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . 4
2. The BXXP Framework . . . . . . . . . . . . . . . . . . . . 5 2. The BEEP Framework . . . . . . . . . . . . . . . . . . . . 5
2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.1 Exchange Styles . . . . . . . . . . . . . . . . . . . . . 6 2.1.1 Exchange Styles . . . . . . . . . . . . . . . . . . . . . 6
2.2 Messages and Frames . . . . . . . . . . . . . . . . . . . 7 2.2 Messages and Frames . . . . . . . . . . . . . . . . . . . 7
2.2.1 Frame Syntax . . . . . . . . . . . . . . . . . . . . . . . 8 2.2.1 Frame Syntax . . . . . . . . . . . . . . . . . . . . . . . 8
2.2.1.1 Frame Header . . . . . . . . . . . . . . . . . . . . . . . 9 2.2.1.1 Frame Header . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.1.2 Frame Payload . . . . . . . . . . . . . . . . . . . . . . 12 2.2.1.2 Frame Payload . . . . . . . . . . . . . . . . . . . . . . 12
2.2.1.3 Frame Trailer . . . . . . . . . . . . . . . . . . . . . . 13 2.2.1.3 Frame Trailer . . . . . . . . . . . . . . . . . . . . . . 13
2.2.2 Frame Semantics . . . . . . . . . . . . . . . . . . . . . 14 2.2.2 Frame Semantics . . . . . . . . . . . . . . . . . . . . . 14
2.2.2.1 Poorly-formed Messages . . . . . . . . . . . . . . . . . . 14 2.2.2.1 Poorly-formed Messages . . . . . . . . . . . . . . . . . . 14
2.2.2.2 XML-based Profiles . . . . . . . . . . . . . . . . . . . . 15 2.2.2.2 XML-based Profiles . . . . . . . . . . . . . . . . . . . . 15
2.3 Channel Management . . . . . . . . . . . . . . . . . . . . 16 2.3 Channel Management . . . . . . . . . . . . . . . . . . . . 16
2.3.1 Message Semantics . . . . . . . . . . . . . . . . . . . . 17 2.3.1 Message Semantics . . . . . . . . . . . . . . . . . . . . 17
2.3.1.1 The Greeting Message . . . . . . . . . . . . . . . . . . . 17 2.3.1.1 The Greeting Message . . . . . . . . . . . . . . . . . . . 17
2.3.1.2 The Start Message . . . . . . . . . . . . . . . . . . . . 18 2.3.1.2 The Start Message . . . . . . . . . . . . . . . . . . . . 19
2.3.1.3 The Close Message . . . . . . . . . . . . . . . . . . . . 20 2.3.1.3 The Close Message . . . . . . . . . . . . . . . . . . . . 22
2.3.1.4 The OK Message . . . . . . . . . . . . . . . . . . . . . . 22 2.3.1.4 The OK Message . . . . . . . . . . . . . . . . . . . . . . 24
2.3.1.5 The Error Message . . . . . . . . . . . . . . . . . . . . 22 2.3.1.5 The Error Message . . . . . . . . . . . . . . . . . . . . 24
2.4 Session Establishment and Release . . . . . . . . . . . . 24 2.4 Session Establishment and Release . . . . . . . . . . . . 26
2.5 Transport Mappings . . . . . . . . . . . . . . . . . . . . 26 2.5 Transport Mappings . . . . . . . . . . . . . . . . . . . . 28
2.5.1 Session Management . . . . . . . . . . . . . . . . . . . . 26 2.5.1 Session Management . . . . . . . . . . . . . . . . . . . . 28
2.5.2 Message Exchange . . . . . . . . . . . . . . . . . . . . . 26 2.5.2 Message Exchange . . . . . . . . . . . . . . . . . . . . . 28
2.6 Parallelism . . . . . . . . . . . . . . . . . . . . . . . 27 2.6 Parallelism . . . . . . . . . . . . . . . . . . . . . . . 29
2.6.1 Within a Single Channel . . . . . . . . . . . . . . . . . 27 2.6.1 Within a Single Channel . . . . . . . . . . . . . . . . . 29
2.6.2 Between Different Channels . . . . . . . . . . . . . . . . 27 2.6.2 Between Different Channels . . . . . . . . . . . . . . . . 29
2.6.3 Pre-emptive Replies . . . . . . . . . . . . . . . . . . . 27 2.6.3 Pre-emptive Replies . . . . . . . . . . . . . . . . . . . 29
2.6.4 Interference . . . . . . . . . . . . . . . . . . . . . . . 27 2.6.4 Interference . . . . . . . . . . . . . . . . . . . . . . . 29
2.7 Peer-to-Peer Behavior . . . . . . . . . . . . . . . . . . 28 2.7 Peer-to-Peer Behavior . . . . . . . . . . . . . . . . . . 30
3. Transport Security . . . . . . . . . . . . . . . . . . . . 29 3. Transport Security . . . . . . . . . . . . . . . . . . . . 31
3.1 The TLS Transport Security Profile . . . . . . . . . . . . 32 3.1 The TLS Transport Security Profile . . . . . . . . . . . . 34
3.1.1 Profile Identification and Initialization . . . . . . . . 32 3.1.1 Profile Identification and Initialization . . . . . . . . 34
3.1.2 Message Syntax . . . . . . . . . . . . . . . . . . . . . . 33 3.1.2 Message Syntax . . . . . . . . . . . . . . . . . . . . . . 35
3.1.3 Message Semantics . . . . . . . . . . . . . . . . . . . . 33 3.1.3 Message Semantics . . . . . . . . . . . . . . . . . . . . 36
3.1.3.1 The Ready Message . . . . . . . . . . . . . . . . . . . . 33 3.1.3.1 The Ready Message . . . . . . . . . . . . . . . . . . . . 36
3.1.3.2 The Proceed Message . . . . . . . . . . . . . . . . . . . 33 3.1.3.2 The Proceed Message . . . . . . . . . . . . . . . . . . . 36
4. User Authentication . . . . . . . . . . . . . . . . . . . 35 4. User Authentication . . . . . . . . . . . . . . . . . . . 37
4.1 The SASL Family of Profiles . . . . . . . . . . . . . . . 36 4.1 The SASL Family of Profiles . . . . . . . . . . . . . . . 38
4.1.1 Profile Identification and Initialization . . . . . . . . 37 4.1.1 Profile Identification and Initialization . . . . . . . . 39
4.1.2 Message Syntax . . . . . . . . . . . . . . . . . . . . . . 39 4.1.2 Message Syntax . . . . . . . . . . . . . . . . . . . . . . 42
4.1.3 Message Semantics . . . . . . . . . . . . . . . . . . . . 40 4.1.3 Message Semantics . . . . . . . . . . . . . . . . . . . . 43
5. Profile Registration Template . . . . . . . . . . . . . . 41 5. Registration Templates . . . . . . . . . . . . . . . . . . 44
6. Initial Profile Registrations . . . . . . . . . . . . . . 42 5.1 Profile Registration Template . . . . . . . . . . . . . . 44
6.1 BXXP Channel Management . . . . . . . . . . . . . . . . . 42 5.2 Feature Registration Template . . . . . . . . . . . . . . 44
6.2 BXXP Channel Management DTD . . . . . . . . . . . . . . . 43 6. Initial Registrations . . . . . . . . . . . . . . . . . . 45
6.3 Registration: TLS Transport Security Profile . . . . . . . 45 6.1 Registration: BEEP Channel Management . . . . . . . . . . 45
6.4 TLS Transport Security Profile DTD . . . . . . . . . . . . 46 6.2 Registration: TLS Transport Security Profile . . . . . . . 45
6.5 Registration: SASL Family of Profiles . . . . . . . . . . 47 6.3 Registration: SASL Family of Profiles . . . . . . . . . . 46
6.6 SASL Family of Profiles DTD . . . . . . . . . . . . . . . 48 7. DTDs . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
7. Reply Codes . . . . . . . . . . . . . . . . . . . . . . . 49 7.1 BEEP Channel Management DTD . . . . . . . . . . . . . . . 47
8. Security Considerations . . . . . . . . . . . . . . . . . 50 7.2 TLS Transport Security Profile DTD . . . . . . . . . . . . 49
9. IANA Considerations . . . . . . . . . . . . . . . . . . . 51 7.3 SASL Family of Profiles DTD . . . . . . . . . . . . . . . 50
References . . . . . . . . . . . . . . . . . . . . . . . . 52 8. Reply Codes . . . . . . . . . . . . . . . . . . . . . . . 51
Author's Address . . . . . . . . . . . . . . . . . . . . . 53 9. Security Considerations . . . . . . . . . . . . . . . . . 52
A. Changes from draft-ietf-beep-framework-00 . . . . . . . . 54 10. IANA Considerations . . . . . . . . . . . . . . . . . . . 53
B. Changes from draft-mrose-bxxp-framework-01 . . . . . . . . 55 References . . . . . . . . . . . . . . . . . . . . . . . . 54
C. Changes from draft-mrose-bxxp-framework-00 . . . . . . . . 56 Author's Address . . . . . . . . . . . . . . . . . . . . . 55
D. Acknowledgements . . . . . . . . . . . . . . . . . . . . . 57 A. Changes from draft-ietf-beep-framework-01 . . . . . . . . 56
Full Copyright Statement . . . . . . . . . . . . . . . . . 58 B. Changes from draft-ietf-beep-framework-00 . . . . . . . . 57
C. Changes from draft-mrose-bxxp-framework-01 . . . . . . . . 58
D. Changes from draft-mrose-bxxp-framework-00 . . . . . . . . 59
E. Acknowledgements . . . . . . . . . . . . . . . . . . . . . 60
Full Copyright Statement . . . . . . . . . . . . . . . . . 61
1. Introduction 1. Introduction
This memo describes a generic application protocol framework for This memo describes a generic application protocol framework for
connection-oriented, asynchronous interactions. Consult [1] for a connection-oriented, asynchronous interactions. Consult [1] for a
description of the framework's design principles. description of the framework's design principles.
At the core of the BXXP framework is a framing mechanism that At the core of the BEEP framework is a framing mechanism that
permits simultaneous and independent exchanges of messages between permits simultaneous and independent exchanges of messages between
peers. Messages are arbitrary MIME[2] content, but are usually peers. Messages are arbitrary MIME[2] content, but are usually
textual (structured using XML[3]). textual (structured using XML[3]).
Frames are exchanged in the context of a "channel". Each channel has All exchanges occur in the context of a channel -- a binding to a
an associated "profile" that defines the syntax and semantics of the well-defined aspect of the application, such as transport security,
messages exchanged. Implicit in the operation of BXXP is the notion user authentication, or data exchange.
of channel management. In addition to defining BXXP's channel
management profile, this document defines: Each channel has an associated "profile" that defines the syntax and
semantics of the messages exchanged. Implicit in the operation of
BEEP is the notion of channel management. In addition to defining
BEEP's channel management profile, this document defines:
o the TLS[4] transport security profile; and, o the TLS[4] transport security profile; and,
o the SASL[5] family of profiles. o the SASL[5] family of profiles.
Other profiles, such as those used for data exchange, are defined by Other profiles, such as those used for data exchange, are defined by
an application protocol designer. A registration template is an application protocol designer.
provided for this purpose.
2. The BXXP Framework
The BXXP framework is message-oriented. All exchanges occur in the 2. The BEEP Framework
context of a channel -- a binding to a well-defined aspect of the
application, such as transport security, user authentication, or
data exchange.
A BXXP session is mapped onto an underlying transport service. A A BEEP session is mapped onto an underlying transport service. A
separate series of documents describe how a particular transport separate series of documents describe how a particular transport
service realizes a BXXP session. For example, [6] describes how a service realizes a BEEP session. For example, [6] describes how a
BXXP session is mapped onto a single TCP[7] connection. BEEP session is mapped onto a single TCP[7] connection.
During the creation of a channel, the client supplies one or more When a session is established, each BEEP peer advertises the profile
proposed profiles for that channel. If the server creates the it supports. Later on, during the creation of a channel, the client
channel, it selects one of the profiles and sends it in a reply; supplies one or more proposed profiles for that channel. If the
otherwise, it may indicate that none of the profiles are acceptable, server creates the channel, it selects one of the profiles and sends
and decline creation of the channel. it in a reply; otherwise, it may indicate that none of the profiles
are acceptable, and decline creation of the channel.
Channel usage falls into one of two categories: Channel usage falls into one of two categories:
initial tuning: these are used by profiles that perform initial tuning: these are used by profiles that perform
initialization once the BXXP session is established (e.g., initialization once the BEEP session is established (e.g.,
negotiating the use of transport security); although several negotiating the use of transport security); although several
exchanges may be required to perform the initialization, these exchanges may be required to perform the initialization, these
channels become inactive early in the BXXP session and remain so channels become inactive early in the BEEP session and remain so
for the duration. for the duration.
continuous: these are used by profiles that support data exchange; continuous: these are used by profiles that support data exchange;
typically, these channels are created after the initial tuning typically, these channels are created after the initial tuning
channels have gone quiet. channels have gone quiet.
2.1 Roles 2.1 Roles
Although BXXP is peer-to-peer, it is convenient to label each peer Although BEEP is peer-to-peer, it is convenient to label each peer
in the context of the role it is performing at a given time: in the context of the role it is performing at a given time:
o When a BXXP session is established, the peer that awaits new o When a BEEP session is established, the peer that awaits new
connections is acting in the listening role, and the other peer, connections is acting in the listening role, and the other peer,
which establishes a connection to the listener, is acting in the which establishes a connection to the listener, is acting in the
initiating role. In the examples which follow, these are referred initiating role. In the examples which follow, these are referred
to as "L:" and "I:", respectively. to as "L:" and "I:", respectively.
o A BXXP peer starting an exchange is termed the client; similarly, o A BEEP peer starting an exchange is termed the client; similarly,
the other BXXP peer is termed the server. In the examples which the other BEEP peer is termed the server. In the examples which
follow, these are referred to as "C:" and "S:", respectively. follow, these are referred to as "C:" and "S:", respectively.
Typically, a BXXP peer acting in the server role is also acting in a Typically, a BEEP peer acting in the server role is also acting in a
listening role. However, because BXXP is peer-to-peer in nature, no listening role. However, because BEEP is peer-to-peer in nature, no
such requirement exists. such requirement exists.
2.1.1 Exchange Styles 2.1.1 Exchange Styles
BXXP allows three styles of exchange: BEEP allows three styles of exchange:
MSG/RPY: the client sends a "MSG" message asking the server to MSG/RPY: the client sends a "MSG" message asking the server to
perform some task, the server performs the task and replies with perform some task, the server performs the task and replies with
a "RPY" message (termed a positive reply). a "RPY" message (termed a positive reply).
MSG/ERR: the client sends a "MSG" message, the server does not MSG/ERR: the client sends a "MSG" message, the server does not
perform any task and replies with an "ERR" message (termed a perform any task and replies with an "ERR" message (termed a
negative reply). negative reply).
MSG/ANS: the client sends a "MSG" message, the server, during the MSG/ANS: the client sends a "MSG" message, the server, during the
course of performing some task, replies with zero or more "ANS" course of performing some task, replies with zero or more "ANS"
messages, and, upon completion of the task, sends a "NUL" messages, and, upon completion of the task, sends a "NUL"
message, which signifies the end of the reply. message, which signifies the end of the reply.
The first two styles are termed one-to-one exchanges, whilst the The first two styles are termed one-to-one exchanges, whilst the
third style is termed a one-to-many exchange. third style is termed a one-to-many exchange.
2.2 Messages and Frames 2.2 Messages and Frames
A message is structured according to the rules of MIME. Accordingly, A message is structured according to the rules of MIME. Accordingly,
the payload may begin with "entity-headers" (c.f., MIME[2]'s Section each message may begin with "entity-headers" (c.f., MIME[2]'s
3). If none, or only some, of the "entity-headers" are present: Section 3). If none, or only some, of the "entity-headers" are
present:
o the default "Content-Type" is "text/xml"; and, o the default "Content-Type" is "application/octet-stream"; and,
o the default "Content-Transfer-Encoding" is "binary". o the default "Content-Transfer-Encoding" is "binary".
Hence, in the absence of typing information, a message is a
well-formed XML[3] document.
Normally, a message is sent in a single frame. However, it may be Normally, a message is sent in a single frame. However, it may be
convenient or necesary to segment a message into multiple frames convenient or necesary to segment a message into multiple frames
(e.g., if only part of a message is ready to be sent). (e.g., if only part of a message is ready to be sent).
Each frame consists of a header, the payload, and a trailer. The Each frame consists of a header, the payload, and a trailer. The
header and trailer are each represented using printable ASCII header and trailer are each represented using printable ASCII
characters and are terminated with a CRLF pair. Between the header characters and are terminated with a CRLF pair. Between the header
and the trailer is the payload, consisting of zero or more octets. and the trailer is the payload, consisting of zero or more octets.
For example, here is a message contained in a single frame that For example, here is a message contained in a single frame that
contains a payload of 96 octets spread over 4 lines (each line is contains a payload of 119 octets spread over 5 lines (each line is
terminated with a CRLF pair): terminated with a CRLF pair):
C: MSG 0 1 . 16 96 C: MSG 0 1 . 40 120
C: Content-Type: text/xml
C: C:
C: <start number='1'> C: <start number='1'>
C: <profile uri='http://xml.resource.org/profiles/sasl/OTP' /> C: <profile uri='http://xml.resource.org/profiles/sasl/OTP' />
C: </start> C: </start>
C: END C: END
C:
Note that the message starts with a blank line, signifying a lack of In this example, note that the entire message is represented in a
explicit MIME typing information. Also note that in this example, single frame.
the message is represented as a single payload.
2.2.1 Frame Syntax 2.2.1 Frame Syntax
The ABNF for a frame is: The ABNF[8] for a frame is:
frame = header payload trailer / mapping frame = data / mapping
data = header payload trailer
header = msg / rpy / err / ans / nul header = msg / rpy / err / ans / nul
msg = "MSG" SP common CR LF msg = "MSG" SP common CR LF
rpy = "RPY" SP common CR LF rpy = "RPY" SP common CR LF
ans = "ANS" SP common SP ansno CR LF ans = "ANS" SP common SP ansno CR LF
err = "ERR" SP common CR LF err = "ERR" SP common CR LF
nul = "NUL" SP common CR LF nul = "NUL" SP common CR LF
common = channel SP msgno SP more SP seqno SP size common = channel SP msgno SP more SP seqno SP size
channel = 0..2147483647 channel = 0..2147483647
msgno = 0..2147483647 msgno = 0..2147483647
more = "." / "*" more = "." / "*"
seqno = 0..4294967295 seqno = 0..4294967295
size = 0..2147483647 size = 0..2147483647
ansno = 0..2147483647 ansno = 0..2147483647
payload = *OCTET payload = *OCTET
trailer = "END" CR LF trailer = "END" CR LF
mapping = ;; each transport mapping may define additional frames mapping = ;; each transport mapping may define additional frames
2.2.1.1 Frame Header 2.2.1.1 Frame Header
skipping to change at page 9, line 38 skipping to change at page 9, line 38
The sequence number ("seqno") must be a non-negative integer (in the The sequence number ("seqno") must be a non-negative integer (in the
range 0..4294967295) and specifies the sequence number of the first range 0..4294967295) and specifies the sequence number of the first
octet in the payload, for the associated channel. octet in the payload, for the associated channel.
The payload size ("size") must be a non-negative integer (in the The payload size ("size") must be a non-negative integer (in the
range 0..2147483647) and specifies the exact number of octets in the range 0..2147483647) and specifies the exact number of octets in the
payload. (This does not include either the header or trailer.) payload. (This does not include either the header or trailer.)
Note that a frame may have an empty payload, e.g., Note that a frame may have an empty payload, e.g.,
S: RPY 0 1 * 287 27 S: RPY 0 1 * 287 20
S:
S: ...
S: ... S: ...
S: ... S: ...
S: END S: END
S: RPY 0 1 . 314 0 S:
S: RPY 0 1 . 307 0
S: END S: END
S:
The answer number ("ansno") must be a non-negative integer (in the The answer number ("ansno") must be a non-negative integer (in the
range 0..4294967295) and must have a different value than all other range 0..4294967295) and must have a different value than all other
answers in progress for the message being replied to. answers in progress for the message being replied to.
There are two kinds of frames: data and mapping. each transport
mapping (c.f., Section 2.5) may define its own frames. For example,
[6] defines the SEQ frame. The remainder of this section discusses
data frames.
When a message is segmented and sent as several frames, those frames When a message is segmented and sent as several frames, those frames
must be sent sequentally, without any intervening frames from other must be sent sequentally, without any intervening frames from other
messages on the same channel. However, there are two exceptions: messages on the same channel. However, there are two exceptions:
first, no restriction is made with respect to the interleaving of first, no restriction is made with respect to the interleaving of
frames for other channels; and, second, in a one-to-many exchange, frames for other channels; and, second, in a one-to-many exchange,
multiple answers may be simultaneously in progress. multiple answers may be simultaneously in progress. Accordingly,
frames for "ANS" messages may be interleaved on the same channel --
Accordingly, frames for "ANS" messages may be interleaved on the the answer number is used for collation, e.g.,
same channel -- the answer number is used for collation, e.g.,
S: ANS 1 0 * 0 10 0 S: ANS 1 0 * 0 20 0
S: S: ...
S: ... S: ...
S: END S: END
S: ANS 1 0 * 10 20 1
S: S:
S: ANS 1 0 * 20 20 1
S: ... S: ...
S: ... S: ...
S: END S: END
S: ANS 1 0 . 30 10 0 S:
S: ANS 1 0 . 40 10 0
S: ... S: ...
S: END S: END
S:
which shows two "ANS" messages interleaved on channel 1 as part of a which shows two "ANS" messages interleaved on channel 1 as part of a
reply to message number 0. Note that the sequence number is advanced reply to message number 0. Note that the sequence number is advanced
for each frame sent on the channel, and is independent of the for each frame sent on the channel, and is independent of the
messages sent in those frames. messages sent in those frames.
There are several rules for identifying poorly-formed frames: There are several rules for identifying poorly-formed frames:
o if the header doesn't start with "MSG", "RPY", "ERR", "ANS", or o if the header doesn't start with "MSG", "RPY", "ERR", "ANS", or
"NUL"; "NUL";
skipping to change at page 11, line 20 skipping to change at page 11, line 43
o if the header starts with "NUL", and refers to a message number o if the header starts with "NUL", and refers to a message number
for which at least one other frame has been received, and the for which at least one other frame has been received, and the
keyword of of the immediately-previous received frame for this keyword of of the immediately-previous received frame for this
reply isn't "ANS"; reply isn't "ANS";
o if the continuation indicator of the previous frame received on o if the continuation indicator of the previous frame received on
the same channel was intermediate ("*"), and its message number the same channel was intermediate ("*"), and its message number
isn't identical to this frame's message number; isn't identical to this frame's message number;
o if the value of the sequence number doesn't correspond to the o if the value of the sequence number doesn't correspond to the
expected value for the associated channel (c.f., Section 2.2.1.2); expected value for the associated channel (c.f., Section
2.2.1.2); or,
o if the header starts with "NUL", and the continuation indicator o if the header starts with "NUL", and the continuation indicator
is intermediate ("*") or the payload size is non-zero; is intermediate ("*") or the payload size is non-zero.
o if the header doesn't start with "NUL", and the continuation
indicator is complete ("."), and the total size of the
(re-assembled) message is less than two octets; or,
o if the header doesn't start with "NUL", and the continuation
indicator is complete ("."), and "entity-headers" are present but
poorly-formed in the (re-assembled) message.
If a frame is poorly-formed, then the session is terminated without If a frame is poorly-formed, then the session is terminated without
generating a response, and it is recommended that a diagnostic entry generating a response, and it is recommended that a diagnostic entry
be logged. be logged.
2.2.1.2 Frame Payload 2.2.1.2 Frame Payload
The frame payload consists of zero or more octets. The frame payload consists of zero or more octets.
Every payload octet sent in each direction on a channel has an Every payload octet sent in each direction on a channel has an
skipping to change at page 12, line 26 skipping to change at page 12, line 26
The actual sequence number space is finite, though very large, The actual sequence number space is finite, though very large,
ranging from 0..4294967295 (2**32 - 1). Since the space is finite, ranging from 0..4294967295 (2**32 - 1). Since the space is finite,
all arithmetic dealing with sequence numbers is performed modulo all arithmetic dealing with sequence numbers is performed modulo
2**32. This unsigned arithmetic preserves the relationship of 2**32. This unsigned arithmetic preserves the relationship of
sequence numbers as they cycle from 2**32 - 1 to 0 again. sequence numbers as they cycle from 2**32 - 1 to 0 again.
When receiving a frame, the sum of its sequence number and payload When receiving a frame, the sum of its sequence number and payload
size, modulo 4294967296 (2**32), gives the expected sequence number size, modulo 4294967296 (2**32), gives the expected sequence number
associated with the first payload octet of the next frame received. associated with the first payload octet of the next frame received.
Accordingly, when receiving a frame if the sequence number isn't the Accordingly, when receiving a frame if the sequence number isn't the
expected value for this channel, then the BXXP peers have lost expected value for this channel, then the BEEP peers have lost
synchronization, then the session is terminated without generating a synchronization, then the session is terminated without generating a
response, and it is recommended that a diagnostic entry be logged. response, and it is recommended that a diagnostic entry be logged.
2.2.1.3 Frame Trailer 2.2.1.3 Frame Trailer
The frame trailer consists of "END" followed by a CRLF pair. The frame trailer consists of "END" followed by a CRLF pair.
When receiving a frame, if the characters immediately following the When receiving a frame, if the characters immediately following the
payload don't correspond to a trailer, then the session is payload don't correspond to a trailer, then the session is
terminated without generating a response, and it is recommended that terminated without generating a response, and it is recommended that
skipping to change at page 14, line 18 skipping to change at page 14, line 18
profile associated with a channel must define: profile associated with a channel must define:
o the initialization messages, if any, exchanged during channel o the initialization messages, if any, exchanged during channel
creation; creation;
o the messages that may be exchanged in the payload of the channel; o the messages that may be exchanged in the payload of the channel;
and, and,
o the semantics of these messages. o the semantics of these messages.
A profile registration template (Section 5) organizes this A profile registration template (Section 5.1) organizes this
information. information.
2.2.2.1 Poorly-formed Messages 2.2.2.1 Poorly-formed Messages
When defining the behavior of the profile, the template must specify When defining the behavior of the profile, the template must specify
how poorly-formed "MSG" messages are replied to. For example, the how poorly-formed "MSG" messages are replied to. For example, the
channel management profile sends a negative reply containing an channel management profile sends a negative reply containing an
error message (c.f., Section 2.3.1.5). error message (c.f., Section 2.3.1.5).
If a poorly-formed reply is received on channel zero, the session is If a poorly-formed reply is received on channel zero, the session is
terminated without generating a response, and it is recommended that terminated without generating a response, and it is recommended that
a diagnostic entry be logged. a diagnostic entry be logged.
If a poorly-formed reply is received on another channel, then the If a poorly-formed reply is received on another channel, then the
channel must be closed using the procedure in Section 2.3.1.3. channel must be closed using the procedure in Section 2.3.1.3.
2.2.2.2 XML-based Profiles 2.2.2.2 XML-based Profiles
If a profile uses XML to structure its messages, then only XML's If a profile uses XML[3] to structure its messages, then only XML's
baseline facilities (as described in the XML 1.0 specification[3]) baseline facilities (as described in the XML 1.0 specification[3])
are allowed. Additional XML features (e.g., namespaces) are made are allowed. Additional XML facilities (e.g., namespaces) are made
available only by being explicitly discussed in a given profile's available only by being explicitly permitted in a given profile's
specification. specification.
In particular this limitation allows use of only the five predefined In particular this limitation allows use of only the five predefined
general entities references ("&amp;", "&lt;", "&gt;", "&apos;", and general entities references ("&amp;", "&lt;", "&gt;", "&apos;", and
"&quot;") and numeric entity references in the messages exchanged. "&quot;") and numeric entity references in the messages exchanged.
Further, because the profile registration template defines the Further, because the profile registration template defines the
messages exchanged over a channel, the XML documents exchanged in messages exchanged over a channel, the XML documents exchanged in
each message needn't have either a "XML" declaration (e.g., <?xml each message needn't have either a "XML" declaration (e.g., <?xml
version="1.0" ?>) or a "DOCTYPE" declaration (e.g., <!DOCTYPE ...>). version="1.0" ?>) or a "DOCTYPE" declaration (e.g., <!DOCTYPE ...>).
All other XML 1.0 instructions (e.g., CDATA blocks, processing All other XML 1.0 instructions (e.g., CDATA blocks, processing
instructions, and so on) are allowed. instructions, and so on) are allowed.
Finally, because the "XML" declaration isn't present, the default Finally, because the "XML" declaration isn't present, the default
character set for XML-based profiles is UTF-8. If another character character set for XML-based profiles is UTF-8. If another character
set is desired, a "Content-Type" entity-header should be used to set is desired, the "Content-Type" entity-header must indicate this.
specify the character set in question.
2.3 Channel Management 2.3 Channel Management
When a BXXP session starts, only channel number zero is defined, When a BEEP session starts, only channel number zero is defined,
which is used for channel management. Section 6.1 contains the which is used for channel management. Section 6.1 contains the
profile registration for BXXP channel management. profile registration for BEEP channel management.
Channel management allows each BXXP peer to advertise the profiles Channel management allows each BEEP peer to advertise the profiles
that it supports (c.f., Section 2.3.1.1), bind an instance of one of that it supports (c.f., Section 2.3.1.1), bind an instance of one of
those profiles to a channel (c.f., Section 2.3.1.2), and then later those profiles to a channel (c.f., Section 2.3.1.2), and then later
close any channels or release the BXXP session (c.f., Section close any channels or release the BEEP session (c.f., Section
2.3.1.3). 2.3.1.3).
A BXXP peer should support at least 257 concurrent channels. A BEEP peer should support at least 257 concurrent channels.
2.3.1 Message Semantics 2.3.1 Message Semantics
2.3.1.1 The Greeting Message 2.3.1.1 The Greeting Message
When a BXXP session is established, each BXXP peer signifies its When a BEEP session is established, each BEEP peer signifies its
availability by immediately sending a positive reply with a message availability by immediately sending a positive reply with a message
number of zero that contains a "greeting" element, e.g., number of zero that contains a "greeting" element, e.g.,
L: <wait for incoming connection> L: <wait for incoming connection>
I: <open connection> I: <open connection>
L: RPY 0 0 . 0 86 L: RPY 0 0 . 0 110
L: Content-Type: text/xml
L: L:
L: <greeting> L: <greeting>
L: <profile uri='http://xml.resource.org/profiles/TLS' /> L: <profile uri='http://xml.resource.org/profiles/TLS' />
L: </greeting> L: </greeting>
L: END L: END
I: RPY 0 0 . 0 16 L:
I: RPY 0 0 . 0 40
I: Content-Type: text/xml
I: I:
I: <greeting /> I: <greeting />
I: END I: END
I:
Note that this example implies that the BXXP peer in the initiating Note that this example implies that the BEEP peer in the initiating
role waits until the BXXP peer in the listening role sends its role waits until the BEEP peer in the listening role sends its
greeting -- this is an artifact of the presentation; in fact, both greeting -- this is an artifact of the presentation; in fact, both
BXXP peers send their replies independently. BEEP peers send their replies independently.
The "greeting" element has two optional attributes ("features" and The "greeting" element has two optional attributes ("features" and
"localize") and zero or more "profile" elements, one for each "localize") and zero or more "profile" elements, one for each
profile supported by the BXXP peer acting in a server role: profile supported by the BEEP peer acting in a server role:
o the "features" attribute, if present, contains one or more o the "features" attribute, if present, contains one or more
feature tokens, each indicating an optional feature of the feature tokens, each indicating an optional feature of the
channel management profile supported by the BXXP peer; channel management profile supported by the BEEP peer;
o the "localize" attribute, if present, contains one or more o the "localize" attribute, if present, contains one or more
language tokens (defined in [8]), each identifying a desirable language tokens (defined in [9]), each identifying a desirable
language tag to be used by the remote BXXP peer when generating language tag to be used by the remote BEEP peer when generating
textual diagnostics for the "close" and "error" elements (the textual diagnostics for the "close" and "error" elements (the
tokens are ordered from most to least desirable); and, tokens are ordered from most to least desirable); and,
o each "profile" element contained within the "greeting" element o each "profile" element contained within the "greeting" element
identifies a profile, and unlike the "profile" elements that identifies a profile, and unlike the "profile" elements that
occur within the "start" element, the content of each "profile" occur within the "start" element, the content of each "profile"
element may not contain an optional initialization element. element may not contain an optional initialization message.
At present, there are no optional features defined for the channel At present, there are no optional features defined for the channel
management profile. management profile.
Section 5.2 defines a registration template for optional features.
2.3.1.2 The Start Message 2.3.1.2 The Start Message
When a BXXP peer wants to create a channel, it sends a "start" When a BEEP peer wants to create a channel, it sends a "start"
element on channel zero, e.g., element on channel zero, e.g.,
I: MSG 0 1 . 16 96 C: MSG 0 1 . 40 120
I: C: Content-Type: text/xml
I: <start number='1'> C:
I: <profile uri='http://xml.resource.org/profiles/sasl/OTP' /> C: <start number='1'>
I: </start> C: <profile uri='http://xml.resource.org/profiles/sasl/OTP' />
I: END C: </start>
C: END
C:
The "start" element has a "number" attribute, an optional The "start" element has a "number" attribute, an optional
"serverName" attribute, and one or more "profile" elements: "serverName" attribute, and one or more "profile" elements:
o the "number" attribute indicates the channel number (in the range o the "number" attribute indicates the channel number (in the range
1..2147483647) used to identify the channel in future messages; 1..2147483647) used to identify the channel in future messages;
o the "serverName" attribute, an arbitrary string, indicates the o the "serverName" attribute, an arbitrary string, indicates the
desired server name for this BXXP session; and, desired server name for this BEEP session; and,
o each "profile" element contained within the "start" element o each "profile" element contained with the "start" element has a
identifies a profile, and, optionally, contains an XML element "uri" attribute, an optional "encoding" attribute, and arbitrary
exchanged during channel creation as its content. character data as content:
* the "uri" attribute authoritatively identifies the profile;
* the "encoding" attribute, if present, specifies whether the
content of the "profile" element is represented as a
base64-encoded string; and,
* the content of the "profile" element, if present, must be no
longer than 4K octets in length and specifies an
initialization message given to the channel as soon as it is
created.
To avoid conflict in assigning channel numbers when requesting the To avoid conflict in assigning channel numbers when requesting the
creation of a channel, BXXP peers acting in the initiating role use creation of a channel, BEEP peers acting in the initiating role use
only positive integers that are odd-numbered; similarly, BXXP peers only positive integers that are odd-numbered; similarly, BEEP peers
acting in the listening role use only positive integers that are acting in the listening role use only positive integers that are
even-numbered. even-numbered.
The "serverName" attribute for the first successful "start" element The "serverName" attribute for the first successful "start" element
received by a BXXP peer is meaningful for the duration of the BXXP received by a BEEP peer is meaningful for the duration of the BEEP
session. (If the attribute isn't present or it's value is empty, session. If present, the BEEP peer decides whether to operate as the
then the sending BXXP peer is requesting a configuration-specific
default value.) The BXXP peer decides whether to operate as the
indicated "serverName"; if not, an "error" element is sent in a indicated "serverName"; if not, an "error" element is sent in a
negative reply. negative reply.
When a BXXP peer receives a "start" element on channel zero, it When a BEEP peer receives a "start" element on channel zero, it
examines each of the proposed profiles, and decides whether to use examines each of the proposed profiles, and decides whether to use
one of them to create the channel. If so, the appropriate "profile" one of them to create the channel. If so, the appropriate "profile"
element is sent in a positive reply; otherwise, an "error" element element is sent in a positive reply; otherwise, an "error" element
is sent in a negative reply. is sent in a negative reply.
When creating the channel, the value of the "serverName" attribute When creating the channel, the value of the "serverName" attribute
from the first successful "start" element is consulted to provide from the first successful "start" element is consulted to provide
configuration information, e.g., the desired server-side certificate configuration information, e.g., the desired server-side certificate
when starting the TLS transport security profile (Section 3.1). when starting the TLS transport security profile (Section 3.1).
For example, a successful channel creation might look like this: For example, a successful channel creation might look like this:
I: MSG 0 1 . 16 173 C: MSG 0 1 . 40 197
I: C: Content-Type: text/xml
I: <start number='1'> C:
I: <profile uri='http://xml.resource.org/profiles/sasl/OTP' /> C: <start number='1'>
I: <profile C: <profile uri='http://xml.resource.org/profiles/sasl/OTP' />
I: uri='http://xml.resource.org/profiles/sasl/ANONYMOUS' /> C: <profile
I: </start> C: uri='http://xml.resource.org/profiles/sasl/ANONYMOUS' />
I: END C: </start>
L: RPY 0 1 . 287 63 C: END
L: C:
L: <profile uri='http://xml.resource.org/profiles/sasl/OTP' /> S: RPY 0 1 . 252 87
L: END S: Content-Type: text/xml
S:
S: <profile uri='http://xml.resource.org/profiles/sasl/OTP' />
S: END
S:
Similarly, an unsuccessful channel creation might look like this: Similarly, an unsuccessful channel creation might look like this:
I: MSG 0 1 . 16 96 C: MSG 0 1 . 40 120
I: C: Content-Type: text/xml
I: <start number='2'> C:
I: <profile uri='http://xml.resource.org/profiles/sasl/OTP' /> C: <start number='2'>
I: </start> C: <profile uri='http://xml.resource.org/profiles/sasl/OTP' />
I: END C: </start>
L: ERR 0 1 . 287 91 C: END
L: C:
L: <error code='501'>number attribute S: ERR 0 1 . 252 115
L: in &lt;start&gt; element must be odd-valued</error> S: Content-Type: text/xml
L: END S:
S: <error code='501'>number attribute
S: in &lt;start&gt; element must be odd-valued</error>
S: END
S:
Finally, here's an example in which an initialization element is Finally, here's an example in which an initialization element is
exchanged during channel creation: exchanged during channel creation:
C: MSG 0 1 . 16 122 C: MSG 0 1 . 40 158
C: Content-Type: text/xml
C: C:
C: <start number='1'> C: <start number='1'>
C: <profile uri='http://xml.resource.org/profiles/TLS'> C: <profile uri='http://xml.resource.org/profiles/TLS'>
C: <ready /> C: <![CDATA[<ready />]]>
C: </profile> C: </profile>
C: </start> C: </start>
C: END C: END
S: RPY 0 1 . 86 85 C:
S: RPY 0 1 . 110 121
S: Content-Type: text/xml
S: S:
S: <profile uri='http://xml.resource.org/profiles/TLS'> S: <profile uri='http://xml.resource.org/profiles/TLS'>
S: <proceed /> S: <![CDATA[<proceed />]]>
S: </profile> S: </profile>
S: END S: END
S:
2.3.1.3 The Close Message 2.3.1.3 The Close Message
When a BXXP peer wants to close a channel, it sends a "close" When a BEEP peer wants to close a channel, it sends a "close"
element on channel zero, e.g., element on channel zero, e.g.,
I: MSG 0 2 . 163 35 C: MSG 0 2 . 223 59
I: C: Content-Type: text/xml
I: <close number='1' code='200' /> C:
I: END C: <close number='1' code='200' />
C: END
C:
The "close" element has a "number" attribute, a "code" attribute, an The "close" element has a "number" attribute, a "code" attribute, an
optional "xml:lang" attribute, and an optional textual diagnostic as optional "xml:lang" attribute, and an optional textual diagnostic as
its content: its content:
o the "number" attribute indicates the channel number; o the "number" attribute indicates the channel number;
o the "code" attribute is a three digit reply code meaningful to o the "code" attribute is a three-digit reply code meaningful to
programs (c.f., Section 7); programs (c.f., Section 8);
o the "xml:lang" attribute identifies the language that the o the "xml:lang" attribute identifies the language that the
element's content is written in (the value is suggested, but not element's content is written in (the value is suggested, but not
mandated, by the "localize" attribute of the "greeting" element mandated, by the "localize" attribute of the "greeting" element
sent by the remote BXXP peer); and, sent by the remote BEEP peer); and,
o the textual diagnostic (which may be multiline) is meaningful to o the textual diagnostic (which may be multiline) is meaningful to
implementers, perhaps administrators, and possibly even users, implementers, perhaps administrators, and possibly even users,
but never programs. but never programs.
Note that if the textual diagnostic is present, then the "xml:lang" Note that if the textual diagnostic is present, then the "xml:lang"
attribute is absent only if the language indicated as the remote attribute is absent only if the language indicated as the remote
BXXP peer's first choice is used. BEEP peer's first choice is used.
If the value of the "number" attribute is zero, then the BXXP peer If the value of the "number" attribute is zero, then the BEEP peer
wants to release the BXXP session (c.f., Section 2.4) -- otherwise wants to release the BEEP session (c.f., Section 2.4) -- otherwise
the value of the "number" attribute refers to an existing channel. the value of the "number" attribute refers to an existing channel.
When a BXXP peer receives a "close" element on channel zero, it When a BEEP peer receives a "close" element on channel zero, it
decides whether it is willing to close the channel. If so, an "ok" decides whether it is willing to close the channel. If so, an "ok"
element is sent in a positive reply; otherwise, an "error" element element is sent in a positive reply; otherwise, an "error" element
is sent in a negative reply. is sent in a negative reply.
For example, a successful channel close might look like this: For example, a successful channel close might look like this:
I: MSG 0 2 . 163 35 C: MSG 0 2 . 223 59
I: C: Content-Type: text/xml
I: <close number='1' code='200' /> C:
I: END C: <close number='1' code='200' />
L: RPY 0 2 . 429 10 C: END
L: C:
L: <ok /> S: RPY 0 2 . 423 34
L: END S: Content-Type: text/xml
S:
S: <ok />
S: END
S:
Similarly, an unsuccessful channel close might look like this: Similarly, an unsuccessful channel close might look like this:
I: MSG 0 2 . 163 35 C: MSG 0 2 . 223 59
I: C: Content-Type: text/xml
I: <close number='1' code='200' /> C:
I: END C: <close number='1' code='200' />
L: ERR 0 2 . 429 43 C: END
L: C:
L: <error code='550'>still working</error> S: ERR 0 2 . 423 67
L: END S: Content-Type: text/xml
S:
S: <error code='550'>still working</error>
S: END
S:
2.3.1.4 The OK Message 2.3.1.4 The OK Message
When a BXXP peer agrees to close a channel (or release the BXXP When a BEEP peer agrees to close a channel (or release the BEEP
session), it sends an "ok" element in a positive reply. session), it sends an "ok" element in a positive reply.
The "ok" element has no attributes and no content. The "ok" element has no attributes and no content.
2.3.1.5 The Error Message 2.3.1.5 The Error Message
When a BXXP peer declines the creation of a channel, it sends an When a BEEP peer declines the creation of a channel, it sends an
"error" element in a negative reply, e.g., "error" element in a negative reply, e.g.,
I: MSG 0 1 . 16 91 I: MSG 0 1 . 40 115
I: Content-Type: text/xml
I: I:
I: <start number='2'> I: <start number='2'>
I: <profile uri='http://xml.resource.org/profiles/FOO' /> I: <profile uri='http://xml.resource.org/profiles/FOO' />
I: </start> I: </start>
I: END I: END
L: ERR 0 1 . 287 69 I:
L: ERR 0 1 . 252 93
L: Content-Type: text/xml
L: L:
L: <error code='550'>all requested profiles are L: <error code='550'>all requested profiles are
L: unsupported</error> L: unsupported</error>
L: END L: END
L:
The "error" element has a "code" attribute, an optional "xml:lang" The "error" element has a "code" attribute, an optional "xml:lang"
attribute, and an optional textual diagnostic as its content: attribute, and an optional textual diagnostic as its content:
o the "code" attribute is a three digit reply code meaningful to o the "code" attribute is a three-digit reply code meaningful to
programs (c.f., Section 7); programs (c.f., Section 8);
o the "xml:lang" attribute identifies the language that the o the "xml:lang" attribute identifies the language that the
element's content is written in (the value is suggested, but not element's content is written in (the value is suggested, but not
mandated, by the "localize" attribute of the "greeting" element mandated, by the "localize" attribute of the "greeting" element
sent by the remote BXXP peer); and, sent by the remote BEEP peer); and,
o the textual diagnostic (which may be multiline) is meaningful to o the textual diagnostic (which may be multiline) is meaningful to
implementers, perhaps administrators, and possibly even users, implementers, perhaps administrators, and possibly even users,
but never programs. but never programs.
Note that if the textual diagnostic is present, then the "xml:lang" Note that if the textual diagnostic is present, then the "xml:lang"
attribute is absent only if the language indicated as the remote attribute is absent only if the language indicated as the remote
BXXP peer's first choice is used. BEEP peer's first choice is used.
In addition, a BXXP peer sends an "error" element whenever: In addition, a BEEP peer sends an "error" element whenever:
o it receives a "MSG" message containing a poorly-formed or o it receives a "MSG" message containing a poorly-formed or
unexpected element; unexpected element;
o it receives a "MSG" message asking to close a channel (or release o it receives a "MSG" message asking to close a channel (or release
the BXXP session) and it declines to do so; or the BEEP session) and it declines to do so; or
o a BXXP session is established, the BXXP peer is acting in the o a BEEP session is established, the BEEP peer is acting in the
listening role, and that BXXP peer is unavailable (in this case, listening role, and that BEEP peer is unavailable (in this case,
the BXXP acting in the listening role does not send a "greeting" the BEEP acting in the listening role does not send a "greeting"
element). element).
In the final case, both BXXP peers terminate the session, and it is In the final case, both BEEP peers terminate the session, and it is
recommended that a diagnostic entry be logged by both BXXP peers. recommended that a diagnostic entry be logged by both BEEP peers.
2.4 Session Establishment and Release 2.4 Session Establishment and Release
When a BXXP session is established, each BXXP peer signifies its When a BEEP session is established, each BEEP peer signifies its
availability by immediately sending a positive reply with a message availability by immediately sending a positive reply with a message
number of zero on channel zero that contains a "greeting" element, number of zero on channel zero that contains a "greeting" element,
e.g., e.g.,
L: <wait for incoming connection> L: <wait for incoming connection>
I: <open connection> I: <open connection>
L: RPY 0 0 . 0 86 L: RPY 0 0 . 0 110
L: Content-Type: text/xml
L: L:
L: <greeting> L: <greeting>
L: <profile uri='http://xml.resource.org/profiles/TLS' /> L: <profile uri='http://xml.resource.org/profiles/TLS' />
L: </greeting> L: </greeting>
L: END L: END
I: RPY 0 0 . 0 16 L:
I: RPY 0 0 . 0 40
I: Content-Type: text/xml
I: I:
I: <greeting /> I: <greeting />
I: END I: END
I:
Alternatively, if the BXXP peer acting in the listening role is Alternatively, if the BEEP peer acting in the listening role is
unavailable, it sends a negative reply, e.g., unavailable, it sends a negative reply, e.g.,
L: <wait for incoming connection> L: <wait for incoming connection>
I: <open connection> I: <open connection>
L: ERR 0 0 . 0 24 L: ERR 0 0 . 0 48
L: Content-Type: text/xml
L: L:
L: <error code='421' /> L: <error code='421' />
L: END L: END
I: RPY 0 0 . 0 16 L:
I: RPY 0 0 . 0 40
I: Content-Type: text/xml
I: I:
I: <greeting /> I: <greeting />
I: END I: END
I:
I: <close connection> I: <close connection>
L: <close connection> L: <close connection>
L: <wait for next connection> L: <wait for next connection>
and the "greeting" element sent by the BXXP peer acting in the and the "greeting" element sent by the BEEP peer acting in the
initiating role is ignored. It is recommended that a diagnostic initiating role is ignored. It is recommended that a diagnostic
entry be logged by both BXXP peers. entry be logged by both BEEP peers.
Note that both of these examples imply that the BXXP peer in the Note that both of these examples imply that the BEEP peer in the
initiating role waits until the BXXP peer in the listening role initiating role waits until the BEEP peer in the listening role
sends its greeting -- this is an artifact of the presentation; in sends its greeting -- this is an artifact of the presentation; in
fact, both BXXP peers send their replies independently. fact, both BEEP peers send their replies independently.
When a BXXP peer wants to release the BXXP session, it sends a When a BEEP peer wants to release the BEEP session, it sends a
"close" element with a zero-valued "number" attribute on channel "close" element with a zero-valued "number" attribute on channel
zero. The other BXXP peer indicates its willingness by sending an zero. The other BEEP peer indicates its willingness by sending an
"ok" element in a positive reply, e.g., "ok" element in a positive reply, e.g.,
C: MSG 0 1 . 16 24 C: MSG 0 1 . 40 48
C: Content-Type: text/xml
C: C:
C: <close code='200' /> C: <close code='200' />
C: END C: END
S: RPY 0 1 . 287 10 C:
S: RPY 0 1 . 252 34
S: Content-Type: text/xml
S: S:
S: <ok /> S: <ok />
S: END S: END
S:
I: <close connection> I: <close connection>
L: <close connection> L: <close connection>
L: <wait for next connection> L: <wait for next connection>
Alternatively, if the other BXXP doesn't want to release the BXXP Alternatively, if the other BEEP doesn't want to release the BEEP
session, the exchange might look like this: session, the exchange might look like this:
C: MSG 0 1 . 16 24 C: MSG 0 1 . 40 48
C: Content-Type: text/xml
C: C:
C: <close code='200' /> C: <close code='200' />
C: END C: END
S: ERR 0 1 . 287 43 C:
S: ERR 0 1 . 252 67
S: Content-Type: text/xml
S: S:
S: <error code='550'>still working</error> S: <error code='550'>still working</error>
L: END S: END
S:
If session release is declined, the BXXP session should not be If session release is declined, the BEEP session should not be
terminated, if possible. terminated, if possible.
2.5 Transport Mappings 2.5 Transport Mappings
All transport interactions occur in the context of a session -- a All transport interactions occur in the context of a session -- a
mapping onto a particular transport service. Accordingly, this memo mapping onto a particular transport service. Accordingly, this memo
defines the requirements that must be satisified by any document defines the requirements that must be satisified by any document
describing how a particular transport service realizes a BXXP describing how a particular transport service realizes a BEEP
session. session.
2.5.1 Session Management 2.5.1 Session Management
A BXXP session is connection-oriented. A mapping document must A BEEP session is connection-oriented. A mapping document must
define: define:
o how a BXXP session is established; o how a BEEP session is established;
o how a BXXP peer is identified as acting in the listening role; o how a BEEP peer is identified as acting in the listening role;
o how a BXXP peer is identified as acting in the initiating role; o how a BEEP peer is identified as acting in the initiating role;
o how a BXXP session is released; and, o how a BEEP session is released; and,
o how a BXXP session is terminated. o how a BEEP session is terminated.
2.5.2 Message Exchange 2.5.2 Message Exchange
A BXXP session is message-oriented. A mapping document must define: A BEEP session is message-oriented. A mapping document must define:
o how messages are reliably sent and received; o how messages are reliably sent and received;
o how messages on the same channel are received in the same order o how messages on the same channel are received in the same order
as they were sent; and, as they were sent; and,
o how messages on different channels are sent without ordering o how messages on different channels are sent without ordering
constraint. constraint.
2.6 Parallelism 2.6 Parallelism
2.6.1 Within a Single Channel 2.6.1 Within a Single Channel
A BXXP peer acting in the client role may send multiple "MSG" A BEEP peer acting in the client role may send multiple "MSG"
messages on the same channel without waiting to receive the messages on the same channel without waiting to receive the
corresponding replies. corresponding replies.
A BXXP peer acting in the server role must process all "MSG" A BEEP peer acting in the server role must process all "MSG"
messages for a given channel in the same order as they are received. messages for a given channel in the same order as they are received.
As a consequence, the BXXP peer must generate replies in the same As a consequence, the BEEP peer must generate replies in the same
order as the corresponding "MSG" messages are received on a given order as the corresponding "MSG" messages are received on a given
channel. channel.
2.6.2 Between Different Channels 2.6.2 Between Different Channels
A BXXP peer acting in the client role may send multiple "MSG" A BEEP peer acting in the client role may send multiple "MSG"
messages on different channels without waiting to receive the messages on different channels without waiting to receive the
corresponding replies. corresponding replies.
A BXXP peer acting in the server role may process "MSG" messages A BEEP peer acting in the server role may process "MSG" messages
received on different channels in any order it chooses. As a received on different channels in any order it chooses. As a
consequence, although the replies for a given channel appear to be consequence, although the replies for a given channel appear to be
generated in the same order in which the corresponding "MSG" generated in the same order in which the corresponding "MSG"
messages are received, there is no ordering constraint for replies messages are received, there is no ordering constraint for replies
on different channels. on different channels.
2.6.3 Pre-emptive Replies 2.6.3 Pre-emptive Replies
A BXXP peer acting in the server role may send a negative reply A BEEP peer acting in the server role may send a negative reply
before it receives the final "MSG" frame of a message. If it does before it receives the final "MSG" frame of a message. If it does
so, that BXXP peer is obliged to ignore any subsequent "MSG" frames so, that BEEP peer is obliged to ignore any subsequent "MSG" frames
for that message, up to and including the final "MSG" frame. for that message, up to and including the final "MSG" frame.
If a BXXP peer acting in the client role receives a negative reply If a BEEP peer acting in the client role receives a negative reply
before it sends the final "MSG" frame for a message, then it is before it sends the final "MSG" frame for a message, then it is
required to send a "MSG" frame with a continuation status of required to send a "MSG" frame with a continuation status of
complete (".") and having a zero-length payload. complete (".") and having a zero-length payload.
2.6.4 Interference 2.6.4 Interference
If the processing of a particular message has sequencing impacts on If the processing of a particular message has sequencing impacts on
other messages (either intra-channel or inter-channel), then the other messages (either intra-channel or inter-channel), then the
corresponding profile should define this behavior, e.g., a profile corresponding profile should define this behavior, e.g., a profile
whose messages alter the underlying transport mapping. whose messages alter the underlying transport mapping.
2.7 Peer-to-Peer Behavior 2.7 Peer-to-Peer Behavior
BXXP is peer-to-peer -- as such both peers must be prepared to BEEP is peer-to-peer -- as such both peers must be prepared to
receive all messages defined in this memo. Accordingly, an receive all messages defined in this memo. Accordingly, an
initiating BXXP peer capable of acting only in the client role must initiating BEEP peer capable of acting only in the client role must
behave gracefully if it receives a "MSG" message. Accordingly, all behave gracefully if it receives a "MSG" message. Accordingly, all
profiles must provide an appropriate error message for replying to profiles must provide an appropriate error message for replying to
unexpected "MSG" messages. unexpected "MSG" messages.
As a consequence of the peer-to-peer nature of BXXP, message numbers As a consequence of the peer-to-peer nature of BEEP, message numbers
are unidirectionally-significant. That is, the message numbers in are unidirectionally-significant. That is, the message numbers in
"MSG" messages sent by a BXXP peer acting in the initiating role are "MSG" messages sent by a BEEP peer acting in the initiating role are
unrelated to the message numbers in "MSG" messages sent by a BXXP unrelated to the message numbers in "MSG" messages sent by a BEEP
peer acting in the listening role. peer acting in the listening role.
For example, these two messages For example, these two messages
I: MSG 0 1 . 16 96 I: MSG 0 1 . 40 120
I: Content-Type: text/xml
I: I:
I: <start number='1'> I: <start number='1'>
I: <profile uri='http://xml.resource.org/profiles/sasl/OTP' /> I: <profile uri='http://xml.resource.org/profiles/sasl/OTP' />
I: </start> I: </start>
I: END I: END
L: MSG 0 1 . 287 92 I:
L: MSG 0 1 . 252 116
L: Content-Type: text/xml
L: L:
L: <start number='2'> L: <start number='2'>
L: <profile uri='http://xml.resource.org/profiles/IMXP' /> L: <profile uri='http://xml.resource.org/profiles/IMXP' />
L: </start> L: </start>
L: END L: END
L:
refer to different messages sent on channel zero. refer to different messages sent on channel zero.
3. Transport Security 3. Transport Security
When a BXXP session is established, plaintext transfer, without When a BEEP session is established, plaintext transfer, without
privacy, is provided. Accordingly, transport security in BXXP is privacy, is provided. Accordingly, transport security in BEEP is
achieved using an initial tuning profile. achieved using an initial tuning profile.
This document defines one profile: This document defines one profile:
o the TLS transport security profile, based on TLS version one[4]. o the TLS transport security profile, based on TLS version one[4].
Other profiles may be defined and deployed on a bilateral basis. Other profiles may be defined and deployed on a bilateral basis.
Note that because of their intimate relationship with the tranpsort Note that because of their intimate relationship with the tranpsort
service, a given transport security profile tends to be relevant to service, a given transport security profile tends to be relevant to
a single transort mapping (c.f., Section 2.5). a single transort mapping (c.f., Section 2.5).
When a channel associated with transport security begins the When a channel associated with transport security begins the
underlying negotiation process, all channels (including channel underlying negotiation process, all channels (including channel
zero) are closed on the BXXP session. Accordingly, upon completion zero) are closed on the BEEP session. Accordingly, upon completion
of the negotiation process, regardless of its outcome, a new of the negotiation process, regardless of its outcome, a new
greeting is issued by both BXXP peers. greeting is issued by both BEEP peers. (If the negotiation process
fails, then either BEEP peer may instead terminate the session, and
it is recommended that a diagnostic entry be logged.)
A BXXP peer may choose to issue different greetings based on whether A BEEP peer may choose to issue different greetings based on whether
privacy is in use, e.g., privacy is in use, e.g.,
L: <wait for incoming connection> L: <wait for incoming connection>
I: <open connection> I: <open connection>
L: RPY 0 0 . 0 86 L: RPY 0 0 . 0 110
L: Content-Type: text/xml
L: L:
L: <greeting> L: <greeting>
L: <profile uri='http://xml.resource.org/profiles/TLS' /> L: <profile uri='http://xml.resource.org/profiles/TLS' />
L: </greeting> L: </greeting>
L: END L: END
I: RPY 0 0 . 0 16 L:
I: RPY 0 0 . 0 40
I: Content-Type: text/xml
I: I:
I: <greeting /> I: <greeting />
I: END I: END
I: MSG 0 1 . 16 122 I:
I: MSG 0 1 . 40 158
I: Content-Type: text/xml
I: I:
I: <start number='1'> I: <start number='1'>
I: <profile uri='http://xml.resource.org/profiles/TLS'> I: <profile uri='http://xml.resource.org/profiles/TLS'>
I: <ready /> I: <![CDATA[<ready />]]>
I: </profile> I: </profile>
I: </start> I: </start>
I: END I: END
L: RPY 0 1 . 86 85 I:
L: RPY 0 1 . 110 121
L: Content-Type: text/xml
L: L:
L: <profile uri='http://xml.resource.org/profiles/TLS'> L: <profile uri='http://xml.resource.org/profiles/TLS'>
L: <proceed /> L: <![CDATA[<proceed />]]>
L: </profile> L: </profile>
L: END L: END
L:
... successful transport security negotiation ... ... successful transport security negotiation ...
L: RPY 0 0 . 0 227 L: RPY 0 0 . 0 252
L: Content-Type: text/xml
L: L:
L: <greeting> L: <greeting>
L: <profile L: <profile
L: uri='http://xml.resource.org/profiles/sasl/ANONYMOUS' /> L: uri='http://xml.resource.org/profiles/sasl/ANONYMOUS' />
L: <profile uri='http://xml.resource.org/profiles/sasl/OTP' /> L: <profile uri='http://xml.resource.org/profiles/sasl/OTP' />
L: <profile uri='http://xml.resource.org/profiles/IMXP' /> L: <profile uri='http://xml.resource.org/profiles/IMXP' />
L: </greeting> L: </greeting>
L: END L: END
I: RPY 0 0 . 0 16 L:
I: RPY 0 0 . 0 40
I: Content-Type: text/xml
I: I:
I: <greeting /> I: <greeting />
I: END I: END
Of course, not all BXXP peers need be as single-minded: I:
Of course, not all BEEP peers need be as single-minded:
L: <wait for incoming connection> L: <wait for incoming connection>
I: <open connection> I: <open connection>
L: RPY 0 0 . 0 287 L: RPY 0 0 . 0 311
L: Content-Type: text/xml
L: L:
L: <greeting> L: <greeting>
L: <profile L: <profile
L: uri='http://xml.resource.org/profiles/sasl/ANONYMOUS' /> L: uri='http://xml.resource.org/profiles/sasl/ANONYMOUS' />
L: <profile uri='http://xml.resource.org/profiles/sasl/OTP' /> L: <profile uri='http://xml.resource.org/profiles/sasl/OTP' />
L: <profile uri='http://xml.resource.org/profiles/IMXP' /> L: <profile uri='http://xml.resource.org/profiles/IMXP' />
L: <profile uri='http://xml.resource.org/profiles/TLS' /> L: <profile uri='http://xml.resource.org/profiles/TLS' />
L: </greeting> L: </greeting>
L: END L: END
I: RPY 0 0 . 0 16 L:
I: RPY 0 0 . 0 40
I: Content-Type: text/xml
I: I:
I: <greeting /> I: <greeting />
I: END I: END
I: MSG 0 1 . 16 122 I:
I: MSG 0 1 . 40 158
I: Content-Type: text/xml
I: I:
I: <start number='1'> I: <start number='1'>
I: <profile uri='http://xml.resource.org/profiles/TLS'> I: <profile uri='http://xml.resource.org/profiles/TLS'>
I: <ready /> I: <![CDATA[<ready />]]>
I: </profile> I: </profile>
I: </start> I: </start>
I: END I: END
L: RPY 0 1 . 287 85 I:
L: RPY 0 1 . 311 121
L: Content-Type: text/xml
L: L:
L: <profile uri='http://xml.resource.org/profiles/TLS'> L: <profile uri='http://xml.resource.org/profiles/TLS'>
L: <proceed /> L: <![CDATA[<proceed />]]>
L: </profile> L: </profile>
L: END L: END
L:
... failed transport security negotiation ... ... failed transport security negotiation ...
L: RPY 0 0 . 0 287 L: RPY 0 0 . 0 311
L: Content-Type: text/xml
L: L:
L: <greeting> L: <greeting>
L: <profile L: <profile
L: uri='http://xml.resource.org/profiles/sasl/ANONYMOUS' /> L: uri='http://xml.resource.org/profiles/sasl/ANONYMOUS' />
L: <profile uri='http://xml.resource.org/profiles/sasl/OTP' /> L: <profile uri='http://xml.resource.org/profiles/sasl/OTP' />
L: <profile uri='http://xml.resource.org/profiles/IMXP' /> L: <profile uri='http://xml.resource.org/profiles/IMXP' />
L: <profile uri='http://xml.resource.org/profiles/TLS' /> L: <profile uri='http://xml.resource.org/profiles/TLS' />
L: </greeting> L: </greeting>
L: END L: END
I: RPY 0 0 . 0 16 L:
I: RPY 0 0 . 0 40
I: Content-Type: text/xml
I: I:
I: <greeting /> I: <greeting />
I: END I: END
I:
3.1 The TLS Transport Security Profile 3.1 The TLS Transport Security Profile
Section 6.3 contains the registration for this profile. Section 6.2 contains the registration for this profile.
3.1.1 Profile Identification and Initialization 3.1.1 Profile Identification and Initialization
The TLS transport security profile is identified as: The TLS transport security profile is identified as:
http://xml.resource.org/profiles/TLS http://xml.resource.org/profiles/TLS
in the BXXP "profile" element during channel creation. in the BEEP "profile" element during channel creation.
During channel creation, the corresponding "profile" element in the During channel creation, the corresponding "profile" element in the
BXXP "start" element may contain a "ready" element. If channel BEEP "start" element may contain a "ready" element. If channel
creation is successful, then before sending the corresponding reply, creation is successful, then before sending the corresponding reply,
the BXXP peer processes the "ready" element and includes the the BEEP peer processes the "ready" element and includes the
resulting response in the reply, e.g., resulting response in the reply, e.g.,
C: MSG 0 1 . 16 122 C: MSG 0 1 . 40 158
C: Content-Type: text/xml
C: C:
C: <start number='1'> C: <start number='1'>
C: <profile uri='http://xml.resource.org/profiles/TLS'> C: <profile uri='http://xml.resource.org/profiles/TLS'>
C: <ready /> C: <![CDATA[<ready />]]>
C: </profile> C: </profile>
C: </start> C: </start>
C: END C: END
S: RPY 0 1 . 86 85 C:
S: RPY 0 1 . 110 121
S: Content-Type: text/xml
S: S:
S: <profile uri='http://xml.resource.org/profiles/TLS'> S: <profile uri='http://xml.resource.org/profiles/TLS'>
S: <proceed /> S: <![CDATA[<proceed />]]>
S: </profile> S: </profile>
S: END S: END
S:
Note that it is possible for the channel to be created, but for the Note that it is possible for the channel to be created, but for the
encapsulated operation to fail, e.g., encapsulated operation to fail, e.g.,
C: MSG 0 1 . 16 137 C: MSG 0 1 . 40 173
C: Content-Type: text/xml
C: C:
C: <start number='1'> C: <start number='1'>
C: <profile uri='http://xml.resource.org/profiles/TLS'> C: <profile uri='http://xml.resource.org/profiles/TLS'>
C: <ready version="oops" /> C: <![CDATA[<ready version="oops" />]]>
C: </profile> C: </profile>
C: </start> C: </start>
C: END C: END
S: RPY 0 1 . 86 158 C:
S: RPY 0 1 . 110 181
S: Content-Type: text/xml
S: S:
S: <profile uri='http://xml.resource.org/profiles/TLS'> S: <profile uri='http://xml.resource.org/profiles/TLS'>
S: <error code='501'>version attribute S: <error code='501'>version attribute
S: poorly formed in &lt;ready&gt; element</error> S: poorly formed in &lt;ready&gt; element</error>
S: </profile> S: </profile>
S: END S: END
S:
In this case, a positive reply is sent (as channel creation In this case, a positive reply is sent (as channel creation
succeeded), but the encapsulated response contains an indication as succeeded), but the encapsulated response contains an indication as
to why the operation failed. to why the operation failed.
3.1.2 Message Syntax 3.1.2 Message Syntax
Section 6.4 defines the messages that are used in the TLS transport Section 7.2 defines the messages that are used in the TLS transport
security profile. security profile.
3.1.3 Message Semantics 3.1.3 Message Semantics
3.1.3.1 The Ready Message 3.1.3.1 The Ready Message
The "ready" element has an optional "version" attribute and no The "ready" element has an optional "version" attribute and no
content: content:
o the "version" element defines the earliest version of TLS o the "version" element defines the earliest version of TLS
acceptable for use. acceptable for use.
When a BXXP peer sends the "ready" element, it must not send any When a BEEP peer sends the "ready" element, it must not send any
further traffic on any channel until a corresponding reply is further traffic on any channel until a corresponding reply is
received; similarly, before processing a "ready" element, the received; similarly, before processing a "ready" element, the
receiving BXXP peer waits until any pending replies have been receiving BEEP peer waits until any pending replies have been
generated and sent. generated and sent.
3.1.3.2 The Proceed Message 3.1.3.2 The Proceed Message
The "proceed" element has no attributes and no content. It is sent The "proceed" element has no attributes and no content. It is sent
as a reply to the "ready" element. When a BXXP peer receives the as a reply to the "ready" element. When a BEEP peer receives the
"ready" element, it begins the underlying negotiation process for "ready" element, it begins the underlying negotiation process for
transport security. transport security.
4. User Authentication 4. User Authentication
When a BXXP session is established, anonymous access, without trace When a BEEP session is established, anonymous access, without trace
information, is provided. Accordingly, user authentication in BXXP information, is provided. Accordingly, user authentication in BEEP
is achieved using an initial tuning profile. is achieved using an initial tuning profile.
This document defines a family of profiles based on SASL mechanisms: This document defines a family of profiles based on SASL mechanisms:
o each mechanism in the IANA SASL registry[13] has an associated o each mechanism in the IANA SASL registry[14] has an associated
profile. profile.
Other profiles may be defined and deployed on a bilateral basis. Other profiles may be defined and deployed on a bilateral basis.
Whenever a successful authentication occurs, on any channel, the Whenever a successful authentication occurs, on any channel, the
authenticated identity is updated for all existing and future authenticated identity is updated for all existing and future
channels on the BXXP session; further, no additional attempts at channels on the BEEP session; further, no additional attempts at
authentication are allowed. authentication are allowed.
Note that regardless of transport security and user authentication, Note that regardless of transport security and user authentication,
authorization is an internal matter for each BXXP peer. As such, authorization is an internal matter for each BEEP peer. As such,
each peer may choose to restrict the operations it allows based on each peer may choose to restrict the operations it allows based on
the authentication credentials provided (i.e., unauthorized the authentication credentials provided (i.e., unauthorized
operations might be rejected with error code 530). operations might be rejected with error code 530).
4.1 The SASL Family of Profiles 4.1 The SASL Family of Profiles
Section 6.5 contains the registration for this profile. Section 6.3 contains the registration for this profile.
Note that SASL may provide both user authentication and transport Note that SASL may provide both user authentication and transport
security. Once transport security is successfully negotiated for a security. Once transport security is successfully negotiated for a
BXXP session, then a SASL security layer must not be negotiated; BEEP session, then a SASL security layer must not be negotiated;
similarly, once any SASL negotiation is successful, a transport similarly, once any SASL negotiation is successful, a transport
security profile must not begin its underlying negotiation process. security profile must not begin its underlying negotiation process.
Section 4 of the SASL specification[5] requires the following Section 4 of the SASL specification[5] requires the following
information be supplied by a protocol definition: information be supplied by a protocol definition:
service name: "bxxp" service name: "beep"
initiation sequence: Creating a channel using a BXXP profile initiation sequence: Creating a channel using a BEEP profile
corresponding to a SASL mechanism starts the exchange. An corresponding to a SASL mechanism starts the exchange. An
optional parameter corresponding to the "initial response" sent optional parameter corresponding to the "initial response" sent
by the client is carried within a "blob" element during channel by the client is carried within a "blob" element during channel
creation. creation.
exchange sequence: "Challenges" and "responses" are carried in exchange sequence: "Challenges" and "responses" are carried in
exchanges of the "blob" element. The "status" attribute of the exchanges of the "blob" element. The "status" attribute of the
"blob" element is used both by a server indicating a successful "blob" element is used both by a server indicating a successful
completion of the exchange, and a client aborting the exchange, completion of the exchange, and a client aborting the exchange,
The server indicates failure of the exchange by sending an The server indicates failure of the exchange by sending an
"error" element. "error" element.
security layer negotiation: When a security layer starts security layer negotiation: When a security layer starts
negotiation, all channels (including channel zero) are closed on negotiation, all channels (including channel zero) are closed on
the BXXP session. Accordingly, upon completion of the negotiation the BEEP session. Accordingly, upon completion of the negotiation
process, regardless of its outcome, a new greeting is issued by process, regardless of its outcome, a new greeting is issued by
both BXXP peers. both BEEP peers.
If a security layer is successfully negotiated, it takes effect If a security layer is successfully negotiated, it takes effect
immediately following the message that concludes the server's immediately following the message that concludes the server's
successful completion reply. successful completion reply.
use of the authorization identity: This is made available to all use of the authorization identity: This is made available to all
channels for the duration of the BXXP session. channels for the duration of the BEEP session.
4.1.1 Profile Identification and Initialization 4.1.1 Profile Identification and Initialization
Each SASL mechanism registered with the IANA is identified as: Each SASL mechanism registered with the IANA is identified as:
http://xml.resource.org/profiles/sasl/MECHANISM http://xml.resource.org/profiles/sasl/MECHANISM
where "MECHANISM" is the token assigned to that mechanism by the where "MECHANISM" is the token assigned to that mechanism by the
IANA. IANA.
Note that during channel creation, a BXXP peer may provide multiple Note that during channel creation, a BEEP peer may provide multiple
profiles to the remote peer, e.g., profiles to the remote peer, e.g.,
C: MSG 0 1 . 16 173 C: MSG 0 1 . 40 197
C: Content-Type: text/xml
C: C:
C: <start number='1'> C: <start number='1'>
C: <profile C: <profile
C: uri='http://xml.resource.org/profiles/sasl/ANONYMOUS' /> C: uri='http://xml.resource.org/profiles/sasl/ANONYMOUS' />
C: <profile uri='http://xml.resource.org/profiles/sasl/OTP' /> C: <profile uri='http://xml.resource.org/profiles/sasl/OTP' />
C: </start> C: </start>
C: END C: END
S: RPY 0 1 . 287 63 C:
S: RPY 0 1 . 252 87
S: Content-Type: text/xml
S: S:
S: <profile uri='http://xml.resource.org/profiles/sasl/OTP' /> S: <profile uri='http://xml.resource.org/profiles/sasl/OTP' />
S: END S: END
S:
During channel creation, the corresponding "profile" element in the During channel creation, the corresponding "profile" element in the
BXXP "start" element may contain a "blob" element. Note that it is BEEP "start" element may contain a "blob" element. Note that it is
possible for the channel to be created, but for the encapsulated possible for the channel to be created, but for the encapsulated
operation to fail, e.g., operation to fail, e.g.,
C: MSG 0 1 . 16 147 C: MSG 0 1 . 40 183
C: Content-Type: text/xml
C: C:
C: <start number='1'> C: <start number='1'>
C: <profile uri='http://xml.resource.org/profiles/sasl/OTP'> C: <profile uri='http://xml.resource.org/profiles/sasl/OTP'>
C: <blob>AGJsb2NrbWFzdGVy</blob> C: <![CDATA[<blob>AGJsb2NrbWFzdGVy</blob>]]>
C: </profile> C: </profile>
C: </start> C: </start>
C: END C: END
S: RPY 0 1 . 287 142 C:
S: RPY 0 1 . 252 166
S: Content-Type: text/xml
S: S:
S: <profile uri='http://xml.resource.org/profiles/sasl/OTP'> S: <profile uri='http://xml.resource.org/profiles/sasl/OTP'>
S: <error code='534'>authentication mechanism is S: <error code='534'>authentication mechanism is
S: too weak</error> S: too weak</error>
S: </profile> S: </profile>
S: END S: END
S:
In this case, a positive reply is sent (as channel creation In this case, a positive reply is sent (as channel creation
succeeded), but the encapsulated response contains an indication as succeeded), but the encapsulated response contains an indication as
to why the operation failed. to why the operation failed.
Otherwise, the server sends a challenge (or signifies success), e.g., Otherwise, the server sends a challenge (or signifies success), e.g.,
C: MSG 0 1 . 16 147 C: MSG 0 1 . 40 183
C: Content-Type: text/xml
C: C:
C: <start number='1'> C: <start number='1'>
C: <profile uri='http://xml.resource.org/profiles/sasl/OTP'> C: <profile uri='http://xml.resource.org/profiles/sasl/OTP'>
C: <blob>AGJsb2NrbWFzdGVy</blob> C: <![CDATA[<blob>AGJsb2NrbWFzdGVy</blob>]]>
C: </profile> C: </profile>
C: </start> C: </start>
C: END C: END
S: RPY 0 1 . 287 146 C:
S: RPY 0 1 . 252 171
S: Content-Type: text/xml
S: S:
S: <profile uri='http://xml.resource.org/profiles/sasl/OTP'> S: <profile uri='http://xml.resource.org/profiles/sasl/OTP'>
S: <blob>b3RwLXNoYTEgOTk5NyBwaXh5bWlzYXM4NTgwNSBleHQ=</blob> S: <![CDATA[<blob>b3RwLXNoYTEgOTk5NyBwaXh5bWlzYXM4NTgwNSBleHQ=
</blob>]]>
S: </profile> S: </profile>
S: END S: END
S:
Note that this example implies that the "blob" element in the
server's reply appears on two lines -- this is an artifact of the
presentation; in fact, only one line is used.
If a challenge is received, then the client responds and awaits If a challenge is received, then the client responds and awaits
another reply, e.g., another reply, e.g.,
C: MSG 1 0 . 0 69 C: MSG 1 0 . 0 85
C: Content-Type: text/xml
C: C:
C: <blob>d29yZDpmZXJuIGhhbmcgYnJvdyBib25nIGhlcmQgdG9n</blob> C: <blob>d29yZDpmZXJuIGhhbmcgYnJvdyBib25nIGhlcmQgdG9n</blob>
C: END C: END
S: RPY 1 0 . 0 15 C:
S: RPY 1 0 . 0 54
S: Content-Type: text/xml
S: S:
S: <blob status='complete' /> S: <blob status='complete' />
S: END S: END
S:
Of course, the client could abort the authentication process by Of course, the client could abort the authentication process by
sending "<blob status='abort' />" instead. sending "<blob status='abort' />" instead.
Alternatively, the server might reject the response with an error: Alternatively, the server might reject the response with an error:
e.g., e.g.,
C: MSG 1 0 . 0 69 C: MSG 1 0 . 0 85
C: Content-Type: text/xml
C: C:
C: <blob>d29yZDpmZXJuIGhhbmcgYnJvdyBib25nIGhlcmQgdG9n</blob> C: <blob>d29yZDpmZXJuIGhhbmcgYnJvdyBib25nIGhlcmQgdG9n</blob>
C: END C: END
S: ERR 1 1 . 0 24 C:
S: ERR 1 1 . 0 48
S: Content-Type: text/xml
S: S:
S: <error code='535' /> S: <error code='535' />
S: END S: END
S:
Finally, depending on the SASL mechanism, an initialization element Finally, depending on the SASL mechanism, an initialization element
may be exchanged unidirectionally during channel creation, e.g., may be exchanged unidirectionally during channel creation, e.g.,
C: MSG 0 1 . 16 109 C: MSG 0 1 . 40 133
C: Content-Type: text/xml
C: C:
C: <start number='1'> C: <start number='1'>
C: <profile C: <profile
C: uri='http://xml.resource.org/profiles/sasl/CRAM-MD5' /> C: uri='http://xml.resource.org/profiles/sasl/CRAM-MD5' />
C: </start> C: </start>
C: END C: END
S: RPY 0 1 . 287 150 C:
S: RPY 0 1 . 252 173
S: Content-Type: text/xml
S: S:
S: <profile uri='http://xml.resource.org/profiles/sasl/CRAM-MD5'> S: <profile uri='http://xml.resource.org/profiles/sasl/CRAM-MD5'>
S: <blob>PDE4OTYuNjk3MTcwOTUyQHBvc3RvZmZpY2UucmVzdG9uLm1jaS5uZXQ+ S: <blob>PDE4OTYuNjk3MTcwOTUyQHBvc3RvZmZpY2UucmVzdG9uLm1jaS5uZXQ+
</blob> </blob>
S: </profile> S: </profile>
S: END S: END
S:
Note that this example implies that the "blob" element in the Note that this example implies that the "blob" element in the
server's reply appears on two lines -- this is an artifact of the server's reply appears on two lines -- this is an artifact of the
presentation; in fact, only one line is used. presentation; in fact, only one line is used.
4.1.2 Message Syntax 4.1.2 Message Syntax
Section 6.6 defines the messages that are used for each profile in Section 7.3 defines the messages that are used for each profile in
the SASL family. the SASL family.
Note that because many SASL mechanisms exchange binary data, the Note that because many SASL mechanisms exchange binary data, the
content of the "blob" element is always a base64-encoded string. content of the "blob" element is always a base64-encoded string.
4.1.3 Message Semantics 4.1.3 Message Semantics
The "blob" element has an optional "status" attribute, and arbitrary The "blob" element has an optional "status" attribute, and arbitrary
octets as its content: octets as its content:
skipping to change at page 40, line 27 skipping to change at page 43, line 27
continue: used by either a client or server, otherwise. continue: used by either a client or server, otherwise.
Finally, note that SASL's EXTERNAL mechanism works with an "external Finally, note that SASL's EXTERNAL mechanism works with an "external
authentication" service, which is provided by one of: authentication" service, which is provided by one of:
o a transport security profile, capable of providing authentication o a transport security profile, capable of providing authentication
information (e.g., Section 3.1), being active on the connection; information (e.g., Section 3.1), being active on the connection;
o a network service, capable of providing strong authentication o a network service, capable of providing strong authentication
(e.g., IPSec[11]), underlying the connection; or, (e.g., IPSec[12]), underlying the connection; or,
o a locally-defined security service. o a locally-defined security service.
For authentication to succeed, two conditions must hold: For authentication to succeed, two conditions must hold:
o an external authentication service must be active; and, o an external authentication service must be active; and,
o if present, the authentication identity must be consistent with o if present, the authentication identity must be consistent with
the credentials provided by the external authentication service the credentials provided by the external authentication service
(if the authentication identity is empty, then an authorization (if the authentication identity is empty, then an authorization
identity is automatically derived from the credentials provided identity is automatically derived from the credentials provided
by the external authentication service). by the external authentication service).
5. Profile Registration Template 5. Registration Templates
5.1 Profile Registration Template
When a profile is registered, the following information is supplied: When a profile is registered, the following information is supplied:
Profile Identification: specify a URI[9] that authoritatively Profile Identification: specify a URI[10] that authoritatively
identifies this profile. identifies this profile.
Elements Exchanged during Channel Creation: specify the elements Message Exchanged during Channel Creation: specify the datatypes
that may be exchanged during channel creation (If the profile that may be exchanged during channel creation.
doesn't exchange XML elements, then initialization information
may not be exchanged during channel creation). Regardless, the
size of any initialization element may not exceed 4K octets.
Messages starting one-to-one exchanges: specify the datatypes that Messages starting one-to-one exchanges: specify the datatypes that
may be present when an exchange starts. may be present when an exchange starts.
Messages in positive replies: specify the datatypes that may be Messages in positive replies: specify the datatypes that may be
present in a positive reply. present in a positive reply.
Messages in negative replies: specify the datatypes that may be Messages in negative replies: specify the datatypes that may be
present in a negative reply. present in a negative reply.
Messages in one-to-many exchanges: specify the datatypes that may be Messages in one-to-many exchanges: specify the datatypes that may be
present in a one-to-many exchange. present in a one-to-many exchange.
Message Syntax: specify the syntax of the datatypes exchanged by the Message Syntax: specify the syntax of the datatypes exchanged by the
profile. profile.
Message Semantics: specify the semantics of the datatypes exchanged Message Semantics: specify the semantics of the datatypes exchanged
by the profile. by the profile.
Note that "datatype" refers to any MIME media type, whilst "element" Contact Information: specify the postal and electronic contact
refers to any well-formed XML document. information for the author of the profile.
6. Initial Profile Registrations 5.2 Feature Registration Template
6.1 BXXP Channel Management When a feature for the channel management profile is registered, the
following information is supplied:
Feature Identification: specify a string that identifies this
feature. Unless the feature is registered with the IANA, the
feature's identification MUST start with "x-".
Feature Semantics: specify the semantics of the feature.
Contact Information: specify the postal and electronic contact
information for the author of the feature.
6. Initial Registrations
6.1 Registration: BEEP Channel Management
Profile Identification: not applicable Profile Identification: not applicable
Elements Exchanged during Channel Creation: not applicable Messages exchanged during Channel Creation: not applicable
Messages starting one-to-one exchanges: "start" or "close" Messages starting one-to-one exchanges: "start" or "close"
Messages in positive replies: "greeting", "profile", or "ok" Messages in positive replies: "greeting", "profile", or "ok"
Messages in negative replies: "error" Messages in negative replies: "error"
Messages in one-to-many exchanges: none Messages in one-to-many exchanges: none
Message Syntax: c.f., Section 6.2 Message Syntax: c.f., Section 7.1
Message Semantics: c.f., Section 2.3.1 Message Semantics: c.f., Section 2.3.1
6.2 BXXP Channel Management DTD Contact Information: c.f., the "Author's Address" section of this
memo
6.2 Registration: TLS Transport Security Profile
Profile Identification: http://xml.resource.org/profiles/TLS
Messages exchanged during Channel Creation: "ready"
Messages starting one-to-one exchanges: "ready"
Messages in positive replies: "proceed"
Messages in negative replies: "error"
Messages in one-to-many exchanges: none
Message Syntax: c.f., Section 7.2
Message Semantics: c.f., Section 3.1.3
Contact Information: c.f., the "Author's Address" section of this
memo
6.3 Registration: SASL Family of Profiles
Profile Identification:
http://xml.resource.org/profiles/sasl/MECHANISM, where
"MECHANISM" is a token registered with the IANA[15]
Messages exchanged during Channel Creation: "blob"
Messages starting one-to-one exchanges: "blob"
Messages in positive replies: "blob"
Messages in negative replies: "error"
Messages in one-to-many exchanges: none
Message Syntax: c.f., Section 7.3
Message Semantics: c.f., Section 4.1.3
Contact Information: c.f., the "Author's Address" section of this
memo
7. DTDs
7.1 BEEP Channel Management DTD
<!-- <!--
DTD for BXXP Channel Management, as of 2000-09-04 DTD for BEEP Channel Management, as of 2000-09-17
Refer to this DTD as: Refer to this DTD as:
<!ENTITY % BXXP PUBLIC "-//Blocks//DTD BXXP//EN" <!ENTITY % BEEP PUBLIC "-//Blocks//DTD BEEP//EN"
"http://xml.resource.org/profiles/BXXP/bxxp.dtd"> "http://xml.resource.org/profiles/BEEP/beep.dtd">
%BXXP; %BEEP;
--> -->
<!-- <!--
DTD data types: DTD data types:
entity syntax/reference example entity syntax/reference example
====== ================ ======= ====== ================ =======
a channel number a channel number
CHAN 1..2147483647 1 CHAN 1..2147483647 1
skipping to change at page 44, line 5 skipping to change at page 48, line 5
XYZ [1-5][1-9][1-9] 500 XYZ [1-5][1-9][1-9] 500
--> -->
<!ENTITY % CHAN "CDATA"> <!ENTITY % CHAN "CDATA">
<!ENTITY % URI "CDATA"> <!ENTITY % URI "CDATA">
<!ENTITY % FTRS "NMTOKENS"> <!ENTITY % FTRS "NMTOKENS">
<!ENTITY % LOCS "NMTOKEN"> <!ENTITY % LOCS "NMTOKEN">
<!ENTITY % LANG "NMTOKEN"> <!ENTITY % LANG "NMTOKEN">
<!ENTITY % XYZ "CDATA"> <!ENTITY % XYZ "CDATA">
<!-- <!--
BXXP messages BEEP messages
role MSG RSP ERR role MSG RSP ERR
======= === === === ======= === === ===
I and L greeting error I and L greeting error
I or L start profile error I or L start profile error
I or L close ok error I or L close ok error
--> -->
skipping to change at page 44, line 27 skipping to change at page 48, line 27
<!ATTLIST greeting <!ATTLIST greeting
features %FTRS; #IMPLIED features %FTRS; #IMPLIED
localize %LOCS; "i-default"> localize %LOCS; "i-default">
<!ELEMENT start (profile)+> <!ELEMENT start (profile)+>
<!ATTLIST start <!ATTLIST start
number %CHAN; #REQUIRED number %CHAN; #REQUIRED
serverName CDATA #IMPLIED> serverName CDATA #IMPLIED>
<!-- profile element is empty if contained in a greeting --> <!-- profile element is empty if contained in a greeting -->
<!ELEMENT profile ANY> <!ELEMENT profile (#PCDATA)*>
<!ATTLIST profile <!ATTLIST profile
uri %URI; #REQUIRED> uri %URI; #REQUIRED
encoding (none|base64) "none">
<!ELEMENT close (#PCDATA)*> <!ELEMENT close (#PCDATA)*>
<!ATTLIST close <!ATTLIST close
number %CHAN; "0" number %CHAN; "0"
code %XYZ; #REQUIRED code %XYZ; #REQUIRED
xml:lang %LANG; #IMPLIED> xml:lang %LANG; #IMPLIED>
<!ELEMENT ok EMPTY> <!ELEMENT ok EMPTY>
<!ELEMENT error (#PCDATA)*> <!ELEMENT error (#PCDATA)*>
<!ATTLIST error <!ATTLIST error
code %XYZ; #REQUIRED code %XYZ; #REQUIRED
xml:lang %LANG; #IMPLIED> xml:lang %LANG; #IMPLIED>
6.3 Registration: TLS Transport Security Profile 7.2 TLS Transport Security Profile DTD
Profile Identification: http://xml.resource.org/profiles/TLS
Elements Exchanged during Channel Creation: "ready"
Messages starting one-to-one exchanges: "ready"
Messages in positive replies: "proceed"
Messages in negative replies: "error"
Messages in one-to-many exchanges: none
Message Syntax: c.f., Section 6.4
Message Semantics: c.f., Section 3.1.3
6.4 TLS Transport Security Profile DTD
<!-- <!--
DTD for the TLS Transport Security Profile, as of 2000-09-04 DTD for the TLS Transport Security Profile, as of 2000-09-04
Refer to this DTD as: Refer to this DTD as:
<!ENTITY % TLS PUBLIC "-//Blocks//DTD TLS//EN" <!ENTITY % TLS PUBLIC "-//Blocks//DTD TLS//EN"
"http://xml.resource.org/profiles/TLS/tls.dtd"> "http://xml.resource.org/profiles/TLS/tls.dtd">
%TLS; %TLS;
--> -->
skipping to change at page 47, line 5 skipping to change at page 50, line 5
====== === === === ====== === === ===
I or L ready proceed error I or L ready proceed error
--> -->
<!ELEMENT ready EMPTY> <!ELEMENT ready EMPTY>
<!ATTLIST ready <!ATTLIST ready
version CDATA "1"> version CDATA "1">
<!ELEMENT proceed EMPTY> <!ELEMENT proceed EMPTY>
6.5 Registration: SASL Family of Profiles 7.3 SASL Family of Profiles DTD
Profile Identification:
http://xml.resource.org/profiles/sasl/MECHANISM, where
"MECHANISM" is a token registered with the IANA[14]
Elements Exchanged during Channel Creation: "blob"
Messages starting one-to-one exchanges: "blob"
Messages in positive replies: "blob"
Messages in negative replies: "error"
Messages in one-to-many exchanges: none
Message Syntax: c.f., Section 6.6
Message Semantics: c.f., Section 4.1.3
6.6 SASL Family of Profiles DTD
<!-- <!--
DTD for the SASL Family of Profiles, as of 2000-09-04 DTD for the SASL Family of Profiles, as of 2000-09-04
Refer to this DTD as: Refer to this DTD as:
<!ENTITY % SASL PUBLIC "-//Blocks//DTD SASL//EN" <!ENTITY % SASL PUBLIC "-//Blocks//DTD SASL//EN"
"http://xml.resource.org/profiles/sasl/sasl.dtd"> "http://xml.resource.org/profiles/sasl/sasl.dtd">
%SASL; %SASL;
--> -->
skipping to change at page 49, line 5 skipping to change at page 51, line 5
I or L blob blob error I or L blob blob error
--> -->
<!ELEMENT blob (#PCDATA)*> <!ELEMENT blob (#PCDATA)*>
<!ATTLIST blob <!ATTLIST blob
xml:space (default|preserve) xml:space (default|preserve)
"preserve" "preserve"
status (abort|complete|continue) status (abort|complete|continue)
"continue"> "continue">
7. Reply Codes 8. Reply Codes
code meaning code meaning
==== ======= ==== =======
421 service not available 421 service not available
450 requested action not taken 450 requested action not taken
(e.g., lock already in use) (e.g., lock already in use)
451 requested action aborted 451 requested action aborted
(e.g., local error in processing) (e.g., local error in processing)
skipping to change at page 50, line 5 skipping to change at page 52, line 5
538 authentication mechanism requires encryption 538 authentication mechanism requires encryption
550 requested action not taken 550 requested action not taken
(e.g., no requested profiles are acceptable) (e.g., no requested profiles are acceptable)
553 parameter invalid 553 parameter invalid
554 transaction failed 554 transaction failed
(e.g., policy violation) (e.g., policy violation)
8. Security Considerations 9. Security Considerations
The BXXP framing mechanism, per se, provides no protection against The BEEP framing mechanism, per se, provides no protection against
attack; however, judicious use of initial tuning profiles provides attack; however, judicious use of initial tuning profiles provides
varying degrees of assurance: varying degrees of assurance:
1. If one of the profiles from the SASL family is used, refer to 1. If one of the profiles from the SASL family is used, refer to
[5]'s Section 9 for a discussion of security considerations. [5]'s Section 9 for a discussion of security considerations.
2. If the TLS transport security profile is used (or if a SASL 2. If the TLS transport security profile is used (or if a SASL
security layer is negotiated), then: security layer is negotiated), then:
1. A man-in-the-middle may remove the security-related profiles 1. A man-in-the-middle may remove the security-related profiles
from the BXXP greeting or generate a negative reply to the from the BEEP greeting or generate a negative reply to the
"ready" element of the TLS transport security profile. A "ready" element of the TLS transport security profile. A
BXXP peer may be configurable to refuse to proceed without BEEP peer may be configurable to refuse to proceed without
an acceptable level of privacy. an acceptable level of privacy.
2. A man-in-the-middle may cause a down-negotiation to the 2. A man-in-the-middle may cause a down-negotiation to the
weakest cipher suite available. A BXXP peer should be weakest cipher suite available. A BEEP peer should be
configurable to refuse weak cipher suites. configurable to refuse weak cipher suites.
3. A man-in-the-middle may modify any protocol exchanges prior 3. A man-in-the-middle may modify any protocol exchanges prior
to a successful negotiation. Upon completing the to a successful negotiation. Upon completing the
negotiation, a BXXP peer must discard previously cached negotiation, a BEEP peer must discard previously cached
information about the BXXP session. information about the BEEP session.
As different TLS ciphersuites provide varying levels of As different TLS ciphersuites provide varying levels of
security, administrators should carefully choose which security, administrators should carefully choose which
ciphersuites are provisioned. ciphersuites are provisioned.
9. IANA Considerations As BEEP is peer-to-peer in nature, before performing any task
associated with a message, each channel should apply the appropriate
access control based on the authenticated identity and privacy level
associated with the BEEP session.
The IANA registers "bxxp" as a GSSAPI[12] service name, as specified 10. IANA Considerations
The IANA registers "beep" as a GSSAPI[13] service name, as specified
in Section 4.1. in Section 4.1.
The IANA maintains a list of BXXP profiles that are defined in any The IANA maintains a list of:
standards-track documents.
The IANA makes the registrations specified in Section 6.3 and o BEEP profiles, c.f., Section 5.1; and,
Section 6.5. It is recommended that the IANA register these profiles
o features for the channel management profile, c.f., Section 5.2.
The IANA makes the registrations specified in Section 6.2 and
Section 6.3. It is recommended that the IANA register these profiles
using the IANA as a URI-prefix, and populate those URIs with the using the IANA as a URI-prefix, and populate those URIs with the
respective profile registrations. respective profile registrations.
References References
[1] Rose, M.T., "On the Design of Application Protocols", [1] Rose, M.T., "On the Design of Application Protocols",
draft-mrose-beep-design-00 (work in progress), July 2000. draft-mrose-beep-design-00 (work in progress), July 2000.
[2] Freed, N. and N. Borenstein, "Multipurpose Internet Mail [2] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
Extensions (MIME) Part One: Format of Internet Message Extensions (MIME) Part One: Format of Internet Message
skipping to change at page 52, line 25 skipping to change at page 54, line 25
1.0", W3C XML, February 1998, 1.0", W3C XML, February 1998,
<URL:http://www.w3.org/TR/1998/REC-xml-19980210>. <URL:http://www.w3.org/TR/1998/REC-xml-19980210>.
[4] Dierks, T., Allen, C., Treese, W., Karlton, P. L., Freier, A. [4] Dierks, T., Allen, C., Treese, W., Karlton, P. L., Freier, A.
O. and P. C. Kocher, "The TLS Protocol Version 1.0", RFC 2246, O. and P. C. Kocher, "The TLS Protocol Version 1.0", RFC 2246,
January 1999. January 1999.
[5] Myers, J.G., "Simple Authentication and Security Layer [5] Myers, J.G., "Simple Authentication and Security Layer
(SASL)", RFC 2222, October 1997. (SASL)", RFC 2222, October 1997.
[6] Rose, M.T., "Mapping the BXXP Framework onto TCP", [6] Rose, M.T., "Mapping the BEEP Framework onto TCP",
draft-ietf-beep-tcpmapping-01 (work in progress), September draft-ietf-beep-tcpmapping-02 (work in progress), September
2000. 2000.
[7] Postel, J., "Transmission Control Protocol", RFC 793, STD 7, [7] Postel, J., "Transmission Control Protocol", RFC 793, STD 7,
Sep 1981. Sep 1981.
[8] Alvestrand, H., "Tags for the Identification of Languages", [8] Crocker, D. H. and P. Overell, "Augmented BNF for Syntax
Specifications: ABNF", RFC 2234, November 1997.
[9] Alvestrand, H., "Tags for the Identification of Languages",
RFC 1766, March 1995. RFC 1766, March 1995.
[9] Berners-Lee, T., Fielding, R.T. and L. Masinter, "Uniform [10] Berners-Lee, T., Fielding, R.T. and L. Masinter, "Uniform
Resource Identifiers (URI): Generic Syntax", RFC 2396, August Resource Identifiers (URI): Generic Syntax", RFC 2396, August
1998. 1998.
[10] Newman, C., "The One-Time-Password SASL Mechanism", RFC 2444, [11] Newman, C., "The One-Time-Password SASL Mechanism", RFC 2444,
October 1998. October 1998.
[11] Kent, S. and R. Atkinson, "Security Architecture for the [12] Kent, S. and R. Atkinson, "Security Architecture for the
Internet Protocol", RFC 2401, November 1998. Internet Protocol", RFC 2401, November 1998.
[12] Linn, J., "Generic Security Service Application Program [13] Linn, J., "Generic Security Service Application Program
Interface, Version 2", RFC 2078, January 1997. Interface, Version 2", RFC 2078, January 1997.
[13] <URL:http://www.isi.edu/in-notes/iana/assignments/sasl-mechanis [14] <URL:http://www.isi.edu/in-notes/iana/assignments/sasl-mechanis
ms> ms>
[15] <URL:http://www.iana.org/>
[14] <URL:http://www.iana.org/>
Author's Address Author's Address
Marshall T. Rose Marshall T. Rose
Invisible Worlds, Inc. Invisible Worlds, Inc.
1179 North McDowell Boulevard 1179 North McDowell Boulevard
Petaluma, CA 94954-6559 Petaluma, CA 94954-6559
US US
Phone: +1 707 789 3700 Phone: +1 707 789 3700
EMail: mrose@invisible.net EMail: mrose@invisible.net
URI: http://invisible.net/ URI: http://invisible.net/
Appendix A. Changes from draft-ietf-beep-framework-00 Appendix A. Changes from draft-ietf-beep-framework-01
o s/BXXP/BEEP/g
o The default "Content-Type:" is now "application/octet-stream".
o Initialization messages are now character data, not XML elements.
o A template is provided for channel management feature
registration (c.f., Section 5.2).
Appendix B. Changes from draft-ietf-beep-framework-00
o The names of messages are renamed: o The names of messages are renamed:
* "REQ" messages are now "MSG" messages; and, * "REQ" messages are now "MSG" messages; and,
* "RSP" messages are now "RPY" (positive), "ANS"/"NULL" * "RSP" messages are now "RPY" (positive), "ANS"/"NULL"
(one-to-many), and "ERR" (negative). (one-to-many), and "ERR" (negative).
o One-to-many exchanges are supported using the "ANS" message. o One-to-many exchanges are supported using the "ANS" message.
o Commonly-used paraemters are re-ordered in the header: o Commonly-used paraemters are re-ordered in the header:
* channel numbers appear in each frame (and are 31-bits wide); * channel numbers appear in each frame (and are 31-bits wide);
and, and,
* serial numbers are now message numbers, and are per-channel. * serial numbers are now message numbers, and are per-channel.
o MIME "entity-headers" are now part of the payload (and there is o MIME "entity-headers" are now part of the payload (and there is
no longer any header-related processing associated with them). no longer any header-related processing associated with them).
o An IANA registration for BXXP error codes is no longer required o An IANA registration for BEEP error codes is no longer required
(the error codes are used only within this specification). (the error codes are used only within this specification).
o The close message (Section 2.3.1.3) is also used to release the o The close message (Section 2.3.1.3) is also used to release the
BXXP session. BEEP session.
Appendix B. Changes from draft-mrose-bxxp-framework-01 Appendix C. Changes from draft-mrose-bxxp-framework-01
o Channel numbers are now 31-bits wide (instead of 8-bits). o Channel numbers are now 31-bits wide (instead of 8-bits).
o Peers should support at least 257 concurrent channels. o Peers should support at least 257 concurrent channels.
o The consistency rules in Section 2.2.1.1 now mandate that any o The consistency rules in Section 2.2.1.1 now mandate that any
MIME entity-headers occur only in the first frame of a message. MIME entity-headers occur only in the first frame of a message.
o Discussion of the role of the entity-headers is moved to Section o Discussion of the role of the entity-headers is moved to Section
2.2.1.1. 2.2.1.1.
o Section 2.2.2 requires that a BXXP peer close a channel when a o Section 2.2.2 requires that a BEEP peer close a channel when a
poorly-formed reply is received (unless it's channel zero, in poorly-formed reply is received (unless it's channel zero, in
which case the BXXP session is terminated). which case the BEEP session is terminated).
o Section 2.2.2 explains that in an XML-based profile, if something o Section 2.2.2 explains that in an XML-based profile, if something
other than UTF-8 is sent, then a "Content-Type:" entity-header other than UTF-8 is sent, then a "Content-Type:" entity-header
must be present to specify the character set. must be present to specify the character set.
o The close (Section 2.3.1.3) and ok (Section 2.3.1.4) messages o The close (Section 2.3.1.3) and ok (Section 2.3.1.4) messages
were added. were added.
o Both Section 2.3.1.3 and Section 2.3.1.5 clarify that diagnostic o Both Section 2.3.1.3 and Section 2.3.1.5 clarify that diagnostic
text is not to be interpreted by programs. text is not to be interpreted by programs.
o Section 5 limits the the size of an initialization element to 4K o Section 5.1 limits the the size of an initialization element to
octets. 4K octets.
Appendix C. Changes from draft-mrose-bxxp-framework-00 Appendix D. Changes from draft-mrose-bxxp-framework-00
o The IPR notice is changed to be in full conformance with all o The IPR notice is changed to be in full conformance with all
provisions of Section 10 of RFC2026. provisions of Section 10 of RFC2026.
o At the beginning of Section 2.2 (and in the ABNF in Section o At the beginning of Section 2.2 (and in the ABNF in Section
2.2.1) the relationship between messages and frames is clarified. 2.2.1) the relationship between messages and frames is clarified.
o A typo involving the final CR LF in the ABNF in Section 2.2.1 is o A typo involving the final CR LF in the ABNF in Section 2.2.1 is
corrected. corrected.
skipping to change at page 57, line 5 skipping to change at page 60, line 5
"transport-specific" assertion (the sixth rule for identifying "transport-specific" assertion (the sixth rule for identifying
poorly-formed frames). poorly-formed frames).
o At the beginning of Section 2.3, an explanation of the o At the beginning of Section 2.3, an explanation of the
relstionship between profiles and channels (and the greeting and relstionship between profiles and channels (and the greeting and
start messages) is added. start messages) is added.
o In Section 2.3.1, the order of the sections for the greeting and o In Section 2.3.1, the order of the sections for the greeting and
start messages is reversed for readability. start messages is reversed for readability.
Appendix D. Acknowledgements Appendix E. Acknowledgements
The author gratefully acknowledges the contributions of: David The author gratefully acknowledges the contributions of: David
Clark, Dave Crocker, Steve Deering, Marco Gazzetta, Danny Goodman, Clark, Dave Crocker, Steve Deering, Marco Gazzetta, Danny Goodman,
Steve Harris, Robert Herriot, Ken Hirsch, Greg Hudson, Ben Laurie, Steve Harris, Robert Herriot, Ken Hirsch, Greg Hudson, Ben Laurie,
Carl Malamud, Michael Mealling, Keith McCloghrie, Paul Mockapetris, Carl Malamud, Michael Mealling, Keith McCloghrie, Paul Mockapetris,
RL 'Bob' Morgan, Frank Morton, Darren New, Chris Newman, Joe Touch, RL 'Bob' Morgan, Frank Morton, Darren New, Chris Newman, Joe Touch,
Paul Vixie, Gabe Wachob, Daniel Woods, and, James Woodyatt. In Paul Vixie, Gabe Wachob, Daniel Woods, and, James Woodyatt. In
particular, Dave Crocker provided helpful suggestions on the nature particular, Dave Crocker provided helpful suggestions on the nature
of segmentation in the framing protocol. of segmentation in the framing mechanism.
Full Copyright Statement Full Copyright Statement
Copyright (C) The Internet Society (2000). All Rights Reserved. Copyright (C) The Internet Society (2000). All Rights Reserved.
This document and translations of it may be copied and furnished to This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it others, and derivative works that comment on or otherwise explain it
or assist in its implementation may be prepared, copied, published or assist in its implementation may be prepared, copied, published
and distributed, in whole or in part, without restriction of any and distributed, in whole or in part, without restriction of any
kind, provided that the above copyright notice and this paragraph kind, provided that the above copyright notice and this paragraph
 End of changes. 273 change blocks. 
443 lines changed or deleted 609 lines changed or added

This html diff was produced by rfcdiff 1.34. The latest version is available from http://tools.ietf.org/tools/rfcdiff/