
The I/O is made as follows:

+---+     +----+     +----+     +----+                +----+     +----+
| T |<--->| P1 |<--->| P2 |<--->| P3 |<--->  **  <--->| Pn |<--->| CS |
*---+     *----+     *----+     *----+                *----+     *----+

T  - Transport level. At this level we store the inbound data into a buffer
     or send the data from the output buffer. This layer may or may not
     have a IOHandler attached. This give us the possibility of having
     stateless communication like a chain of protocols in which HTTP is
     the edge protocol with the outside world. Basically, this layer
     will do I/O whenever a carrier is available.

P1 to Pn - Protocol levels. At this levels we do packing/unpacking of the
           data provided either by the transport level or by the previous
           protocol. This way we can stack multiple protocol on top of each
           other. For example we could have RTMP over HTTP, or RTMP over some
           kind of compressing protocol over base64 over HTTP

CS - Connection state. At this level we do the business logic of the connection.
     All the data passed in and out of this level is translated relative to the
     business logic of the connection. For example in a RTMP connection this
     layer will receive only RTMP messages.

Below we have some possible chains of protocols:

1. TCP <--> HTTP <--> XMLRPC <--> Application Server State
2. TCP <--> RTMP <--> RTMP Connection State
3. TCP <--> HTTP <--> RTMP <--> RTMP Connection State
4. TCP <--> Encription <--> RTMP <--> RTMP Connection State
5. TCP <--> HTTP <--> Encription <--> RTMP <--> RTMP Connection State
...


Obviously, not all protocols stacks presented above find usage in reality. They
where presented only as examples.
