示例#1
0
        public void Test_Can_Construct_Crypto_Decorator_WithNoBufferSize()
        {
            //arrange
            NetworkClientBase      mockedClient    = Mock.Of <NetworkClientBase>();
            ICryptoServiceProvider encryptProvider = Mock.Of <ICryptoServiceProvider>();
            ICryptoServiceProvider decryptProvider = Mock.Of <ICryptoServiceProvider>();

            NetworkClientFixedBlockSizeCryptoDecorator decorator = new NetworkClientFixedBlockSizeCryptoDecorator(mockedClient, encryptProvider, decryptProvider, 1);
        }
示例#2
0
        public void Test_Can_Read_Correct_EqualSizeChunks_With_Large_Buffer_Size(int blockSize, int readSize)
        {
            //arrange
            NetworkClientBase decorator = SetupNetworkClient(readSize, blockSize);

            byte[] readBuffer = new byte[readSize * 500];

            //assert
            for (int i = 0; i < 100; i = i + 4)
            {
                int result = decorator.ReadAsync(readBuffer, 0, readSize, CancellationToken.None).Result;

                Assert.AreEqual(readSize, result, "Crypto reader didn't read the requested amount of bytes.");

                for (int j = 0; j < readSize; j++)
                {
                    Assert.AreEqual((i + j) * 2, readBuffer[j], "Value read from crypto read wasn't the expected value.");
                }
            }
        }
示例#3
0
 /// <summary>
 /// Implementer should build the <see cref="IManagedNetworkClient{TPayloadWriteType,TPayloadReadType}"/>
 /// for the outgoing client.
 /// </summary>
 /// <param name="clientBase">The client base to use.</param>
 /// <param name="serializeService">The serializer to use.</param>
 /// <returns>The built managed client.</returns>
 protected abstract IManagedNetworkClient <TPayloadReadType, TPayloadWriteType> BuildOutgoingSessionManagedClient(NetworkClientBase clientBase, INetworkSerializationService serializeService);
示例#4
0
 /// <inheritdoc />
 protected override IManagedNetworkClient <AuthenticationClientPayload, AuthenticationServerPayload> BuildOutgoingSessionManagedClient(NetworkClientBase clientBase, INetworkSerializationService serializeService)
 {
     //We need to create an actual client to the server too.
     return(clientBase
            .AddHeaderlessNetworkMessageReading(serializeService)
            .For <AuthenticationServerPayload, AuthenticationClientPayload, IAuthenticationPayload>()
            .Build()
            .AsManagedSession(Logger));
 }
示例#5
0
        /// <inheritdoc />
        protected override IManagedNetworkServerClient <AuthenticationServerPayload, AuthenticationClientPayload> BuildIncomingSessionManagedClient(NetworkClientBase clientBase, INetworkSerializationService serializeService)
        {
            //TODO: Are any details actually valuable here?
            if (Logger.IsInfoEnabled)
            {
                Logger.Info($"Client connected to proxy.");
            }

            //The auth server is encryptionless and 'headerless' so we do not need to support that on the proxy for the auth server
            return(clientBase
                   .AddHeaderlessNetworkMessageReading(serializeService)
                   .For <AuthenticationClientPayload, AuthenticationServerPayload, IAuthenticationPayload>()
                   .Build()
                   .AsManagedSession(Logger));
        }
        /// <inheritdoc />
        protected override IManagedNetworkClient <PSOBBGamePacketPayloadClient, PSOBBGamePacketPayloadServer> BuildOutgoingSessionManagedClient(NetworkClientBase clientBase, INetworkSerializationService serializeService)
        {
            //Copied from the test client project
            IManagedNetworkClient <PSOBBGamePacketPayloadClient, PSOBBGamePacketPayloadServer> client = clientBase
                                                                                                        .AddCryptHandling(ServerEncryptionService, ServerDecryptionService)
                                                                                                        .AddBufferredWrite(4)
                                                                                                        .AddHeaderReading <PSOBBPacketHeader>(serializeService, 2)
                                                                                                        .AddNetworkMessageReading(serializeService)
                                                                                                        .For <PSOBBGamePacketPayloadServer, PSOBBGamePacketPayloadClient, IPacketPayload>(new PSOBBPacketHeaderFactory())
                                                                                                        .AddReadBufferClearing()
                                                                                                        .Build()
                                                                                                        .AsManagedSession();

            return(client);
        }
        /// <inheritdoc />
        protected override IManagedNetworkServerClient <PSOBBGamePacketPayloadServer, PSOBBGamePacketPayloadClient> BuildIncomingSessionManagedClient(NetworkClientBase clientBase, INetworkSerializationService serializeService)
        {
            ResetCrypto();

            Logger.Info($"Client connecting to Proxy App with Listener: {this.ServerAddress.AddressEndpoint}:{this.ServerAddress.Port}");

            IManagedNetworkServerClient <PSOBBGamePacketPayloadServer, PSOBBGamePacketPayloadClient> session = clientBase
                                                                                                               .AddCryptHandling(ClientEncryptionService, ClientDecryptionService)
                                                                                                               .AddBufferredWrite(4)
                                                                                                               .AddHeaderReading <PSOBBPacketHeader>(serializeService, 2)
                                                                                                               .AddNetworkMessageReading(serializeService)
                                                                                                               .For <PSOBBGamePacketPayloadClient, PSOBBGamePacketPayloadServer, IPacketPayload>(new PSOBBPacketHeaderFactory())
                                                                                                               .AddReadBufferClearing()
                                                                                                               .Build()
                                                                                                               .AsManagedSession();

            return(session);
        }
示例#8
0
        /// <inheritdoc />
        protected override IManagedNetworkClient <GamePacketPayload, GamePacketPayload> BuildOutgoingSessionManagedClient(NetworkClientBase clientBase, INetworkSerializationService serializeService)
        {
            SRP6SessionKeyStore keyStore = ServiceContainer.Resolve <SRP6SessionKeyStore>();
            ICombinedSessionPacketCryptoService cryptoService = BuildOutgoingPacketCryptoService(keyStore);

            var wowClientReadServerWrite = new WoWClientWriteServerReadProxyPacketPayloadReaderWriterDecorator <NetworkClientBase, GamePacketPayload, GamePacketPayload, IGamePacketPayload>(clientBase, serializeService, cryptoService);

            return(new ManagedNetworkServerClient <WoWClientWriteServerReadProxyPacketPayloadReaderWriterDecorator <NetworkClientBase, GamePacketPayload, GamePacketPayload, IGamePacketPayload>, GamePacketPayload, GamePacketPayload>(wowClientReadServerWrite, Logger));
        }
示例#9
0
        /// <inheritdoc />
        protected override IManagedNetworkServerClient <GamePacketPayload, GamePacketPayload> BuildIncomingSessionManagedClient(NetworkClientBase clientBase, INetworkSerializationService serializeService)
        {
            //TODO: Are any details actually valuable here?
            if (Logger.IsInfoEnabled)
            {
                Logger.Info($"Client connected to proxy.");
            }

            SRP6SessionKeyStore keyStore = ServiceContainer.Resolve <SRP6SessionKeyStore>();
            ICombinedSessionPacketCryptoService cryptoService = BuildIncomingPacketCryptoService(keyStore);

            var wowClientReadServerWrite = new WoWClientReadServerWriteProxyPacketPayloadReaderWriterDecorator <NetworkClientBase, GamePacketPayload, GamePacketPayload, IGamePacketPayload>(clientBase, serializeService, cryptoService, Logger);

            return(new ManagedNetworkServerClient <WoWClientReadServerWriteProxyPacketPayloadReaderWriterDecorator <NetworkClientBase, GamePacketPayload, GamePacketPayload, IGamePacketPayload>, GamePacketPayload, GamePacketPayload>(wowClientReadServerWrite, Logger));
        }