ministreaming protocol ********************** Each message looks like the following 1 byte type 3 byte id x byte payload. messages from client to server have type 0xA0 to 0xAF, messages from server to client have type 0x50 to 0x5F. Each "connections" has 2 IDs, a client ID and a server ID. These IDs may be any 3-byte values except 00 00 00, which is reserved. All connections are created as PROP_RELIABILITY_GUARANTEED. "actions" are the things a proper ministreaming implementation SHOULD do when it receives such a message. A "ministreaming connection" is a connection where the user of the library can send data into or receive from. Client->Server: =============== 0xA0 Send data id: the server id payload: the data to send actions: send the data to the ministreaming connection 0xA1 SYN id: the client id payload: the public key dynamically created by the client actions: create a server ID and create a ministreaming connection. When successful, send an ACK back, otherwise a close. 0xA2 Close id: the server id payload: nothing actions: close the connection Server->Client ============== 0x50 Send data id: the client id payload: the data to send actions: send the data to the ministreaming connection 0x51 ACK id: the client id payload: the server id actions: nothing 0x52 Close id: the client id payload: nothing actions: close the connection Sample conversations: ===================== a) Service not available (e.g. the server is not accepting connections) C->S A1 12 34 56 key... (SYN, client ID = 12 34 56) S->C 52 12 34 56 (Close) b) Service available, server sends data, client closes C->S A1 23 45 67 key... (SYN) S->C 51 23 45 67 98 76 54 (ACK, server ID = 98 76 54) S->C 50 23 45 67 data (Send data) C->S A2 98 76 54 (Close) c) Service available, client sends data first, server closes after answer (HTTP) C->S A1 11 11 11 key... (SYN) S->C 51 11 11 11 FF FF FF (ACK) C->S A0 FF FF FF data (send data) S->C 50 11 11 11 data (answer with data) S->C 50 11 11 11 data (more data) S->C 51 11 11 11 (Close)