This commit add topic negotiation to the protocol. On receiving a message from a client with version >= 1, we will generate a shared key using Diffie-Hellman. We will record also which installationID has sent us a message. This key will be passed back to the above layer, which will then use to start listening to a whisper topic (the `chat` namespace has no knowledge of whisper). When sending a message to a set of InstallationIDs, we check whether we have agreed on a topic with all of them, and if so, we will send on this separate topic, otherwise we fallback on discovery. This change is backward compatible, as long as there is no downgrade of the app on the other side. A few changes: * Factored out the DB in a separate namespace as now it is being used by multiple services (TopicService and EncryptionService). * Factored out multidevice management in a separate namespace * Moved all the test to test the whole protoocl rather than just the encryption service * Moved all the filter management in status-go
Whisper API Extension
API
shhext_getNewFilterMessages
Accepts the same input as shh_getFilterMessages
.
Returns
Returns a list of whisper messages matching the specified filter. Filters out
the messages already confirmed received by shhext_confirmMessagesProcessed
Deduplication is made using the whisper envelope content and topic only, so the same content received in different whisper envelopes will be deduplicated.
shhext_confirmMessagesProcessed
Confirms whisper messages received and processed on the client side. These
messages won't appear anymore when shhext_getNewFilterMessages
is called.
Parameters
Gets a list of whisper envelopes.
shhext_post
Accepts same input as shh_post
.
Returns
DATA
, 32 Bytes - the envelope hash
shhext_requestMessages
Sends a request for historic messages to a mail server.
Parameters
Object
- The message request object:
mailServerPeer
:URL
- Mail servers' enode addessfrom
:QUANTITY
- (optional) Lower bound of time range as unix timestamp, default is 24 hours back from nowto
:QUANTITY
- (optional) Upper bound of time range as unix timestamp, default is nowtopic
:DATA
, 4 Bytes - Regular whisper topicsymKeyID
:DATA
- ID of a symmetric key to authenticate to mail server, derived from mail server password
Returns
Boolean
- returns true
if the request was send, otherwise false
.
Signals
Sends sent signal once per envelope.
{
"type": "envelope.sent",
"event": {
"hash": "0xea0b93079ed32588628f1cabbbb5ed9e4d50b7571064c2962c3853972db67790"
}
}
Sends expired signal if envelope dropped from whisper local queue before it was sent to any peer on the network.
{
"type": "envelope.expired",
"event": {
"hash": "0x754f4c12dccb14886f791abfeb77ffb86330d03d5a4ba6f37a8c21281988b69e"
}
}