Example #1
0
 void UdpSecureRespondToAll(SecurePacket secureChatMsg)
 {
     foreach (KeyValuePair <int, Client> pair in _clients)
     {
         pair.Value.UdpSend(secureChatMsg, ref _udpListener);
     }
 }
Example #2
0
 public void AddPacket(SecurePacket packet)
 {
     lock (this)
     {
         _receivedPackets.Enqueue(packet);
     }
 }
Example #3
0
        private void ProcessSendQueue()
        {
            lock (_aegisClient)
            {
                if (_queueSendPacket.Count() == 0)
                {
                    return;
                }

                else if (_aegisClient.ConnectionStatus == ConnectionStatus.Closed)
                {
                    _aegisClient.Connect();
                }

                else if (_aegisClient.ConnectionStatus == ConnectionStatus.Connected &&
                         _aegisClient.EnableSend == true)
                {
                    SecurePacket packet = _queueSendPacket.Peek();
                    if (PacketSending == null ||
                        PacketSending(packet) == true)
                    {
                        _queueSendPacket.Dequeue();
                        packet.Encrypt(AESIV, AESKey);
                        _aegisClient.SendPacket(packet);
                    }
                }
            }
        }
        public bool UdpSendSecurePacket(string message, string src)
        {
            SecurePacket securePacket = new SecurePacket(_crypt.EncryptString(message))
            {
                _packetSrc = src
            };

            return(UdpSendPacket(securePacket));
        }
Example #5
0
 void TcpSecureRespondToAll(string message, string src)
 {
     foreach (KeyValuePair <int, Client> pair in _clients)
     {
         // encrypt message
         SecurePacket safePacket =
             new SecurePacket(pair.Value.SetSecureMessage(message))
         {
             _packetSrc = src
         };
         pair.Value.TcpSend(safePacket);
     }
 }
Example #6
0
        private void OnReceive(AegisClient ac, StreamBuffer buffer)
        {
            SecurePacket packet = new SecurePacket(buffer);

            packet.Decrypt(AESIV, AESKey);
            packet.SkipHeader();

            if (PacketPreprocessing != null &&
                PacketPreprocessing(packet) == false)
            {
                _callbackQueue.AddPacket(packet);
            }
        }
Example #7
0
        public void SendPacket(SecurePacket packet, Action <SecurePacket> responseAction)
        {
            lock (_aegisClient)
            {
                packet.SeqNo = _nextSeqNo++;
                if (_nextSeqNo == Int32.MaxValue)
                {
                    _nextSeqNo = 0;
                }

                _queueSendPacket.Enqueue(packet);
                _callbackQueue.AddCallback(packet.SeqNo, responseAction);
            }
        }
Example #8
0
            IEnumerator <UnityWebRequestAsyncOperation> SendRq(RequestPayload rq)
            {
                webRequest = new UnityWebRequest("https://ssl.dyko.eu/cgi-bin/webglHttpsTunel/BytesPost", UnityWebRequest.kHttpVerbPOST);

                MessagePackSerializer.PrepareType <byte>();
                MessagePackSerializer.PrepareType <byte[]>();
                MessagePackSerializer.PrepareType <RequestPayload>();
                var s = MessagePackSerializer.Get <RequestPayload>();


                byte[] ss = s.PackSingleObject(rq);

                SecurePacket p = new SecurePacket((UInt16)ServicePort, ss);

                MessagePackSerializer.PrepareType <UInt16>();
                MessagePackSerializer.PrepareType <SecurePacket.SecureFrame>();
                var sd = MessagePackSerializer.Get <SecurePacket.SecureFrame>();

                byte[] data = sd.PackSingleObject(p.GetSecuredPacket());


                UploadHandlerRaw dataHandler = new UploadHandlerRaw(data);

                dataHandler.contentType  = "application/octet-stream"; // might work with 'multipart/form-data'
                webRequest.uploadHandler = dataHandler;

                DownloadHandlerBuffer downHand = new DownloadHandlerBuffer();

                webRequest.downloadHandler = downHand;

                yield return(webRequest.SendWebRequest());

                List <byte> replyData = new List <byte>();

                byte[] unsecuredData = SecurePacket.GetData(sd.UnpackSingleObject(downHand.data));

                MessagePackSerializer.PrepareType <GeneralResponseState>();
                MessagePackSerializer.PrepareType <GeneralRequestResponse>();
                var sr = MessagePackSerializer.Get <GeneralRequestResponse>();

                result = sr.UnpackSingleObject(unsecuredData);

                webRequest.Dispose();
            }
Example #9
0
        public void DoCallback()
        {
            lock (this)
            {
                while (_receivedPackets.Count() > 0)
                {
                    SecurePacket          packet = _receivedPackets.Dequeue();
                    Int32                 key    = packet.SeqNo;
                    Action <SecurePacket> callback;


                    packet.SkipHeader();
                    if (_callbacks.TryGetValue(key, out callback) == true)
                    {
                        if (callback != null)
                        {
                            callback(packet);
                        }
                        _callbacks.Remove(key);
                    }
                }
            }
        }
Example #10
0
        void TcpClientMethod(int index)
        {
            Console.WriteLine("Socket opened. (" + _tcpListener.ToString() + ")");

            Packet receivedPacket;
            Client client = _clients[index];

            try {
                while ((receivedPacket = client.TcpRead()) != null)
                {
                    Console.Write("TCP Receieved: ");

                    // act on packet type
                    switch (receivedPacket._packetType)
                    {
                    case Packet.PacketType.EMPTY:
                        Console.WriteLine("EMPTY");

                        /* do nothing */
                        break;

                    case Packet.PacketType.CHATMESSAGE:
                        Console.WriteLine("CHAT");

                        TcpRespondToAll((ChatMessagePacket)receivedPacket, client);

                        break;

                    case Packet.PacketType.PRIVATEMESSAGE:
                        Console.WriteLine("PRIVATE");

                        TcpRespondTo((PrivateMessagePacket)receivedPacket, client);

                        break;

                    case Packet.PacketType.SERVERMESSAGE:
                        Console.WriteLine("SERVER");

                        ServerMessagePacket servPacket = (ServerMessagePacket)receivedPacket;
                        servPacket._messageRecv = GetReturnMessage(servPacket._messageSent);
                        client.TcpSend(servPacket);

                        break;

                    case Packet.PacketType.CLIENTNAME:
                        Console.WriteLine("NAME");

                        ClientNamePacket namePacket = (ClientNamePacket)receivedPacket;
                        // create message
                        namePacket._message = client._name + " changed name to " + namePacket._name;

                        // change name
                        client._name = namePacket._name;

                        // update client
                        client.TcpSend(namePacket);

                        // notify all clients
                        TcpRespondToAll(new ChatMessagePacket(namePacket._message), client);

                        break;

                    case Packet.PacketType.LOGIN:
                        Console.WriteLine("LOGIN");

                        LoginPacket loginPacket = (LoginPacket)receivedPacket;
                        client._endPoint       = loginPacket._endPoint;
                        loginPacket._serverKey = client.UpdateRSA(loginPacket);

                        client.TcpSend(loginPacket);

                        break;

                    case Packet.PacketType.SECUREMESSAGE:
                        Console.WriteLine("SECURE");

                        // receive packet
                        SecurePacket safePacket = (SecurePacket)receivedPacket;

                        // transmit packet
                        TcpSecureRespondToAll(
                            client.GetSecureMessage(safePacket),
                            safePacket._packetSrc
                            );

                        break;

                    case Packet.PacketType.ERROR:
                        //should be for other things, in another place
                        Console.WriteLine("ERROR");

                        ErrorMessagePacket errPacket = (ErrorMessagePacket)receivedPacket;
                        client.TcpSend(errPacket);
                        break;

                    case Packet.PacketType.ENDSESSION:
                        Console.Write("ENDING TCP SESSION: " + client._name);

                        // signal to client to close connections
                        // and end while loop
                        client.Close();

                        break;

                    case Packet.PacketType.JOINGAME:
                        Console.Write("JOIN GAME - ");
                        JoinGamePacket joinGame = (JoinGamePacket)receivedPacket;
                        Client         host     = null;

                        foreach (Client user in _clients.Values)
                        {
                            if (user._name == joinGame._targetHost)
                            {
                                host = user;
                            }
                        }

                        //ChatMessagePacket resultPacket = null;

                        if (GameSession.Instance.JoinSession(ref client, host))
                        {
                            Console.WriteLine("JOINED A GAME");

                            //success - msg client
                            PrivateMessagePacket resultPacket =
                                new PrivateMessagePacket(client._name, "Started Game Session")
                            {
                                _packetSrc = _serverName
                            };
                            TcpRespondTo(resultPacket, client);

                            //launch client's game
                            client.TcpSend(joinGame);
                        }
                        else
                        {
                            Console.WriteLine("FAILED TO JOIN A GAME");
                            //failed - msg client
                        };

                        break;

                    case Packet.PacketType.USERLIST:
                        Console.WriteLine("USERLIST");
                        UserListPacket userList = (UserListPacket)receivedPacket;

                        if (userList._users == null)
                        {
                            List <string> usernames = new List <string>();

                            // collect user names
                            foreach (KeyValuePair <int, Client> c in _clients)
                            {
                                usernames.Add(c.Value._name);
                            }

                            userList._users = usernames.ToArray();

                            TcpSendToAll(userList);
                        }
                        // if list is filled, why is it here?!

                        break;

                    case Packet.PacketType.LEAVEGAME:
                        LeaveGamePacket leaveGame = (LeaveGamePacket)receivedPacket;

                        // check game sessions
                        bool wasHost = GameSession.Instance.IsHosting(client);

                        // update game session
                        List <string> players = GameSession.Instance.LeaveSession(ref client);

                        ServerMessagePacket serverMessage = null;

                        if (!leaveGame._wasForced)
                        {
                            serverMessage = new ServerMessagePacket
                                                (client._name + " has left the game.", null);
                        }
                        else
                        {
                            serverMessage = new ServerMessagePacket
                                                ("GAME ERROR: " + client._name + " was forced to leave the game.", null);
                        }

                        foreach (Client user in _clients.Values)
                        {
                            if (players.Contains(user._name))
                            {
                                user.TcpSend(serverMessage);
                            }
                        }

                        if (wasHost)
                        {
                            leaveGame._wasForced = true;

                            foreach (Client user in _clients.Values)
                            {
                                user.TcpSend(leaveGame);
                            }
                        }

                        break;

                    default:
                        break;
                    }
                }
            } catch (Exception e) {
                Console.WriteLine("Error: " + e.Message);
                if (client != null)
                {
                    Console.WriteLine("Client: " + client._name);
                }
            }

            client.Close();
            _clients.TryRemove(index, out client);
        }
Example #11
0
 public string GetSecureMessage(SecurePacket safePacket)
 {
     return(_crypt.DecryptString(safePacket._data));
 }
Example #12
0
        private void TcpProcessServerPacket()
        {
            Packet packet = new Packet();

            while (_net.IsTcpConnected)
            {
                packet = _net.TcpReadPacket();

                Debug("TcpProcessServerPacket: packet = " + packet);

                if (packet != null)
                {
                    switch (packet._packetType)
                    {
                    case Packet.PacketType.EMPTY:
                        /* do nothing */
                        break;

                    case Packet.PacketType.CLIENTNAME:
                        ClientNamePacket namePacket = (ClientNamePacket)packet;

                        _win.name = namePacket._name;
                        _nick     = namePacket._name;

                        break;

                    case Packet.PacketType.CHATMESSAGE:
                        ChatMessagePacket chatPacket = (ChatMessagePacket)packet;
                        _win.UpdateChat(chatPacket._message);

                        break;

                    case Packet.PacketType.PRIVATEMESSAGE:
                        PrivateMessagePacket privPacket = (PrivateMessagePacket)packet;
                        _win.UpdateChat(privPacket._packetSrc + ": " + privPacket._message);

                        break;

                    case Packet.PacketType.LOGIN:
                        Console.WriteLine("Logged in to server.");
                        _net.TcpFinishLogin((LoginPacket)packet);

                        break;

                    case Packet.PacketType.SECUREMESSAGE:
                        SecurePacket safePacket = (SecurePacket)packet;
                        _win.UpdateChat(
                            "Secure Message Received [" + safePacket._packetSrc + "]: " +
                            _net.DecryptString(safePacket._data)
                            );

                        break;

                    case Packet.PacketType.ENDSESSION:
                        Console.WriteLine("Disconnecting from server.");
                        _net.Close();

                        break;

                    case Packet.PacketType.JOINGAME:
                        _win.StartGame(this);

                        break;

                    case Packet.PacketType.USERLIST:
                        UserListPacket userList = (UserListPacket)packet;
                        _win.UserList = userList._users;

                        break;

                    case Packet.PacketType.LEAVEGAME:
                        LeaveGamePacket leaveGame = (LeaveGamePacket)packet;
                        if (leaveGame._wasForced)
                        {
                            _win.StopGame();
                        }
                        break;

                    case Packet.PacketType.SERVERMESSAGE:
                        ServerMessagePacket serverMessage = (ServerMessagePacket)packet;
                        _win.UpdateChat(serverMessage._messageSent);
                        break;
                    }
                }
            }
        }
Example #13
0
 public Response(SecurePacket packet)
 {
     Packet = packet;
     Packet.SkipHeader();
     ResultCodeNo = packet.GetInt32();
 }