diff --git a/.gitattributes b/.gitattributes index 092580a..d06e599 100644 --- a/.gitattributes +++ b/.gitattributes @@ -95,6 +95,7 @@ libevent/test/test-init.c -text libevent/test/test-time.c -text libevent/test/test-weof.c -text libevent/test/test.sh -text +/mqprotocol.txt -text /mqserver.cfg -text sqlite/Makefile.in -text sqlite/Makefile.linux-gcc -text diff --git a/mqprotocol.txt b/mqprotocol.txt new file mode 100644 index 0000000..a2bb222 --- /dev/null +++ b/mqprotocol.txt @@ -0,0 +1,312 @@ +MQServer Client Protocol: + +Packet: +MID|MSGTYPE|VERSION|LEN|FLAGS|CRC|DATA\0\0 + +SID: Message ID, unique, generated by initiator + +MSGTYPE: The type of message, see below + +VERSION: The protocol version. Currently, V1. + +LEN: The length of the message. + +FLAGS: Flags Specific to this message. See below. + +CRC: CRC Checksum for entire message. + +DATA: Encoded Binary Data. See http://www.sqlite.org/faq.html#q12 for possible encoders. + +\0 Message Terminated by Null Char. + +MessageType: (Initiator) +ACK (C/S)- Ack a previous message that requires it. +ERROR (C/S)- Indicate a error. +SRVCAP (S)- Server Capabilities +AUTH (C)- Authentication +CLNTCAP (C)- Client Capabilities +APPID (C)- Application ID's that has signed on. Can be resent as required. +NOTIFY (C)- Request for notification if a client signs on +FINDQUEUE (C)- Information about a queue. +PRESENCE (S)- Notify client about a signon or queue existance +JOINQUEUE (C)- Join a Queue +PARTQUEUE (C)- part a Queue +CREATEQUEUE (C)- Create a new Queue, Not active till you joinqueue. +QUEUEINFO (S)- return Info About Queue. after findqueue, or joinqueue +ALTERQUEUE (C/S)- Alter informationa about a queue and propogate to clients +SENDTOQUEUE (C)- Send a message to a queue. +GETFROMQUEUE (C)- Get a message from a queue. +MSGFROMQUEUE (S)- send either a broadcast message or reply to a GETFROMQUEUE request +SENDTOCLNT (C)- Send a message to a client +MSGFROMCLNT (S)- Recieve a message from a client. + +Flags: +REQUIREACK - This message requires a ack to acknowledge its recieved. +REQUIREACKPROCESS - This messages requires a ack to acknowledge it has been processed. + + +Connection Sequence: +Client State Server State +Client Connects SRVCAP + CLNTCAP + ACK Server Initiates caps + AUTH + ACK +Client Logged In. + APPID + MSGFRCLNT Send Stored Message. + ACK + MSGFRCLNT Continue to send. + ACK + PRESENCE send client presence +Client Synced. Now can proceed with normal functions. + + + + + + +Message Type Details: +----------------------------------------------------------------------------------------------- +ACK +A ack message is sent to acknowledge a previous message. Depending upon the previous message flags, +or previous message type, acks will be sent so the client knows it has been processed. In some cases +ACK may also be used to indicate we recieved your message, but there was a error. + +Packet: +|ACK|1||0||\0 + +MID: Message No we are ACK'ing. +LEN: Length of message +CRC: CRC of Message +ACKMESS: Dependant on what we are ACK'ing. See Other MessageTypes. + +From: +Client or Server + +ACK: +Never + +ERROR: +None. + +----------------------------------------------------------------------------------------------- +ERROR +A error message indicates a critical error of some sort. In most cases, the connection will be shutdown +after the error message has been sent. +ERROR's Can not request ACK's + +Packet: +|ERROR|1||0||< >\0 + +MID: Message from other side that generated error. +LEN: Length of message +CRC: CRC of Message +ERRID: Unique Error Code +ERRMSG: Additional Information about Error + +From: +Client or Server + +ACK: +Never + +ERROR: +None. + +----------------------------------------------------------------------------------------------- +AUTH +A Auth message is to authenticate the client to the server. Requires a ACK to Acknowledge success/failure of the auth process. +Auth Messages are only sent after recieving a SRVCAP. + +Packet: +|AUTH|1||0||< >\0 + +MID: Message ID +LEN: Length of Message +CRC: CRC of Message +UNAME: Username of client +PASS: Password hashed using salt sent in SRVCAP message. + +From: +Client + +ACK: +Yes +Successfull Login: + = 1 +Un-Successfull Login: + = 0 +Account ERROR: + = -1| + +Where Message is the error message. + +ERROR: +Never. + +----------------------------------------------------------------------------------------------- +SRVCAP +Server Capabilities. Sent during initial client connection (Banner) to indicate what the server is capable of in terms of protocol or application. + +Packet: +0|SRVCAP|1||0||< >\0 + +LEN: Length of Message +CRC: CRC of Message +PWHASH: Salt to use to encrypt password. +CAPFLAGS: Flags indicating what capabilities server has. +CAPDETAILS: Strings indicating any additional variables for server Capabilities. + +From: +Server + +ACK: +Via CLNTCAP message only. + +ERROR: +Never. + +Notes: +If a client can't support the server caps, it should disconnect. + +----------------------------------------------------------------------------------------------- +APPID +Application ID's of available applications active on client. Must be sent after CLNTCAP Acknowledgement, to indicate what application topics are available on client for P2P messages. + +Packet: +|APPID|1||0||< >\0 + +MID: Message ID. +LEN: Length of message +CRC: CRC of message +APPID: Numeric Application ID's available. Can specify Multiple Times. + +From: +Client + +ACK: +No. + +ERROR: +No. + +Notes: Can send any time during connection as well to indicate the availability of new applications. + +----------------------------------------------------------------------------------------------- +NOTIFY +Client Requests to be notified of any signons of other users listed. Can be used to adjust notificaiton lists. + +Packet: +|NOTIFY|1||0||<+/- +/->\0 + +MID: Message ID. +LEN: Length of message +CRC: CRC of message ++/-USER: Users to add or remove from notify list. If not Users are specified, send list. +If removing a user that is not on the list, silently ignore. + +From: +Client + +ACK: +YES +If Adding/Removing Users ACKMSG is blank. + + +If Requesting List: +List of users: +ACKMSG = + +ERROR: +Yes +User does not exist. +ERRID: ENOUSER +ERRMSG: + +NOTIFY List full: +ERRID: NOTLISTFULL +ERRMSG: empty. + + +Notes: Can send any time during connection as well to modify the notification list. + +----------------------------------------------------------------------------------------------- +FINDQUEUE +Client requests information about a queue. Data is returned as a QUEUEINFO message. + +Packet: +|FINDQUEUE|1||0|| >\0 + +MID: Message ID. +LEN: Length of message +CRC: CRC of message +QUEUE: Queue Names to find and return info on. + + +From: +Client + +ACK: +Via QUEUEINFO message for queues found. Otherwise ERROR. + +ERROR: +Yes +QUEUE does not exist. +ERRID: ENOQUEUE +ERRMSG: + + +Notes: + +----------------------------------------------------------------------------------------------- +PRESENCE +Notify Client about another clients signon, or APPID changes. + +Packet: +|PRESENCE|1||0||<+ + >\0 + +MID: Message ID. +LEN: Length of message +CRC: CRC of message ++USER: User that just signed on, or when appid's changed. +APPID: List of applications ID's for this user. + + +From: +Client + +ACK: +No. + +ERROR: +No. + +Notes: + +----------------------------------------------------------------------------------------------- +JOINQUEUE +Join A Queue. Queue Security will determine if you can join or not, and if you can send recieve. + +Packet: +|JOINQUEUE|1||0||< >\0 + +MID: Message ID. +LEN: Length of message +CRC: CRC of message +QUEUE: Queue you are requesting to Join. +Flags: +DEAF - Recieve no messages from this queue. + + + +From: +Client + +ACK: +No. + +ERROR: +No. + +Notes: