Difference between revisions of "Xebra Module Communication Protocol"
(New page: Category:Xebra =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 a...) |
|||
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 = | + | REQUEST = (GET_HEADER, HEADERS_IN, HEADERS_OUT, SUBPROCESS_ENVIRONMENT_VARS, GET_ARGUMENTS) |
− | HEADER = | + | | (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_IN = "#HI#", {"#$#", item_name, "#%#", item_value}* , "#E#" | ||
HEADERS_OUT = "#HO#", {"#$#", item_name, "#%#", item_value}* , "#E#" | HEADERS_OUT = "#HO#", {"#$#", item_name, "#%#", item_value}* , "#E#" | ||
SUBPROCESS_ENVIRONMENT_VARS = "#SE#", {"#$#", 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}* | ||
+ | |||
+ | |||
</code> | </code> | ||
Revision as of 12:35, 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