private void OnVerifyDeviceKeysResponseReceived(object sender, VerifyDeviceKeysResponseReceivedEventArgs args)
        {
            if (args.Message.Nonce != _nonce)
                return;

            _replyReceived = true;
            Reply = args.Message;
            _waitForReply.Set();
            _waitForReplyProcess.WaitOne(Timeout);

            args.MessageHandledSuccessfully = _processedSuccessfully;
        }
Beispiel #2
0
        private void OnVerifyDeviceKeysResponseReceived(object sender, VerifyDeviceKeysResponseReceivedEventArgs args)
        {
            if (args.Message.Nonce != _nonce)
            {
                return;
            }

            _replyReceived = true;
            Reply          = args.Message;
            _waitForReply.Set();
            _waitForReplyProcess.WaitOne(Timeout);

            args.MessageHandledSuccessfully = _processedSuccessfully;
        }
Beispiel #3
0
        private void ProcessMessages()
        {
            var apiClient = GetApiClient();
            var serverAccount = Model.ServerAccounts.Get(_serverAccountId);

            CryptoKey linkedDeviceCryptoKey = null;
            if (serverAccount.LinkedDeviceCryptoKeyId != 0)
                linkedDeviceCryptoKey = Model.CryptoKeys.Get(serverAccount.LinkedDeviceCryptoKeyId);
            
            GetMessagesLongpoll.ResponseParams longpollResponse;
            try
            {
                var longpollRequest = new GetMessagesLongpoll();
                _longpollInterrupt = new AutoResetEvent(false);
                longpollRequest.SetInteruptHandle(_longpollInterrupt);
                longpollResponse = longpollRequest.GetResponse(apiClient);
            }
            catch (NetworkErrorException)
            {
                Logger.Info("Network error attempting to obtain images.");
                _requestErrors++;
                return;
            }
            catch (RequestException)
            {
                return;
            }

            _requestErrors = 0;

            if (!longpollResponse.NewMessages)
                return;

            var getMessagesRequest = new GetMessages();
            GetMessages.ResponseParams messagesResponse;
            try
            {
                messagesResponse = getMessagesRequest.GetResponse(apiClient);
            }
            catch (RequestException)
            {
                return;
            }
            
            foreach (var messageItem in messagesResponse.Messages)
            {
                if (_stopSyncLoop)
                    return;

                var processedSucessfully = false;

                if (messageItem.Type == DeviceMessages.Types.DeviceToDeviceMessage)
                {
                    if (linkedDeviceCryptoKey == null)
                        continue;

                    var messageContents = messageItem.GetContent<DeviceMessages.DeviceToDeviceMessage>();

                    //if (!string.IsNullOrEmpty(messageContents.LinkIdentifier))
                    //{
                        var message = getMessagesRequest.DecryptClientMessage(
                            messageContents.EncryptedMessage, linkedDeviceCryptoKey.PublicKeyPem);

                        switch (message.Type)
                        {
                            case DeviceToDeviceMessages.Types.SendEntrySecrets:
                                if (SendSecretShareMessageReceived == null)
                                    break;
                                var args = new SendEntrySecretsMessageReceivedEventArgs(
                                    (DeviceToDeviceMessages.SendEntrySecrets)message.Message);
                                SendSecretShareMessageReceived.Invoke(this, args);
                                processedSucessfully = args.MessageHandledSuccessfully;
                                break;
                    }
                    //}
                }
                else
                {
                    switch (messageItem.Type)
                    {
                        case DeviceMessages.Types.VerifyDeviceKeysResponse:
                            if (VerifyDeviceKeysResponseReceived == null)
                                break;
                            var args = new VerifyDeviceKeysResponseReceivedEventArgs(
                                messageItem.GetContent<DeviceMessages.VerifyDeviceKeysResponse>());
                            VerifyDeviceKeysResponseReceived.Invoke(this, args);
                            processedSucessfully = args.MessageHandledSuccessfully;
                            break;
                    }
                }
                
                var processedRequest = new SetMessageStatus
                {
                    DeviceMessageIdentifier = messageItem.Identifier,
                    ProcessedSuccess = processedSucessfully
                };
                processedRequest.GetResponse(apiClient);
            }
        }