DC protocol extension.
----------------------

* Search by content
  -----------------

To be more efficient while searching, the search by content has been added.

2 DC commands have been modified:
$Search (to start a search)
and
$SR (the search result)

$Search change:
===============

a normal $Search command is like this:
$Search sender a?b?c?d?e
where sender is "Hub:nick" for passive search or "ip:port" for active search.
a is F if size doesn't matter, else T
b is F if size is "at least", else T (at most)
c is the size in byte
d is data type: 1=any,2=audio,3=compressed,4=document,5=exe,6=picture,7=videos,
                8=folder
and eeee is the pattern to find

To remain compatible with DC, it is not possible to add new field. I have
modified the 'a' field (the wanted size)

now, the command is like this:
$Search sender a.md?b?c?d?e

where md is a MD5SUM (see below).

$SR change:
===============

a normal $SR command is like this:
$SR sender a\5b c\5d (e)
(\5 is the character '\005')
where sender is the nickname of the person sending this reply.
a is the found filename.
b is the filesize
c is the slot ratio (freeslot/total slot)
d is the hubname
e is the hub address.

To remain compatible with DC, it is not possible to add new field. I have
modified the 'b' field (the filesize)

now, the command is like this:
$SR sender a\5b.md c\5d (e)

where md is a MD5SUM (see below).

Note on compatibility: For a strange reason, on the hub, there is no warning when 
the modified $Search is sent but there is a warning when the $SR is sent (only
in passive mode because active mode doesn't use the hub). It is only a warning
and the extension works fine.

--------------------------------------------------------------------------------
MD5SUM computation.

the MD5SUM is computed on the first 4KBytes of the file using the standard
MD5 algorithm (see md.c file of DCTC). The algorithm produces a non printable
16 bytes string. To be able to send it using the DC protocol, the string is
rewritten. The 16 bytes non printable string is converted into a 48 bytes
printable string using the following very simple rule. Each byte of MD5sum is
written in a 3 decimal characters string. Ex:
254 is written "254", 136 becomes "136", 28 becomes "028". 

This is not the most efficient way of storing the value but using this, the
filesize (c) and the encoded MD5sum (md) looks like a float (c.md). Ex:
35345.111222333444555666777888999000111222333444555666
35345 is the filesize and the part after the dot is the md5sum (bad example,
it is not possible to encode 333 ... 999 into a byte :) ). Thus, even if the
program expect a number, there will be no error.

