Difference between revisions of "Xebra Module Communication Protocol"
Line 13: | Line 13: | ||
For every request, the module sends a message of the following format to the server: | For every request, the module sends a message of the following format to the server: | ||
<code> | <code> | ||
− | REQUEST = (GET_HEADER | + | REQUEST = (GET_HEADER HEADERS_IN HEADERS_OUT SUBPROCESS_ENVIRONMENT_VARS GET_ARGUMENTS) |
− | | (POST_HEADER | + | | (POST_HEADER HEADERS_IN HEADERS_OUT SUBPROCESS_ENVIRONMENT_VARS POST_ARGUMENTS) ; |
− | GET_HEADER = "GET" | + | GET_HEADER = "GET" HEADER; |
− | POST_HEADER = "POST" | + | POST_HEADER = "POST" HEADER; |
− | HEADER = " " | + | HEADER = " " url " HTTP/1.1"; |
− | HEADERS_IN = "#HI#" | + | HEADERS_IN = "#HI#" {"#$#" item_name "#%#" item_value} "#E#"; |
− | HEADERS_OUT = "#HO#" | + | HEADERS_OUT = "#HO#" {"#$#" item_name "#%#" item_value} "#E#"; |
− | SUBPROCESS_ENVIRONMENT_VARS = "#SE#" | + | SUBPROCESS_ENVIRONMENT_VARS = "#SE#" {"#$#" item_name "#%#" item_value} "#E#"; |
− | GET_ARGUMENTS = "#A#" | + | GET_ARGUMENTS = "#A#" {"$" arg_name "=" arg_value} "#E#"; |
− | POST_ARGUMENTS = "#A##CT#" | + | POST_ARGUMENTS = "#A##CT#" content_type "#CTE#" (TABLE_POST_DATA | post_data) "#E#"; |
− | TABLE_POST_DATA = {"$" | + | TABLE_POST_DATA = {"$" arg_name "=" arg_value}; |
Line 39: | Line 39: | ||
The server answers with a response message of the following format: | The server answers with a response message of the following format: | ||
<code> | <code> | ||
− | RESPONSE = {COOKIE_ORDER} | + | RESPONSE = {COOKIE_ORDER} CONTENT_TYPE HTML; |
− | COOKIE_ORDER = "#C#" | + | COOKIE_ORDER = "#C#" cookie_name "=" cookie_value COOKIE_OPT ";Version=1#CE#"; |
− | COOKIE_OPT = [ | + | COOKIE_OPT = [";" "Domain=" cookie_domain] |
− | [ | + | [";" "Max-Age=" cookie_max_age] |
− | [ | + | [";" "Path=" cookie_path] |
− | [ | + | [";" "Secure"]; |
− | CONTENT_TYPE = "#CT#" | + | CONTENT_TYPE = "#CT#" content_type; |
− | HTML = "#H#" | + | HTML = "#H#" html_code; |
</code> | </code> | ||
Revision as of 12:45, 30 June 2009
Basic Communication
For every string message that is to be sent between a module and server, the sender first sends the length of the message ENCODED_MESSAGE_LENGTH and then the message MESSAGE. The max length FRAG_SIZE of a message to be sent is 65536 bytes. If a message is longer, it is divided into fragments. ENCODED_MESSAGE_LENGTH is called ENCODED_ because it also contains a FRAG_FLAG which specifies if the next message is a fragment and has to be assembled to a whole message after receiving.
Let's say the server wants so send a message of size 150'000 bytes to the module. The following would be sent: [65536 FRAG_FLAG=1][Message part 1...][65536 FRAG_FLAG=1][Message part 2....][18928 FRAG_FLAG=0][Message part 3....]
The ENCODED_MESSAGE_LENGTH is constructed as follows: The lenght of the message (integer) is shifted by 1 bit to the left. Then the most right bit is set to FRAG_FLAG.
Request Message
For every request, the module sends a message of the following format to the server:
REQUEST = (GET_HEADER HEADERS_IN HEADERS_OUT SUBPROCESS_ENVIRONMENT_VARS GET_ARGUMENTS) | (POST_HEADER HEADERS_IN HEADERS_OUT SUBPROCESS_ENVIRONMENT_VARS POST_ARGUMENTS) ; GET_HEADER = "GET" HEADER; POST_HEADER = "POST" HEADER; HEADER = " " url " HTTP/1.1"; HEADERS_IN = "#HI#" {"#$#" item_name "#%#" item_value} "#E#"; HEADERS_OUT = "#HO#" {"#$#" item_name "#%#" item_value} "#E#"; SUBPROCESS_ENVIRONMENT_VARS = "#SE#" {"#$#" item_name "#%#" item_value} "#E#"; GET_ARGUMENTS = "#A#" {"$" arg_name "=" arg_value} "#E#"; POST_ARGUMENTS = "#A##CT#" content_type "#CTE#" (TABLE_POST_DATA | post_data) "#E#"; TABLE_POST_DATA = {"$" arg_name "=" arg_value};
Example
Response Message
The server answers with a response message of the following format:
RESPONSE = {COOKIE_ORDER} CONTENT_TYPE HTML; COOKIE_ORDER = "#C#" cookie_name "=" cookie_value COOKIE_OPT ";Version=1#CE#"; COOKIE_OPT = [";" "Domain=" cookie_domain] [";" "Max-Age=" cookie_max_age] [";" "Path=" cookie_path] [";" "Secure"]; CONTENT_TYPE = "#CT#" content_type; HTML = "#H#" html_code;