diff --git a/asrc-server.py b/asrc-server.py index b369a83..b65105f 100755 --- a/asrc-server.py +++ b/asrc-server.py @@ -25,8 +25,8 @@ # aSRC (Aliased Server Remote Control) # - SERVER - # -# program version: 0.0.0.20130422 -# protocol version: 0.2.20130422 +# program version: 0.0.0.20130423 +# protocol version: 0.2.20130423 # # @@ -35,6 +35,81 @@ import sys, os, socket, socketserver, threading, time +def motd(): + return MOTD + + +def content(client_address, data): + ret = "" + + ret = ret + + "{BEGIN}\n"\ + "asrcp" + ProtocolVersion + "\n" + + # Look if the received message is an + # valid alias or a predefined command + + # if it's 'version', return the server and protocol version + if data == "version": + + if DEBUGLEVEL >= 2: print("Got valid service command from" + + str(client_address) + ": ", data) + + ret = ret + + "202 Valid Service Command\n"\ + "002 Version\n"\ + "ServerVersion:" + ServerVersion + "\n"\ + "ProtocolVersion:" + ProtocolVersion + "\n" + + # if it's 'help', give a little help + elif data == 'help': + + if DEBUGLEVEL >= 2: print("Got valid command from" + + str(client_address) + ": ", data) + + # send status code + ret = ret + "202 Valid Service Command\n\n" + + # send the list of aliases + ret = ret + "Aviable aliases:\n" + for i in aliases.keys(): + ret = ret + str(i) + "\n" + + # if it's a valid userdefined command + elif data in aliases: + + # send status code + ret = ret + "201 Valid Command\n\n" + + # ohmagawd! a debug message!!1! + if DEBUGLEVEL >= 2: print("Got valid command from" + + str(client_address) + ": ", data) + + # execute the aliased command + g_dict, l_dict = {}, {} + exec(str(aliases[data]), g_dict, l_dict) + + # send may contain data to send to the client + if l_dict["send"]: + content = str(l_dict["send"]).replace('{', '\{') + content = content.replace('}', '\}') + + ret = ret + content + "\n" + + # ALL IS LOST!!1! this has to be invalid! + else: + + # send status code + ret = ret + "203 Invalid Command\n" + + if DEBUGLEVEL >= 2: print("Got invalid command from", + str(client_address), ": ", data) + + ret = ret + "{END}\n" + + return ret + + class ThreadedRequestHandler(socketserver.StreamRequestHandler): def handle(self): @@ -46,76 +121,19 @@ class ThreadedRequestHandler(socketserver.StreamRequestHandler): if DEBUGLEVEL >=3: print("Client connected: " + str(self.client_address)) - # Send MOTD - self.request.sendall(bytes(motd + "\r\n", ENCODING)) + # send header line 1 + self.request.sendall(bytes + ("asrpc " + ProtocolVersion + "\n", ENCODING)) + + # send motd + self.request.sendall(bytes(motd() + "\n", ENCODING)) # Receive data self.data = str(self.rfile.readline().strip(), ENCODING) - - # Look if the received message is an - # valid alias or a predefined command - - # if it's 'version', return the server and protocol version - if self.data == "version": - - if DEBUGLEVEL >= 2: print("Got valid service command from" - + str(self.client_address) + ": ", self.data) - - # send status code - self.request.sendall(bytes("000 Received 'version'", ENCODING)) - - # send response - self.request.sendall(bytes( - "Server: " + ServerVersion + "\r\n"\ - "Protocol: " + ProtocolVersion + "\r\n", ENCODING)) - - # if it's 'help', give a little help - elif self.data == 'help': - - if DEBUGLEVEL >= 2: print("Got valid command from" - + str(self.client_address) + ": ", self.data) - - # send status code - self.request.sendall(bytes("000 Received 'help'", ENCODING)) - - # send the list of aliases - self.request.sendall(bytes("Aviable aliases:\r\n", ENCODING)) - for i in aliases.keys(): - self.request.sendall(bytes(str(i) + "\r\n", ENCODING)) - self.request.sendall(bytes("\r\n", ENCODING)) - - # if it's a valid userdefined command - elif self.data in aliases: - - # send status code - self.request.sendall(bytes( - "<<:0x0130:Received valid command\r\n", ENCODING)) - - # ohmagawd! a debug message!!1! - if DEBUGLEVEL >= 2: print("Got valid command from" - + str(self.client_address) + ": ", self.data) - - # execute the aliased command - g_dict, l_dict = {}, {} - exec(str(aliases[self.data]), g_dict, l_dict) - - # send may contain data to send to the client - if l_dict["send"]: - self.request.sendall(bytes(str( - l_dict["send"]) + "\r\n", ENCODING)) - else: - self.request.sendall(bytes("\r\n", ENCODING)) - - # ALL IS LOST!!1! this have to be invalid! - else: - - # send status code - self.request.sendall(bytes( - "<<:0x0230:Received invalid command\r\n", ENCODING)) - - if DEBUGLEVEL >= 2: print("Got invalid command from", - str(self.client_address), ": ", self.data) + # content handler + self.request.sendall(bytes( + content(str(self.client_address), self.data), ENCODING)) class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer): @@ -123,10 +141,10 @@ class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer): def main(): - print("aSRC Server\r\n"\ - "Server version: " + ServerVersion + "\r\n"\ - "Protocol version: " + ProtocolVersion + "\r\n\r\n"\ - "To stop the server, press Ctrl-C\r\n") + print("aSRC Server\n"\ + "Server version: " + ServerVersion + "\n"\ + "Protocol version: " + ProtocolVersion + "\n\n"\ + "To stop the server, press Ctrl-C\n") try: if DEBUGLEVEL >= 1: print("Initializing server...") @@ -146,24 +164,24 @@ def main(): time.sleep(10) except KeyboardInterrupt: - print("\r\nGot Ctrl-C, shutting down server...") + print("\nGot Ctrl-C, shutting down server...") try: server.shutdown() except: print("Failed to shutdown server correctly, "\ "socket may be still in use or wasn't even started:", sys.exc_info()) except: - print("\r\nAn error occured:\r\n", sys.exc_info(), "\r\n") + print("\nAn error occured:\n", sys.exc_info(), "\n") - if DEBUGLEVEL >= 3: input("Press Enter to continue\r\n") + if DEBUGLEVEL >= 3: input("Press Enter to continue\n") return 0 if __name__ == '__main__': ServerVersion = "0.0.0" - ProtocolVersion = "0.0.0" + ProtocolVersion = "0.2" ############## @@ -213,7 +231,7 @@ send = subprocess.check_output(["ping", "-c 2", "fanir.de"]) ''') # This is sent to the client after the connection is established - motd = "Welcome! This is only a test server, for developing purposes.\r\n"\ + MOTD = "Welcome! This is only a test server, for developing purposes.\n"\ "Here (may) be more text..." # Verbosity of logging. diff --git a/doc/protocol_reference.odt b/doc/protocol_reference.odt new file mode 100644 index 0000000..174b91b Binary files /dev/null and b/doc/protocol_reference.odt differ diff --git a/doc/reference.rtf b/doc/reference.rtf deleted file mode 100644 index 20a35aa..0000000 --- a/doc/reference.rtf +++ /dev/null @@ -1,149 +0,0 @@ -{\rtf1\ansi\deff3\adeflang1025 -{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\froman\fprq2\fcharset2 Symbol;}{\f2\fswiss\fprq2\fcharset0 Arial;}{\f3\froman\fprq2\fcharset128 Liberation Serif{\*\falt Times New Roman};}{\f4\fswiss\fprq2\fcharset128 Liberation Sans{\*\falt Arial};}{\f5\fmodern\fprq1\fcharset128 DejaVu Sans Mono;}{\f6\fnil\fprq2\fcharset128 WenQuanYi Zen Hei Sharp;}{\f7\fmodern\fprq1\fcharset128 WenQuanYi Zen Hei Sharp;}{\f8\fnil\fprq2\fcharset128 Lohit Devanagari;}{\f9\fnil\fprq0\fcharset128 Lohit Devanagari;}{\f10\fmodern\fprq1\fcharset128 Lohit Devanagari;}} -{\colortbl;\red0\green0\blue0;\red128\green0\blue0;\red255\green255\blue0;\red128\green128\blue128;} -{\stylesheet{\s0\snext0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\hich\af6\langfe2052\dbch\af8\afs24\alang1081\loch\f3\fs24\lang1031 Standard;} -{\s1\sbasedon15\snext16\ilvl0\outlinelevel0\sb240\sa120\keepn\b\hich\af6\dbch\af8\afs32\ab\loch\f4\fs32 \u220\'3fberschrift 1;} -{\s2\sbasedon15\snext16\ilvl1\outlinelevel1\sb240\sa120\keepn\i\b\hich\af6\dbch\af8\afs28\ai\ab\loch\f4\fs28 \u220\'3fberschrift 2;} -{\s3\sbasedon15\snext16\ilvl2\outlinelevel2\sb240\sa120\keepn\b\hich\af6\dbch\af8\afs28\ab\loch\f4\fs28 \u220\'3fberschrift 3;} -{\s4\sbasedon15\snext16\ilvl3\outlinelevel3\sb240\sa120\keepn\i\b\hich\af6\dbch\af8\afs23\ai\ab\loch\f4\fs23 \u220\'3fberschrift 4;} -{\s15\sbasedon0\snext16\sb240\sa120\keepn\hich\af6\dbch\af8\afs28\loch\f4\fs28 \u220\'3fberschrift;} -{\s16\sbasedon0\snext16\sb0\sa120 Textk\u246\'3frper;} -{\s17\sbasedon16\snext17\sb0\sa120\dbch\af9 Liste;} -{\s18\sbasedon0\snext18\sb120\sa120\noline\i\dbch\af9\afs24\ai\fs24 Beschriftung;} -{\s19\sbasedon0\snext19\noline\dbch\af9 Verzeichnis;} -{\s20\sbasedon0\snext20\li0\ri0\lin0\rin0\fi0\sb0\sa0\hich\af7\dbch\af10\afs20\loch\f5\fs20 Vorformatierter Text;} -{\s21\sbasedon0\snext21\noline Tabellen Inhalt;} -{\s22\sbasedon21\snext22\qc\noline\b\ab Tabellen \u220\'3fberschrift;} -}{\*\listtable{\list\listtemplateid1 -{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow0{\leveltext \'00;}{\levelnumbers;}\fi-432\li432} -{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow0{\leveltext \'00;}{\levelnumbers;}\fi-576\li576} -{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow0{\leveltext \'00;}{\levelnumbers;}\fi-720\li720} -{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow0{\leveltext \'00;}{\levelnumbers;}\fi-864\li864} -{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow0{\leveltext \'00;}{\levelnumbers;}\fi-1008\li1008} -{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow0{\leveltext \'00;}{\levelnumbers;}\fi-1152\li1152} -{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow0{\leveltext \'00;}{\levelnumbers;}\fi-1296\li1296} -{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow0{\leveltext \'00;}{\levelnumbers;}\fi-1440\li1440} -{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow0{\leveltext \'00;}{\levelnumbers;}\fi-1584\li1584}\listid1} -}{\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}}{\info{\author Fanir }{\creatim\yr2013\mo4\dy22\hr21\min58}{\revtim\yr0\mo0\dy0\hr0\min0}{\printim\yr0\mo0\dy0\hr0\min0}{\comment LibreOffice}{\vern3500}}\deftab709\deftab643 - -{\*\pgdsctbl -{\pgdsc0\pgdscuse195\pgwsxn11906\pghsxn16838\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\pgdscnxt0 Standard;}} -\formshade\paperh16838\paperw11906\margl1134\margr1134\margt1134\margb1134\sectd\sbknone\sectunlocked1\pgndec\pgwsxn11906\pghsxn16838\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc -\pgndec\pard\plain \s1\ilvl0\outlinelevel0\sb240\sa120\keepn\b\hich\af6\dbch\af8\afs32\ab\loch\f4\fs32{\listtext\pard\plain \tab}\ls1 \li432\ri0\lin432\rin0\fi-432\sb240\sa120{\rtlch \ltrch\loch\lang1033 -Protocol reference} -\par \pard\plain \s2\ilvl1\outlinelevel1\sb240\sa120\keepn\i\b\hich\af6\dbch\af8\afs28\ai\ab\loch\f4\fs28{\listtext\pard\plain \tab}\ls1 \li576\ri0\lin576\rin0\fi-576{\rtlch \ltrch\loch\lang1033 -Abstract} -\par \pard\plain \s16\sb0\sa120{\rtlch \ltrch\loch\lang1033 -The current protocol version is 0.2.20130422} -\par \pard\plain \s16\sb0\sa120{\i\ai\rtlch \ltrch\loch\lang1033 -Warning: The protocol is still in development and may change often!} -\par \pard\plain \s2\ilvl1\outlinelevel1\sb240\sa120\keepn\i\b\hich\af6\dbch\af8\afs28\ai\ab\loch\f4\fs28{\listtext\pard\plain \tab}\ls1 \li576\ri0\lin576\rin0\fi-576{\rtlch \ltrch\loch\lang1033 -Structure} -\par \pard\plain \s20\li0\ri0\lin0\rin0\fi0\sb0\sa0\hich\af7\dbch\af10\afs20\loch\f5\fs20{\rtlch \ltrch\loch\lang1033 -asrcp \line \line
\line \line } -\par \pard\plain \s2\ilvl1\outlinelevel1\sb240\sa120\keepn\i\b\hich\af6\dbch\af8\afs28\ai\ab\loch\f4\fs28{\listtext\pard\plain \tab}\ls1 \li576\ri0\lin576\rin0\fi-576{\rtlch \ltrch\loch\lang1033 -Header lines} -\par \pard\plain \s16\sb0\sa120{\rtlch \ltrch\loch\lang1033 -Header lines have the form:} -\par \pard\plain \s16\sb0\sa120{\rtlch \ltrch\loch\lang1033 -name=value} -\par \pard\plain \s16\sb0\sa120{\rtlch \ltrch\loch\lang1033 -The following attributes are available:} -\par \pard\plain \s16\sb0\sa120{\rtlch \ltrch\loch\lang1033 -[[[[ INSART MOAR 'ERE!!1! ^_^ ]]]]} -\par \pard\plain \s2\ilvl1\outlinelevel1\sb240\sa120\keepn\i\b\hich\af6\dbch\af8\afs28\ai\ab\loch\f4\fs28{\listtext\pard\plain \tab}\ls1 \li576\ri0\lin576\rin0\fi-576{\rtlch \ltrch\loch\lang1033 -Status Codes} -\par \trowd\trql\ltrrow\trrh472\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrt\brdrhair\brdrw1\brdrcf1\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrt\brdrhair\brdrw1\brdrcf1\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrt\brdrhair\brdrw1\brdrcf1\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s22\qc\noline\b\ab\intbl{\rtlch \ltrch\loch\lang1033 -Code}\cell\pard\plain \s22\qc\noline\b\ab\intbl{\rtlch \ltrch\loch\lang1033 -Description}\cell\pard\plain \s22\qc\noline\b\ab\intbl{\rtlch \ltrch\loch\lang1033 -Annotations}\cell\row\pard\trowd\trql\ltrrow\trrh472\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrt\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s3\ilvl2\outlinelevel2\sb240\sa120\keepn\b\hich\af6\dbch\af8\afs28\ab\loch\f4\fs28\intbl{\listtext\pard\plain \tab}\ls1 \li720\ri0\lin720\rin0\fi-720\sb240\sa120{\rtlch \ltrch\loch\lang1033 -000 - 400 server side}\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s4\ilvl3\outlinelevel3\sb240\sa120\keepn\i\b\hich\af6\dbch\af8\afs23\ai\ab\loch\f4\fs23\intbl{\listtext\pard\plain \tab}\ls1 \li864\ri0\lin864\rin0\fi-864\sb240\sa120{\rtlch \ltrch\loch\lang1033 -000 information}\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -001}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -OK}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -002}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -Server Version}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -003}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -Protocol Version}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -004}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -MOTD}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrt\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s4\ilvl3\outlinelevel3\sb240\sa120\keepn\i\b\hich\af6\dbch\af8\afs23\ai\ab\loch\f4\fs23\intbl{\listtext\pard\plain \tab}\ls1 \li864\ri0\lin864\rin0\fi-864\sb240\sa120{\rtlch \ltrch\loch\lang1033 -100 authentication and maintenance}\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -101}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -Challenge}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -102}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -Success}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -103}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -Failure}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -104}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -Too Many Tries}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrt\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s4\ilvl3\outlinelevel3\sb240\sa120\keepn\i\b\hich\af6\dbch\af8\afs23\ai\ab\loch\f4\fs23\intbl{\listtext\pard\plain \tab}\ls1 \li864\ri0\lin864\rin0\fi-864\sb240\sa120{\rtlch \ltrch\loch\lang1033 -200 command}\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -201}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -Valid}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -202}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -Valid Service Command}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -203}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -Invalid}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -204}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -Failed}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -205}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -Continue}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrt\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s4\ilvl3\outlinelevel3\sb240\sa120\keepn\i\b\hich\af6\dbch\af8\afs23\ai\ab\loch\f4\fs23\intbl{\listtext\pard\plain \tab}\ls1 \li864\ri0\lin864\rin0\fi-864\sb240\sa120{\rtlch \ltrch\loch\lang1033 -300 program}\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -301}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -Unhandled Exception}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -302}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -Shutting Down}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -303}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -Restarting}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -305}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -Encoding Failure}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -306}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -SSL Error}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrt\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s3\ilvl2\outlinelevel2\sb240\sa120\keepn\b\hich\af6\dbch\af8\afs28\ab\loch\f4\fs28\intbl{\listtext\pard\plain \tab}\ls1 \li720\ri0\lin720\rin0\fi-720\sb240\sa120{\rtlch \ltrch\loch\lang1033 -500 - 900 client side}\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s4\ilvl3\outlinelevel3\sb240\sa120\keepn\i\b\hich\af6\dbch\af8\afs23\ai\ab\loch\f4\fs23\intbl{\listtext\pard\plain \tab}\ls1 \li864\ri0\lin864\rin0\fi-864\sb240\sa120{\rtlch \ltrch\loch\lang1033 -500 information}\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -501}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -OK}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -502}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -Client Version}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -503}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -Protocol Version}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrt\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s4\ilvl3\outlinelevel3\sb240\sa120\keepn\i\b\hich\af6\dbch\af8\afs23\ai\ab\loch\f4\fs23\intbl{\listtext\pard\plain \tab}\ls1 \li864\ri0\lin864\rin0\fi-864\sb240\sa120{\rtlch \ltrch\loch\lang1033 -600 authentication and maintenance}\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -601}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -Response}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -602}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -Failure}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrt\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s4\ilvl3\outlinelevel3\sb240\sa120\keepn\i\b\hich\af6\dbch\af8\afs23\ai\ab\loch\f4\fs23\intbl{\listtext\pard\plain \tab}\ls1 \li864\ri0\lin864\rin0\fi-864\sb240\sa120{\rtlch \ltrch\loch\lang1033 -700 command}\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -700}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -Request}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -701}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -Cancel}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrt\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s4\ilvl3\outlinelevel3\sb240\sa120\keepn\i\b\hich\af6\dbch\af8\afs23\ai\ab\loch\f4\fs23\intbl{\listtext\pard\plain \tab}\ls1 \li864\ri0\lin864\rin0\fi-864\sb240\sa120{\rtlch \ltrch\loch\lang1033 -800 Program}\cell\row\pard\trowd\trql\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx698\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\cellx4113\clbrdrl\brdrhair\brdrw1\brdrcf1\clbrdrb\brdrhair\brdrw1\brdrcf1\clbrdrr\brdrhair\brdrw1\brdrcf1\cellx9638\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -801}\cell\pard\plain \s21\noline\intbl{\rtlch \ltrch\loch\lang1033 -SSL Error}\cell\pard\plain \s21\noline\intbl\rtlch \ltrch\loch\lang1033 -\cell\row\pard\pard\plain \s16\sb0\sa120\sb0\sa120\rtlch \ltrch\loch\lang1033 - -\par } \ No newline at end of file