http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/examples/engine/py/recurring_timer.py
----------------------------------------------------------------------
diff --git a/examples/engine/py/recurring_timer.py 
b/examples/engine/py/recurring_timer.py
new file mode 100755
index 0000000..c641ec6
--- /dev/null
+++ b/examples/engine/py/recurring_timer.py
@@ -0,0 +1,47 @@
+#!/usr/bin/env python
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+import time
+from proton.reactors import EventLoop, Handler
+
+class Recurring(Handler):
+    def __init__(self, period):
+        self.eventloop = EventLoop(self)
+        self.period = period
+        self.eventloop.schedule(time.time() + self.period, subject=self)
+
+    def on_timer(self, event):
+        print "Tick..."
+        self.eventloop.schedule(time.time() + self.period, subject=self)
+
+    def run(self):
+        self.eventloop.run()
+
+    def stop(self):
+        self.eventloop.stop()
+
+try:
+    app = Recurring(1.0)
+    app.run()
+except KeyboardInterrupt:
+    app.stop()
+    print
+
+

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/examples/engine/py/recurring_timer_tornado.py
----------------------------------------------------------------------
diff --git a/examples/engine/py/recurring_timer_tornado.py 
b/examples/engine/py/recurring_timer_tornado.py
new file mode 100755
index 0000000..f4ca260
--- /dev/null
+++ b/examples/engine/py/recurring_timer_tornado.py
@@ -0,0 +1,48 @@
+#!/usr/bin/env python
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+import time
+from proton import Handler
+from proton_tornado import TornadoLoop
+
+class Recurring(Handler):
+    def __init__(self, period):
+        self.eventloop = TornadoLoop(self)
+        self.period = period
+        self.eventloop.schedule(time.time() + self.period, subject=self)
+
+    def on_timer(self, event):
+        print "Tick..."
+        self.eventloop.schedule(time.time() + self.period, subject=self)
+
+    def run(self):
+        self.eventloop.run()
+
+    def stop(self):
+        self.eventloop.stop()
+
+try:
+    app = Recurring(1.0)
+    app.run()
+except KeyboardInterrupt:
+    app.stop()
+    print
+
+

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/examples/engine/py/selected_recv.py
----------------------------------------------------------------------
diff --git a/examples/engine/py/selected_recv.py 
b/examples/engine/py/selected_recv.py
new file mode 100755
index 0000000..8425f3d
--- /dev/null
+++ b/examples/engine/py/selected_recv.py
@@ -0,0 +1,40 @@
+#!/usr/bin/env python
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+from proton.reactors import EventLoop, Selector
+from proton.handlers import MessagingHandler
+
+class Recv(MessagingHandler):
+    def __init__(self):
+        super(Recv, self).__init__()
+
+    def on_start(self, event):
+        conn = event.reactor.connect("localhost:5672")
+        conn.create_receiver("examples", options=Selector(u"colour = 'green'"))
+
+    def on_message(self, event):
+        print event.message.body
+
+try:
+    EventLoop(Recv()).run()
+except KeyboardInterrupt: pass
+
+
+

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/examples/engine/py/server.py
----------------------------------------------------------------------
diff --git a/examples/engine/py/server.py b/examples/engine/py/server.py
new file mode 100755
index 0000000..6ab5671
--- /dev/null
+++ b/examples/engine/py/server.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env python
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+from proton import Message
+from proton.handlers import MessagingHandler
+from proton.reactors import EventLoop
+
+class Server(MessagingHandler):
+    def __init__(self, host, address):
+        super(Server, self).__init__()
+        self.host = host
+        self.address = address
+
+    def on_start(self, event):
+        self.conn = event.reactor.connect(self.host)
+        self.receiver = self.conn.create_receiver(self.address)
+        self.senders = {}
+        self.relay = None
+
+    def on_connection_opened(self, event):
+        if event.connection.remote_offered_capabilities and 'ANONYMOUS-RELAY' 
in event.connection.remote_offered_capabilities:
+            self.relay = self.conn.create_sender(None)
+
+    def on_message(self, event):
+        sender = self.relay
+        if not sender:
+            sender = self.senders.get(event.message.reply_to)
+        if not sender:
+            sender = self.conn.create_sender(event.message.reply_to)
+            self.senders[event.message.reply_to] = sender
+        sender.send_msg(Message(address=event.message.reply_to, 
body=event.message.body.upper()))
+
+try:
+    EventLoop(Server("localhost:5672", "examples")).run()
+except KeyboardInterrupt: pass
+
+
+

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/examples/engine/py/server_tx.py
----------------------------------------------------------------------
diff --git a/examples/engine/py/server_tx.py b/examples/engine/py/server_tx.py
new file mode 100755
index 0000000..cda2d0b
--- /dev/null
+++ b/examples/engine/py/server_tx.py
@@ -0,0 +1,77 @@
+#!/usr/bin/env python
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+from proton import Message
+from proton.reactors import EventLoop
+from proton.handlers import MessagingHandler, TransactionHandler
+
+class TxRequest(TransactionHandler):
+    def __init__(self, response, sender, request_delivery, context):
+        super(TxRequest, self).__init__()
+        self.response = response
+        self.sender = sender
+        self.request_delivery = request_delivery
+        self.context = context
+
+    def on_transaction_declared(self, event):
+        self.sender.send_msg(self.response, transaction=event.transaction)
+        self.accept(self.request_delivery, transaction=event.transaction)
+        event.transaction.commit()
+
+    def on_transaction_committed(self, event):
+        print "Request processed successfully"
+
+    def on_transaction_aborted(self, event):
+        print "Request processing aborted"
+
+
+class TxServer(MessagingHandler):
+    def __init__(self, host, address):
+        super(TxServer, self).__init__(auto_accept=False)
+        self.host = host
+        self.address = address
+
+    def on_start(self, event):
+        self.context = event.reactor.connect(self.host, reconnect=False)
+        self.receiver = self.context.create_receiver(self.address)
+        self.senders = {}
+        self.relay = None
+
+    def on_message(self, event):
+        sender = self.relay
+        if not sender:
+            sender = self.senders.get(event.message.reply_to)
+        if not sender:
+            sender = self.context.create_sender(event.message.reply_to)
+            self.senders[event.message.reply_to] = sender
+
+        response = Message(address=event.message.reply_to, 
body=event.message.body.upper())
+        self.context.declare_transaction(handler=TxRequest(response, sender, 
event.delivery, self.context))
+
+    def on_connection_open(self, event):
+        if event.connection.remote_offered_capabilities and 'ANONYMOUS-RELAY' 
in event.connection.remote_offered_capabilities:
+            self.relay = self.context.create_sender(None)
+
+try:
+    EventLoop(TxServer("localhost:5672", "examples")).run()
+except KeyboardInterrupt: pass
+
+
+

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/examples/engine/py/simple_recv.py
----------------------------------------------------------------------
diff --git a/examples/engine/py/simple_recv.py 
b/examples/engine/py/simple_recv.py
new file mode 100755
index 0000000..ea80aa6
--- /dev/null
+++ b/examples/engine/py/simple_recv.py
@@ -0,0 +1,42 @@
+#!/usr/bin/env python
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+from proton.handlers import MessagingHandler
+from proton.reactors import EventLoop
+
+class Recv(MessagingHandler):
+    def __init__(self, host, address):
+        super(Recv, self).__init__()
+        self.host = host
+        self.address = address
+
+    def on_start(self, event):
+        conn = event.reactor.connect(self.host)
+        conn.create_receiver(self.address)
+
+    def on_message(self, event):
+        print event.message.body
+
+try:
+    EventLoop(Recv("localhost:5672", "examples")).run()
+except KeyboardInterrupt: pass
+
+
+

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/examples/engine/py/simple_send.py
----------------------------------------------------------------------
diff --git a/examples/engine/py/simple_send.py 
b/examples/engine/py/simple_send.py
new file mode 100755
index 0000000..bbd30ac
--- /dev/null
+++ b/examples/engine/py/simple_send.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env python
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+from proton import Message
+from proton.handlers import MessagingHandler
+from proton.reactors import EventLoop
+
+class Send(MessagingHandler):
+    def __init__(self, host, address, messages):
+        super(Send, self).__init__()
+        self.host = host
+        self.address = address
+        self.sent = 0
+        self.confirmed = 0
+        self.total = messages
+
+    def on_start(self, event):
+        conn = event.reactor.connect(self.host)
+        conn.create_sender(self.address)
+
+    def on_credit(self, event):
+        while event.sender.credit and self.sent < self.total:
+            msg = Message(body={'sequence':(self.sent+1)})
+            event.sender.send_msg(msg)
+            self.sent += 1
+
+    def on_accepted(self, event):
+        self.confirmed += 1
+        if self.confirmed == self.total:
+            print "all messages confirmed"
+            event.connection.close()
+
+    def on_disconnected(self, event):
+        self.sent = self.confirmed
+
+try:
+    EventLoop(Send("localhost:5672", "examples", 10000)).run()
+except KeyboardInterrupt: pass

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/examples/engine/py/sync_client.py
----------------------------------------------------------------------
diff --git a/examples/engine/py/sync_client.py 
b/examples/engine/py/sync_client.py
new file mode 100755
index 0000000..362385a
--- /dev/null
+++ b/examples/engine/py/sync_client.py
@@ -0,0 +1,88 @@
+#!/usr/bin/env python
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+"""
+Demonstrates the client side of the synchronous request-response pattern
+(also known as RPC or Remote Procecure Call) using proton.
+
+"""
+
+from proton import Message, Url, ConnectionException, Timeout
+from proton.utils import BlockingConnection
+from proton.handlers import IncomingMessageHandler
+import sys
+
+class SyncRequestClient(IncomingMessageHandler):
+    """
+    Implementation of the synchronous request-responce (aka RPC) pattern.
+    Create an instance and call invoke() to send a request and wait for a 
response.
+    """
+
+    def __init__(self, url, timeout=None):
+        """
+        @param url: a proton.Url or a URL string of the form 'host:port/path'
+            host:port is used to connect, path is used to identify the remote 
messaging endpoint.
+        """
+        super(SyncRequestClient, self).__init__()
+        self.connection = BlockingConnection(Url(url).defaults(), 
timeout=timeout)
+        self.sender = self.connection.create_sender(url.path)
+        # dynamic=true generates a unique address dynamically for this 
receiver.
+        # credit=1 because we want to receive 1 response message initially.
+        self.receiver = self.connection.create_receiver(None, dynamic=True, 
credit=1, handler=self)
+        self.response = None
+
+    def invoke(self, request):
+        """Send a request, wait for and return the response"""
+        request.reply_to = self.reply_to
+        self.sender.send_msg(request)
+        self.connection.wait(lambda: self.response, msg="Waiting for response")
+        response = self.response
+        self.response = None    # Ready for next response.
+        self.receiver.flow(1)   # Set up credit for the next response.
+        return response
+
+    @property
+    def reply_to(self):
+        """Return the dynamic address of our receiver."""
+        return self.receiver.remote_source.address
+
+    def on_message(self, event):
+        """Called when we receive a message for our receiver."""
+        self.response = event.message # Store the response
+
+    def close(self):
+        self.connection.close()
+
+
+if __name__ == '__main__':
+    url = Url("0.0.0.0/examples")
+    if len(sys.argv) > 1: url = Url(sys.argv[1])
+
+    invoker = SyncRequestClient(url, timeout=2)
+    try:
+        REQUESTS= ["Twas brillig, and the slithy toves",
+                   "Did gire and gymble in the wabe.",
+                   "All mimsy were the borogroves,",
+                   "And the mome raths outgrabe."]
+        for request in REQUESTS:
+            response = invoker.invoke(Message(body=request))
+            print "%s => %s" % (request, response.body)
+    finally:
+        invoker.close()

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/examples/engine/py/tutorial.rst
----------------------------------------------------------------------
diff --git a/examples/engine/py/tutorial.rst b/examples/engine/py/tutorial.rst
new file mode 100644
index 0000000..89eb563
--- /dev/null
+++ b/examples/engine/py/tutorial.rst
@@ -0,0 +1,152 @@
+============
+Hello World!
+============
+
+Tradition dictates that we start with hello world! However rather than
+simply striving for the shortest program possible, we'll aim for a
+more illustrative example while still restricting the functionality to
+sending and receiving a single message.
+
+.. literalinclude:: helloworld.py
+   :lines: 21-
+   :linenos:
+
+This example uses proton in an event-driven or reactive manner. The
+flow of control is an 'event loop', where the events may be triggered
+by data arriving on a socket among other things and are then passed to
+relevant 'handlers'. Applications are then structured as a set of
+defined handlers for events of interest; to be notified of a
+particular event, you define a class with an appropriately name method
+on it, inform the event loop of that method which then calls it
+whenever the event occurs.
+
+The class we define in this example, ``HelloWorld``, has methods to
+handle three types of events.
+
+The first, ``on_connection_opened()``, is called when the connection
+is opened, and when that occurs we create a receiver over which to
+receive our message and a sender over which to send it.
+
+The second method, ``on_credit()``, is called when our sender has been
+issued by the peer with 'credit', allowing it to send messages. A
+credit based flow control mechanism like this ensures we only send
+messages when the recipient is ready and able to receive them. This is
+particularly important when the volume of messages might be large. In
+our case we are just going to send one message.
+
+The third and final method, ``on_message()``, is called when a message
+arrives. Within that method we simply print the body of the message
+and then close the connection.
+
+This particular example assumes a broker (or similar service), which
+accepts connections and routes published messages to intended
+recipients. The constructor for the ``HelloWorld`` class takes the
+details of the broker to connect to, and the address through which the
+message is sent and received (for a broker this corresponds to a queue
+or topic name).
+
+After an instance of ``HelloWorld`` is constructed, the event loop is
+entered by the call to the ``run()`` method on the last line. This
+call will return only when the loop determines there are no more
+events possible (at which point our example program will then exit).
+
+====================
+Hello World, Direct!
+====================
+
+Though often used in conjunction with a broker, AMQP does not
+*require* this. It also allows senders and receivers can communicate
+directly if desired.
+
+Let's modify our example to demonstrate this.
+
+.. literalinclude:: helloworld_direct.py
+   :lines: 21-
+   :emphasize-lines: 17,33,38
+   :linenos:
+
+The first difference, on line 17, is that rather than creating a
+receiver on the same connection as our sender, we listen for incoming
+connections by invoking the ``listen() method on the ``EventLoop``
+instance.
+
+Another difference is that the ``EventLoop`` instance we use is not
+the default instance as was used in the original example, but one we
+construct ourselves on line 38, passing in some event handlers. The
+first of these is ``HelloWorldReceiver``, as used in the original
+example. We pass it to the event loop, because we aren't going to
+directly create the receiver here ourselves. Rather we will accept an
+incoming connection on which the message will be received. This
+handler would then be notified of any incoming message event on any of
+the connections the event loop controls. As well as our own handler, we
+specify a couple of useful handlers from the ``proton_events``
+toolkit. The ``Handshaker`` handler will ensure our server follows the
+basic handshaking rules laid down by the protocol. The
+``FlowController`` will issue credit for incoming messages. We won't
+worry about them in more detail than that for now.
+
+The last difference is that we close the ``acceptor`` returned from
+the ``listen()`` call as part of the handling of the connection close
+event (line 33).
+
+So now we have our example working without a broker involved!
+
+==========
+The Basics
+==========
+
+TODO: These examples show reliable (at-least-once) send and receive
+with reconnect ability. Need to write some explanation. Could also do
+with some further cleanup.
+
+
+.. literalinclude:: simple_recv.py
+   :lines: 21-
+   :linenos:
+
+.. literalinclude:: simple_send.py
+   :lines: 21-
+   :linenos:
+
+================
+Request/Response
+================
+
+A common pattern is to send a request message and expect a response
+message in return. AMQP has special support for this pattern. Let's
+have a look at a simple example. We'll start with the 'server',
+i.e. the program that will process the request and send the
+response. Note that we are still using a broker in this example.
+
+Our server will provide a very simple service: it will respond with
+the body of the request converted to uppercase.
+
+.. literalinclude:: server.py
+   :lines: 21-
+   :linenos:
+
+The code here is not too different from the simple receiver example. When
+we receive a request however, we look at the reply-to address and
+create a sender for that over which to send the response. We'll cache
+the senders incase we get further requests wit the same reply-to.
+
+Now let's create a simple client to test this service out.
+
+.. literalinclude:: client.py
+   :lines: 21-
+   :linenos:
+
+As well as sending requests, we need to be able to get back the
+responses. We create a receiver for that (see line 8), but we don't
+specify an address, we set the dynamic option which tells the broker
+we are connected to to create a temporary address over which we can
+receive our responses.
+
+We need to use the address allocated by the broker as the reply_to
+address of our requests. To be notified when the broker has sent us
+back the address to use, we add an ``on_link_remote_open()`` method to
+our receiver's handler, and use that as the trigger to send our first
+request.
+
+
+

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/examples/engine/py/tx_recv.py
----------------------------------------------------------------------
diff --git a/examples/engine/py/tx_recv.py b/examples/engine/py/tx_recv.py
new file mode 100755
index 0000000..a28a3df
--- /dev/null
+++ b/examples/engine/py/tx_recv.py
@@ -0,0 +1,62 @@
+#!/usr/bin/env python
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+from proton.reactors import EventLoop
+from proton.handlers import TransactionalClientHandler
+
+class TxRecv(TransactionalClientHandler):
+    def __init__(self, batch_size):
+        super(TxRecv, self).__init__(prefetch=0)
+        self.current_batch = 0
+        self.batch_size = batch_size
+        self.event_loop = EventLoop(self)
+        self.conn = self.event_loop.connect("localhost:5672")
+        self.receiver = self.conn.create_receiver("examples")
+        self.conn.declare_transaction(handler=self)
+        self.transaction = None
+
+    def on_message(self, event):
+        print event.message.body
+        self.accept(event.delivery, self.transaction)
+        self.current_batch += 1
+        if self.current_batch == self.batch_size:
+            self.transaction.commit()
+            self.transaction = None
+
+    def on_transaction_declared(self, event):
+        self.receiver.flow(self.batch_size)
+        self.transaction = event.transaction
+
+    def on_transaction_committed(self, event):
+        self.current_batch = 0
+        self.conn.declare_transaction(handler=self)
+
+    def on_disconnected(self, event):
+        self.current_batch = 0
+
+    def run(self):
+        self.event_loop.run()
+
+try:
+    TxRecv(10).run()
+except KeyboardInterrupt: pass
+
+
+

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/examples/engine/py/tx_recv_interactive.py
----------------------------------------------------------------------
diff --git a/examples/engine/py/tx_recv_interactive.py 
b/examples/engine/py/tx_recv_interactive.py
new file mode 100755
index 0000000..a822992
--- /dev/null
+++ b/examples/engine/py/tx_recv_interactive.py
@@ -0,0 +1,83 @@
+#!/usr/bin/env python
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+import sys
+import threading
+from proton.reactors import ApplicationEvent, EventLoop
+from proton.handlers import TransactionalClientHandler
+
+class TxRecv(TransactionalClientHandler):
+    def __init__(self):
+        super(TxRecv, self).__init__(prefetch=0)
+
+    def on_start(self, event):
+        self.context = event.reactor.connect("localhost:5672")
+        self.receiver = self.context.create_receiver("examples")
+        #self.context.declare_transaction(handler=self, 
settle_before_discharge=False)
+        self.context.declare_transaction(handler=self, 
settle_before_discharge=True)
+        self.transaction = None
+
+    def on_message(self, event):
+        print event.message.body
+        self.transaction.accept(event.delivery)
+
+    def on_transaction_declared(self, event):
+        self.transaction = event.transaction
+        print "transaction declared"
+
+    def on_transaction_committed(self, event):
+        print "transaction committed"
+        self.context.declare_transaction(handler=self)
+
+    def on_transaction_aborted(self, event):
+        print "transaction aborted"
+        self.context.declare_transaction(handler=self)
+
+    def on_commit(self, event):
+        self.transaction.commit()
+
+    def on_abort(self, event):
+        self.transaction.abort()
+
+    def on_fetch(self, event):
+        self.receiver.flow(1)
+
+    def on_quit(self, event):
+        c = self.receiver.connection
+        self.receiver.close()
+        c.close()
+
+try:
+    reactor = EventLoop(TxRecv())
+    events = reactor.get_event_trigger()
+    thread = threading.Thread(target=reactor.run)
+    thread.daemon=True
+    thread.start()
+
+    print "Enter 'fetch', 'commit' or 'abort'"
+    while True:
+        line = sys.stdin.readline()
+        if line:
+            events.trigger(ApplicationEvent(line.strip()))
+        else:
+            break
+except KeyboardInterrupt: pass
+
+

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/examples/engine/py/tx_send.py
----------------------------------------------------------------------
diff --git a/examples/engine/py/tx_send.py b/examples/engine/py/tx_send.py
new file mode 100755
index 0000000..b2f12b2
--- /dev/null
+++ b/examples/engine/py/tx_send.py
@@ -0,0 +1,76 @@
+#!/usr/bin/env python
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+from proton import Message
+from proton.reactors import EventLoop
+from proton.handlers import TransactionalClientHandler
+
+class TxSend(TransactionalClientHandler):
+    def __init__(self, messages, batch_size):
+        super(TxSend, self).__init__()
+        self.current_batch = 0
+        self.committed = 0
+        self.confirmed = 0
+        self.total = messages
+        self.batch_size = batch_size
+        self.eventloop = EventLoop()
+        self.conn = self.eventloop.connect("localhost:5672", handler=self)
+        self.sender = self.conn.create_sender("examples")
+        self.conn.declare_transaction(handler=self)
+        self.transaction = None
+
+    def on_transaction_declared(self, event):
+        self.transaction = event.transaction
+        self.send()
+
+    def on_credit(self, event):
+        self.send()
+
+    def send(self):
+        while self.transaction and self.sender.credit and self.committed < 
self.total:
+            msg = 
Message(body={'sequence':(self.committed+self.current_batch+1)})
+            self.sender.send_msg(msg, transaction=self.transaction)
+            self.current_batch += 1
+            if self.current_batch == self.batch_size:
+                self.transaction.commit()
+                self.transaction = None
+
+    def on_accepted(self, event):
+        if event.sender == self.sender:
+            self.confirmed += 1
+
+    def on_transaction_committed(self, event):
+        self.committed += self.current_batch
+        if self.committed == self.total:
+            print "all messages committed"
+            event.connection.close()
+        else:
+            self.current_batch = 0
+            self.conn.declare_transaction(handler=self)
+
+    def on_disconnected(self, event):
+        self.current_batch = 0
+
+    def run(self):
+        self.eventloop.run()
+
+try:
+    TxSend(10000, 10).run()
+except KeyboardInterrupt: pass

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/examples/engine/py/tx_send_sync.py
----------------------------------------------------------------------
diff --git a/examples/engine/py/tx_send_sync.py 
b/examples/engine/py/tx_send_sync.py
new file mode 100755
index 0000000..0c50838
--- /dev/null
+++ b/examples/engine/py/tx_send_sync.py
@@ -0,0 +1,77 @@
+#!/usr/bin/env python
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+from proton import Message
+from proton.reactors import EventLoop
+from proton.handlers import TransactionalClientHandler
+
+class TxSend(TransactionalClientHandler):
+    def __init__(self, messages, batch_size):
+        super(TxSend, self).__init__()
+        self.current_batch = 0
+        self.confirmed = 0
+        self.committed = 0
+        self.total = messages
+        self.batch_size = batch_size
+        self.eventloop = EventLoop()
+        self.conn = self.eventloop.connect("localhost:5672", handler=self)
+        self.sender = self.conn.create_sender("examples")
+        self.conn.declare_transaction(handler=self)
+        self.transaction = None
+
+    def on_transaction_declared(self, event):
+        self.transaction = event.transaction
+        self.send()
+
+    def on_credit(self, event):
+        self.send()
+
+    def send(self):
+        while self.transaction and self.current_batch < self.batch_size and 
self.sender.credit and self.committed < self.total:
+            msg = 
Message(body={'sequence':(self.committed+self.current_batch+1)})
+            self.sender.send_msg(msg, transaction=self.transaction)
+            self.current_batch += 1
+
+    def on_accepted(self, event):
+        if event.sender == self.sender:
+            self.confirmed += 1
+            if self.confirmed == self.batch_size:
+                self.transaction.commit()
+                self.transaction = None
+                self.confirmed = 0
+
+    def on_transaction_committed(self, event):
+        self.committed += self.current_batch
+        if self.committed == self.total:
+            print "all messages committed"
+            event.connection.close()
+        else:
+            self.current_batch = 0
+            self.conn.declare_transaction(handler=self)
+
+    def on_disconnected(self, event):
+        self.current_batch = 0
+
+    def run(self):
+        self.eventloop.run()
+
+try:
+    TxSend(10000, 10).run()
+except KeyboardInterrupt: pass

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/tutorial/Makefile
----------------------------------------------------------------------
diff --git a/tutorial/Makefile b/tutorial/Makefile
deleted file mode 100644
index ec4b876..0000000
--- a/tutorial/Makefile
+++ /dev/null
@@ -1,153 +0,0 @@
-# Makefile for Sphinx documentation
-#
-
-# You can set these variables from the command line.
-SPHINXOPTS    =
-SPHINXBUILD   = sphinx-build
-PAPER         =
-BUILDDIR      = _build
-
-# Internal variables.
-PAPEROPT_a4     = -D latex_paper_size=a4
-PAPEROPT_letter = -D latex_paper_size=letter
-ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-# the i18n builder cannot share the environment and doctrees with the others
-I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-
-.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp 
epub latex latexpdf text man changes linkcheck doctest gettext
-
-help:
-       @echo "Please use \`make <target>' where <target> is one of"
-       @echo "  html       to make standalone HTML files"
-       @echo "  dirhtml    to make HTML files named index.html in directories"
-       @echo "  singlehtml to make a single large HTML file"
-       @echo "  pickle     to make pickle files"
-       @echo "  json       to make JSON files"
-       @echo "  htmlhelp   to make HTML files and a HTML help project"
-       @echo "  qthelp     to make HTML files and a qthelp project"
-       @echo "  devhelp    to make HTML files and a Devhelp project"
-       @echo "  epub       to make an epub"
-       @echo "  latex      to make LaTeX files, you can set PAPER=a4 or 
PAPER=letter"
-       @echo "  latexpdf   to make LaTeX files and run them through pdflatex"
-       @echo "  text       to make text files"
-       @echo "  man        to make manual pages"
-       @echo "  texinfo    to make Texinfo files"
-       @echo "  info       to make Texinfo files and run them through makeinfo"
-       @echo "  gettext    to make PO message catalogs"
-       @echo "  changes    to make an overview of all changed/added/deprecated 
items"
-       @echo "  linkcheck  to check all external links for integrity"
-       @echo "  doctest    to run all doctests embedded in the documentation 
(if enabled)"
-
-clean:
-       -rm -rf $(BUILDDIR)/*
-
-html:
-       $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
-       @echo
-       @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
-
-dirhtml:
-       $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
-       @echo
-       @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
-
-singlehtml:
-       $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
-       @echo
-       @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
-
-pickle:
-       $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
-       @echo
-       @echo "Build finished; now you can process the pickle files."
-
-json:
-       $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
-       @echo
-       @echo "Build finished; now you can process the JSON files."
-
-htmlhelp:
-       $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
-       @echo
-       @echo "Build finished; now you can run HTML Help Workshop with the" \
-             ".hhp project file in $(BUILDDIR)/htmlhelp."
-
-qthelp:
-       $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
-       @echo
-       @echo "Build finished; now you can run "qcollectiongenerator" with the" 
\
-             ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
-       @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Proton.qhcp"
-       @echo "To view the help file:"
-       @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Proton.qhc"
-
-devhelp:
-       $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
-       @echo
-       @echo "Build finished."
-       @echo "To view the help file:"
-       @echo "# mkdir -p $$HOME/.local/share/devhelp/Proton"
-       @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Proton"
-       @echo "# devhelp"
-
-epub:
-       $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
-       @echo
-       @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
-
-latex:
-       $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
-       @echo
-       @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
-       @echo "Run \`make' in that directory to run these through (pdf)latex" \
-             "(use \`make latexpdf' here to do that automatically)."
-
-latexpdf:
-       $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
-       @echo "Running LaTeX files through pdflatex..."
-       $(MAKE) -C $(BUILDDIR)/latex all-pdf
-       @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
-
-text:
-       $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
-       @echo
-       @echo "Build finished. The text files are in $(BUILDDIR)/text."
-
-man:
-       $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
-       @echo
-       @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
-
-texinfo:
-       $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
-       @echo
-       @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
-       @echo "Run \`make' in that directory to run these through makeinfo" \
-             "(use \`make info' here to do that automatically)."
-
-info:
-       $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
-       @echo "Running Texinfo files through makeinfo..."
-       make -C $(BUILDDIR)/texinfo info
-       @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
-
-gettext:
-       $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
-       @echo
-       @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
-
-changes:
-       $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
-       @echo
-       @echo "The overview file is in $(BUILDDIR)/changes."
-
-linkcheck:
-       $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
-       @echo
-       @echo "Link check complete; look for any errors in the above output " \
-             "or in $(BUILDDIR)/linkcheck/output.txt."
-
-doctest:
-       $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
-       @echo "Testing of doctests in the sources finished, look at the " \
-             "results in $(BUILDDIR)/doctest/output.txt."

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/tutorial/_build/doctrees/environment.pickle
----------------------------------------------------------------------
diff --git a/tutorial/_build/doctrees/environment.pickle 
b/tutorial/_build/doctrees/environment.pickle
deleted file mode 100644
index 2d7a398..0000000
Binary files a/tutorial/_build/doctrees/environment.pickle and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/tutorial/_build/doctrees/index.doctree
----------------------------------------------------------------------
diff --git a/tutorial/_build/doctrees/index.doctree 
b/tutorial/_build/doctrees/index.doctree
deleted file mode 100644
index de2c704..0000000
Binary files a/tutorial/_build/doctrees/index.doctree and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/tutorial/_build/doctrees/tutorial.doctree
----------------------------------------------------------------------
diff --git a/tutorial/_build/doctrees/tutorial.doctree 
b/tutorial/_build/doctrees/tutorial.doctree
deleted file mode 100644
index a093651..0000000
Binary files a/tutorial/_build/doctrees/tutorial.doctree and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/tutorial/_build/html/.buildinfo
----------------------------------------------------------------------
diff --git a/tutorial/_build/html/.buildinfo b/tutorial/_build/html/.buildinfo
deleted file mode 100644
index eed68be..0000000
--- a/tutorial/_build/html/.buildinfo
+++ /dev/null
@@ -1,4 +0,0 @@
-# Sphinx build info version 1
-# This file hashes the configuration used when building these files. When it 
is not found, a full rebuild will be done.
-config: 2657ccbc7cab07e4ab00891ea70f9dd0
-tags: fbb0d17656682115ca4d033fb2f83ba1

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/tutorial/_build/html/_sources/index.txt
----------------------------------------------------------------------
diff --git a/tutorial/_build/html/_sources/index.txt 
b/tutorial/_build/html/_sources/index.txt
deleted file mode 100644
index d5f5b76..0000000
--- a/tutorial/_build/html/_sources/index.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-.. Proton documentation master file, created by
-   sphinx-quickstart on Thu Jul 31 10:31:05 2014.
-   You can adapt this file completely to your liking, but it should at least
-   contain the root `toctree` directive.
-
-Some Proton Examples
-====================
-
-Contents:
-
-.. toctree::
-   :maxdepth: 2
-
-   tutorial
-

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/tutorial/_build/html/_sources/tutorial.txt
----------------------------------------------------------------------
diff --git a/tutorial/_build/html/_sources/tutorial.txt 
b/tutorial/_build/html/_sources/tutorial.txt
deleted file mode 100644
index 89eb563..0000000
--- a/tutorial/_build/html/_sources/tutorial.txt
+++ /dev/null
@@ -1,152 +0,0 @@
-============
-Hello World!
-============
-
-Tradition dictates that we start with hello world! However rather than
-simply striving for the shortest program possible, we'll aim for a
-more illustrative example while still restricting the functionality to
-sending and receiving a single message.
-
-.. literalinclude:: helloworld.py
-   :lines: 21-
-   :linenos:
-
-This example uses proton in an event-driven or reactive manner. The
-flow of control is an 'event loop', where the events may be triggered
-by data arriving on a socket among other things and are then passed to
-relevant 'handlers'. Applications are then structured as a set of
-defined handlers for events of interest; to be notified of a
-particular event, you define a class with an appropriately name method
-on it, inform the event loop of that method which then calls it
-whenever the event occurs.
-
-The class we define in this example, ``HelloWorld``, has methods to
-handle three types of events.
-
-The first, ``on_connection_opened()``, is called when the connection
-is opened, and when that occurs we create a receiver over which to
-receive our message and a sender over which to send it.
-
-The second method, ``on_credit()``, is called when our sender has been
-issued by the peer with 'credit', allowing it to send messages. A
-credit based flow control mechanism like this ensures we only send
-messages when the recipient is ready and able to receive them. This is
-particularly important when the volume of messages might be large. In
-our case we are just going to send one message.
-
-The third and final method, ``on_message()``, is called when a message
-arrives. Within that method we simply print the body of the message
-and then close the connection.
-
-This particular example assumes a broker (or similar service), which
-accepts connections and routes published messages to intended
-recipients. The constructor for the ``HelloWorld`` class takes the
-details of the broker to connect to, and the address through which the
-message is sent and received (for a broker this corresponds to a queue
-or topic name).
-
-After an instance of ``HelloWorld`` is constructed, the event loop is
-entered by the call to the ``run()`` method on the last line. This
-call will return only when the loop determines there are no more
-events possible (at which point our example program will then exit).
-
-====================
-Hello World, Direct!
-====================
-
-Though often used in conjunction with a broker, AMQP does not
-*require* this. It also allows senders and receivers can communicate
-directly if desired.
-
-Let's modify our example to demonstrate this.
-
-.. literalinclude:: helloworld_direct.py
-   :lines: 21-
-   :emphasize-lines: 17,33,38
-   :linenos:
-
-The first difference, on line 17, is that rather than creating a
-receiver on the same connection as our sender, we listen for incoming
-connections by invoking the ``listen() method on the ``EventLoop``
-instance.
-
-Another difference is that the ``EventLoop`` instance we use is not
-the default instance as was used in the original example, but one we
-construct ourselves on line 38, passing in some event handlers. The
-first of these is ``HelloWorldReceiver``, as used in the original
-example. We pass it to the event loop, because we aren't going to
-directly create the receiver here ourselves. Rather we will accept an
-incoming connection on which the message will be received. This
-handler would then be notified of any incoming message event on any of
-the connections the event loop controls. As well as our own handler, we
-specify a couple of useful handlers from the ``proton_events``
-toolkit. The ``Handshaker`` handler will ensure our server follows the
-basic handshaking rules laid down by the protocol. The
-``FlowController`` will issue credit for incoming messages. We won't
-worry about them in more detail than that for now.
-
-The last difference is that we close the ``acceptor`` returned from
-the ``listen()`` call as part of the handling of the connection close
-event (line 33).
-
-So now we have our example working without a broker involved!
-
-==========
-The Basics
-==========
-
-TODO: These examples show reliable (at-least-once) send and receive
-with reconnect ability. Need to write some explanation. Could also do
-with some further cleanup.
-
-
-.. literalinclude:: simple_recv.py
-   :lines: 21-
-   :linenos:
-
-.. literalinclude:: simple_send.py
-   :lines: 21-
-   :linenos:
-
-================
-Request/Response
-================
-
-A common pattern is to send a request message and expect a response
-message in return. AMQP has special support for this pattern. Let's
-have a look at a simple example. We'll start with the 'server',
-i.e. the program that will process the request and send the
-response. Note that we are still using a broker in this example.
-
-Our server will provide a very simple service: it will respond with
-the body of the request converted to uppercase.
-
-.. literalinclude:: server.py
-   :lines: 21-
-   :linenos:
-
-The code here is not too different from the simple receiver example. When
-we receive a request however, we look at the reply-to address and
-create a sender for that over which to send the response. We'll cache
-the senders incase we get further requests wit the same reply-to.
-
-Now let's create a simple client to test this service out.
-
-.. literalinclude:: client.py
-   :lines: 21-
-   :linenos:
-
-As well as sending requests, we need to be able to get back the
-responses. We create a receiver for that (see line 8), but we don't
-specify an address, we set the dynamic option which tells the broker
-we are connected to to create a temporary address over which we can
-receive our responses.
-
-We need to use the address allocated by the broker as the reply_to
-address of our requests. To be notified when the broker has sent us
-back the address to use, we add an ``on_link_remote_open()`` method to
-our receiver's handler, and use that as the trigger to send our first
-request.
-
-
-

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/tutorial/_build/html/_static/ajax-loader.gif
----------------------------------------------------------------------
diff --git a/tutorial/_build/html/_static/ajax-loader.gif 
b/tutorial/_build/html/_static/ajax-loader.gif
deleted file mode 100644
index 61faf8c..0000000
Binary files a/tutorial/_build/html/_static/ajax-loader.gif and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/tutorial/_build/html/_static/alert_info_32.png
----------------------------------------------------------------------
diff --git a/tutorial/_build/html/_static/alert_info_32.png 
b/tutorial/_build/html/_static/alert_info_32.png
deleted file mode 100644
index 05b4fe8..0000000
Binary files a/tutorial/_build/html/_static/alert_info_32.png and /dev/null 
differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/tutorial/_build/html/_static/alert_warning_32.png
----------------------------------------------------------------------
diff --git a/tutorial/_build/html/_static/alert_warning_32.png 
b/tutorial/_build/html/_static/alert_warning_32.png
deleted file mode 100644
index f13611c..0000000
Binary files a/tutorial/_build/html/_static/alert_warning_32.png and /dev/null 
differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/tutorial/_build/html/_static/basic.css
----------------------------------------------------------------------
diff --git a/tutorial/_build/html/_static/basic.css 
b/tutorial/_build/html/_static/basic.css
deleted file mode 100644
index 43e8baf..0000000
--- a/tutorial/_build/html/_static/basic.css
+++ /dev/null
@@ -1,540 +0,0 @@
-/*
- * basic.css
- * ~~~~~~~~~
- *
- * Sphinx stylesheet -- basic theme.
- *
- * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-/* -- main layout ----------------------------------------------------------- 
*/
-
-div.clearer {
-    clear: both;
-}
-
-/* -- relbar ---------------------------------------------------------------- 
*/
-
-div.related {
-    width: 100%;
-    font-size: 90%;
-}
-
-div.related h3 {
-    display: none;
-}
-
-div.related ul {
-    margin: 0;
-    padding: 0 0 0 10px;
-    list-style: none;
-}
-
-div.related li {
-    display: inline;
-}
-
-div.related li.right {
-    float: right;
-    margin-right: 5px;
-}
-
-/* -- sidebar --------------------------------------------------------------- 
*/
-
-div.sphinxsidebarwrapper {
-    padding: 10px 5px 0 10px;
-}
-
-div.sphinxsidebar {
-    float: left;
-    width: 230px;
-    margin-left: -100%;
-    font-size: 90%;
-}
-
-div.sphinxsidebar ul {
-    list-style: none;
-}
-
-div.sphinxsidebar ul ul,
-div.sphinxsidebar ul.want-points {
-    margin-left: 20px;
-    list-style: square;
-}
-
-div.sphinxsidebar ul ul {
-    margin-top: 0;
-    margin-bottom: 0;
-}
-
-div.sphinxsidebar form {
-    margin-top: 10px;
-}
-
-div.sphinxsidebar input {
-    border: 1px solid #98dbcc;
-    font-family: sans-serif;
-    font-size: 1em;
-}
-
-div.sphinxsidebar #searchbox input[type="text"] {
-    width: 170px;
-}
-
-div.sphinxsidebar #searchbox input[type="submit"] {
-    width: 30px;
-}
-
-img {
-    border: 0;
-}
-
-/* -- search page ----------------------------------------------------------- 
*/
-
-ul.search {
-    margin: 10px 0 0 20px;
-    padding: 0;
-}
-
-ul.search li {
-    padding: 5px 0 5px 20px;
-    background-image: url(file.png);
-    background-repeat: no-repeat;
-    background-position: 0 7px;
-}
-
-ul.search li a {
-    font-weight: bold;
-}
-
-ul.search li div.context {
-    color: #888;
-    margin: 2px 0 0 30px;
-    text-align: left;
-}
-
-ul.keywordmatches li.goodmatch a {
-    font-weight: bold;
-}
-
-/* -- index page ------------------------------------------------------------ 
*/
-
-table.contentstable {
-    width: 90%;
-}
-
-table.contentstable p.biglink {
-    line-height: 150%;
-}
-
-a.biglink {
-    font-size: 1.3em;
-}
-
-span.linkdescr {
-    font-style: italic;
-    padding-top: 5px;
-    font-size: 90%;
-}
-
-/* -- general index --------------------------------------------------------- 
*/
-
-table.indextable {
-    width: 100%;
-}
-
-table.indextable td {
-    text-align: left;
-    vertical-align: top;
-}
-
-table.indextable dl, table.indextable dd {
-    margin-top: 0;
-    margin-bottom: 0;
-}
-
-table.indextable tr.pcap {
-    height: 10px;
-}
-
-table.indextable tr.cap {
-    margin-top: 10px;
-    background-color: #f2f2f2;
-}
-
-img.toggler {
-    margin-right: 3px;
-    margin-top: 3px;
-    cursor: pointer;
-}
-
-div.modindex-jumpbox {
-    border-top: 1px solid #ddd;
-    border-bottom: 1px solid #ddd;
-    margin: 1em 0 1em 0;
-    padding: 0.4em;
-}
-
-div.genindex-jumpbox {
-    border-top: 1px solid #ddd;
-    border-bottom: 1px solid #ddd;
-    margin: 1em 0 1em 0;
-    padding: 0.4em;
-}
-
-/* -- general body styles --------------------------------------------------- 
*/
-
-a.headerlink {
-    visibility: hidden;
-}
-
-h1:hover > a.headerlink,
-h2:hover > a.headerlink,
-h3:hover > a.headerlink,
-h4:hover > a.headerlink,
-h5:hover > a.headerlink,
-h6:hover > a.headerlink,
-dt:hover > a.headerlink {
-    visibility: visible;
-}
-
-div.body p.caption {
-    text-align: inherit;
-}
-
-div.body td {
-    text-align: left;
-}
-
-.field-list ul {
-    padding-left: 1em;
-}
-
-.first {
-    margin-top: 0 !important;
-}
-
-p.rubric {
-    margin-top: 30px;
-    font-weight: bold;
-}
-
-img.align-left, .figure.align-left, object.align-left {
-    clear: left;
-    float: left;
-    margin-right: 1em;
-}
-
-img.align-right, .figure.align-right, object.align-right {
-    clear: right;
-    float: right;
-    margin-left: 1em;
-}
-
-img.align-center, .figure.align-center, object.align-center {
-  display: block;
-  margin-left: auto;
-  margin-right: auto;
-}
-
-.align-left {
-    text-align: left;
-}
-
-.align-center {
-    text-align: center;
-}
-
-.align-right {
-    text-align: right;
-}
-
-/* -- sidebars -------------------------------------------------------------- 
*/
-
-div.sidebar {
-    margin: 0 0 0.5em 1em;
-    border: 1px solid #ddb;
-    padding: 7px 7px 0 7px;
-    background-color: #ffe;
-    width: 40%;
-    float: right;
-}
-
-p.sidebar-title {
-    font-weight: bold;
-}
-
-/* -- topics ---------------------------------------------------------------- 
*/
-
-div.topic {
-    border: 1px solid #ccc;
-    padding: 7px 7px 0 7px;
-    margin: 10px 0 10px 0;
-}
-
-p.topic-title {
-    font-size: 1.1em;
-    font-weight: bold;
-    margin-top: 10px;
-}
-
-/* -- admonitions ----------------------------------------------------------- 
*/
-
-div.admonition {
-    margin-top: 10px;
-    margin-bottom: 10px;
-    padding: 7px;
-}
-
-div.admonition dt {
-    font-weight: bold;
-}
-
-div.admonition dl {
-    margin-bottom: 0;
-}
-
-p.admonition-title {
-    margin: 0px 10px 5px 0px;
-    font-weight: bold;
-}
-
-div.body p.centered {
-    text-align: center;
-    margin-top: 25px;
-}
-
-/* -- tables ---------------------------------------------------------------- 
*/
-
-table.docutils {
-    border: 0;
-    border-collapse: collapse;
-}
-
-table.docutils td, table.docutils th {
-    padding: 1px 8px 1px 5px;
-    border-top: 0;
-    border-left: 0;
-    border-right: 0;
-    border-bottom: 1px solid #aaa;
-}
-
-table.field-list td, table.field-list th {
-    border: 0 !important;
-}
-
-table.footnote td, table.footnote th {
-    border: 0 !important;
-}
-
-th {
-    text-align: left;
-    padding-right: 5px;
-}
-
-table.citation {
-    border-left: solid 1px gray;
-    margin-left: 1px;
-}
-
-table.citation td {
-    border-bottom: none;
-}
-
-/* -- other body styles ----------------------------------------------------- 
*/
-
-ol.arabic {
-    list-style: decimal;
-}
-
-ol.loweralpha {
-    list-style: lower-alpha;
-}
-
-ol.upperalpha {
-    list-style: upper-alpha;
-}
-
-ol.lowerroman {
-    list-style: lower-roman;
-}
-
-ol.upperroman {
-    list-style: upper-roman;
-}
-
-dl {
-    margin-bottom: 15px;
-}
-
-dd p {
-    margin-top: 0px;
-}
-
-dd ul, dd table {
-    margin-bottom: 10px;
-}
-
-dd {
-    margin-top: 3px;
-    margin-bottom: 10px;
-    margin-left: 30px;
-}
-
-dt:target, .highlighted {
-    background-color: #fbe54e;
-}
-
-dl.glossary dt {
-    font-weight: bold;
-    font-size: 1.1em;
-}
-
-.field-list ul {
-    margin: 0;
-    padding-left: 1em;
-}
-
-.field-list p {
-    margin: 0;
-}
-
-.refcount {
-    color: #060;
-}
-
-.optional {
-    font-size: 1.3em;
-}
-
-.versionmodified {
-    font-style: italic;
-}
-
-.system-message {
-    background-color: #fda;
-    padding: 5px;
-    border: 3px solid red;
-}
-
-.footnote:target  {
-    background-color: #ffa;
-}
-
-.line-block {
-    display: block;
-    margin-top: 1em;
-    margin-bottom: 1em;
-}
-
-.line-block .line-block {
-    margin-top: 0;
-    margin-bottom: 0;
-    margin-left: 1.5em;
-}
-
-.guilabel, .menuselection {
-    font-family: sans-serif;
-}
-
-.accelerator {
-    text-decoration: underline;
-}
-
-.classifier {
-    font-style: oblique;
-}
-
-abbr, acronym {
-    border-bottom: dotted 1px;
-    cursor: help;
-}
-
-/* -- code displays --------------------------------------------------------- 
*/
-
-pre {
-    overflow: auto;
-    overflow-y: hidden;  /* fixes display issues on Chrome browsers */
-}
-
-td.linenos pre {
-    padding: 5px 0px;
-    border: 0;
-    background-color: transparent;
-    color: #aaa;
-}
-
-table.highlighttable {
-    margin-left: 0.5em;
-}
-
-table.highlighttable td {
-    padding: 0 0.5em 0 0.5em;
-}
-
-tt.descname {
-    background-color: transparent;
-    font-weight: bold;
-    font-size: 1.2em;
-}
-
-tt.descclassname {
-    background-color: transparent;
-}
-
-tt.xref, a tt {
-    background-color: transparent;
-    font-weight: bold;
-}
-
-h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
-    background-color: transparent;
-}
-
-.viewcode-link {
-    float: right;
-}
-
-.viewcode-back {
-    float: right;
-    font-family: sans-serif;
-}
-
-div.viewcode-block:target {
-    margin: -1px -10px;
-    padding: 0 10px;
-}
-
-/* -- math display ---------------------------------------------------------- 
*/
-
-img.math {
-    vertical-align: middle;
-}
-
-div.body div.math p {
-    text-align: center;
-}
-
-span.eqno {
-    float: right;
-}
-
-/* -- printout stylesheet --------------------------------------------------- 
*/
-
-@media print {
-    div.document,
-    div.documentwrapper,
-    div.bodywrapper {
-        margin: 0 !important;
-        width: 100%;
-    }
-
-    div.sphinxsidebar,
-    div.related,
-    div.footer,
-    #top-link {
-        display: none;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/tutorial/_build/html/_static/bg-page.png
----------------------------------------------------------------------
diff --git a/tutorial/_build/html/_static/bg-page.png 
b/tutorial/_build/html/_static/bg-page.png
deleted file mode 100644
index c6f3bc4..0000000
Binary files a/tutorial/_build/html/_static/bg-page.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/tutorial/_build/html/_static/bullet_orange.png
----------------------------------------------------------------------
diff --git a/tutorial/_build/html/_static/bullet_orange.png 
b/tutorial/_build/html/_static/bullet_orange.png
deleted file mode 100644
index ad5d02f..0000000
Binary files a/tutorial/_build/html/_static/bullet_orange.png and /dev/null 
differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/tutorial/_build/html/_static/comment-bright.png
----------------------------------------------------------------------
diff --git a/tutorial/_build/html/_static/comment-bright.png 
b/tutorial/_build/html/_static/comment-bright.png
deleted file mode 100644
index 551517b..0000000
Binary files a/tutorial/_build/html/_static/comment-bright.png and /dev/null 
differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/tutorial/_build/html/_static/comment-close.png
----------------------------------------------------------------------
diff --git a/tutorial/_build/html/_static/comment-close.png 
b/tutorial/_build/html/_static/comment-close.png
deleted file mode 100644
index 09b54be..0000000
Binary files a/tutorial/_build/html/_static/comment-close.png and /dev/null 
differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/tutorial/_build/html/_static/comment.png
----------------------------------------------------------------------
diff --git a/tutorial/_build/html/_static/comment.png 
b/tutorial/_build/html/_static/comment.png
deleted file mode 100644
index 92feb52..0000000
Binary files a/tutorial/_build/html/_static/comment.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/tutorial/_build/html/_static/default.css
----------------------------------------------------------------------
diff --git a/tutorial/_build/html/_static/default.css 
b/tutorial/_build/html/_static/default.css
deleted file mode 100644
index 21f3f50..0000000
--- a/tutorial/_build/html/_static/default.css
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * default.css_t
- * ~~~~~~~~~~~~~
- *
- * Sphinx stylesheet -- default theme.
- *
- * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-@import url("basic.css");
-
-/* -- page layout ----------------------------------------------------------- 
*/
-
-body {
-    font-family: sans-serif;
-    font-size: 100%;
-    background-color: #11303d;
-    color: #000;
-    margin: 0;
-    padding: 0;
-}
-
-div.document {
-    background-color: #1c4e63;
-}
-
-div.documentwrapper {
-    float: left;
-    width: 100%;
-}
-
-div.bodywrapper {
-    margin: 0 0 0 230px;
-}
-
-div.body {
-    background-color: #ffffff;
-    color: #000000;
-    padding: 0 20px 30px 20px;
-}
-
-div.footer {
-    color: #ffffff;
-    width: 100%;
-    padding: 9px 0 9px 0;
-    text-align: center;
-    font-size: 75%;
-}
-
-div.footer a {
-    color: #ffffff;
-    text-decoration: underline;
-}
-
-div.related {
-    background-color: #133f52;
-    line-height: 30px;
-    color: #ffffff;
-}
-
-div.related a {
-    color: #ffffff;
-}
-
-div.sphinxsidebar {
-}
-
-div.sphinxsidebar h3 {
-    font-family: 'Trebuchet MS', sans-serif;
-    color: #ffffff;
-    font-size: 1.4em;
-    font-weight: normal;
-    margin: 0;
-    padding: 0;
-}
-
-div.sphinxsidebar h3 a {
-    color: #ffffff;
-}
-
-div.sphinxsidebar h4 {
-    font-family: 'Trebuchet MS', sans-serif;
-    color: #ffffff;
-    font-size: 1.3em;
-    font-weight: normal;
-    margin: 5px 0 0 0;
-    padding: 0;
-}
-
-div.sphinxsidebar p {
-    color: #ffffff;
-}
-
-div.sphinxsidebar p.topless {
-    margin: 5px 10px 10px 10px;
-}
-
-div.sphinxsidebar ul {
-    margin: 10px;
-    padding: 0;
-    color: #ffffff;
-}
-
-div.sphinxsidebar a {
-    color: #98dbcc;
-}
-
-div.sphinxsidebar input {
-    border: 1px solid #98dbcc;
-    font-family: sans-serif;
-    font-size: 1em;
-}
-
-
-
-/* -- hyperlink styles ------------------------------------------------------ 
*/
-
-a {
-    color: #355f7c;
-    text-decoration: none;
-}
-
-a:visited {
-    color: #355f7c;
-    text-decoration: none;
-}
-
-a:hover {
-    text-decoration: underline;
-}
-
-
-
-/* -- body styles ----------------------------------------------------------- 
*/
-
-div.body h1,
-div.body h2,
-div.body h3,
-div.body h4,
-div.body h5,
-div.body h6 {
-    font-family: 'Trebuchet MS', sans-serif;
-    background-color: #f2f2f2;
-    font-weight: normal;
-    color: #20435c;
-    border-bottom: 1px solid #ccc;
-    margin: 20px -20px 10px -20px;
-    padding: 3px 0 3px 10px;
-}
-
-div.body h1 { margin-top: 0; font-size: 200%; }
-div.body h2 { font-size: 160%; }
-div.body h3 { font-size: 140%; }
-div.body h4 { font-size: 120%; }
-div.body h5 { font-size: 110%; }
-div.body h6 { font-size: 100%; }
-
-a.headerlink {
-    color: #c60f0f;
-    font-size: 0.8em;
-    padding: 0 4px 0 4px;
-    text-decoration: none;
-}
-
-a.headerlink:hover {
-    background-color: #c60f0f;
-    color: white;
-}
-
-div.body p, div.body dd, div.body li {
-    text-align: justify;
-    line-height: 130%;
-}
-
-div.admonition p.admonition-title + p {
-    display: inline;
-}
-
-div.admonition p {
-    margin-bottom: 5px;
-}
-
-div.admonition pre {
-    margin-bottom: 5px;
-}
-
-div.admonition ul, div.admonition ol {
-    margin-bottom: 5px;
-}
-
-div.note {
-    background-color: #eee;
-    border: 1px solid #ccc;
-}
-
-div.seealso {
-    background-color: #ffc;
-    border: 1px solid #ff6;
-}
-
-div.topic {
-    background-color: #eee;
-}
-
-div.warning {
-    background-color: #ffe4e4;
-    border: 1px solid #f66;
-}
-
-p.admonition-title {
-    display: inline;
-}
-
-p.admonition-title:after {
-    content: ":";
-}
-
-pre {
-    padding: 5px;
-    background-color: #eeffcc;
-    color: #333333;
-    line-height: 120%;
-    border: 1px solid #ac9;
-    border-left: none;
-    border-right: none;
-}
-
-tt {
-    background-color: #ecf0f3;
-    padding: 0 1px 0 1px;
-    font-size: 0.95em;
-}
-
-th {
-    background-color: #ede;
-}
-
-.warning tt {
-    background: #efc2c2;
-}
-
-.note tt {
-    background: #d6d6d6;
-}
-
-.viewcode-back {
-    font-family: sans-serif;
-}
-
-div.viewcode-block:target {
-    background-color: #f4debf;
-    border-top: 1px solid #ac9;
-    border-bottom: 1px solid #ac9;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/tutorial/_build/html/_static/doctools.js
----------------------------------------------------------------------
diff --git a/tutorial/_build/html/_static/doctools.js 
b/tutorial/_build/html/_static/doctools.js
deleted file mode 100644
index d4619fd..0000000
--- a/tutorial/_build/html/_static/doctools.js
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- * doctools.js
- * ~~~~~~~~~~~
- *
- * Sphinx JavaScript utilities for all documentation.
- *
- * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-/**
- * select a different prefix for underscore
- */
-$u = _.noConflict();
-
-/**
- * make the code below compatible with browsers without
- * an installed firebug like debugger
-if (!window.console || !console.firebug) {
-  var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
-    "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
-    "profile", "profileEnd"];
-  window.console = {};
-  for (var i = 0; i < names.length; ++i)
-    window.console[names[i]] = function() {};
-}
- */
-
-/**
- * small helper function to urldecode strings
- */
-jQuery.urldecode = function(x) {
-  return decodeURIComponent(x).replace(/\+/g, ' ');
-}
-
-/**
- * small helper function to urlencode strings
- */
-jQuery.urlencode = encodeURIComponent;
-
-/**
- * This function returns the parsed url parameters of the
- * current request. Multiple values per key are supported,
- * it will always return arrays of strings for the value parts.
- */
-jQuery.getQueryParameters = function(s) {
-  if (typeof s == 'undefined')
-    s = document.location.search;
-  var parts = s.substr(s.indexOf('?') + 1).split('&');
-  var result = {};
-  for (var i = 0; i < parts.length; i++) {
-    var tmp = parts[i].split('=', 2);
-    var key = jQuery.urldecode(tmp[0]);
-    var value = jQuery.urldecode(tmp[1]);
-    if (key in result)
-      result[key].push(value);
-    else
-      result[key] = [value];
-  }
-  return result;
-};
-
-/**
- * small function to check if an array contains
- * a given item.
- */
-jQuery.contains = function(arr, item) {
-  for (var i = 0; i < arr.length; i++) {
-    if (arr[i] == item)
-      return true;
-  }
-  return false;
-};
-
-/**
- * highlight a given string on a jquery object by wrapping it in
- * span elements with the given class name.
- */
-jQuery.fn.highlightText = function(text, className) {
-  function highlight(node) {
-    if (node.nodeType == 3) {
-      var val = node.nodeValue;
-      var pos = val.toLowerCase().indexOf(text);
-      if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) {
-        var span = document.createElement("span");
-        span.className = className;
-        span.appendChild(document.createTextNode(val.substr(pos, 
text.length)));
-        node.parentNode.insertBefore(span, node.parentNode.insertBefore(
-          document.createTextNode(val.substr(pos + text.length)),
-          node.nextSibling));
-        node.nodeValue = val.substr(0, pos);
-      }
-    }
-    else if (!jQuery(node).is("button, select, textarea")) {
-      jQuery.each(node.childNodes, function() {
-        highlight(this);
-      });
-    }
-  }
-  return this.each(function() {
-    highlight(this);
-  });
-};
-
-/**
- * Small JavaScript module for the documentation.
- */
-var Documentation = {
-
-  init : function() {
-    this.fixFirefoxAnchorBug();
-    this.highlightSearchWords();
-    this.initIndexTable();
-  },
-
-  /**
-   * i18n support
-   */
-  TRANSLATIONS : {},
-  PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; },
-  LOCALE : 'unknown',
-
-  // gettext and ngettext don't access this so that the functions
-  // can safely bound to a different name (_ = Documentation.gettext)
-  gettext : function(string) {
-    var translated = Documentation.TRANSLATIONS[string];
-    if (typeof translated == 'undefined')
-      return string;
-    return (typeof translated == 'string') ? translated : translated[0];
-  },
-
-  ngettext : function(singular, plural, n) {
-    var translated = Documentation.TRANSLATIONS[singular];
-    if (typeof translated == 'undefined')
-      return (n == 1) ? singular : plural;
-    return translated[Documentation.PLURALEXPR(n)];
-  },
-
-  addTranslations : function(catalog) {
-    for (var key in catalog.messages)
-      this.TRANSLATIONS[key] = catalog.messages[key];
-    this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + 
')');
-    this.LOCALE = catalog.locale;
-  },
-
-  /**
-   * add context elements like header anchor links
-   */
-  addContextElements : function() {
-    $('div[id] > :header:first').each(function() {
-      $('<a class="headerlink">\u00B6</a>').
-      attr('href', '#' + this.id).
-      attr('title', _('Permalink to this headline')).
-      appendTo(this);
-    });
-    $('dt[id]').each(function() {
-      $('<a class="headerlink">\u00B6</a>').
-      attr('href', '#' + this.id).
-      attr('title', _('Permalink to this definition')).
-      appendTo(this);
-    });
-  },
-
-  /**
-   * workaround a firefox stupidity
-   */
-  fixFirefoxAnchorBug : function() {
-    if (document.location.hash && $.browser.mozilla)
-      window.setTimeout(function() {
-        document.location.href += '';
-      }, 10);
-  },
-
-  /**
-   * highlight the search words provided in the url in the text
-   */
-  highlightSearchWords : function() {
-    var params = $.getQueryParameters();
-    var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
-    if (terms.length) {
-      var body = $('div.body');
-      window.setTimeout(function() {
-        $.each(terms, function() {
-          body.highlightText(this.toLowerCase(), 'highlighted');
-        });
-      }, 10);
-      $('<p class="highlight-link"><a href="javascript:Documentation.' +
-        'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
-          .appendTo($('#searchbox'));
-    }
-  },
-
-  /**
-   * init the domain index toggle buttons
-   */
-  initIndexTable : function() {
-    var togglers = $('img.toggler').click(function() {
-      var src = $(this).attr('src');
-      var idnum = $(this).attr('id').substr(7);
-      $('tr.cg-' + idnum).toggle();
-      if (src.substr(-9) == 'minus.png')
-        $(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
-      else
-        $(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
-    }).css('display', '');
-    if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
-        togglers.click();
-    }
-  },
-
-  /**
-   * helper function to hide the search marks again
-   */
-  hideSearchWords : function() {
-    $('#searchbox .highlight-link').fadeOut(300);
-    $('span.highlighted').removeClass('highlighted');
-  },
-
-  /**
-   * make the url absolute
-   */
-  makeURL : function(relativeURL) {
-    return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
-  },
-
-  /**
-   * get the current relative url
-   */
-  getCurrentURL : function() {
-    var path = document.location.pathname;
-    var parts = path.split(/\//);
-    $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
-      if (this == '..')
-        parts.pop();
-    });
-    var url = parts.join('/');
-    return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
-  }
-};
-
-// quick alias for translations
-_ = Documentation.gettext;
-
-$(document).ready(function() {
-  Documentation.init();
-});

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/tutorial/_build/html/_static/down-pressed.png
----------------------------------------------------------------------
diff --git a/tutorial/_build/html/_static/down-pressed.png 
b/tutorial/_build/html/_static/down-pressed.png
deleted file mode 100644
index 6f7ad78..0000000
Binary files a/tutorial/_build/html/_static/down-pressed.png and /dev/null 
differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/tutorial/_build/html/_static/down.png
----------------------------------------------------------------------
diff --git a/tutorial/_build/html/_static/down.png 
b/tutorial/_build/html/_static/down.png
deleted file mode 100644
index 3003a88..0000000
Binary files a/tutorial/_build/html/_static/down.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/tutorial/_build/html/_static/file.png
----------------------------------------------------------------------
diff --git a/tutorial/_build/html/_static/file.png 
b/tutorial/_build/html/_static/file.png
deleted file mode 100644
index d18082e..0000000
Binary files a/tutorial/_build/html/_static/file.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/d4b154cb/tutorial/_build/html/_static/haiku.css
----------------------------------------------------------------------
diff --git a/tutorial/_build/html/_static/haiku.css 
b/tutorial/_build/html/_static/haiku.css
deleted file mode 100644
index 1b7c261..0000000
--- a/tutorial/_build/html/_static/haiku.css
+++ /dev/null
@@ -1,371 +0,0 @@
-/*
- * haiku.css_t
- * ~~~~~~~~~~~
- *
- * Sphinx stylesheet -- haiku theme.
- *
- * Adapted from http://haiku-os.org/docs/Haiku-doc.css.
- * Original copyright message:
- *
- *     Copyright 2008-2009, Haiku. All rights reserved.
- *     Distributed under the terms of the MIT License.
- *
- *     Authors:
- *              Francois Revol <[email protected]>
- *              Stephan Assmus <[email protected]>
- *              Braden Ewing <[email protected]>
- *              Humdinger <[email protected]>
- *
- * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-@import url("basic.css");
-
-html {
-    margin: 0px;
-    padding: 0px;
-    background: #FFF url(bg-page.png) top left repeat-x;
-}
-
-body {
-    line-height: 1.5;
-    margin: auto;
-    padding: 0px;
-    font-family: "DejaVu Sans", Arial, Helvetica, sans-serif;
-    min-width: 59em;
-    max-width: 70em;
-    color: #333333;
-}
-
-div.footer {
-    padding: 8px;
-    font-size: 11px;
-    text-align: center;
-    letter-spacing: 0.5px;
-}
-
-/* link colors and text decoration */
-
-a:link {
-    font-weight: bold;
-    text-decoration: none;
-    color: #dc3c01;
-}
-
-a:visited {
-    font-weight: bold;
-    text-decoration: none;
-    color: #892601;
-}
-
-a:hover, a:active {
-    text-decoration: underline;
-    color: #ff4500;
-}
-
-/* Some headers act as anchors, don't give them a hover effect */
-
-h1 a:hover, a:active {
-    text-decoration: none;
-    color: #0c3762;
-}
-
-h2 a:hover, a:active {
-    text-decoration: none;
-    color: #0c3762;
-}
-
-h3 a:hover, a:active {
-    text-decoration: none;
-    color: #0c3762;
-}
-
-h4 a:hover, a:active {
-    text-decoration: none;
-    color: #0c3762;
-}
-
-a.headerlink {
-    color: #a7ce38;
-    padding-left: 5px;
-}
-
-a.headerlink:hover {
-    color: #a7ce38;
-}
-
-/* basic text elements */
-
-div.content {
-    margin-top: 20px;
-    margin-left: 40px;
-    margin-right: 40px;
-    margin-bottom: 50px;
-    font-size: 0.9em;
-}
-
-/* heading and navigation */
-
-div.header {
-    position: relative;
-    left: 0px;
-    top: 0px;
-    height: 85px;
-    /* background: #eeeeee; */
-    padding: 0 40px;
-}
-div.header h1 {
-    font-size: 1.6em;
-    font-weight: normal;
-    letter-spacing: 1px;
-    color: #0c3762;
-    border: 0;
-    margin: 0;
-    padding-top: 15px;
-}
-div.header h1 a {
-    font-weight: normal;
-    color: #0c3762;
-}
-div.header h2 {
-    font-size: 1.3em;
-    font-weight: normal;
-    letter-spacing: 1px;
-    text-transform: uppercase;
-    color: #aaa;
-    border: 0;
-    margin-top: -3px;
-    padding: 0;
-}
-
-div.header img.rightlogo {
-    float: right;
-}
-
-
-div.title {
-    font-size: 1.3em;
-    font-weight: bold;
-    color: #0c3762;
-    border-bottom: dotted thin #e0e0e0;
-    margin-bottom: 25px;
-}
-div.topnav {
-    /* background: #e0e0e0; */
-}
-div.topnav p {
-    margin-top: 0;
-    margin-left: 40px;
-    margin-right: 40px;
-    margin-bottom: 0px;
-    text-align: right;
-    font-size: 0.8em;
-}
-div.bottomnav {
-    background: #eeeeee;
-}
-div.bottomnav p {
-    margin-right: 40px;
-    text-align: right;
-    font-size: 0.8em;
-}
-
-a.uplink {
-    font-weight: normal;
-}
-
-
-/* contents box */
-
-table.index {
-    margin: 0px 0px 30px 30px;
-    padding: 1px;
-    border-width: 1px;
-    border-style: dotted;
-    border-color: #e0e0e0;
-}
-table.index tr.heading {
-    background-color: #e0e0e0;
-    text-align: center;
-    font-weight: bold;
-    font-size: 1.1em;
-}
-table.index tr.index {
-    background-color: #eeeeee;
-}
-table.index td {
-    padding: 5px 20px;
-}
-
-table.index a:link, table.index a:visited {
-    font-weight: normal;
-    text-decoration: none;
-    color: #dc3c01;
-}
-table.index a:hover, table.index a:active {
-    text-decoration: underline;
-    color: #ff4500;
-}
-
-
-/* Haiku User Guide styles and layout */
-
-/* Rounded corner boxes */
-/* Common declarations */
-div.admonition {
-    -webkit-border-radius: 10px;
-    -khtml-border-radius: 10px;
-    -moz-border-radius: 10px;
-    border-radius: 10px;
-    border-style: dotted;
-    border-width: thin;
-    border-color: #dcdcdc;
-    padding: 10px 15px 10px 15px;
-    margin-bottom: 15px;
-    margin-top: 15px;
-}
-div.note {
-    padding: 10px 15px 10px 80px;
-    background: #e4ffde url(alert_info_32.png) 15px 15px no-repeat;
-    min-height: 42px;
-}
-div.warning {
-    padding: 10px 15px 10px 80px;
-    background: #fffbc6 url(alert_warning_32.png) 15px 15px no-repeat;
-    min-height: 42px;
-}
-div.seealso {
-    background: #e4ffde;
-}
-
-/* More layout and styles */
-h1 {
-    font-size: 1.3em;
-    font-weight: bold;
-    color: #0c3762;
-    border-bottom: dotted thin #e0e0e0;
-    margin-top: 30px;
-}
-
-h2 {
-    font-size: 1.2em;
-    font-weight: normal;
-    color: #0c3762;
-    border-bottom: dotted thin #e0e0e0;
-    margin-top: 30px;
-}
-
-h3 {
-    font-size: 1.1em;
-    font-weight: normal;
-    color: #0c3762;
-    margin-top: 30px;
-}
-
-h4 {
-    font-size: 1.0em;
-    font-weight: normal;
-    color: #0c3762;
-    margin-top: 30px;
-}
-
-p {
-    text-align: justify;
-}
-
-p.last {
-    margin-bottom: 0;
-}
-
-ol {
-    padding-left: 20px;
-}
-
-ul {
-    padding-left: 5px;
-    margin-top: 3px;
-}
-
-li {
-    line-height: 1.3;
-}
-
-div.content ul > li {
-    -moz-background-clip:border;
-    -moz-background-inline-policy:continuous;
-    -moz-background-origin:padding;
-    background: transparent url(bullet_orange.png) no-repeat scroll left 
0.45em;
-    list-style-image: none;
-    list-style-type: none;
-    padding: 0 0 0 1.666em;
-    margin-bottom: 3px;
-}
-
-td {
-    vertical-align: top;
-}
-
-tt {
-    background-color: #e2e2e2;
-    font-size: 1.0em;
-    font-family: monospace;
-}
-
-pre {
-    border-color: #0c3762;
-    border-style: dotted;
-    border-width: thin;
-    margin: 0 0 12px 0;
-    padding: 0.8em;
-    background-color: #f0f0f0;
-}
-
-hr {
-    border-top: 1px solid #ccc;
-    border-bottom: 0;
-    border-right: 0;
-    border-left: 0;
-    margin-bottom: 10px;
-    margin-top: 20px;
-}
-
-/* printer only pretty stuff */
-@media print {
-    .noprint {
-        display: none;
-    }
-    /* for acronyms we want their definitions inlined at print time */
-    acronym[title]:after {
-        font-size: small;
-        content: " (" attr(title) ")";
-        font-style: italic;
-    }
-    /* and not have mozilla dotted underline */
-    acronym {
-        border: none;
-    }
-    div.topnav, div.bottomnav, div.header, table.index {
-        display: none;
-    }
-    div.content {
-        margin: 0px;
-        padding: 0px;
-    }
-    html {
-        background: #FFF;
-    }
-}
-
-.viewcode-back {
-    font-family: "DejaVu Sans", Arial, Helvetica, sans-serif;
-}
-
-div.viewcode-block:target {
-    background-color: #f4debf;
-    border-top: 1px solid #ac9;
-    border-bottom: 1px solid #ac9;
-    margin: -1px -12px;
-    padding: 0 12px;
-}
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to