This change implements connection manager that monitors 3 types of events: 1. update of the selected mail servers 2. disconnect from a mail server 3. errors for requesting mail history When selected mail servers provided we will try to connect with as many as possible, and later disconnect the surplus. For example if we want to connect with one mail server and 3 were selected, we try to connect with all (3), and later disconnect with 2. It will to establish connection with live mail server faster. If mail server disconnects we will choose any other mail server from the list of selected. Unless we have only one mail server. In such case we don't have any other choice and we will leave things as is. If request for history was expired we will disconnect such peer and try to find another one. We will follow same rules as described above. We will have two components that will rely on this logic: 1. requesting history If target peer is provided we will use that peer, otherwise we will request history from any selected mail server that is connected at the time of request. 2. confirmation from selected mail server Confirmation from any selected mail server will bee used to send a feedback that envelope was sent. I will add several extensions, but probably in separate PRs: 1. prioritize connection with mail server that was used before reboot 2. disconnect from mail servers if history request wasn't expired but failed. 3. wait some time in RequestsMessage RPC to establish connection with any mail server Currently this feature is hidden, as certain changes will be necessary in status-react. partially implements: https://github.com/status-im/status-go/issues/1285
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"
}
}