%%$OpenXM: OpenXM/doc/issac2000/ox-messages.tex,v 1.6 2000/01/15 12:18:42 takayama Exp $ \section{OX messages} An OX message for TCP/IP is a byte stream consisting of a header and a body. \begin{center} \begin{tabular}{|c|c|} \hline Header & \hspace{10mm} Body \hspace{10mm} \\ \hline \end{tabular} \end{center} The header consists of two signed 32 bit integers. The first one is an OX tag and the second one is a serial number of the OX message. %Negative numbers are expressed by the two's complement. Several byte orders including the network byte order are allowed and the byte order is determined as a part of the establishment of a connection. See Section \ref{secsession} for details. The OX messages are classified into three types: DATA, COMMAND, and SPECIAL. We have currently the following general tags for the OX messages. \begin{verbatim} #define OX_COMMAND 513 // COMMAND #define OX_DATA 514 // DATA #define OX_SYNC_BALL 515 // SPECIAL #define OX_DATA_WITH_LENGTH 521 // DATA #define OX_DATA_OPENMATH_XML 523 // DATA #define OX_DATA_OPENMATH_BINARY 524 // DATA #define OX_DATA_MP 525 // DATA \end{verbatim} New OX tags may be added. The new tag should be classified into DATA or COMMAND. For example, \verb+ OX_DATA_ASIR_LOCAL_BINARY + was added recently to send internal serialized objects of asir via the OpenXM protocol. This is a tag classified to DATA. See the web page of OpenXM to add a new tag \cite{openxm-web}. Any server is a stack machine (see Section~\ref{sec:ox-stackmachines} for detail). {\it OX data} message sent by a client are pushed onto the stack of a server. If the server gets an {\it OX command} message, then the server executes the command. For example, the asir command {\tt ox\_push\_cmo(P,1)} (push integer $1$ onto the server $P$) sends an OX data message {\tt (OX\_DATA,(CMO\_ZZ,1))} to the server $P$. Here, OX\_DATA stands for OX\_DATA header and {\tt (CMO\_ZZ,1)} is a body standing for $1$ expressed in the CMO data encoding format. The server tranlates $(CMO\_ZZ, 1)$ to its own internal object fotrmat for integers and pushs the object onto the stack. %An OpenXM client admit that its own command sends some OX messages %sequentially at once. % %For example, the asir command %{\tt ox\_execute\_string(P, "Print[x+y]")} sends an OX data message %{\tt (OX\_DATA, (CMO\_STRING, "Print[x+y]"))} and an OX command message %{\tt (OX\_COMMAND, (SM\_executeStringByLocalParser))} to an OpenXM %server.