Remote Backend Protocol

This is a brief description of the wire protocol used by the remote backend. This should be up to date for protocol version 20, but hasn't been thoroughly checked yet:

Message 1:
Direction: Server->Client
Format: OM <protocol version> <document count> <average length>
Description: Identifies protocol version and sends basic statistics.
When: At connection setting up time.

Message 2:
Direction: Client->Server
Format: Q<serialised query string>
        <options>
	<weighting>
	<R-set>
Description: The query, options, weighting formula and parameters, and R-set.
When: At prepare_match() time

Message 3:
Direction: Server->Client
Format: L<serialised local stats>
Description: The local database statistics

Message 4:
Direction: Client->Server
Format: G<serialised global stats>
        M<first item> <max items>
Description: The global statistics for all databases are sent,
	     and the MSet requested.
When: At get_mset() time.

Message 5:
Direction: Server->Client
Format: O<first> <lower bound> <estimated> <upper bound> <max_possible> <max_attained>\
        <#items> [<weight> <doc id> <collapse key value>]...\
        [<term> <frequency> <weight>]...
Description: The returned MSet.

Message KeepAlive:
Direction: Client->Server
Format: K
Description: Dummy message to stop the connection timing out.

Message KeepAliveResponse
Direction: Server->Client
Format: OK
Description: Dummy message to stop the connection timing out.

Message TermlistRequest:
Direction: Client->Server
Format: T<docid>
Description: The docid of the document we wish to get the termlist for.

Message TermlistResponse:
Direction: Server->Client
Format: [<within document frequency of term> <term frequency> term]
        ...
        Z

Message GetDocumentRequest:
Direction: Client->Server
Format: D<docid>
Descrption: The docid of the document we wish to get.

Message GetDocumentResponse:
Direction: Server->Client
Format: O<data from the document, encoded using encode_tname>
        <value number> <value string, encoded using encode_tname>
	...
        Z