The passdb module keeps track of the local copy of the bus pass database by polling the server from time to time to ask for updates newer than the latest locally recorded sequence number. Each message is a single line of ASCII text with tab delimited fields (there is no valid reason to allow a tab in any of the fields, any tabs inside the fields should be translated to single spaces) and terminated by a newline. When the client wants to inquire about any new records, it issues a query request in this format: QUERY 1234567890 Where QUERY is the command, then a tab character, then the newest sequence number which the local client has in its database, followed by a newline. The QUERY record has the following fields: 0) Command = QUERY 1) Sequence Number = Newest locally stored sequence number. If this number is zero, it indicates a table flush to the server, triggering a flush marker to be sent before the first reply record. The server will respond with a sequence of bus pass updates with the following allowable formats: UPDATE 1234567891 54321 2:771231232 35:111:2357 TCAT-NRIDE 7 DELETE 1234567892 938773 The UPDATE record has the following fields: 0) Command = UPDATE 1) Sequence Number = Sequence number of this update. 2) Rider ID = Unique ID of this rider's record. 3) Magstripe Token = The magnetic stripe token in the format of track:track_data by which this rider is recognized. 4) RFID Token = The RFID token in the format of n_bits:site:id by which this rider is recognized. 5) Rule Name = The name of the rule to apply to this rider. 6) Rule Parameter = An (optionally blank) parameter to pass to the rule that validates this rider. The DELETE record has the following fields: 0) Command = DELETE 1) Sequence Number = The sequence number of this deletion. 2) Rider ID = Unique ID of this rider's record. If the client requests a query from Sequence Number 0, the server will send a flush marker which will prompt the client to flush its tables before processing any further records. This is sent to prevent lag from causing a previous request's records from polluting a clean refresh. It looks like this: ZFLUSH 523498 <523498 octets of binary data> 0) Command = ZFLUSH 1) Data Size = How many bytes of zlib compressed (with deflate) binary data follow before the command stream picks up again. A flush is also triggered by the server if a query is sent with an extremely old sequence number, or a sequence number greater than the newest sequence number on the master server. After a flush in completed, the server MUST send a ZFLUSHDONE command so the client can become aware that it is no longer in ZFLUSH mode. Doing so will trigger the client to actually apply the compressed data which it received in the ZFLUSH blob. This looks like this: ZFLUSHDONE 0) Command = ZFLUSHDONE NOP 0) Command = NOP If a QUERY message results in NO data sent back to the requesting client, an NOP command will be sent to indicate that the connection is still alive. This is useful for debugging, but has little value for end-user display. -----------------------OBSOLETE---------------------------------------- - If the client requests a query from Sequence Number 0, the -server will send a flush marker which will prompt the client to flush -its tables before processing any further records. This is sent to -prevent lag from causing a previous request's records from polluting -a clean refresh. It looks like this: - -FLUSH - -0) Command = FLUSH - - A flush is also triggered by the server if a query is sent with -an extremely old sequence number, or a sequence number greater than the -newest sequence number on the master server. - - After a flush in completed, the server should send a FLUSHDONE -command so the client can become aware that it is no longer in FLUSH mode. -This looks like thise: - -FLUSHDONE - -0) Command = FLUSHDONE