Exemplo n.º 1
0
 public ServerConnection(ServerConnectionStatus status, IDiagnosticPullStream diagnosticPullStream,
                         IDiagnosticPushStream diagnosticPushStream, byte[] newGameKey, uint loginSeed, LoginEncryptionKey loginKey)
     : this(status, diagnosticPullStream, diagnosticPushStream, PacketDefinitionRegistryFactory.CreateClassicClient(), EncryptionSetup.Autodetect)
 {
     InitNewGameEncryption(newGameKey);
     this.loginStream = new LoginPushStream(loginSeed, loginKey);
 }
Exemplo n.º 2
0
 public UltimaClientConnection(UltimaClientConnectionStatus status, IDiagnosticPullStream diagnosticPullStream,
                               IDiagnosticPushStream diagnosticPushStream)
 {
     this.diagnosticPullStream = diagnosticPullStream;
     this.diagnosticPushStream = diagnosticPushStream;
     Status = status;
 }
Exemplo n.º 3
0
 private ServerConnection CreateEncryptedConnection(ServerConnectionStatus status,
                                                    IDiagnosticPullStream diagnosticPullStream, IDiagnosticPushStream diagnosticPushStream)
 {
     return(new ServerConnection(status, diagnosticPullStream,
                                 diagnosticPushStream, newGameKey: new byte[] { 127, 0, 0, 1 },
                                 loginSeed: 0xA9FE5050, loginKey: new LoginEncryptionKey(0x2cc3ed9d, 0xa374227f, 0)));
 }
Exemplo n.º 4
0
 public ServerConnection(ServerConnectionStatus status, IDiagnosticPullStream diagnosticPullStream,
                         IDiagnosticPushStream diagnosticPushStream)
 {
     this.Status = status;
     this.diagnosticPullStream = diagnosticPullStream;
     this.diagnosticPushStream = diagnosticPushStream;
     huffmanStream             = new HuffmanStream(receiveNewGameStream);
     preLoginStream            = new PullStreamToStreamAdapter(diagnosticPullStream);
 }
Exemplo n.º 5
0
 public UltimaClientConnection(UltimaClientConnectionStatus status, IDiagnosticPullStream diagnosticPullStream,
     IDiagnosticPushStream diagnosticPushStream, PacketDefinitionRegistry packetRegistry,
     EncryptionSetup encryption, LoginEncryptionKey? configuedLoginEncryptionKey)
 {
     this.diagnosticPullStream = diagnosticPullStream;
     this.diagnosticPushStream = diagnosticPushStream;
     this.encryption = encryption;
     this.configuedLoginEncryptionKey = configuedLoginEncryptionKey;
     Status = status;
     packetLogParser = new PacketLogParser(packetRegistry);
     loginStream = new LoginPullStream();
     loginStream.BaseStream = diagnosticPullStream;
     receiveNewGameStream = new ClientNewGamePullStream();
     receiveNewGameStream.BaseStream = diagnosticPullStream;
     sendNewGameStream = new ClientNewGamePushStream();
 }
Exemplo n.º 6
0
        public ServerConnection(ServerConnectionStatus status, IDiagnosticPullStream diagnosticPullStream,
                                IDiagnosticPushStream diagnosticPushStream, PacketDefinitionRegistry packetRegistry, EncryptionSetup encryptionSetup)
        {
            this.Status = status;
            this.diagnosticPullStream = diagnosticPullStream;
            this.diagnosticPushStream = diagnosticPushStream;
            this.packetRegistry       = packetRegistry;
            this.encryptionSetup      = encryptionSetup;
            this.loginStream          = new LoginPushStream();

            this.receiveNewGameStream = new ServerNewGamePullStream();
            this.sendNewGameStream    = new ServerNewGamePushStream();

            huffmanStream  = new HuffmanStream(new PullStreamToStreamAdapter(receiveNewGameStream));
            preLoginStream = new PullStreamToStreamAdapter(diagnosticPullStream);
        }
Exemplo n.º 7
0
        private void DetectEncryption(IDiagnosticPullStream inputStream)
        {
            if (!inputStream.DataAvailable)
                return;

            var result = loginEncryptionDetector.Detect(this.loginSeed, inputStream, encryptionVersion);

            switch (encryption)
            {
                case EncryptionSetup.Autodetect:
                case EncryptionSetup.EncryptedClient:
                    if (result.Encryption != null)
                    {
                        requiresEncryption = true;
                        loginStream = new LoginPullStream(result.Encryption);
                        loginStream.BaseStream = diagnosticPullStream;
                        LoginEncryptionStarted?.Invoke(loginSeed, result.Key.Value);
                    }
                    break;
                case EncryptionSetup.EncryptedServer:
                    if (!configuedLoginEncryptionKey.HasValue)
                        throw new InvalidOperationException("Unecrypted client and encrypted server specified, without encryption key");

                    requiresEncryption = false;
                    loginStream = new LoginPullStream(result.Encryption);
                    loginStream.BaseStream = diagnosticPullStream;
                    LoginEncryptionStarted?.Invoke(loginSeed, configuedLoginEncryptionKey.Value);
                    break;
                default:
                    throw new NotImplementedException($"EncryptionSetup {encryption}");
            }

            var packet = packetLogParser.ParsePacket(result.DecryptedPacket);
            OnPacketReceived(packet);

            Status = UltimaClientConnectionStatus.ServerLogin;
        }
Exemplo n.º 8
0
 public ServerConnection(ServerConnectionStatus status, IDiagnosticPullStream diagnosticPullStream,
                         IDiagnosticPushStream diagnosticPushStream)
     : this(status, diagnosticPullStream, diagnosticPushStream, PacketDefinitionRegistryFactory.CreateClassicClient(), EncryptionSetup.Autodetect)
 {
 }