protected override void Process(Entities.Server s)
        {
            uint ErrorCode = GetuInt(0);

            if (ErrorCode == 1)
            {
                string globalKey  = GetString(1);
                string serverName = GetString(2);
                string ipAddress  = GetString(3);
                int    port       = GetInt(4);
                byte   type       = GetByte(5);

                Core.Enums.ServerTypes enumType = Core.Enums.ServerTypes.Normal;
                if (System.Enum.IsDefined(typeof(Core.Enums.ServerTypes), type))
                {
                    enumType = (Core.Enums.ServerTypes)type;
                }
                else
                {
                    s.Disconnect(); return;
                }

                byte serverId = Managers.ServerManager.Instance.Add(s, serverName, ipAddress, port, enumType);
                if (serverId > 0)
                {
                    s.Send(new Packets.Internal.Authorize(serverId));
                    ServerLogger.Instance.Append(ServerLogger.AlertLevel.Information, "Authorized a new server as " + serverId.ToString());
                }
                else
                {
                    s.Send(new Packets.Internal.Authorize(Core.Enums.Internal.AuthorizationErrorCodes.MaxServersReached));
                    s.Disconnect();
                    ServerLogger.Instance.Append(ServerLogger.AlertLevel.ServerError, "Rejecting Server " + s.Displayname + ". Limit reached");
                }
            }
            else
            {
                s.Disconnect();
            }
        }
Пример #2
0
        protected override void Process(Entities.Server s)
        {
            uint ErrorCode = GetuInt(0);

            if (ErrorCode == Core.Networking.Constants.ERROR_OK)
            {
                string globalKey  = GetString(1);
                string serverName = GetString(2);
                string ipAddress  = GetString(3);
                int    port       = GetInt(4);
                byte   type       = GetByte(5);

                if (globalKey == Config.GAMESERVERKEY) //attempt to match server keys
                {
                    Core.GameConstants.ServerTypes serverType;

                    //check for an existing server type.
                    if (System.Enum.IsDefined(typeof(Core.GameConstants.ServerTypes), type))
                    {
                        serverType = (Core.GameConstants.ServerTypes)type;

                        //check if name is already in use, reject server if affirmative
                        foreach (Entities.Server authorizedServer in Managers.ServerManager.Instance.GetAllAuthorized())
                        {
                            //Already authorized?
                            if (authorizedServer.IP == ipAddress)
                            {
                                s.Send(new Packets.Internal.Authorize(Core.Networking.ErrorCodes.EntityAlreadyAuthorized));
                                Log.Information("Rejected server " + serverName + " . Server already authorized");
                                s.Disconnect();
                                return;
                            }

                            if (authorizedServer.ServerName == serverName)
                            {
                                s.Send(new Packets.Internal.Authorize(Core.Networking.ErrorCodes.ServerNameInUse));
                                Log.Information("Rejected server " + serverName + " . Name already in use");
                                s.Disconnect();
                                return;
                            }
                        }

                        byte serverId = Managers.ServerManager.Instance.Add(s, serverName, ipAddress, port, serverType);

                        if (serverId > 0)
                        {
                            s.Send(new Packets.Internal.Authorize(serverId));
                            Log.Information("New server registered as: " + serverName);
                        }
                        else
                        {
                            s.Send(new Packets.Internal.Authorize(Core.Networking.ErrorCodes.ServerLimitReached));
                            s.Disconnect();
                        }
                    }
                    else
                    {
                        s.Send(new Packets.Internal.Authorize(Core.Networking.ErrorCodes.InvalidServerType));
                        s.Disconnect();
                    }
                }
                else
                {
                    s.Send(new Packets.Internal.Authorize(Core.Networking.ErrorCodes.InvalidKeyOrSession));
                    Log.Information("Rejecting server " + serverName + ": invalid key");
                    s.Disconnect();
                }
            }
            else
            {
                s.Disconnect();
            }
        }