3.1.5.2.7 Receive SOLICIT_HASH
This message is sent by the connection initiator after it reaches the LINK_STATE_CONNECTED state, if the connection initiator has already synchronized with another node in the graph.
If the message fails to conform to any of the following conditions, then the message MUST be discarded unprocessed and the connection MUST be terminated.
The Message Size MUST be at least 0x14.
Inclusion Count MUST be 0x00 or Exclusion Count MUST be 0x00.
(Inclusion Count + Exclusion Count) * 0x10 + Record Types Offset MUST be <= Hash Entry Offset.
Hash Entry Offset * 0x28 + Hash Entry Offset MUST be <= Message Size.
If the message is received when the Link is not in the LINK_STATE_CONNECTED state, the message MUST be ignored and the connection MUST be terminated.
Otherwise the local node MUST:
Set the Connection Sync Type state to SYNC_HASH and
Send (see section 3.1.7.1) an ADVERTISE message containing a list of record ranges for which the hash in the HASH_INFO_ENTRY did not match the hash generated by the responder, as follows:
The local node MUST generate an MD5 hash, as specified in section 3.1.7.31, of records in the local Node's Database for each Record Range included in the SOLICIT_HASH message.
For each range of Records where the hash included in the HASH_INFO_ENTRY does not match the local node's generated hash, the local node MUST:
Include a HASH_ENTRY_BOUNDARY containing the upper and lower bounds of the range and the number of Records within that range.
Include a RECORD_ABSTRACT for each record within that range.
The Hash Entry Boundary Count MUST be equal to the number of record ranges that did not match.
The Record Abstract Count MUST be equal to the total number of records in all the ranges that did not match.