Basic description of Hotline protocol:
--------------------------------------

An hotline block is like this
   [HL Header  --> it contains a task type (0->0xFFFFFF)]
      0 upto 65535 * [HL chunk --> it contains a chunk_type (0->0xFFFF)
                      and chunk_type (upto 65534 bytes) ]
For every task type, a list of chunk_type can appear, some of them can
be optionnal.

example:
 * when someone post a message to someone, we have this kind of block.
   [HEADER=POST_MESSAGE]
       [CHUNK_TYPE=MESSAGE "this is a test"]
       [CHUNK_TYPE=USERNAME  "someone"]

 * when someone logs in (not guest account), we have this kind of block.
   [HEADER=LOGIN]
       [CHUNK_TYPE=LOGIN "toto"]
       [CHUNK_TYPE=PASSWORD "tutu"]
       [CHUNK_TYPE=NICKNAME "nick"]

 * when someone logs in (guest account), we have this kind of block.
   [HEADER=LOGIN]
       [CHUNK_TYPE=LOGIN "guest"]
       [CHUNK_TYPE=NICKNAME "nick"]

Each hotline block has its number. When replying to a block, you must
use source block number.

Header structure is something like this:
- command code (In client->server dialog, this is the task you want to
                perform. In server->client dialog, it is always
                HTLS_HDR_TASK for synchronous tasks) (32 bits). 
- a block number (32 bits)
- a flag (In client->server dialog, it has no meaning and must be set to 0.
          In server->client, if 1, the task fails, 0, it is done correctly).
- the length of the block
- the number of chunks.

Some value of command code are already used by hotline (0x00000000-0x000001FF
and 0xuntil now) and by GHX/HSX (0x00000500-0x00000800).

Chunk structure looks like this:
- a type (for a same type number, the content differs according to the command
  code. For instance, 0x0065 is used as message post, message in chat and
  message in private message) (16bits).
- the length of the chunk (you can send more than 65520 bytes in a chunk)
  (16 bits).

--------------------------------------------------------------------------------
Typical replies:
----------------

2 replies are mainly encountered:
- Task OK: [HEADER: cmd=HTLS_HDR_TASK, flag=0, nb_chunk=0]
- Task Error: [HEADER: cmd=HTLS_HDR_TASK, flag=1, nb_chunk=1
                [CHUNK: type=HTLS_DATA_TASKERROR, param="the error message"]
              ]


