The billdb module keeps track of the local copy of the billing log database by reciving billing log entries from other modules and storing them in a local database. 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 commit new records, it issues a commit request in this format: BILLINGENTRY BILLINGENTRY ... where BILLINGENTRY is a record formated like this: 0) equip_num INT\t 1) driver INT\t 2) paddle INT\t 3) route INT\t 4) trip INT\t 5) stop INT\t 6) ride_time TIMESTAMP\t 7) latitude DOUBLE\t 8) longitude DOUBLE\t 9) action VARCHAR(16)\t 10) rule VARCHAR(24)\t 11) ruleparam VARCHAR(24)\t 12) reason VARCHAR(32)\t 13) credential VARCHAR(32)\t 14) cash_value INT\t 15) stop_name VARCHAR(64)\n OR a log entry formatted like this: [!*#]some data....\n The serevr will reply to EVERY message with either: DUP md5sum or ACK md5sum or IGN md5sum Either if which will allow the client to remove its local copy of the log entry. Do not reply with ACK or DUP until the row has been stored to the server-side database. Reply with IGN if you have been sent garbage and want the client to stop retrying that garbage string.