public Task <Message> CreateMessageAsync(HttpContext http, BindingContext binding)
        {
            var encoder = GetMessageEncoderFactory(binding).Encoder;
            var request = http.Request;

            var message = null as Message;

            if (request.ContentLength != null && request.ContentLength > 0)
            {
                message = encoder.ReadMessage(request.Body, int.MaxValue);
            }
            else
            {
                message = new NullMessage();
            }
            if (message.Headers.To == null)
            {
                message.Headers.To = request.GetRequestUri();
            }
            if (message.Properties.Via == null)
            {
                message.Properties.Via = request.GetRequestUri();
            }
            if (message.Headers.Action == null)
            {
                message.Headers.Action = request.Headers["SOAPAction"].Select(s => s.Trim('"')).FirstOrDefault();
            }

            return(Task.FromResult(message));
        }
        private async Task SendMessage(CancellationToken token, VerifiedMessage message, UnidentifiedAccessPair?unidentifiedAccessPair)
        {
            byte[] nullMessageBody = new DataMessage()
            {
                Body = Base64.EncodeBytes(Util.GetRandomLengthBytes(140))
            }.ToByteArray();

            NullMessage nullMessage = new NullMessage()
            {
                Padding = ByteString.CopyFrom(nullMessageBody)
            };

            byte[] content = new Content()
            {
                NullMessage = nullMessage
            }.ToByteArray();

            SendMessageResult result = await SendMessage(token, new SignalServiceAddress(message.Destination), unidentifiedAccessPair?.TargetUnidentifiedAccess, message.Timestamp, content);

            if (result.Success.NeedsSync)
            {
                byte[] syncMessage = CreateMultiDeviceVerifiedContent(message, nullMessage.ToByteArray());
                await SendMessage(token, LocalAddress, unidentifiedAccessPair?.SelfUnidentifiedAccess, message.Timestamp, syncMessage);
            }
        }
Beispiel #3
0
        private async Task SendMessage(CancellationToken token, VerifiedMessage message)
        {
            byte[] nullMessageBody = new DataMessage()
            {
                Body = Base64.EncodeBytes(Util.GetRandomLengthBytes(140))
            }.ToByteArray();

            NullMessage nullMessage = new NullMessage()
            {
                Padding = ByteString.CopyFrom(nullMessageBody)
            };

            byte[] content = new Content()
            {
                NullMessage = nullMessage
            }.ToByteArray();

            SendMessageResponse response = await SendMessage(token, new SignalServiceAddress(message.Destination), message.Timestamp, content, false);

            if (response != null && response.NeedsSync)
            {
                byte[] syncMessage = CreateMultiDeviceVerifiedContent(message, nullMessage.ToByteArray());
                await SendMessage(token, localAddress, message.Timestamp, syncMessage, false);
            }
        }
Beispiel #4
0
        public void JoinRoom(GameClientPeer peer, string userName)
        {
            if (!userNames.Contains(userName))
            {
                return;
            }
            userNames.Remove(userName);

            RoomClient client = new RoomClient();

            client.peer      = peer;
            client.userNamae = userName;
            roomClients.Add(client);

            if (userNames.Count <= 0 && maxClient == roomClients.Count)
            {
                for (int i = 0; i < roomClients.Count; ++i)
                {
                    RoomClient  roomClient = roomClients[i];
                    NullMessage message    = new NullMessage();

                    roomClient.peer.SendEvent(OperationCode.JoinRoom, message);
                }
            }
        }
Beispiel #5
0
        private void setChain()
        {
            Chain = new ErrorMessageLogging();
            WarningMessageLogging Chain2 = new WarningMessageLogging();
            InfoMessageLogging    Chain3 = new InfoMessageLogging();
            NullMessage           Chain4 = new NullMessage();

            Chain.setNextChain(Chain2);
            Chain2.setNextChain(Chain3);
            Chain3.setNextChain(Chain4);
        }
Beispiel #6
0
        private void Update()
        {
            if (Time != null)
            {
                Time.Update();
            }
            if (!handshake)
            {
                OperationResponse response = new OperationResponse((byte)OperationCode.HandShake);
                NullMessage       nullMsg  = new NullMessage();
                PackageHelper.SetData(response, PackageHelper.Serialize <NullMessage>(nullMsg));
                this.SendOperationResponse(response, new SendParameters());

                handshake = true;
            }
        }
Beispiel #7
0
        public void AddSRM()
        {
            IMessage   msg     = new NullMessage();
            SRMFactory factory = SRMFactory.GetInstance();

            models = new List <SRMModel>();

            if (SRMList.IsBasic)
            {
                models.Add(new EMSRMModel(factory.CreateSRM(OriginalSRMModel.EXP), msg));
                models.Add(new EMSRMModel(factory.CreateSRM(OriginalSRMModel.GAMMA), msg));
                models.Add(new EMSRMModel(factory.CreateSRM(OriginalSRMModel.PARETO), msg));
                models.Add(new EMSRMModel(factory.CreateSRM(OriginalSRMModel.TNORM), msg));
                models.Add(new EMSRMModel(factory.CreateSRM(OriginalSRMModel.LNORM), msg));
                models.Add(new EMSRMModel(factory.CreateSRM(OriginalSRMModel.TLOGIS), msg));
                models.Add(new EMSRMModel(factory.CreateSRM(OriginalSRMModel.LLOGIS), msg));
                models.Add(new EMSRMModel(factory.CreateSRM(OriginalSRMModel.TXVMAX), msg));
                models.Add(new EMSRMModel(factory.CreateSRM(OriginalSRMModel.TXVMIN), msg));
                models.Add(new EMSRMModel(factory.CreateSRM(OriginalSRMModel.LXVMAX), msg));
                models.Add(new EMSRMModel(factory.CreateSRM(OriginalSRMModel.LXVMIN), msg));
            }

            if (SRMList.IsCPH)
            {
                foreach (int k in SRMList.CPH)
                {
                    models.Add(new EMSRMModel(factory.CreateCPHSRM(k), msg));
                }
            }

            if (SRMList.IsHEr)
            {
                foreach (int k in SRMList.HEr)
                {
                    models.Add(new HErSRMModel(factory.CreateHErSRM(k), msg));
                }
            }

            NotifyModel();
        }
Beispiel #8
0
        protected IMessage ProcessData(Connection connection, BinaryReader reader)
        {
            IMessage result         = new NullMessage();
            IMessage currentMessage = MessageFactory.FromStream(reader);

            switch (currentMessage.MessageId)
            {
            case MessageIdentifier.FileChanged:
            {
                if (ClientHasBeenValidated == true)
                {
                    FileChangedMessage message   = currentMessage as FileChangedMessage;
                    string             filePath  = Path.Join(connection.LocalSyncPath, message.FileData.Path);
                    FileInfo           localFile = new FileInfo(filePath);

                    //we only need the file data when a file on the client was changed and that file is newer than our local copy
                    if (message.FileData.OperationType == WatcherChangeTypes.Changed || message.FileData.OperationType == WatcherChangeTypes.Created)
                    {
                        if (localFile.Exists == false || localFile.LastWriteTimeUtc < message.FileData.LastWriteTimeUtc)
                        {
                            FileMetaData = message.FileData;
                            result       = new FileRequestMessage(message.FileData);
                        }
                        else
                        {
                            result = new NullMessage();
                        }
                    }
                    else
                    {
                        if (message.FileData.OperationType == WatcherChangeTypes.Renamed)
                        {
                            string oldFilePath = Path.Join(connection.LocalSyncPath, message.FileData.OldPath);
                            if (File.Exists(oldFilePath))
                            {
                                File.Move(oldFilePath, filePath);
                            }
                        }
                        if (message.FileData.OperationType == WatcherChangeTypes.Deleted)
                        {
                            if (File.Exists(filePath))
                            {
                                File.Delete(filePath);
                            }
                        }
                        result = new NullMessage();
                    }
                }
                break;
            }

            case MessageIdentifier.FileData:
            {
                if (ClientHasBeenValidated == true && FileMetaData != null)
                {
                    FileDataMessage message = currentMessage as FileDataMessage;
                    message.FilePath = Path.Join(connection.LocalSyncPath, FileMetaData.Path);
                    ReceiveBegin(this, new ServerEventArgs()
                        {
                            FileData = FileMetaData, FullLocalPath = message.FilePath
                        });

                    try
                    {
                        message.FromBinaryStream(reader);

                        //change last write to match client file
                        File.SetLastWriteTimeUtc(message.FilePath, FileMetaData.LastWriteTimeUtc);
                        File.SetLastAccessTimeUtc(message.FilePath, FileMetaData.LastAccessTimeUtc);
                        File.SetCreationTimeUtc(message.FilePath, FileMetaData.CreateTimeUtc);
                        ReceiveEnd(this, new ServerEventArgs()
                            {
                                FileData = FileMetaData, FullLocalPath = message.FilePath, Success = true
                            });
                    }
                    catch (Exception ex)
                    {
                        Logger.Log(LogPriority.High, "Server #{0} error writing file: {1}", ServerId, message.FilePath);
                        ReceiveEnd(this, new ServerEventArgs()
                            {
                                FileData = FileMetaData, FullLocalPath = message.FilePath, Success = false
                            });
                    }
                }
                break;
            }


            case MessageIdentifier.Verification:
            {
                VerificationMessage message = currentMessage as VerificationMessage;
                if (message != null)
                {
                    if (message.Key == connection.LocalAccessKey)
                    {
                        result = new VerificationMessage(connection.RemoteAccessKey, NetworkResponse.Valid);

                        //store validation result for later use
                        ClientHasBeenValidated = true;
                    }
                }
                break;
            }
            }


            return(result);
        }
 static NullMessage()
 {
     Instance = new NullMessage();
 }