Exemplo n.º 1
0
        private async Task HandleXmlPacket(Penguin penguin, string packet)
        {
            switch (packet)
            {
            case "<policy-file-request/>":
                await HandlePolicy(penguin);

                return;

            case "<msg t='sys'><body action='verChk' r='0'><ver v='153' /></body></msg>":
                await HandleVersionCheck(penguin);

                return;

            case "<msg t='sys'><body action='rndK' r='-1'></body></msg>":
                await HandleRandomKey(penguin);

                return;
            }

            if (packet.Substring(0, 40) == "<msg t='sys'><body action='login' r='0'>")
            {
                await HandleLogin(penguin, packet);
            }
        }
Exemplo n.º 2
0
        protected virtual async void StreamSocketListener_ConnectionReceived(StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args)
        {
            Debug.WriteLine("Accepting penguin");
            Penguin penguin = new Penguin(this, args.Socket);
            await MServer.LogMessage("INFO", server_name, "Accepting new penguin");

            await AddPenguin(penguin);

            using (var stream = args.Socket.InputStream.AsStreamForRead())
            {
                while (penguins.ContainsKey(args.Socket))
                {
                    byte[] data         = new byte[256];
                    int    numBytesRead = await stream.ReadAsync(data, 0, data.Length);

                    if (numBytesRead == 0)
                    {
                        await RemovePenguin(penguin);

                        return;
                    }

                    String         message = Encoding.UTF8.GetString(data).Substring(0, numBytesRead);
                    Stack <string> packets = new Stack <string>(message.Split('\0'));
                    packets.Pop();

                    foreach (string packet in packets)
                    {
                        Debug.WriteLine("[RECV] " + packet);
                        await HandlePacket(penguin, packet);
                    }
                }
            }
        }
Exemplo n.º 3
0
        private async Task AddPenguin(Penguin penguin)
        {
            await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
                                                                                                        () =>
            {
                penguins.Add(penguin.socket, penguin);
                MServer.penguins.Add(penguin);

                latestPackets[penguin] = new Dictionary <string, string>();
            });
        }
Exemplo n.º 4
0
        private async Task HandlePolicy(Penguin penguin)
        {
            if (penguin.LoginStep == null)
            {
                await penguin.Send("<cross-domain-policy><allow-access-from domain='*' to-ports='*' /></cross-domain-policy>");

                return;
            }

            await RemovePenguin(penguin);
        }
Exemplo n.º 5
0
        private async Task HandleRandomKey(Penguin penguin)
        {
            if (penguin.LoginStep == "Versioncheck")
            {
                penguin.Randkey = "e4a2dbcca10a7246817a83cdmCPPS";
                await penguin.Send("<msg t='sys'><body action='rndK' r='-1'><k>" + penguin.Randkey + "</k></body></msg>");

                penguin.LoginStep = "Randkey";
                return;
            }
            await RemovePenguin(penguin);
        }
Exemplo n.º 6
0
        protected override async Task RemovePenguin(Penguin penguin)
        {
            if (penguins.ContainsKey(penguin.socket))
            {
                await MServer.LogMessage("INFO", server_name, "Removing penguin");

                await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
                                                                                                            () =>
                {
                    Debug.WriteLine("Removing penguin");
                    penguins.Remove(penguin.socket);
                    MServer.penguins.Remove(penguin);

                    latestPackets.Remove(penguin);
                });
            }
        }
Exemplo n.º 7
0
        protected override async Task HandleLogin(Penguin penguin, string packet)
        {
            if (penguin.LoginStep != "Randkey")
            {
                await RemovePenguin(penguin);

                return;
            }

            XmlDocument login_xml = new XmlDocument();

            login_xml.LoadXml(packet);

            string username, password, dbpassword, dbpassword_encrypted;

            username = login_xml.GetElementsByTagName("nick")[0].InnerText;
            password = login_xml.GetElementsByTagName("pword")[0].InnerText;

            if (!await Database.UsernameExists(username))
            {
                // await penguin.Send("%xt%e%-1%100%");
                // await RemovePenguin(penguin);
                await penguin.Send("%xt%gs%-1%65.184.60.189:6113:mCPPS:4%");

                await penguin.Send("%xt%l%-1%1%97debb64dcb0b0f1598f605318bc28fc%0%");

                return;
            }

            Crypt2 crypt = new Crypt2();

            dbpassword = (string)await Database.GetColumnFromUsername(username, "Password");

            dbpassword_encrypted = GetAuthenticationHash(dbpassword, penguin.Randkey);

            if (!crypt.BCryptVerify(password, dbpassword))
            {
                await penguin.Send("%xt%e%-1%101%");

                return;
            }
        }
Exemplo n.º 8
0
        private async Task HandlePacket(Penguin penguin, string packet)
        {
            await MServer.LogMessage("INFO", server_name, "Received: " + packet);

            string start = packet.Substring(0, 1);

            switch (start)
            {
            case "<":
                await StoreXmlPacket(penguin, packet);

                break;

            case "%":
                // await StorePlayPacket(penguin, packet);
                break;
            }

            return;
        }
Exemplo n.º 9
0
 protected override async Task HandleLogin(Penguin penguin, string packet)
 {
     await Task.CompletedTask;
 }
Exemplo n.º 10
0
 abstract protected Task RemovePenguin(Penguin penguin);
Exemplo n.º 11
0
 protected virtual async Task HandleLogin(Penguin penguin, string packet)
 {
     await Task.CompletedTask;
 }
Exemplo n.º 12
0
        private async Task HandleVersionCheck(Penguin penguin)
        {
            await penguin.Send("<msg t='sys'><body action='apiOK' r='0'></body></msg>");

            penguin.LoginStep = "Versioncheck";
        }
Exemplo n.º 13
0
        private async Task StoreXmlPacket(Penguin penguin, string packet)
        {
            latestPackets[penguin]["<"] = packet;

            await Task.CompletedTask;
        }