Ejemplo n.º 1
0
        public HttpCode Execute()
        {
            Clear();

            // Connect
            NetworkChannel channel = null;

            try
            {
                channel = new NetworkChannel(Connection);

                // Request
                JsonPingRequestMessage jsonRequestMessage = new JsonPingRequestMessage();
                JsonPacket             jsonRequest        = new JsonPacket(jsonRequestMessage);

                HttpRequest httpRequest = new HttpRequest(Session.Id)
                {
                    Data = Session.Encrypt(jsonRequest)
                };

                // Response
                HttpResponse httpResponse;

                if (Owner)
                {
                    channel.Send(httpRequest);
                    channel.Receive(out httpResponse);
                }
                else
                {
                    lock (Socket)
                    {
                        channel.Send(httpRequest);
                        channel.Receive(out httpResponse);
                    }
                }

                Code = httpResponse.Code;

                if (httpResponse.Ok)
                {
                    JsonPacket jsonResponse = JsonPacket.Parse(Session.Decrypt(httpResponse.Data));
#if DEBUG
                    Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
                }
            }
            finally
            {
                if (channel != null)
                {
                    channel.Shutdown();
                }
            }

            return(Code);
        }
Ejemplo n.º 2
0
        public void Execute(HttpRequest httpRequest, JsonPacket jsonRequest, SessionComponent session)
        {
            // Connect
            NetworkChannel channel = new NetworkChannel(Connection);

            // Request
            JsonHandshakeRequestMessage jsonRequestMessage = JsonHandshakeRequestMessage.Parse(jsonRequest.Message);
            JsonKey jsonRequestKey = jsonRequestMessage.Key;

            // Response
            JsonKey jsonResponseKey = jsonRequestKey;
            JsonHandshakeResponseMessage jsonResponseMessage = new JsonHandshakeResponseMessage()
            {
                Key = jsonResponseKey
            };
            JsonPacket jsonResponse = new JsonPacket(jsonResponseMessage);

            HttpResponse httpResponse = new HttpResponse()
            {
                Data = session.Encrypt(jsonResponse)
            };

            channel.Send(httpResponse);

            // Data
            session.Key = Key.Parse(jsonRequestKey.Id);
#if DEBUG
            Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
        }
Ejemplo n.º 3
0
        public void Execute(HttpRequest httpRequest, JsonPacket jsonRequest, SessionComponent session)
        {
            // Connect
            NetworkChannel channel = new NetworkChannel(Connection);

            // Request
            JsonTunnelRequestMessage jsonRequestMessage = JsonTunnelRequestMessage.Parse(jsonRequest.Message);

            // Data
            Entity          entity = session.Owner;
            TunnelComponent tunnel = new TunnelComponent(Connection);

            entity.Add(tunnel);

            // Response
            JsonTunnelResponseMessage jsonResponseMessage = new JsonTunnelResponseMessage();
            JsonPacket jsonResponse = new JsonPacket(jsonResponseMessage);

            HttpResponse httpResponse = new HttpResponse()
            {
                Data = session.Encrypt(jsonResponse)
            };

            channel.Send(httpResponse);
#if DEBUG
            Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
        }
Ejemplo n.º 4
0
        public List <BrowseComponent> Execute()
        {
            Clear();

            NetworkChannel         channel = null;
            List <BrowseComponent> list    = new List <BrowseComponent>();

            try
            {
                // Connect
                channel = new NetworkChannel(Connection);

                // Request
                JsonGroupRequestMessage jsonRequestMessage = new JsonGroupRequestMessage();
                JsonPacket jsonRequest = new JsonPacket(jsonRequestMessage);

                HttpRequest httpRequest = new HttpRequest(Session.Id)
                {
                    Data = Session.Encrypt(jsonRequest)
                };
                channel.Send(httpRequest);

                // Response
                HttpResponse httpResponse;
                channel.Receive(out httpResponse);
                Code = httpResponse.Code;

                if (httpResponse.Ok)
                {
                    JsonPacket jsonResponse = JsonPacket.Parse(Session.Decrypt(httpResponse.Data));
                    JsonGroupResponseMessage jsonResponseMessage = JsonGroupResponseMessage.Parse(jsonResponse.Message);

                    if (jsonResponseMessage != null)
                    {
                        // Clients
                        foreach (JsonClient jsonClient in jsonResponseMessage.Clients)
                        {
                            BrowseComponent browse = new BrowseComponent(jsonClient.Name)
                            {
                                ClientId = jsonClient.Id, Owner = Entity
                            };
                            list.Add(browse);
                        }
                    }
#if DEBUG
                    Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
                }
            }
            finally
            {
                if (channel != null)
                {
                    channel.Shutdown();
                }
            }

            return(list);
        }
Ejemplo n.º 5
0
        private void SendMessage()
        {
            var message = new Message(DateTime.UtcNow, User, Typing);

            channel.Send(message);
            Typing = string.Empty;
            Conversation.Add(new MessageViewModel(message, true));
        }
 public void Send(T data)
 {
     using (var memory = new MemoryStream())
     {
         _builder.WriteStreamingResult(memory, _streamingType, _implementationType, data);
         _channel.Send(memory);
     }
 }
Ejemplo n.º 7
0
        private void ExecuteThread()
        {
            NetworkChannel channel = null;

            try
            {
                // Connect
                channel = new NetworkChannel(Connection);

                // Request
                JsonSearchRequestMessage jsonRequestMessage = new JsonSearchRequestMessage();

                JsonSearch jsonSearch = new JsonSearch()
                {
                    Keyword = Keyword, Filter = Filter
                };
                JsonSearchRequestData jsonRequestData = new JsonSearchRequestData()
                {
                    Search = jsonSearch
                };
                JsonPacket jsonRequest = new JsonPacket(jsonRequestMessage, Group.Encrypt(jsonRequestData));

                HttpRequest httpRequest = new HttpRequest(Session.Id)
                {
                    Data = Session.Encrypt(jsonRequest)
                };
                channel.Send(httpRequest);

                // Response
                HttpResponse httpResponse;
                channel.Receive(out httpResponse);
                Code = httpResponse.Code;

                if (httpResponse.Ok)
                {
                    JsonPacket jsonResponse = JsonPacket.Parse(Session.Decrypt(httpResponse.Data));
                    JsonSearchResponseMessage jsonResponseMessage = JsonSearchResponseMessage.Parse(jsonResponse.Message);
                    Debug.Assert(!string.IsNullOrEmpty(jsonResponseMessage.Id));

                    // Data
                    SearchList.Id = jsonResponseMessage.Id;
#if DEBUG
                    Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                if (channel != null)
                {
                    channel.Shutdown();
                }
            }
        }
Ejemplo n.º 8
0
        public HttpCode Execute()
        {
            Clear();

            // Connect
            NetworkChannel channel = null;

            try
            {
                channel = new NetworkChannel(Connection);

                // Request
                JsonEntity jsonEntity = (JsonEntity)Entity;
                JsonClient jsonClient = (JsonClient)Client;
                JsonGroup  jsonGroup  = (JsonGroup)Group;

                JsonJoinRequestMessage jsonRequestMessage = new JsonJoinRequestMessage()
                {
                    Entity = jsonEntity, Client = jsonClient, Group = jsonGroup
                };
                JsonPacket jsonRequest = new JsonPacket(jsonRequestMessage);

                HttpRequest httpRequest = new HttpRequest(Session.Id)
                {
                    Data = Session.Encrypt(jsonRequest)
                };
                channel.Send(httpRequest);

                // Response
                HttpResponse httpResponse;
                channel.Receive(out httpResponse);
                Code = httpResponse.Code;

                if (httpResponse.Ok)
                {
                    JsonPacket jsonResponse = JsonPacket.Parse(Session.Decrypt(httpResponse.Data));
                    JsonJoinResponseMessage jsonResponseMessage = JsonJoinResponseMessage.Parse(jsonResponse.Message);

                    // Data
                    Server.Entities = jsonResponseMessage.Entities;
                    Server.Sessions = jsonResponseMessage.Sessions;
                    Server.Clients  = jsonResponseMessage.Clients;
                    Server.Groups   = jsonResponseMessage.Groups;
#if DEBUG
                    Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
                }
            }
            finally
            {
                if (channel != null)
                {
                    channel.Shutdown();
                }
            }

            return(Code);
        }
Ejemplo n.º 9
0
        public HttpCode Execute(string jsonId, FileComponent file, string clientId = null)
        {
            Clear();

            // Connect
            NetworkChannel channel = new NetworkChannel(Connection);

            // Request
            JsonChunk jsonChunk = new JsonChunk()
            {
                Size = file.Size
            };
            JsonClient jsonClient = (clientId != null) ? new JsonClient(clientId) : null;
            JsonDownloadRequestMessage jsonRequestMessage = new JsonDownloadRequestMessage(jsonId)
            {
                Chunk = jsonChunk, Client = jsonClient
            };

            JsonFile jsonFile = (JsonFile)file;
            JsonDownloadRequestData jsonRequestData = new JsonDownloadRequestData()
            {
                File = jsonFile
            };
            JsonPacket jsonRequest = new JsonPacket(jsonRequestMessage, Group.Encrypt(jsonRequestData));

            HttpRequest httpRequest = new HttpRequest(Session.Id)
            {
                Data = Session.Encrypt(jsonRequest)
            };

            channel.Send(httpRequest);

            // Response
            HttpResponse httpResponse;

            channel.Receive(out httpResponse);
            Code = httpResponse.Code;

            if (httpResponse.Ok)
            {
                JsonPacket jsonResponse = JsonPacket.Parse(Session.Decrypt(httpResponse.Data));
                JsonDownloadResponseMessage jsonResponseMessage = JsonDownloadResponseMessage.Parse(jsonResponse.Message);
                Chunk = jsonResponseMessage.Chunk;
                Id    = jsonResponseMessage.Id;

                JsonDownloadResponseData jsonResponseData = JsonDownloadResponseData.Parse(Group.Decrypt(jsonResponse.Data));
                if (jsonResponseData != null)
                {
                    Data = jsonResponseData.Data;
                }
#if DEBUG
                jsonResponse.Data = null;
                Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
            }

            return(httpResponse.Code);
        }
Ejemplo n.º 10
0
 private static void Program_Received(object sender, OutgoingMessage e)
 {
     Console.WriteLine("Received outgoing: " + e.Message);
     returnChannel.Send(
         new ReturnMessage
     {
         Message     = e.Message,
         NodeAddress = network.Local.Address.AsString
     });
 }
Ejemplo n.º 11
0
        private void ExecuteThread()
        {
            Clear();

            // Connect
            NetworkChannel channel = null;

            try
            {
                channel = new NetworkChannel(Connection);

                // Request
                JsonInfoRequestMessage jsonRequestMessage = new JsonInfoRequestMessage();
                JsonPacket             jsonRequest        = new JsonPacket(jsonRequestMessage);

                HttpRequest httpRequest = new HttpRequest(Session.Id)
                {
                    Data = Session.Encrypt(jsonRequest)
                };
                channel.Send(httpRequest);

                // Response
                HttpResponse httpResponse;
                channel.Receive(out httpResponse);
                Code = httpResponse.Code;

                if (httpResponse.Ok)
                {
                    JsonPacket jsonResponse = JsonPacket.Parse(Session.Decrypt(httpResponse.Data));
                    JsonInfoResponseMessage jsonResponseMessage = JsonInfoResponseMessage.Parse(jsonResponse.Message);

                    // Data
                    Server.Entities = jsonResponseMessage.Entities;
                    Server.Sessions = jsonResponseMessage.Sessions;
                    Server.Clients  = jsonResponseMessage.Clients;
                    Server.Groups   = jsonResponseMessage.Groups;
#if DEBUG
                    Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Machine.Status = DemonStatus.Warning;
            }
            finally
            {
                if (channel != null)
                {
                    channel.Shutdown();
                }
            }
        }
        public void Connect()
        {
            SetState(ConnectionState.CONNECTING);
            Connect connect = new Connect(_username, _password, _clientID, _isClean, _keepalive, _will);

            if (_timers != null)
            {
                _timers.StopAllTimers();
            }

            _timers = new TimersMap(this, _client, RESEND_PERIOND, _keepalive * 1000);
            _timers.StoreConnectTimer(connect);

            if (_client.IsConnected())
            {
                _client.Send(connect);
            }
        }
Ejemplo n.º 13
0
        private void ExecuteThread()
        {
            // Connect
            NetworkChannel channel = null;

            try
            {
                channel = new NetworkChannel(Connection);

                // Request
                JsonPingRequestMessage jsonRequestMessage = new JsonPingRequestMessage();
                JsonPacket             jsonRequest        = new JsonPacket(jsonRequestMessage);

                HttpRequest httpRequest = new HttpRequest(Session.Id)
                {
                    Data = Session.Encrypt(jsonRequest)
                };
                channel.Send(httpRequest);

                // Response
                HttpResponse httpResponse;
                channel.Receive(out httpResponse);
                Code = httpResponse.Code;

                if (httpResponse.Ok)
                {
                    JsonPacket jsonResponse = JsonPacket.Parse(Session.Decrypt(httpResponse.Data));
#if DEBUG
                    Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);

                if (Owner && Machine != null)
                {
                    Machine.Restart();
                }
            }
            finally
            {
                if (channel != null)
                {
                    channel.Shutdown();
                }
            }
        }
Ejemplo n.º 14
0
        public JsonChunk Execute(string jsonId, byte[] jsonData, JsonChunk jsonChunk)
        {
            Clear();

            // Connect
            NetworkChannel channel = new NetworkChannel(Connection);

            // Request
            JsonUploadRequestMessage jsonRequestMessage = new JsonUploadRequestMessage(jsonId)
            {
                Chunk = jsonChunk
            };

            JsonUploadRequestData jsonRequestData = new JsonUploadRequestData()
            {
                Data = jsonData
            };
            JsonPacket jsonRequest = new JsonPacket(jsonRequestMessage, Group.Encrypt(jsonRequestData));

            HttpRequest httpRequest = new HttpRequest(Session.Id)
            {
                Data = Session.Encrypt(jsonRequest)
            };

            channel.Send(httpRequest);

            // Response
            HttpResponse httpResponse;

            channel.Receive(out httpResponse);
            Code = httpResponse.Code;

            if (httpResponse.Ok)
            {
                JsonPacket jsonResponse = JsonPacket.Parse(Session.Decrypt(httpResponse.Data));
                JsonUploadResponseMessage jsonResponseMessage = JsonUploadResponseMessage.Parse(jsonResponse.Message);
                jsonChunk = jsonResponseMessage.Chunk;
#if DEBUG
                jsonResponse.Data = null;
                Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
                if (jsonResponseMessage.Delay > 0)
                {
                    Thread.Sleep(TimeSpan.FromMilliseconds(jsonResponseMessage.Delay));
                }
            }

            return(jsonChunk);
        }
Ejemplo n.º 15
0
        public void Execute(HttpRequest httpRequest, JsonPacket jsonRequest, SessionComponent session)
        {
            // Connect
            NetworkChannel channel = new NetworkChannel(Connection);

            // Request
            JsonBrowseRequestMessage jsonRequestMessage = JsonBrowseRequestMessage.Parse(jsonRequest.Message);

            JsonClient jsonClient = jsonRequestMessage.Client;

            if (jsonClient == null)
            {
                channel.SendNotFound();
                return;
            }

            Entity entity = ClientMap.Get(jsonClient.Id);

            if (entity == null)
            {
                channel.SendNotFound();
                return;
            }

            // Command
            TunnelComponent      tunnel  = entity.Get <TunnelComponent>();
            BrowseRequestCommand command = new BrowseRequestCommand(entity, tunnel.Connection);
            string jsonData = command.Execute(jsonRequest.Data);

            if (string.IsNullOrEmpty(jsonData))
            {
                channel.SendNotFound();
                return;
            }

            // Response
            JsonBrowseResponseMessage jsonResponseMessage = new JsonBrowseResponseMessage();
            JsonPacket jsonResponse = new JsonPacket(jsonResponseMessage, jsonData);

            HttpResponse httpResponse = new HttpResponse()
            {
                Data = session.Encrypt(jsonResponse)
            };

            channel.Send(httpResponse);
#if DEBUG
            Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
        }
        public void OnTimedEvent(Object sender, ElapsedEventArgs args)
        {
            _timer = null;
            if (retriesLeft.HasValue)
            {
                retriesLeft--;
                if (retriesLeft == 0)
                {
                    _timersMap.CancelConnectTimer();
                    return;
                }
            }

            _client.Send(_message);
            _timersMap.RefreshTimer(this);
        }
Ejemplo n.º 17
0
        public void Execute(HttpRequest httpRequest, JsonPacket jsonRequest)
        {
            Clear();

            // Connect
            NetworkChannel channel = new NetworkChannel(Connection);

            // Request
            JsonSearchRequestMessage jsonRequestMessage = JsonSearchRequestMessage.Parse(jsonRequest.Message);
            JsonSearchRequestData    jsonRequestData    = JsonSearchRequestData.Parse(Group.Decrypt(jsonRequest.Data));
            JsonSearch jsonSearch = jsonRequestData.Search;

            // Data
            List <FileComponent> compFiles = FileMap.Search(jsonSearch);

            if (compFiles.Count == 0)
            {
                channel.SendNotFound();
                return;
            }

            List <JsonFile> jsonFiles = new List <JsonFile>();

            foreach (FileComponent file in compFiles)
            {
                JsonFile jsonFile = (JsonFile)file;
                jsonFiles.Add(jsonFile);
            }

            // Response
            JsonSearchResponseMessage jsonResponseMessage = new JsonSearchResponseMessage();
            JsonSearchResponseData    jsonResponseData    = new JsonSearchResponseData()
            {
                Files = jsonFiles
            };
            JsonPacket jsonResponse = new JsonPacket(jsonResponseMessage, Group.Encrypt(jsonResponseData));

            HttpResponse httpResponse = new HttpResponse()
            {
                Data = Session.Encrypt(jsonResponse)
            };

            channel.Send(httpResponse);
#if DEBUG
            Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
        }
Ejemplo n.º 18
0
        public void TestChannelPackerErrorDecode()
        {
            var fromClient = new byte[] { };

            using (var server = new TcpServer((data) =>
            {
                fromClient = Arr.Merge(fromClient, data);
            }))
            {
                var socket  = MakeEnv().Make <ISocketManager>().Make("tcp://127.0.0.1", "TestChannelPackerErrorDecode");
                var channel = new NetworkChannel(socket, new PackerError(PackerError.ErrorType.Decode), "TestChannelPackerErrorDecode");

                var wait  = channel.Connect("127.0.0.1", 7777);
                var count = 0;
                while (!wait.IsDone && count++ < 3000)
                {
                    Thread.Sleep(1);
                }
                try
                {
                    string err = string.Empty;
                    channel.OnError += (c, ex) =>
                    {
                        if (err == string.Empty)
                        {
                            err = ex.ToString();
                        }
                    };

                    channel.Send(Encoding.Default.GetBytes("helloworld"));
                    count = 0;
                    while (channel.Socket.Connected && count++ < 3000)
                    {
                        Thread.Sleep(1);
                    }

                    Assert.AreEqual(false, channel.Socket.Connected);
                    Assert.AreEqual("CatLib.RuntimeException: exception decode", err);
                }
                finally
                {
                    channel.Disconnect();
                }
            }
        }
Ejemplo n.º 19
0
        public List <FileComponent> Execute(HttpRequest httpRequest, JsonPacket jsonRequest)
        {
            Clear();

            // Connect
            NetworkChannel channel = new NetworkChannel(Connection);

            // Response
            JsonSearchResponseMessage jsonResponseMessage = new JsonSearchResponseMessage();
            JsonPacket jsonResponse = new JsonPacket(jsonResponseMessage);

            HttpResponse httpResponse = new HttpResponse()
            {
                Data = Session.Encrypt(jsonResponse)
            };

            channel.Send(httpResponse);
#if DEBUG
            Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
            // Request
            JsonSearchResponseMessage jsonRequestMessage = JsonSearchResponseMessage.Parse(jsonRequest.Message);
            string jsonId = jsonRequestMessage.Id;
            if (SearchList.Id != jsonId)
            {
                return(null);
            }

            JsonSearchResponseData jsonRequestData = JsonSearchResponseData.Parse(Group.Decrypt(jsonRequest.Data));
            List <JsonFile>        jsonFiles       = jsonRequestData.Files;
            List <FileComponent>   list            = new List <FileComponent>();

            // Data
            foreach (JsonFile jsonFile in jsonFiles)
            {
                FileComponent file = new FileComponent(jsonFile.Id, jsonFile.Name, jsonFile.Size)
                {
                    Owner = Entity
                };
                list.Add(file);
            }

            return(list);
        }
Ejemplo n.º 20
0
        public HttpCode Execute()
        {
            Clear();

            // Connect
            NetworkChannel channel = null;

            try
            {
                channel = new NetworkChannel(Connection);

                // Request
                HttpRequest httpRequest = new HttpRequest()
                {
                    Data = SecurityUtil.Token
                };
                channel.Send(httpRequest);

                // Response
                HttpResponse httpResponse;
                channel.Receive(out httpResponse);
                Code = httpResponse.Code;

                if (httpResponse.Ok)
                {
                    // Data
                    Session.Id  = httpResponse.Session;
                    Session.Key = Key.Parse(httpResponse.Data);
#if DEBUG
                    Log.Add(httpRequest, httpResponse);
#endif
                }
            }
            finally
            {
                if (channel != null)
                {
                    channel.Shutdown();
                }
            }

            return(Code);
        }
Ejemplo n.º 21
0
        public void Execute(HttpRequest httpRequest, JsonPacket jsonRequest)
        {
            Clear();

            // Connect
            NetworkChannel channel = new NetworkChannel(Connection);

            // Request
            JsonDownloadRequestMessage jsonRequestMessage = JsonDownloadRequestMessage.Parse(jsonRequest.Message);
            JsonChunk jsonChunk = jsonRequestMessage.Chunk;
            string    jsonId    = jsonRequestMessage.Id;

            JsonDownloadRequestData jsonRequestData = JsonDownloadRequestData.Parse(Group.Decrypt(jsonRequest.Data));
            JsonFile jsonFile = jsonRequestData.File;

            // Data
            FileComponent file = FileMap.Get(jsonFile.Id);

            if (file == null)
            {
                channel.SendNotFound();
                return;
            }

            // Controller
            //UploadData uploadData = new UploadData(fileData, Client) { Id = jsonId, Chunk = jsonChunk };
            //OnUpload(uploadData);

            // Response
            JsonDownloadResponseMessage jsonResponseMessage = new JsonDownloadResponseMessage();
            JsonPacket jsonResponse = new JsonPacket(jsonResponseMessage);

            HttpResponse httpResponse = new HttpResponse()
            {
                Data = Session.Encrypt(jsonResponse)
            };

            channel.Send(httpResponse);
#if DEBUG
            jsonRequest.Data = null;
            Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
        }
Ejemplo n.º 22
0
        public void Execute(HttpRequest httpRequest)
        {
            // Connect
            NetworkChannel channel = new NetworkChannel(Connection);

            // Data
            Entity entity = new Entity(null);

            entity.EntityShutdown += Listener;

            EntityIdleComponent idle = new EntityIdleComponent();

            entity.Add(idle);

            SessionComponent session = new SessionComponent()
            {
                Key = Key.Parse(httpRequest.Data)
            };

            entity.Add(session);

            SessionMap.Add(session.Id, entity);
            Server.Sessions = SessionMap.Count;

            // TODO: Use Diffie–Hellman
            //
            // Response
            HttpResponse httpResponse = new HttpResponse(session.Id)
            {
                Data = SecurityUtil.Token
            };

            channel.Send(httpResponse);
#if DEBUG
            LogComponent log = new LogComponent(Log.Controller);
            entity.Add(log);

            Log.Add(httpRequest, httpResponse);
#endif
        }
Ejemplo n.º 23
0
        public void Execute(HttpRequest httpRequest, JsonPacket jsonRequest, SessionComponent session)
        {
            // Connect
            NetworkChannel channel = new NetworkChannel(Connection);

            // Request
            JsonInfoRequestMessage jsonRequestMessage = JsonInfoRequestMessage.Parse(jsonRequest.Message);

            // Data
            HttpCode        code   = HttpCode.Ok;
            Entity          entity = session.Owner;
            TunnelComponent tunnel = entity.Get <TunnelComponent>();

            if (tunnel != null)
            {
                PingRequestCommand command = new PingRequestCommand(entity, tunnel.Connection);
                code = command.Execute();
                if (code == HttpCode.Ok)
                {
                    entity.Update();
                }
            }

            // Response
            JsonInfoResponseMessage jsonResponseMessage = new JsonInfoResponseMessage()
            {
                Entities = Server.Entities, Sessions = Server.Sessions, Clients = Server.Clients, Groups = Server.Groups
            };
            JsonPacket jsonResponse = new JsonPacket(jsonResponseMessage);

            HttpResponse httpResponse = new HttpResponse(code)
            {
                Data = session.Encrypt(jsonResponse)
            };

            channel.Send(httpResponse);
#if DEBUG
            Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
        }
Ejemplo n.º 24
0
        public HttpCode Execute(string jsonId, string jsonData, JsonChunk jsonChunk)
        {
            Clear();

            // Connect
            NetworkChannel channel = new NetworkChannel(Connection);

            // Request
            JsonDownloadRequestMessage jsonRequestMessage = new JsonDownloadRequestMessage(jsonId)
            {
                Chunk = jsonChunk
            };
            JsonPacket  jsonRequest = new JsonPacket(jsonRequestMessage, jsonData);
            HttpRequest httpRequest = new HttpRequest()
            {
                Data = Session.Encrypt(jsonRequest)
            };

            // Response
            HttpResponse httpResponse;

            lock (Socket)
            {
                channel.Send(httpRequest);
                channel.Receive(out httpResponse);
            }

            Code = httpResponse.Code;

            if (httpResponse.Ok)
            {
                JsonPacket jsonResponse = JsonPacket.Parse(Session.Decrypt(httpResponse.Data));
#if DEBUG
                Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
            }

            return(Code);
        }
Ejemplo n.º 25
0
        public string Execute(string jsonData)
        {
            Clear();

            // Connect
            NetworkChannel channel = new NetworkChannel(Connection);

            // Request
            JsonSearchRequestMessage jsonRequestMessage = new JsonSearchRequestMessage();
            JsonPacket  jsonRequest = new JsonPacket(jsonRequestMessage, jsonData);
            HttpRequest httpRequest = new HttpRequest()
            {
                Data = Session.Encrypt(jsonRequest)
            };

            // Response
            HttpResponse httpResponse;

            // NOTE: We need to lock this send/receive message pairs
            lock (Socket)
            {
                channel.Send(httpRequest);
                channel.Receive(out httpResponse);
            }

            Code = httpResponse.Code;

            if (httpResponse.Ok)
            {
                JsonPacket jsonResponse = JsonPacket.Parse(Session.Decrypt(httpResponse.Data));
#if DEBUG
                Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
                // Data
                return(jsonResponse.Data);
            }

            return(null);
        }
Ejemplo n.º 26
0
        public void Execute(HttpRequest httpRequest, JsonPacket jsonRequest)
        {
            // Connect
            NetworkChannel channel = new NetworkChannel(Connection);

            // Request
            JsonPingRequestMessage jsonRequestMessage = JsonPingRequestMessage.Parse(jsonRequest.Message);

            // Response
            JsonPingResponseMessage jsonResponseMessage = new JsonPingResponseMessage();
            JsonPacket jsonResponse = new JsonPacket(jsonResponseMessage);

            HttpResponse httpResponse = new HttpResponse()
            {
                Data = Session.Encrypt(jsonResponse)
            };

            channel.Send(httpResponse);
#if DEBUG
            Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
        }
Ejemplo n.º 27
0
        public void TestChannelPackerErrorEncode()
        {
            var fromClient = new byte[] { };

            using (var server = new TcpServer((data) =>
            {
                fromClient = Arr.Merge(fromClient, data);
            }))
            {
                var socket  = MakeEnv().Make <ISocketManager>().Make("tcp://127.0.0.1", "TestChannelPackerErrorEncode");
                var channel = new NetworkChannel(socket, new PackerError(PackerError.ErrorType.Encode), "TestChannelPackerErrorEncode");

                var wait  = channel.Connect("127.0.0.1", 7777);
                var count = 0;
                while (!wait.IsDone && count++ < 3000)
                {
                    Thread.Sleep(1);
                }
                try
                {
                    var isThrow = false;
                    try
                    {
                        channel.Send(Encoding.Default.GetBytes("helloworld"));
                    }
                    catch (RuntimeException)
                    {
                        isThrow = true;
                    }
                    Assert.AreEqual(true, isThrow);
                }
                finally
                {
                    channel.Disconnect();
                }
            }
        }
Ejemplo n.º 28
0
        public JsonAction Execute(HttpRequest httpRequest, JsonPacket jsonRequest, SessionComponent session)
        {
            Clear();

            // Connect
            NetworkChannel channel = new NetworkChannel(Connection);

            // Request
            JsonAction jsonAction = JsonAction.None;
            JsonDownloadRequestMessage jsonRequestMessage = JsonDownloadRequestMessage.Parse(jsonRequest.Message);
            string jsonId = jsonRequestMessage.Id;

            if (jsonId != null)
            {
                // Data
                Entity entity = TransferMap.Get(jsonId);
                if (entity == null)
                {
                    channel.SendNotFound();
                    return(jsonAction);
                }

                ChunkComponent transfer = entity.Get <ChunkComponent>();
                if (transfer == null)
                {
                    channel.SendNotFound();
                    return(jsonAction);
                }

                JsonTransfer jsonTransfer = transfer.PopData();
                if (!transfer.Finished)
                {
                    jsonAction = JsonAction.Request;
                    entity.Update();
                }
                else
                {
                    TransferMap.Remove(jsonId);
                }

                string    jsonData  = null;
                JsonChunk jsonChunk = null;
                if (jsonTransfer != null)
                {
                    jsonData  = jsonTransfer.Data;
                    jsonChunk = jsonTransfer.Chunk;
                }

                // Response
                JsonDownloadResponseMessage jsonResponseMessage = new JsonDownloadResponseMessage(jsonId)
                {
                    Chunk = jsonChunk
                };
                JsonPacket jsonResponse = new JsonPacket(jsonResponseMessage, jsonData);

                HttpResponse httpResponse = new HttpResponse()
                {
                    Data = session.Encrypt(jsonResponse)
                };
                channel.Send(httpResponse);
#if DEBUG
                jsonResponse.Data = null;
                Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
            }
            else
            {
                // Data
                Entity entity = session.Owner;
                SearchListComponent search     = entity.Get <SearchListComponent>();
                JsonClient          jsonClient = jsonRequestMessage.Client;

                // Request
                if (jsonClient == null && search.Empty)
                {
                    channel.SendNotFound();
                    return(jsonAction);
                }

                // Response
                jsonId = SecurityUtil.CreateKeyString();
                JsonDownloadResponseMessage jsonResponseMessage = new JsonDownloadResponseMessage(jsonId);
                JsonPacket jsonResponse = new JsonPacket(jsonResponseMessage);

                HttpResponse httpResponse = new HttpResponse()
                {
                    Data = session.Encrypt(jsonResponse)
                };
                channel.Send(httpResponse);
#if DEBUG
                Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
                // Data
                entity = new Entity(jsonId);
                EntityIdleComponent idle = new EntityIdleComponent();
                entity.Add(idle);

                JsonChunk      jsonChunk = jsonRequestMessage.Chunk;
                ChunkComponent transfer  = new ChunkComponent(jsonChunk.Size, Options.ChunkSize, Options.MaxChunks);
                entity.Add(transfer);

                TransferMap.Add(entity);

                // Command
                string jsonData = jsonRequest.Data;
                jsonChunk = transfer.PopChunk();

                if (jsonClient == null)
                {
                    foreach (Entity e in search)
                    {
                        CommandState state = new CommandState()
                        {
                            Id = jsonId, Data = jsonData, Chunk = jsonChunk, Entity = e
                        };
                        Thread thread = new Thread(new ParameterizedThreadStart(ExecuteThread))
                        {
                            Priority = ThreadPriority.BelowNormal, IsBackground = true
                        };
                        thread.Start(state);
                    }
                }
                else
                {
                    Entity e = ClientMap.Get(jsonClient.Id);
                    if (e == null)
                    {
                        channel.SendNotFound();
                        return(jsonAction);
                    }

                    CommandState state = new CommandState()
                    {
                        Id = jsonId, Data = jsonData, Chunk = jsonChunk, Entity = e
                    };
                    Thread thread = new Thread(new ParameterizedThreadStart(ExecuteThread))
                    {
                        Priority = ThreadPriority.BelowNormal, IsBackground = true
                    };
                    thread.Start(state);
                }

                jsonAction = JsonAction.Request;
            }

            return(jsonAction);
        }
Ejemplo n.º 29
0
        public void Execute(HttpRequest httpRequest, JsonPacket jsonRequest, SessionComponent session)
        {
            // Connect
            NetworkChannel channel = new NetworkChannel(Connection);

            // Request
            JsonGroupRequestMessage jsonRequestMessage = JsonGroupRequestMessage.Parse(jsonRequest.Message);

            // Data
            Entity         entity   = session.Owner;
            GroupComponent group    = entity.Get <GroupComponent>();
            EntityList     entities = GroupList.Get(group.Id);

            if (entities == null)
            {
                channel.SendNotFound();
                return;
            }

            List <JsonClient> jsonClients = new List <JsonClient>();

            lock (entities)
            {
                foreach (Entity e in entities)
                {
#if !DEBUG
                    if (entity.Id.Equals(e.Id))
                    {
                        continue;
                    }
#endif
                    ClientComponent c          = e.Get <ClientComponent>();
                    JsonClient      jsonClient = (JsonClient)c;
                    jsonClients.Add(jsonClient);
                }
            }

            if (jsonClients.Count == 0)
            {
                channel.SendNotFound();
                return;
            }

            jsonClients.Sort();

            // Response
            JsonGroupResponseMessage jsonResponseMessage = new JsonGroupResponseMessage()
            {
                Clients = jsonClients
            };
            JsonPacket jsonResponse = new JsonPacket(jsonResponseMessage);

            HttpResponse httpResponse = new HttpResponse()
            {
                Data = session.Encrypt(jsonResponse)
            };
            channel.Send(httpResponse);
#if DEBUG
            Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
        }
Ejemplo n.º 30
0
        public void Execute(HttpRequest httpRequest, JsonPacket jsonRequest, SessionComponent session)
        {
            // Connect
            NetworkChannel channel = new NetworkChannel(Connection);

            // Request
            JsonJoinRequestMessage jsonRequestMessage = JsonJoinRequestMessage.Parse(jsonRequest.Message);

            // Data
            JsonEntity jsonEntity = jsonRequestMessage.Entity;
            Entity     entity     = EntityMap.Get(jsonEntity.Id);

            if (entity != null)
            {
                entity.Shutdown();
            }

            entity    = session.Owner;
            entity.Id = jsonEntity.Id;
            EntityMap.Add(entity.Id, entity);
            Server.Entities = EntityMap.Count;

            JsonGroup jsonGroup = jsonRequestMessage.Group;

            if (jsonGroup == null)
            {
                jsonGroup = JsonGroup.Default;
            }

            JsonClient      jsonClient = jsonRequestMessage.Client;
            ClientComponent client     = new ClientComponent(jsonClient.Id, jsonClient.Name);

            entity.Add(client);

            ClientMap.Add(client.Id, entity);
            Server.Clients = ClientMap.Count;

            GroupComponent group = new GroupComponent(jsonGroup.Id);

            entity.Add(group);

            GroupList.Add(group.Id, entity);
            Server.Groups = GroupList.Count;

            SearchListComponent download = new SearchListComponent();

            entity.Add(download);

            // Response
            JsonJoinResponseMessage jsonResponseMessage = new JsonJoinResponseMessage()
            {
                Entities = Server.Entities, Sessions = Server.Sessions, Clients = Server.Clients, Groups = Server.Groups
            };
            JsonPacket jsonResponse = new JsonPacket(jsonResponseMessage);

            HttpResponse httpResponse = new HttpResponse()
            {
                Data = session.Encrypt(jsonResponse)
            };

            channel.Send(httpResponse);
#if DEBUG
            Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
        }