Permalink
Browse files

first draft documentation

  • Loading branch information...
1 parent 35577b4 commit 1537fce2e477a218b8591cc9ab0e03f28e5a82ee @lisp committed Mar 13, 2010
View
97 doc/api.md → documentation.md
@@ -215,57 +215,76 @@ in response to eaarlier client commands.
#### Frame Data
- send-method
- call-with-encoded-arguments
- call-with-decoded-arguments
- put-encoded-frame
- get-read-frame
- process-frame
+ [send-method]((documentation/processing.html#send-method)
+ [call-with-encoded-arguments](documentation/processing.html#call-with-encoded-arguments)
+ [call-with-decoded-arguments](documentation/processing.html#call-with-decoded-arguments)
+ [put-encoded-frame](documentation/processing.html#put-encoded-frame)
+ [get-read-frame](documentation/processing.html#get-read-frame)
+ [process-frame](documentation/processing.html#process-frame)
#### Message
-rather than a single control model, it supports both asynchronous an synchronous forms
+de.setf.amqp supports both asynchronous an synchronous processing models.
-Read frames are handled as follows
-if read synchronously, an explicit handler is provided, which as the first opportunity to process.
-If it declines, then processing succeeds with the handlers registered for the channel.
-If all decline, then the status operator for that command is invoked.
-This process applies to all frames for the channel to be read.
+synchronous procesing is performed with operators which read, parse, and dispatch successive commands in an (object x method) typecase.
-In addition, one can initiate an event generator, which manages the input to all channels.
-Rather than permit any given channel to read-through to the input frame stream, This
-process reads all input and dispatches it. If the respective channel has bound filters,
+ [command-case](documentation/processing.html#command-case)
+ [command-loop](documentation/processing.html#command-loop)
+
+The first form processes just the next command, the '-loop' form iterates over read commands indefinitely.
+Each successively read frame is first filtered through the command clauses and passed to the first matching
+clause for processing. If it declines, then processing succeeds with the handlers registered for the channel.
+If all decline, then the [static operator](documentation/commands.html) for that command is invoked.
+
+In addition to synchronous processing, an application can create a thread to manage a connection and
+run a processing loop
+
+ [connection-top-level](documentation/processing.html#connection-top-level)
+
+In this case, that process read the connection frames and dispatches input to each channel.
+If the respective channel has bound filters,
then it is asynchronously interrupted to filter the frame. One it starts, it can elect
to read further frames synchronously, or to retain the event-based processing.
+The application can register method handlers for each channel
+
+ [(setf channel-command)](documentation/processing.html#setf_channel-command)
-register handler or allow the channel to process read frames with the static operators.
+to bins a function to process specific methods. The default method processes commands with the static operators.
- The library implements those commands which are required of the client as `respond-to-`.
-For those which the server must implement, the client side operator, `request-` implements the
-immeidate request as well is any immediate synchronus interaction.
+The [static operators](documentation/commands.html) implements those commands which are required of the client as `respond-to-`.
+For broker operations, the client side operator, `request-` implements the
+immediate request as well is any immediate synchronous interaction.
#### Streams
- with-open-stream
- read
- write
- stream-read- byte char string sequence vector
- stream-write- byte char string sequence vector
- finish-output
- force-output
- stream-listen
- stream-peek-char
- stream-clear-output
-
- device-open (stream #-sbcl slots initargs)
- device-close (stream abort)
- device-read (stream buffer start end blocking)
- device-clear-input (stream buffer-only)
- device-write (stream buffer start end blocking)
- device-clear-output (stream)
- device-flush (device)
- device-read-content (device &rest content-arguments)
- device-write-content (device body &rest content-arguments)
+The stream interface supports both the standard / gray stream interface and the simple-stream interface
+
+ [with-open-stream]
+ [read]
+ [write]
+ [stream-clear-output](documentation/device-level.html#stream-clear-output)
+ [stream-finish-output](documentation/device-level.html#stream-finish-output)
+ [stream-force-output](documentation/device-level.html#stream-force-output)
+ [stream-listen](documentation/device-level.html#stream-listen)
+ [stream-peek-char](documentation/device-level.html#stream-peek-char)
+ [stream-read-byte](documentation/device-level.html#stream-read-byte)
+ [stream-read-char](documentation/device-level.html#stream-read-char)
+ [stream-read-line](documentation/device-level.html#stream-read-line)
+ [stream-read-sequence](documentation/device-level.html#stream-read-sequence)
+ [stream-write-byte](documentation/device-level.html#stream-write-byte)
+ [stream-write-char](documentation/device-level.html#stream-write-char)
+ [stream-write-sequence](documentation/device-level.html#stream-write-sequence)
+ [stream-write-string](documentation/device-level.html#stream-write-string)
+
+ [device-open](documentation/device-level.html#device-open) (stream #-sbcl slots initargs)
+ [device-close](documentation/device-level.html#device-close) (stream abort)
+ [device-read](documentation/device-level.html#device-read) (stream buffer start end blocking)
+ [device-clear-input](documentation/device-level.html#device-clear-input) (stream buffer-only)
+ [device-write](documentation/device-level.html#device-write) (stream buffer start end blocking)
+ [device-clear-output](documentation/device-level.html#device-clear-output) (stream)
+ [device-flush](documentation/device-level.html#device-flush) (device)
+ [device-read-content](documentation/device-level.html#device-read-content) (device &rest content-arguments)
+ [device-write-content](documentation/device-level.html#device-write-content) (device body &rest content-arguments)
---
View
9 documentation/amqp-device.html
@@ -0,0 +1,9 @@
+<?xml version='1.0' charset='iso-8859-1'?><!DOCTYPE svg PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'><xhtml:html xmlns='http://www.w3.org/1999/xhtml'><head ><meta name='date' content='20100313T101602Z00'/>
+<meta http-equiv='Content-Type' content='text/xhtml;charset=iso-8859-1'/>
+<link href='documentation.css' ref='stylesheet' type='text/css'/>
+<title >FILE: amqp-device</title>
+</head>
+<body ><div class='documentation file'><div class='type' style='float: right'>file</div><div class='name'>amqp-device.lisp</div><hr /><div style='text-align: center; background-color: #e0e0e0;'></div><hr /><div class='documentation' style='padding-left: 2em; padding-right: 2em;white-space: pre;'>This file defines the `amqp-device` class to extend `simple-stream` devices as part of the
+ &apos;de.setf.amqp&apos; library.</div>
+<hr /></div>
+<hr /><div class='footer' style='float: right; font-size: small;'><img src='http://www.digitool.com/img/mcl-made-1.gif'/> Copyright 2010 setf.de</div></body></html>
View
17 documentation/amqp-uri.html
@@ -0,0 +1,17 @@
+<?xml version='1.0' charset='iso-8859-1'?><!DOCTYPE svg PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'><xhtml:html xmlns='http://www.w3.org/1999/xhtml'><head ><meta name='date' content='20100313T101602Z00'/>
+<meta http-equiv='Content-Type' content='text/xhtml;charset=iso-8859-1'/>
+<link href='documentation.css' ref='stylesheet' type='text/css'/>
+<title >FILE: amqp-uri</title>
+</head>
+<body ><div class='documentation file'><div class='type' style='float: right'>file</div><div class='name'>amqp-uri.lisp</div><hr /><div style='text-align: center; background-color: #e0e0e0;'></div><hr /><div class='documentation' style='padding-left: 2em; padding-right: 2em;white-space: pre;'>This file defines the amqp-uri class to specialize `puri:uri` for use with the &apos;de.setf.amqp&apos;
+ library.</div>
+<div class='documentation' style='padding-left: 2em; padding-right: 2em;white-space: pre;'>The prospective, standard format for AMQP uri is described in the 0.10 version spec[1],
+ in addition to which QPID suggests to how to support unserinfo[2]. In addition to these, exchange and queue
+ values are recognized as query parameters. QPID suggests[3] a syntax for binding URLs, but its interpreation
+ of scheme values is suspect.
+
+ [1]: http://jira.amqp.org/confluence/download/attachments/720900/amqp.0-10.pdf?version=1
+ [2]: http://qpid.apache.org/url-format-proposal.html
+ [3]: http://qpid.apache.org/bindingurlformat.html</div>
+<hr /></div>
+<hr /><div class='footer' style='float: right; font-size: small;'><img src='http://www.digitool.com/img/mcl-made-1.gif'/> Copyright 2010 setf.de</div></body></html>
View
193 documentation/classes.html
@@ -0,0 +1,193 @@
+<?xml version='1.0' charset='iso-8859-1'?><!DOCTYPE svg PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'><xhtml:html xmlns='http://www.w3.org/1999/xhtml'><head ><meta name='date' content='20100313T101601Z00'/>
+<meta http-equiv='Content-Type' content='text/xhtml;charset=iso-8859-1'/>
+<link href='documentation.css' ref='stylesheet' type='text/css'/>
+<title >FILE: classes</title>
+</head>
+<body ><div class='documentation file'><div class='type' style='float: right'>file</div><div class='name'>classes.lisp</div><hr /><div style='text-align: center; background-color: #e0e0e0;'><span ><a href='#index_A'>A</a> </span><span ><a href='#index_B'>B</a> </span><span ><a href='#index_C'>C</a> </span><span ><a href='#index_D'>D</a> </span><span ><a href='#index_E'>E</a> </span><span ><a href='#index_F'>F</a> </span><span ><a href='#index_H'>H</a> </span><span ><a href='#index_L'>L</a> </span><span ><a href='#index_M'>M</a> </span><span ><a href='#index_O'>O</a> </span><span ><a href='#index_Q'>Q</a> </span><span ><a href='#index_R'>R</a> </span><span ><a href='#index_S'>S</a> </span><span ><a href='#index_T'>T</a> </span></div><hr /><div class='documentation' style='padding-left: 2em; padding-right: 2em;white-space: pre;'>This file defines the CLOS model for AMQP `object` and `method` entities for the
+ &apos;de.setf.amqp&apos; library.</div>
+<div class='documentation' style='padding-left: 2em; padding-right: 2em;white-space: pre;'>Each AMQP protocol version presents a particular model for message processing. At
+ the same time, despite the variations, all message-level models distinguish
+ between &apos;class&apos; and &apos;operator&apos; entities, and the transport-level models all
+ concern exchanges of &apos;framed&apos; data through &apos;connections&apos;. At the message
+ level the classes exhibit various relations - either connection/channel/class
+ or connection/session/channel/links/class, while operators are termed variously
+ &apos;methods&apos;, &apos;commands&apos;, and &apos;controls&apos;. at the same time, their specialized roles do not affect
+ their <a href='classes.html#basic' class='reference class'>basic</a> representation. All are &apos;classes&apos; on an abstract level. The distinction
+ is of a containment hierarchy.
+
+ At the transport level, transported data is broken into various constituents -
+ either &apos;content&apos; and &apos;frames&apos; or &apos;assemblies&apos;, &apos;segments&apos; and &apos;frames&apos;, but
+ this does not affect the respective representation either.
+
+ This implementation reflects the following general order.
+
+ 1. The primary interface classes are amqp:<a href='classes.html#object' class='reference class'>object</a> and amqp:method. These are specialized in terms
+ of protocol version, and according to the respetive protocol&apos;s functional model. In terms of the
+ protocols&apos; taxonometric class hierarchy - eg, for 0.8r0, 0.9r1, this manifests in the class definitions
+ and their relations:
+ <a href='classes.html#connection' class='reference class'>connection</a> (1)--
+ -- (*) <a href='classes.html#channel' class='reference class'>channel</a> (1) ---
+ --(*) <a href='classes.html#access' class='reference class'>access</a> <a href='classes.html#basic' class='reference class'>basic</a> <a href='classes.html#cluster' class='reference class'>cluster</a> <a href='classes.html#dtx' class='reference class'>dtx</a> <a href='classes.html#exchange' class='reference class'>exchange</a> <a href='classes.html#file' class='reference class'>file</a> <a href='classes.html#link' class='reference class'>link</a> <a href='classes.html#queue' class='reference class'>queue</a> <a href='classes.html#stream' class='reference class'>stream</a> <a href='classes.html#tx' class='reference class'>tx</a>
+ with each class associated with the respective methods, eg.
+ <a href='classes.html#channel' class='reference function'>CHANNEL</a> : <a href='commands.html#open' class='reference function'>OPEN</a> OPEN-OK <a href='commands.html#flow' class='reference function'>FLOW</a> FLOW-OK <a href='commands.html#close' class='reference function'>CLOSE</a> <a href='commands.html#close-ok' class='reference function'>CLOSE-OK</a>
+ <a href='classes.html#exchange' class='reference function'>EXCHANGE</a> : <a href='commands.html#declare' class='reference function'>DECLARE</a> DECLARE-OK <a href='commands.html#delete' class='reference function'>DELETE</a> DELETE-OK
+ (See the version&apos;s respective classes.lisp)
+
+ 2. At the transport level, each protocol&apos;s model is reflected in the
+ data containers - eg <a href='classes.html#channel' class='reference class'>channel</a>, content, assembly, segment, <a href='classes.html#link' class='reference class'>link</a>, and <a href='frames.html#frame' class='reference class'>frame</a>.
+
+ 3. At the wire level each protocol version specifies encoding rules and
+ how to map its defined data types to lisp data.
+
+ This file defines the abstract classes, the &apos;commands&apos; <a href='classes.html#file' class='reference class'>file</a> implements the
+ protocol logic in terms of them, and the &apos;data-wire-encoding&apos; <a href='classes.html#file' class='reference class'>file</a> defines the
+ general data codecs. Each protocol is implemented in three files in the
+ eponymous directory:
+ &apos;data-wire-encoding&apos; : defines codecs in terms of the protocol&apos;s type domain names
+ which are used in the protocol operators. Compound codecs - eg, map,
+ array, and list, require version-specific type codes.
+ &apos;abstract-classes&apos; : defines the protocol-specific abstract classes.
+ &apos;classes&apos; : defines codecs for the concrete classes and methods.</div>
+<div class='documentation' style='padding-left: 2em; padding-right: 2em;white-space: pre;'>(ensure-method ensure-object)</div>
+<div class='documentation' style='padding-left: 2em; padding-right: 2em;white-space: pre;'>Each class combines with its operators to perform commands. In addition each <a href='classes.html#channel' class='reference function'>channel</a> is associated with
+ class.command instances which apply to it and a <a href='classes.html#connection' class='reference class'>connection</a> is assocaiated with it channels. In order that
+ subsequent operations reflect previous settings, each context caches constituents. In the case of the
+ (<a href='classes.html#connection' class='reference class'>connection</a> x <a href='classes.html#channel' class='reference class'>channel</a>) relation the <a href='classes.html#channel' class='reference class'>channel</a> number is the designator. For (<a href='classes.html#channel' class='reference class'>channel</a> x (<a href='classes.html#exchange' class='reference class'>exchange</a> + <a href='classes.html#queue' class='reference class'>queue</a>))
+ relations it is the respective name. For anonymous entities, the type suffices.</div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_A' style='font-weight: bold;'>A</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='access'>access</a></div><div class='parameters'>(designator &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Construct a ACCESS given initialization arguments. The
+ first argument may be a keyword, in which case the value of *CLASS.ACCESS* designate the
+ class, or it may be a class designator. In other cases, the first argument
+ is interpreted as a context to dereference the respective <a href='classes.html#access' class='reference class'>ACCESS</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='access'>access</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>The AMQP protocol class <a href='classes.html#access' class='reference class'>Access</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='access-p'>access-p</a></div><div class='parameters'>(datum)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_B' style='font-weight: bold;'>B</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='basic'>basic</a></div><div class='parameters'>(designator &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Construct a BASIC given initialization arguments. The
+ first argument may be a keyword, in which case the value of *CLASS.BASIC* designate the
+ class, or it may be a class designator. In other cases, the first argument
+ is interpreted as a context to dereference the respective <a href='classes.html#basic' class='reference class'>BASIC</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='basic'>basic</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>The AMQP protocol class <a href='classes.html#basic' class='reference class'>Basic</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='basic-p'>basic-p</a></div><div class='parameters'>(datum)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='body'>body</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_C' style='font-weight: bold;'>C</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='channel'>channel</a></div><div class='parameters'>(designator &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Construct a CHANNEL given initialization arguments. The
+ first argument may be a keyword, in which case the value of *CLASS.CHANNEL* designate the
+ class, or it may be a class designator. In other cases, the first argument
+ is interpreted as a context to dereference the respective <a href='classes.html#channel' class='reference class'>CHANNEL</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='channel'>channel</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>The AMQP protocol class <a href='classes.html#channel' class='reference class'>Channel</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='channel-p'>channel-p</a></div><div class='parameters'>(datum)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='cluster'>cluster</a></div><div class='parameters'>(designator &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Construct a CLUSTER given initialization arguments. The
+ first argument may be a keyword, in which case the value of *CLASS.CLUSTER* designate the
+ class, or it may be a class designator. In other cases, the first argument
+ is interpreted as a context to dereference the respective <a href='classes.html#cluster' class='reference class'>CLUSTER</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='cluster'>cluster</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>The AMQP protocol class <a href='classes.html#cluster' class='reference class'>Cluster</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='cluster-p'>cluster-p</a></div><div class='parameters'>(datum)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='connection'>connection</a></div><div class='parameters'>(designator &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Construct a CONNECTION given initialization arguments. The
+ first argument may be a keyword, in which case the value of *CLASS.CONNECTION* designate the
+ class, or it may be a class designator. In other cases, the first argument
+ is interpreted as a context to dereference the respective <a href='classes.html#connection' class='reference class'>CONNECTION</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='connection'>connection</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>The AMQP protocol class <a href='classes.html#connection' class='reference class'>Connection</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='connection-p'>connection-p</a></div><div class='parameters'>(datum)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_D' style='font-weight: bold;'>D</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='dtx'>dtx</a></div><div class='parameters'>(designator &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Construct a DTX given initialization arguments. The
+ first argument may be a keyword, in which case the value of *CLASS.DTX* designate the
+ class, or it may be a class designator. In other cases, the first argument
+ is interpreted as a context to dereference the respective <a href='classes.html#dtx' class='reference class'>DTX</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='dtx'>dtx</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>The AMQP protocol class <a href='classes.html#dtx' class='reference class'>Dtx</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='dtx-p'>dtx-p</a></div><div class='parameters'>(datum)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_E' style='font-weight: bold;'>E</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='ensure-method'>ensure-method</a></div><div class='parameters'>(class designator &amp;rest initargs)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Retrieve or create a version-specific method instance given the a class instance and a
+ method designator. As designator, accept either a wire code or an abstract method name. Concrete method
+ names should not be specified. The name is used as a cache key to treat the methon as a singleton with
+ respect to the class. If none exists, a new instance is cached and returned.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='ensure-object'>ensure-object</a></div><div class='parameters'>(context class-designator &amp;rest initargs)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Construct a new class instance respective the given context.
+ CONTEXT : (or <a href='classes.html#connection' class='reference class'>connection</a> <a href='classes.html#channel' class='reference class'>channel</a>) : the context for the class. channels are relative
+ to a <a href='classes.html#connection' class='reference class'>connection</a>, all others relative to a <a href='classes.html#channel' class='reference class'>channel</a>.
+ CLASS-NAME : symbol : the abstract protocol class name
+ . INITARGS : list : initialization arguments supplied to create a new instance or reinitialize a cache done.
+
+ A <a href='classes.html#connection' class='reference class'>connection</a> allows channels only. A <a href='classes.html#channel' class='reference class'>channel</a> treats the <a href='classes.html#channel' class='reference class'>channel</a> and <a href='classes.html#connection' class='reference class'>connection</a>
+ types as designating the respective instances and everything else as a
+ channel-relative singleton. All other conntected contexts delegate to their <a href='classes.html#channel' class='reference function'>channel</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='exchange'>exchange</a></div><div class='parameters'>(designator &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Construct a EXCHANGE given initialization arguments. The
+ first argument may be a keyword, in which case the value of *CLASS.EXCHANGE* designate the
+ class, or it may be a class designator. In other cases, the first argument
+ is interpreted as a context to dereference the respective <a href='classes.html#exchange' class='reference class'>EXCHANGE</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='exchange'>exchange</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>The AMQP protocol class <a href='classes.html#exchange' class='reference class'>Exchange</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='exchange-exchange'>exchange-exchange</a></div><div class='parameters'>(object)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>The exchange name accessor is extended with a string method to allow to
+ coerce arguments to a string value in request/response operators.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='exchange-p'>exchange-p</a></div><div class='parameters'>(datum)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_F' style='font-weight: bold;'>F</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='file'>file</a></div><div class='parameters'>(designator &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Construct a FILE given initialization arguments. The
+ first argument may be a keyword, in which case the value of *CLASS.FILE* designate the
+ class, or it may be a class designator. In other cases, the first argument
+ is interpreted as a context to dereference the respective <a href='classes.html#file' class='reference class'>FILE</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='file'>file</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>The AMQP protocol class <a href='classes.html#file' class='reference class'>File</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='file-p'>file-p</a></div><div class='parameters'>(datum)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='find-protocol-class'>find-protocol-class</a></div><div class='parameters'>(abstract-class version &amp;key if-does-not-exist)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>GIven an abstract protocol class and a version,
+ examine the desigated package for a class with the same name.</div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_H' style='font-weight: bold;'>H</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='header'>header</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='heartbeat'>heartbeat</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_L' style='font-weight: bold;'>L</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='link'>link</a></div><div class='parameters'>(designator &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Construct a LINK given initialization arguments. The
+ first argument may be a keyword, in which case the value of *CLASS.LINK* designate the
+ class, or it may be a class designator. In other cases, the first argument
+ is interpreted as a context to dereference the respective <a href='classes.html#link' class='reference class'>LINK</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='link'>link</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>The AMQP protocol class <a href='classes.html#link' class='reference class'>Link</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='link-p'>link-p</a></div><div class='parameters'>(datum)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_M' style='font-weight: bold;'>M</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='make-access'>make-access</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='make-basic'>make-basic</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='make-channel'>make-channel</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='make-cluster'>make-cluster</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='make-connection'>make-connection</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='make-dtx'>make-dtx</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='make-exchange'>make-exchange</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='make-file'>make-file</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='make-link'>make-link</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='make-queue'>make-queue</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='make-session'>make-session</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='make-stream'>make-stream</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='make-test'>make-test</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='make-tunnel'>make-tunnel</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='make-tx'>make-tx</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='message'>message</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='method'>method</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_O' style='font-weight: bold;'>O</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='object'>object</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>The abstract root class for all protocol classes.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='oob-body'>oob-body</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='oob-header'>oob-header</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='oob-method'>oob-method</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_Q' style='font-weight: bold;'>Q</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='queue'>queue</a></div><div class='parameters'>(designator &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Construct a QUEUE given initialization arguments. The
+ first argument may be a keyword, in which case the value of *CLASS.QUEUE* designate the
+ class, or it may be a class designator. In other cases, the first argument
+ is interpreted as a context to dereference the respective <a href='classes.html#queue' class='reference class'>QUEUE</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='queue'>queue</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>The AMQP protocol class <a href='classes.html#queue' class='reference class'>Queue</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='queue-p'>queue-p</a></div><div class='parameters'>(datum)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='queue-queue'>queue-queue</a></div><div class='parameters'>(object)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>The queue name accessor is extended with a string method to allow to
+ coerce arguments to a string value in request/response operators.</div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_R' style='font-weight: bold;'>R</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='response'>response</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_S' style='font-weight: bold;'>S</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='session'>session</a></div><div class='parameters'>(designator &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Construct a SESSION given initialization arguments. The
+ first argument may be a keyword, in which case the value of *CLASS.SESSION* designate the
+ class, or it may be a class designator. In other cases, the first argument
+ is interpreted as a context to dereference the respective <a href='classes.html#session' class='reference class'>SESSION</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='session'>session</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>The AMQP protocol class <a href='classes.html#session' class='reference class'>Session</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='session-p'>session-p</a></div><div class='parameters'>(datum)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='stream'>stream</a></div><div class='parameters'>(designator &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Construct a STREAM given initialization arguments. The
+ first argument may be a keyword, in which case the value of *CLASS.STREAM* designate the
+ class, or it may be a class designator. In other cases, the first argument
+ is interpreted as a context to dereference the respective <a href='classes.html#stream' class='reference class'>STREAM</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='stream'>stream</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>The AMQP protocol class <a href='classes.html#stream' class='reference class'>Stream</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='stream-p'>stream-p</a></div><div class='parameters'>(datum)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_T' style='font-weight: bold;'>T</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='test'>test</a></div><div class='parameters'>(designator &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Construct a TEST given initialization arguments. The
+ first argument may be a keyword, in which case the value of *CLASS.TEST* designate the
+ class, or it may be a class designator. In other cases, the first argument
+ is interpreted as a context to dereference the respective <a href='classes.html#test' class='reference class'>TEST</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='test'>test</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>The AMQP protocol class <a href='classes.html#test' class='reference class'>Test</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='test-p'>test-p</a></div><div class='parameters'>(datum)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='trace'>trace</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='tunnel'>tunnel</a></div><div class='parameters'>(designator &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Construct a TUNNEL given initialization arguments. The
+ first argument may be a keyword, in which case the value of *CLASS.TUNNEL* designate the
+ class, or it may be a class designator. In other cases, the first argument
+ is interpreted as a context to dereference the respective <a href='classes.html#tunnel' class='reference class'>TUNNEL</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='tunnel'>tunnel</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>The AMQP protocol class <a href='classes.html#tunnel' class='reference class'>Tunnel</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='tunnel-p'>tunnel-p</a></div><div class='parameters'>(datum)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='tx'>tx</a></div><div class='parameters'>(designator &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Construct a TX given initialization arguments. The
+ first argument may be a keyword, in which case the value of *CLASS.TX* designate the
+ class, or it may be a class designator. In other cases, the first argument
+ is interpreted as a context to dereference the respective <a href='classes.html#tx' class='reference class'>TX</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='tx'>tx</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>The AMQP protocol class <a href='classes.html#tx' class='reference class'>Tx</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='tx-p'>tx-p</a></div><div class='parameters'>(datum)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /></div>
+<hr /><div class='footer' style='float: right; font-size: small;'><img src='http://www.digitool.com/img/mcl-made-1.gif'/> Copyright 2010 setf.de</div></body></html>
View
235 documentation/commands.html
@@ -0,0 +1,235 @@
+<?xml version='1.0' charset='iso-8859-1'?><!DOCTYPE svg PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'><xhtml:html xmlns='http://www.w3.org/1999/xhtml'><head ><meta name='date' content='20100313T101600Z00'/>
+<meta http-equiv='Content-Type' content='text/xhtml;charset=iso-8859-1'/>
+<link href='documentation.css' ref='stylesheet' type='text/css'/>
+<title >FILE: commands</title>
+</head>
+<body ><div class='documentation file'><div class='type' style='float: right'>file</div><div class='name'>commands.lisp</div><hr /><div style='text-align: center; background-color: #e0e0e0;'><span ><a href='#index_A'>A</a> </span><span ><a href='#index_B'>B</a> </span><span ><a href='#index_C'>C</a> </span><span ><a href='#index_D'>D</a> </span><span ><a href='#index_F'>F</a> </span><span ><a href='#index_G'>G</a> </span><span ><a href='#index_O'>O</a> </span><span ><a href='#index_P'>P</a> </span><span ><a href='#index_Q'>Q</a> </span><span ><a href='#index_R'>R</a> </span><span ><a href='#index_S'>S</a> </span><span ><a href='#index_T'>T</a> </span><span ><a href='#index_U'>U</a> </span></div><hr /><div class='documentation' style='padding-left: 2em; padding-right: 2em;white-space: pre;'>This file defines the protocol operators for AMQP `class` and `METHOD` entities for the
+ &apos;de.setf.amqp&apos; library.</div>
+<div class='documentation' style='padding-left: 2em; padding-right: 2em;white-space: pre;'>Each (object . method) combination corresponds to several operators, which act in concert
+ to implement the protocol:
+
+ - `respond-to-_method_` peforms the command on a client object in response to a broker message.
+ This includes changes to instance state, open/close side effects for `connection` and `channel` methods,
+ instantiating and binding, or releasing any related, as well as any requisite broker message responses
+ as confirmation or as further processing.
+
+ - `request-_method_` issues the request to the broker, together with any client object operations
+ required by the protocol.
+
+ - `send-_method_` encodes frames and performs transport-level operations to send the command to
+ the broker. This delegates to protocol-specific methods, which encode the respective arguments, and to
+ the network device operations for the network <a href='classes.html#stream' class='reference class'>stream</a> functions.
+
+ - no explicit receive operators are defined, as messages are self-describing and decoded accordingly.
+ Application code is writtein in terms of `command-case` or `command-loop` statements which dispatch based
+ on received commands type.
+
+ The `def-amqp-command` forms below define the protocol class and the generic method operators.
+ The `:response` and `:request` clauses include methods as appropriate to whether both the broker and
+ the client implement the operation. A `:request` clause automatically defined a `send-` operators.
+ An additional (possibly blank) `:send` clause can be included if sending must be supported in addition to
+ a complete command <a href='commands.html#request' class='reference function'>request</a>.
+
+ The respective respond-to and and <a href='commands.html#request' class='reference function'>request</a> operators are implemented in two layers.
+ The interface operator, which uses the elementary name, is implemented in terms of a second
+ operator: `channel-respond-to-`, or `channel-request-`, which requires an additional initial argument,
+ the `channel`. The delegation call interposes the respective `objects-channel` value as this initial
+ argument. The specialized methods are defined with `amqp:channel` as the initial specialization.
+
+ The interface architecture makes it possible for applications to alter the api behavior by specializing
+ just the <a href='classes.html#channel' class='reference function'>channel</a>, just the protocol class, or both.</div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_A' style='font-weight: bold;'>A</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='ack'>ack</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C--&gt;S : acknowledge one of more messages</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='ack'>ack</a></div><div class='parameters'>(class &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='alert'>alert</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;--S : send a non-fatal warning message : Async , carries content </div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_B' style='font-weight: bold;'>B</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='bind'>bind</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C--&gt;S: Bind <a href='classes.html#queue' class='reference function'>queue</a> to an <a href='classes.html#exchange' class='reference function'>exchange</a></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='bind'>bind</a></div><div class='parameters'>(class &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='bind-ok'>bind-ok</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;--S : Confirm bind successful.
+ This command appears as eventual response to a Bind, and should be processed
+ synchronously by a <a href='commands.html#request-bind' class='reference function'>request-bind</a>. If one appears independently, <a href='utilities.html#log' class='reference function'>log</a> it.
+ and continue.</div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_C' style='font-weight: bold;'>C</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='cancel'>cancel</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C--&gt;S :
+ This method cancels a consumer. This does not affect already delivered messages, but it does mean the
+server will not send any more messages for that consumer. The client may receive an arbitrary number of
+messages in between sending the <a href='commands.html#cancel' class='reference function'>cancel</a> method and receiving the cancel-ok reply.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='cancel'>cancel</a></div><div class='parameters'>(class &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='cancel-ok'>cancel-ok</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;--S : confirm a canceled consumer.
+ This command appears as eventual response to Cancel and should be processed
+ synchronously by a request-cancel. If one appears independently, log it.
+ and continue.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='close'>close</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;-&gt;S : request a connection or a channel close</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='close'>close</a></div><div class='parameters'>(class &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='close-ok'>close-ok</a></div><div class='parameters'>(class &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='close-ok'>close-ok</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;-&gt;S : confirm a channel or connection close close : Sync response to Close.
+ This command appears as the eventual response to Cancel and should be processes
+ synchronously together with that. I one appears independently, ignore it.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='commit'>commit</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C--&gt;S : Commit the current transaction.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='commit'>commit</a></div><div class='parameters'>(class &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='commit-ok'>commit-ok</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;--S : Confirm a transaction as a syncronous response to Commit
+ This command appears as eventual response to Commit and should be processed
+ synchronously together with that. I one appears independently, ignore it.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='consume'>consume</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C--&gt;S : Create a consumer for a given queue.
+
+ CLASS : amqp:<a href='classes.html#basic' class='reference class'>basic</a> : a <a href='classes.html#basic' class='reference class'>basic</a> class instance bound to a <a href='classes.html#channel' class='reference class'>channel</a>.
+
+ The passed <a href='classes.html#basic' class='reference class'>basic</a> instance mediates a <a href='commands.html#consume' class='reference class'>consume</a> <a href='commands.html#request' class='reference class'>request</a> on the <a href='classes.html#channel' class='reference class'>channel</a> and is
+ returned as a handle to mediate responses. In a synchronous application,
+ the <a href='classes.html#channel' class='reference class'>channel</a> owner can proceed directly to process <a href='commands.html#deliver' class='reference class'>deliver</a> replies. In an
+ event-driven application, the owner can register a handler for future
+ <a href='commands.html#deliver' class='reference class'>deliver</a> commands and process them either as polled or asynchronous events.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='consume'>consume</a></div><div class='parameters'>(class &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='consume-ok'>consume-ok</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;--S : Confirm a consume. Sync response to Commit
+ This command appears as eventual response to Consume and should be processed
+ synchronously together with that. If one appears independently, ignore it.</div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_D' style='font-weight: bold;'>D</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='declare'>declare</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C--&gt;S : Request the broker to declare an exchange or a queue,
+ and create it if needed.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='declare'>declare</a></div><div class='parameters'>(class &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='declare-ok'>declare-ok</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;--S : Confirm a declare. Sync response to Declare.
+ This command appears as eventual response to Declare and should be processed
+ synchronously together with that. I one appears independently, ignore it.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='delete'>delete</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C--&gt;S : </div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='delete'>delete</a></div><div class='parameters'>(class &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='delete-ok'>delete-ok</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;--S : </div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='deliver'>deliver</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;--S : notify a client of an incoming consumer message.
+ CLASS : The client class to which the <a href='classes.html#message' class='reference class'>message</a> is being delivered.
+ A read <a href='frames.html#frame' class='reference class'>frame</a> generates an immediate <a href='classes.html#basic' class='reference class'>basic</a> instance, which then delegates
+ further processing based on the connection&apos;s mode:
+ :<a href='classes.html#queue' class='reference class'>queue</a> causes the entire <a href='classes.html#message' class='reference class'>message</a> to be read and enqueued as a raw sequence
+ :<a href='classes.html#stream' class='reference class'>stream</a> causes the connection/channel to be placed in content mode to, with
+ adjustments to <a href='classes.html#stream' class='reference class'>stream</a> parameters for future reading.</div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_F' style='font-weight: bold;'>F</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='flow'>flow</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;-&gt;S : enable/disable flow from peer : Sync request </div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='flow'>flow</a></div><div class='parameters'>(class &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='flow-ok'>flow-ok</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;-&gt;S : confirm a flow method : Async response to <a href='commands.html#flow' class='reference function'>Flow</a>
+ This command appears as eventual response to <a href='commands.html#flow' class='reference function'>Flow</a> and should be processed
+ synchronously together with that. I one appears independently, ignore it.</div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_G' style='font-weight: bold;'>G</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='get'>get</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C--&gt;S : C:GET ( S:GET-OK content / S:GET-EMPTY )
+ Request the &apos;next&apos; message for the given queue.
+ OBJECT : (or amqp:channel amqp:basic amqp:queue) : designates the queue
+
+ Resolves the given object to the queue and encodes a Basic.Get with the appropriate arguments.
+ Processes the responses <a href='commands.html#get-ok' class='reference class'>get-ok</a> and <a href='commands.html#get-empty' class='reference class'>get-empty</a>. If the reply is -ok invoke `device-read-content`
+ and return the result. If -empty, return nil.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='get'>get</a></div><div class='parameters'>(class &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='get-empty'>get-empty</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;--S : indicate no message available</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='get-ok'>get-ok</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;--S : provide client with a message</div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_O' style='font-weight: bold;'>O</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='open'>open</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C--&gt;S : open a connection or channel for use : Sync request , carries content.
+ If on a connection, it specifies the virtual host name. On a channel, the id is in the header.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='open'>open</a></div><div class='parameters'>(class &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='open-ok'>open-ok</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;--S : signal that connection is ready</div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_P' style='font-weight: bold;'>P</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='publish'>publish</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C--&gt;S : publish a message :
+This method publishes a message to a specific <a href='classes.html#exchange' class='reference function'>exchange</a>. The message will be routed to queues as
+defined by the <a href='classes.html#exchange' class='reference function'>exchange</a> configuration and distributed to any active consumers when the transaction, if
+any, is committed.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='publish'>publish</a></div><div class='parameters'>(class &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='purge'>purge</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;-&gt;S : </div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='purge-ok'>purge-ok</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;-&gt;S : </div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_Q' style='font-weight: bold;'>Q</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='qos'>qos</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C--&gt;S : </div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='qos'>qos</a></div><div class='parameters'>(class &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='qos-ok'>qos-ok</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;-S : </div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_R' style='font-weight: bold;'>R</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='recover'>recover</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C--&gt;S : </div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='recover'>recover</a></div><div class='parameters'>(class &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='recover-async'>recover-async</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C--&gt;S : </div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='recover-async'>recover-async</a></div><div class='parameters'>(class &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='recover-ok'>recover-ok</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;-S : </div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='redirect'>redirect</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='reject'>reject</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C--&gt;S : reject an incoming message</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='request'>request</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C--&gt;S : </div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='request'>request</a></div><div class='parameters'>(class &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='request-ack'>request-ack</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='request-bind'>request-bind</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='request-cancel'>request-cancel</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='request-close'>request-close</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='request-close-ok'>request-close-ok</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='request-commit'>request-commit</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='request-consume'>request-consume</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='request-declare'>request-declare</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='request-delete'>request-delete</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='request-flow'>request-flow</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='request-get'>request-get</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='request-ok'>request-ok</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;-S : </div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='request-open'>request-open</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='request-publish'>request-publish</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='request-qos'>request-qos</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='request-recover'>request-recover</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='request-recover-async'>request-recover-async</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='request-request'>request-request</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='request-rollback'>request-rollback</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='request-secure-ok'>request-secure-ok</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='request-select'>request-select</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='request-start-ok'>request-start-ok</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='request-tune-ok'>request-tune-ok</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='request-unbind'>request-unbind</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='request-unbind-ok'>request-unbind-ok</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='respond-to-alert'>respond-to-alert</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='respond-to-bind-ok'>respond-to-bind-ok</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='respond-to-cancel-ok'>respond-to-cancel-ok</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='respond-to-close'>respond-to-close</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='respond-to-close-ok'>respond-to-close-ok</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='respond-to-commit-ok'>respond-to-commit-ok</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='respond-to-consume-ok'>respond-to-consume-ok</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='respond-to-declare-ok'>respond-to-declare-ok</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='respond-to-delete-ok'>respond-to-delete-ok</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='respond-to-deliver'>respond-to-deliver</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='respond-to-flow'>respond-to-flow</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='respond-to-flow-ok'>respond-to-flow-ok</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='respond-to-get-empty'>respond-to-get-empty</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='respond-to-get-ok'>respond-to-get-ok</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='respond-to-open-ok'>respond-to-open-ok</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='respond-to-qos-ok'>respond-to-qos-ok</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='respond-to-recover-ok'>respond-to-recover-ok</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='respond-to-request-ok'>respond-to-request-ok</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='respond-to-rollback-ok'>respond-to-rollback-ok</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='respond-to-secure'>respond-to-secure</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='respond-to-select-ok'>respond-to-select-ok</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='respond-to-start'>respond-to-start</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='respond-to-tune'>respond-to-tune</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='respond-to-unbind'>respond-to-unbind</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='respond-to-unbind-ok'>respond-to-unbind-ok</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='return'>return</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;--S : return a failed <a href='classes.html#message' class='reference class'>message</a></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='rollback'>rollback</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C--&gt;S : </div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='rollback'>rollback</a></div><div class='parameters'>(class &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='rollback-ok'>rollback-ok</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;--S : </div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_S' style='font-weight: bold;'>S</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='secure'>secure</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;--S : security mechanism challenge </div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='secure-ok'>secure-ok</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C-&gt;S : security mechanism response</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='secure-ok'>secure-ok</a></div><div class='parameters'>(class &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='select'>select</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C--&gt;S : Select transaction mode.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='select'>select</a></div><div class='parameters'>(class &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='select-ok'>select-ok</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;--S : Confirm a transaction as a syncronous response to select
+ This command appears as eventual response to select and should be processed
+ synchronously together with that. I one appears independently, ignore it.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='send-ack'>send-ack</a></div><div class='parameters'>(class &amp;key delivery-tag multiple)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>A convenience send operator for <a href='commands.html#ack' class='reference function'>ACK</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='send-bind'>send-bind</a></div><div class='parameters'>(class &amp;key ticket queue exchange routing-key no-wait arguments)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>A convenience send operator for BIND.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='send-cancel'>send-cancel</a></div><div class='parameters'>(class &amp;rest args &amp;key consumer-tag no-wait)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>A convenience send operator for <a href='commands.html#cancel' class='reference function'>CANCEL</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='send-close'>send-close</a></div><div class='parameters'>(class &amp;key reply-code reply-text class-id method-id)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>A convenience send operator for <a href='commands.html#close' class='reference function'>CLOSE</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='send-close-ok'>send-close-ok</a></div><div class='parameters'>(class &amp;key)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>A convenience send operator for <a href='commands.html#close-ok' class='reference function'>CLOSE-OK</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='send-commit'>send-commit</a></div><div class='parameters'>(class &amp;key)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>A convenience send operator for <a href='commands.html#commit' class='reference function'>COMMIT</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='send-consume'>send-consume</a></div><div class='parameters'>(class &amp;key queue consumer-tag no-local no-ack exclusive no-wait arguments)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>A convenience send operator for <a href='commands.html#consume' class='reference function'>CONSUME</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='send-declare'>send-declare</a></div><div class='parameters'>(class &amp;key ticket queue exchange passive durable exclusive auto-delete no-wait arguments type)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>A convenience send operator for <a href='commands.html#declare' class='reference function'>DECLARE</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='send-delete'>send-delete</a></div><div class='parameters'>(class &amp;key queue if-unused if-empty)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>A convenience send operator for <a href='commands.html#delete' class='reference function'>DELETE</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='send-flow'>send-flow</a></div><div class='parameters'>(class &amp;key active)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>A convenience send operator for <a href='commands.html#flow' class='reference function'>FLOW</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='send-flow-ok'>send-flow-ok</a></div><div class='parameters'>(class &amp;key active)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>A convenience send operator for FLOW-OK.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='send-get'>send-get</a></div><div class='parameters'>(object &amp;key queue no-ack body)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>A convenience send operator for <a href='commands.html#get' class='reference function'>GET</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='send-open'>send-open</a></div><div class='parameters'>(class &amp;key virtual-host)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>A convenience send operator for <a href='commands.html#open' class='reference function'>OPEN</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='send-publish'>send-publish</a></div><div class='parameters'>(class &amp;key body exchange routing-key mandatory immediate)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>A convenience send operator for <a href='commands.html#publish' class='reference function'>PUBLISH</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='send-qos'>send-qos</a></div><div class='parameters'>(class &amp;key prefetch-size prefetch-count global)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>A convenience send operator for <a href='commands.html#qos' class='reference function'>QOS</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='send-recover'>send-recover</a></div><div class='parameters'>(class &amp;key requeue)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>A convenience send operator for <a href='commands.html#recover' class='reference function'>RECOVER</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='send-recover-async'>send-recover-async</a></div><div class='parameters'>(class &amp;key requeue)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>A convenience send operator for <a href='commands.html#recover-async' class='reference function'>RECOVER-ASYNC</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='send-request'>send-request</a></div><div class='parameters'>(class &amp;key realm exclusive passive active write read)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>A convenience send operator for <a href='commands.html#request' class='reference function'>REQUEST</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='send-rollback'>send-rollback</a></div><div class='parameters'>(class &amp;key)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>A convenience send operator for <a href='commands.html#rollback' class='reference function'>ROLLBACK</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='send-secure-ok'>send-secure-ok</a></div><div class='parameters'>(class &amp;key response)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>A convenience send operator for <a href='commands.html#secure-ok' class='reference function'>SECURE-OK</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='send-select'>send-select</a></div><div class='parameters'>(class &amp;key)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>A convenience send operator for <a href='commands.html#select' class='reference function'>SELECT</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='send-start-ok'>send-start-ok</a></div><div class='parameters'>(class &amp;key client-properties mechanism response locale)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>A convenience send operator for <a href='commands.html#start-ok' class='reference function'>START-OK</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='send-tune-ok'>send-tune-ok</a></div><div class='parameters'>(class &amp;key channel-max frame-max heartbeat)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>A convenience send operator for <a href='commands.html#tune-ok' class='reference function'>TUNE-OK</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='send-unbind'>send-unbind</a></div><div class='parameters'>(class &amp;key queue exchange routing-key arguments)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>A convenience send operator for <a href='commands.html#unbind' class='reference function'>UNBIND</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='send-unbind-ok'>send-unbind-ok</a></div><div class='parameters'>(class &amp;key)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>A convenience send operator for <a href='commands.html#unbind-ok' class='reference function'>UNBIND-OK</a>.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='start'>start</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;--S : start connection negotiation</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='start-ok'>start-ok</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C-&gt;S : select security mechanism and locale</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='start-ok'>start-ok</a></div><div class='parameters'>(class &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_T' style='font-weight: bold;'>T</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='tune'>tune</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;--S : propose connection tuning parameters</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='tune-ok'>tune-ok</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C-&gt;S : negotiate connection tuning parameters</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='tune-ok'>tune-ok</a></div><div class='parameters'>(class &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_U' style='font-weight: bold;'>U</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='unbind'>unbind</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;-&gt;S : </div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='unbind'>unbind</a></div><div class='parameters'>(class &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='unbind-ok'>unbind-ok</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>C&lt;-&gt;S : </div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>generic-function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='unbind-ok'>unbind-ok</a></div><div class='parameters'>(class &amp;rest args)</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /></div>
+<hr /><div class='footer' style='float: right; font-size: small;'><img src='http://www.digitool.com/img/mcl-made-1.gif'/> Copyright 2010 setf.de</div></body></html>
View
72 documentation/conditions.html
@@ -0,0 +1,72 @@
+<?xml version='1.0' charset='iso-8859-1'?><!DOCTYPE svg PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'><xhtml:html xmlns='http://www.w3.org/1999/xhtml'><head ><meta name='date' content='20100313T101601Z00'/>
+<meta http-equiv='Content-Type' content='text/xhtml;charset=iso-8859-1'/>
+<link href='documentation.css' ref='stylesheet' type='text/css'/>
+<title >FILE: conditions</title>
+</head>
+<body ><div class='documentation file'><div class='type' style='float: right'>file</div><div class='name'>conditions.lisp</div><hr /><div style='text-align: center; background-color: #e0e0e0;'><span ><a href='#index_A'>A</a> </span><span ><a href='#index_C'>C</a> </span><span ><a href='#index_E'>E</a> </span><span ><a href='#index_F'>F</a> </span><span ><a href='#index_I'>I</a> </span><span ><a href='#index_N'>N</a> </span><span ><a href='#index_P'>P</a> </span><span ><a href='#index_R'>R</a> </span><span ><a href='#index_S'>S</a> </span><span ><a href='#index_U'>U</a> </span></div><hr /><div class='documentation' style='padding-left: 2em; padding-right: 2em;white-space: pre;'>This file defines AMQP conditions respective versions 0-8, 0-9 as part of the &apos;de.setf.amqp&apos;
+ library.</div>
+<div class='documentation' style='padding-left: 2em; padding-right: 2em;white-space: pre;'>The names were chosen to be analogous to the protocol terms as well as the names
+ of RabbitMQ client[1]. The QPID client exceptions are subsumed by JSM classes[2].
+
+
+ [1]: http://www.rabbitmq.com/releases/rabbitmq-java-client/v1.7.1/rabbitmq-java-client-javadoc-1.7.1/
+ [2]: <a href='classes.html#file' class='reference class'>file</a>:///Development/Source/production/Library/org/apache/qpid/client/qpid-0.5/api/index.html</div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_A' style='font-weight: bold;'>A</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='access-refused-error'>access-refused-error</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='access-refused-error'>access-refused-error</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>[CHANNEL] The client attempted to work with a server entity to which it has no access
+ due to security settings.</div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_C' style='font-weight: bold;'>C</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='channel-error'>channel-error</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='channel-error'>channel-error</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>[CONNECTION] The client attempted to work with a channel that had not been correctly
+ opened. This most likely indicates a fault in the client layer.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='command-invalid-error'>command-invalid-error</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='command-invalid-error'>command-invalid-error</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>[CONNECTION] The client sent an invalid sequence of frames, attempting to perform an
+ operation that was considered invalid by the server. This usually implies a
+ programming error in the client.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='condition'>condition</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='connection-forced-error'>connection-forced-error</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='connection-forced-error'>connection-forced-error</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>[CONNECTION] An operator intervened to <a href='commands.html#close' class='reference function'>close</a> the <a href='classes.html#connection' class='reference function'>connection</a> for some reason. The client
+ may retry at some later date.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='content-too-large-error'>content-too-large-error</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='content-too-large-error'>content-too-large-error</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>[CHANNEL] The client attempted to transfer content larger than the server could
+ accept at the present time. The client may retry at a later time.</div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_E' style='font-weight: bold;'>E</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='error'>error</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='error'>error</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Construct the message arguments, log the <a href='conditions.html#error' class='reference class'>error</a>, and signal it.</div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_F' style='font-weight: bold;'>F</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='frame-error'>frame-error</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='frame-error'>frame-error</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>[CONNECTION] The sender sent a malformed frame that the recipient could not decode.
+ This strongly implies a programming error in the sending peer.</div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_I' style='font-weight: bold;'>I</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='internal-error'>internal-error</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='internal-error'>internal-error</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>[CONNECTION] The server could not complete the method because of an internal <a href='conditions.html#error' class='reference function'>error</a>. The
+ server may require intervention by an operator in order to resume normal
+ operations.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='invalid-path-error'>invalid-path-error</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='invalid-path-error'>invalid-path-error</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>[CONNECTION] The client tried to work with an unknown virtual host.</div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_N' style='font-weight: bold;'>N</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='no-consumers-error'>no-consumers-error</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='no-consumers-error'>no-consumers-error</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>[CHANNEL] When the exchange cannot deliver to a consumer when the immediate flag is
+ set. As a result of pending data on the queue or the absence of any consumers
+ of the queue.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='not-allowed-error'>not-allowed-error</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='not-allowed-error'>not-allowed-error</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>[CONNECTION] The client tried to work with some entity in a manner that is prohibited
+ by the server, due to security settings or by some other criteria.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='not-found-error'>not-found-error</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='not-found-error'>not-found-error</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>[CHANNEL] The client attempted to work with a server entity that does not exist. </div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='not-implemented-error'>not-implemented-error</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='not-implemented-error'>not-implemented-error</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>[CONNECTION] The client tried to use functionality that is not implemented in the
+ server.</div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_P' style='font-weight: bold;'>P</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='precondition-failed-error'>precondition-failed-error</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='precondition-failed-error'>precondition-failed-error</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>[CHANNEL] The client requested a method that was not allowed because some
+ precondition failed.</div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_R' style='font-weight: bold;'>R</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='resource-error'>resource-error</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='resource-error'>resource-error</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>[CONNECTION] The server could not complete the method because it lacked sufficient
+ resources. This may be due to the client creating too many of some type of
+ entity.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='resource-locked-error'>resource-locked-error</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='resource-locked-error'>resource-locked-error</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>[CHANNEL] The client attempted to work with a server entity to which it has no access
+ because another client is working with it.</div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_S' style='font-weight: bold;'>S</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='syntax-error'>syntax-error</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='syntax-error'>syntax-error</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>[CONNECTION] The sender sent a frame that contained illegal values for one or more
+ fields. This strongly implies a programming error in the sending peer.</div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_U' style='font-weight: bold;'>U</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='unexpected-frame-error'>unexpected-frame-error</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>class</div><div class='name' style='padding-right: .5in; width: 32em;'><a name='unexpected-frame-error'>unexpected-frame-error</a></div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>[CONNECTION] The peer sent a frame that was not expected, usually in the context of a
+ content header and body. This strongly indicates a fault in the peer&apos;s
+ content processing.</div></div>
+<hr /></div>
+<hr /><div class='footer' style='float: right; font-size: small;'><img src='http://www.digitool.com/img/mcl-made-1.gif'/> Copyright 2010 setf.de</div></body></html>
View
145 documentation/data-wire-coding.html
@@ -0,0 +1,145 @@
+<?xml version='1.0' charset='iso-8859-1'?><!DOCTYPE svg PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'><xhtml:html xmlns='http://www.w3.org/1999/xhtml'><head ><meta name='date' content='20100313T101602Z00'/>
+<meta http-equiv='Content-Type' content='text/xhtml;charset=iso-8859-1'/>
+<link href='documentation.css' ref='stylesheet' type='text/css'/>
+<title >FILE: data-wire-coding</title>
+</head>
+<body ><div class='documentation file'><div class='type' style='float: right'>file</div><div class='name'>data-wire-coding.lisp</div><hr /><div style='text-align: center; background-color: #e0e0e0;'><span ><a href='#index_A'>A</a> </span><span ><a href='#index_B'>B</a> </span><span ><a href='#index_D'>D</a> </span><span ><a href='#index_F'>F</a> </span><span ><a href='#index_I'>I</a> </span><span ><a href='#index_L'>L</a> </span><span ><a href='#index_S'>S</a> </span><span ><a href='#index_T'>T</a> </span><span ><a href='#index_U'>U</a> </span><span ><a href='#index_W'>W</a> </span></div><hr /><div class='documentation' style='padding-left: 2em; padding-right: 2em;white-space: pre;'>This file defines buffer accessors for AMQP data as part of the &apos;de.setf.amqp&apos; library.</div>
+<div class='documentation' style='padding-left: 2em; padding-right: 2em;white-space: pre;'>This file defines the general data buffer accessors for AMQP.[1]
+ These encode/decode data between Lisp values and byte sequence buffers. All types required by the AMQP
+ versions 0.8 through 0.10 are supported. Where the AMQP type corresponds directly to a designatable Lisp
+ type, the general accessors reflect that name. Each type corresponds to an operator reader/writer pair of
+ the form
+
+ BUFFER-_type_ (buffer position)
+ (SETF BUFFER-_type_) (value buffer position)
+ Both expect a `(SIMPLE-ARRAY (UNSIGNED-BYTE 8))` typed buffer and an integer position within the buffer.
+ Many of the AMQP typed operators map directly to atomic buffer operators with self-evident names.
+ Sequence types require sized iterative coding. In some such cases, the AMQP type designation&apos;s size
+ does not agree with the lisp type (eg str8 from 0.10 indicates the the length itself is an
+ `(unsigned-byte 8)` value. In these cases an intermediate type serves to mediate terms.
+
+ The self-describing encodings present a special case for each version, as the encoding structure and the
+ type codes vary. As a consequence, those are not defined here. Instead a macro is defined to generate them
+ for each version given the respective type codes.
+
+ Each protocol specification includes a type table. The respective `data-encoding.lisp` file includes a
+ transliterated version of this table to specify implementations for version-specific operators in terms of
+ the general, and to inform the generation of the codecs for self-defining encodings.
+
+
+ ----
+ [1]: &apos;Advanced Message Queueing Protocol&apos;, amqp0-9-1.pdf, Section 4</div>
+<div class='documentation' style='padding-left: 2em; padding-right: 2em;white-space: pre;'>(with-argument-decoders with-property-decoders)</div>
+<div class='documentation' style='padding-left: 2em; padding-right: 2em;white-space: pre;'>The wire-level representation presents three patterns:
+
+ - a fixed record structure for fields universally present - eg, <a href='frames.html#frame' class='reference class'>frame</a> type, channel, and size
+ in this case the record fields are en/decoded with operations which reflect a fixed position/size/type
+ map between lisp objects and the buffered data.
+
+ - a fixed sequence of variable length fields for method arguments
+ in this case macros are provided to en/decode a fixed sequence of values between lisp and buffered
+ representations. varying sized data (eg sized strings) and self describing composite types are
+ supported. As fields which are always present in the same order in the buffer the process is statically
+ expressed in the source. The only variation is that of the length of sized elements. the macros establish
+ an environment with a buffer and a position indicator which is maintained through interaction with the
+ primitive codecs for each field.
+
+ - a fixed sequence of optional, variable length fields for class content <a href='classes.html#header' class='reference class'>header</a> properties
+ the encoded representation of a porperty set includes prefix flags to specify which fields are present.
+ these are consulted/computed by macros to decode to a property list and encode from variables.
+ the former mode is required in roder to construct keyword arguments based on presence. the latter
+ relies on a null/not-null distinction, which will need to be revisited should bit property fields appear.
+ The Property buffer codecs operate on a sequence of fields under control of an, initial bit flag
+ sequence. Where the flag indicates presence value is decoded. otherwise, the field is skipped. The encoding
+ performs the opposite projection, and skips null values. The property order and types are fixed, so use of
+ the respective buffer accessors can be expressed in static code in sequence to step through the fields.
+
+
+ The macro operators are paired for decode/encode and argument/property functions:
+ with-argument-decoders ((buffer &amp;key (start 0)) &amp;body body &amp;environment env)
+ with-argument-encoders ((buffer &amp;key (start 0)) &amp;body body &amp;environment env)
+ with-property-decoders ((buffer &amp;key (start 0)) &amp;body body &amp;environment env)
+ with-property-encoders ((buffer &amp;key (start 0)) &amp;body body &amp;environment env)</div>
+<div class='documentation' style='padding-left: 2em; padding-right: 2em;white-space: pre;'>The individual AMQP field types all resolve to common lisp types. Some directly, but most in
+ terms of custom type definitions. This applies, for example, to types where the AMQP size specifies the bit
+ count of the respective size field rather than the length of the data. For example, string-8. These type
+ definitions for these base types follow below. All names are in the :amqp package.
+
+ Given these, the operator def-encodings (see below) defines version specific type predicates, elementary
+ buffer accessors and composite codecs.</div>
+<div class='documentation' style='padding-left: 2em; padding-right: 2em;white-space: pre;'>(compute-type-initform field-type-initform)</div>
+<div class='documentation' style='padding-left: 2em; padding-right: 2em;white-space: pre;'>Where class slots definitions and codec keyword arguments require default values, these
+ are imputed from the respective field type. This occurs as the specifications are translated into
+ class and method definitions, at which point any version specific types are generalized and yield
+ initial values, as below.</div>
+<div class='documentation' style='padding-left: 2em; padding-right: 2em;white-space: pre;'>(def-encodings def-byte-accessors def-string-accessors)</div>
+<div class='documentation' style='padding-left: 2em; padding-right: 2em;white-space: pre;'>The codecs implement transformations between lisp objects and byte sequences. The buffer type,
+frame-buffer, is defined as (vector (unsigned-byte 8) (*)). It serves as a declaration and an argument
+constraint. Each version&apos;s codecs are are expressed in terms of that version&apos;s types and its operators.
+Each version-specific field type resolves to a lisp type, and the version-specific buffer accessors
+are implemented, in turn, in terms of the lisp-type <a href='data-wire-coding.html#frame-buffer' class='reference function'>frame-buffer</a> accessors. This permits
+type names in one fersion to designate a different base implementation type than some other version.
+
+The lisp-type accessors are defined in the def-byte-accessors, def-string-accessors, etc.
+
+Each version includes a `data-wire-coding` <a href='classes.html#file' class='reference function'>file</a>, in which a `def-encodings` form declares the type relation.
+That declaration compiles into the several things for each entry:
+
+ - a type definition
+ - a method to compute an initform
+ - protocol-specific buffer-accessors; for which, if a line code is included, they are intended to be used
+ in self-describing data (tables)
+
+In addition compound buffer accessors are defined for the types
+
+ - list
+ - array
+ - table</div>
+<div class='documentation' style='padding-left: 2em; padding-right: 2em;white-space: pre;'>(encode-ieee-754-32 encode-ieee-754-64)</div>
+<div class='documentation' style='padding-left: 2em; padding-right: 2em;white-space: pre;'>codec operators
+
+ The protocol data domain names vary from version to version, but they
+ resolve to a limited number of lisp types, mostly
+
+ string
+ (unsigned-byte 8, 16, 32, 64)
+
+ for each an encoding and a decoding operator is defined to pack/unpack the
+ value from a byte buffer. The operators are not generic as the entity codecs
+ all operate on data which fits in a single frame buffer - and (at least
+ through 0.10) operations were defined to be communicated in single frame.
+
+ Each buffered type requires two operators, one to encode and one to decode.
+ they are paired as a reader operator and the respective setf. In the latter
+ case the operator accepts an addition optional argument to specify the
+ type code. Each protocol version reuqires its own frame codecs as the type
+ codes vary.</div>
+<div class='documentation' style='padding-left: 2em; padding-right: 2em;white-space: pre;'>Timestamps are &apos;64-bit POSIX time_t format with an accuracy of one second[1].
+ The UNIX epoch is 1970-01-01T00:00:00Z. This is specified by the amqp:*timestamp-epoch*,
+ which the buffer accessors use to shift to/from universal time.
+ ---
+ [1] amqp0-9-1.pdf, 4.2.5.4
+ [2] http://en.wikipedia.org/wiki/Unix_time</div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_A' style='font-weight: bold;'>A</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='array-p'>array-p</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_B' style='font-weight: bold;'>B</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='binary-1024-p'>binary-1024-p</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Return true iff the argument is of type (vector (unsigned-byte 8)) with length less than 128.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='binary-128-p'>binary-128-p</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Return true iff the argument is of type (vector (unsigned-byte 8)) with length less than 16.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='binary-16-p'>binary-16-p</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Return true iff the argument is of type (vector (unsigned-byte 8)) with length less than 2.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='binary-256-p'>binary-256-p</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Return true iff the argument is of type (vector (unsigned-byte 8)) with length less than 32.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='binary-32-p'>binary-32-p</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Return true iff the argument is of type (vector (unsigned-byte 8)) with length less than 4.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='binary-40-p'>binary-40-p</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Return true iff the argument is of type (vector (unsigned-byte 8)) with length less than 5.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='binary-48-p'>binary-48-p</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Return true iff the argument is of type (vector (unsigned-byte 8)) with length less than 6.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='binary-512-p'>binary-512-p</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Return true iff the argument is of type (vector (unsigned-byte 8)) with length less than 64.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='binary-64-p'>binary-64-p</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Return true iff the argument is of type (vector (unsigned-byte 8)) with length less than 8.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='binary-8-p'>binary-8-p</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Return true iff the argument is of type (vector (unsigned-byte 8)) with length less than 1.</div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_D' style='font-weight: bold;'>D</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='decimal-p'>decimal-p</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_F' style='font-weight: bold;'>F</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='frame-buffer'>frame-buffer</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_I' style='font-weight: bold;'>I</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='iso-8859-character-p'>iso-8859-character-p</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_L' style='font-weight: bold;'>L</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='list-p'>list-p</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_S' style='font-weight: bold;'>S</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='string-16-p'>string-16-p</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Return true iff the argument is of type STRING with length less than 16.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='string-32-p'>string-32-p</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Return true iff the argument is of type STRING with length less than 32.</div></div>
+<hr /><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='string-8-p'>string-8-p</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'>Return true iff the argument is of type STRING with length less than 8.</div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_T' style='font-weight: bold;'>T</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='table-p'>table-p</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_U' style='font-weight: bold;'>U</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='utf32-character-p'>utf32-character-p</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /><div style='background-color: #f0f0e0; border-top: inset 1px; border-bottom: inset 1px; margin-bottom: 1ex;'><a name='index_W' style='font-weight: bold;'>W</a></div><div style='class: documentation function' style='padding-top: 1ex;'><div class='type' style='float: right'>function</div><div class='name' style='float: left; padding-right: .5in; width: 8em;'><a name='wire-level-type'>wire-level-type</a></div><div class='parameters'>()</div><div class='documentation' style='padding-left: 2em; padding-right: 2em;'></div></div>
+<hr /></div>
+<hr /><div class='footer' style='float: right; font-size: small;'><img src='http://www.digitool.com/img/mcl-made-1.gif'/> Copyright 2010 setf.de</div></body></html>
View
129 documentation/device-level.html
@@ -0,0 +1,129 @@
+<?xml version='1.0' charset='iso-8859-1'?><!DOCTYPE svg PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'><xhtml:html xmlns='http://www.w3.org/1999/xhtml'><head ><meta name='date' content='20100313T101600Z00'/>
+<meta http-equiv='Content-Type' content='text/xhtml;charset=iso-8859-1'/>
+<link href='documentation.css' ref='stylesheet' type='text/css'/>
+<title >FILE: device-level</title>
+</head>
+<body ><div class='documentation file'><div class='type' style='float: right'>file</div><div class='name'>device-level.lisp</div><hr /><div style='text-align: center; background-color: #e0e0e0;'></div><hr /><div class='documentation' style='padding-left: 2em; padding-right: 2em;white-space: pre;'>This file implements device-level support for streams based on AMQP connections as part of the
+ &apos;de.setf.amqp&apos; library.</div>
+<div class='documentation' style='padding-left: 2em; padding-right: 2em;white-space: pre;'>Device-level operations are managed by channel instances, which delegete in turn to
+connection-wrapped tcp sockets. The AMQP standards permit this combination to behave in either of (at
+least) two ways. On one hand, one can use all allowed protocoal variability and treat the socket
+<a href='classes.html#connection' class='reference class'>connection</a> as a multiplexed multi-channel <a href='classes.html#stream' class='reference class'>stream</a>. In this mode each thread would instantiate its own
+<a href='classes.html#channel' class='reference class'>channel</a> on the shared <a href='classes.html#connection' class='reference class'>connection</a>. On the other hand, is also possible to constrain the connection&apos;s use
+to dedicate it to a single <a href='classes.html#channel' class='reference class'>channel</a> - and thereby to a single thread.
+
+ The multiplexed mechanism sets a much lower demand for system resources, but increases the processing
+for a single <a href='classes.html#channel' class='reference class'>channel</a> and constrains the i/o operations to block mode. A dedicated mechanims requires
+more sockets, but can dedicate the buffering to a single thread, which permits more efficient i/o
+operations.
+
+ When the socket is multiplexed, then it is possible that content frames for one <a href='classes.html#channel' class='reference class'>channel</a> will be
+interleaved with frames for another <a href='classes.html#channel' class='reference class'>channel</a>, which means it is not possible to guarantee that a given
+socket read operation will contain an expected content <a href='frames.html#frame' class='reference class'>frame</a>. The multiplexing requires per-channel
+queuing and processing upon delivery, whereby the actual buffer is not to be predicted. When the socket
+is dedicated, read operatation can target a given buffer, since the intra-channel ordering constraints
+require that content be delivered in-order and uninterrupted. The protocol meta-data can be read and
+processed in-line ro parameterize the read and recognize exceptions, while data i/o targets given
+buffers. The 1.0pr documentintroduces additional <a href='classes.html#session' class='reference class'>session</a> and context for <a href='frames.html#frame' class='reference class'>frame</a> processing, but those are
+not considered here. (see amqp0-8.pdf,p.56 amqp0-9.pdf,p.35)
+
+ In the implementation below, the two amqp classes - <a href='classes.html#connection' class='reference class'>connection</a> and <a href='classes.html#channel' class='reference class'>channel</a>, are each specialized from
+simple-stream and implement the standard interface. The required device operators are implemented for
+both amqp:<a href='classes.html#channel' class='reference function'>channel</a> and amqp:<a href='classes.html#connection' class='reference function'>connection</a>, despite that <a href='classes.html#stream' class='reference function'>stream</a> operations are limited to channels while
+connections are to be used only to consolidate frame-based operations with the network <a href='classes.html#stream' class='reference function'>stream</a>. The