void InitializeHandler(SocketAsyncEventArgs args) { if (args.SocketError != SocketError.Success) { CloseSocket(); return; } if (args.BytesTransferred > 0) { if (_packetBuffer.GetRemainingSpace() > 0) { // need to receive the header int readHeaderSize = Math.Min(args.BytesTransferred, _packetBuffer.GetRemainingSpace()); _packetBuffer.Write(args.Buffer, 0, readHeaderSize); if (_packetBuffer.GetRemainingSpace() > 0) { // Couldn't receive the whole header this time. AsyncReadWithCallback(InitializeHandler); return; } ByteBuffer buffer = new ByteBuffer(_packetBuffer.GetData()); string initializer = buffer.ReadString((uint)ClientConnectionInitialize.Length); if (initializer != ClientConnectionInitialize) { CloseSocket(); return; } byte terminator = buffer.ReadUInt8(); if (terminator != '\n') { CloseSocket(); return; } // Initialize the zlib stream _compressionStream = new ZLib.z_stream(); // Initialize the deflate algo... var z_res1 = ZLib.deflateInit2(_compressionStream, 1, 8, -15, 8, 0); if (z_res1 != 0) { CloseSocket(); Log.outError(LogFilter.Network, "Can't initialize packet compression (zlib: deflateInit2_) Error code: {0}", z_res1); return; } _packetBuffer.Reset(); HandleSendAuthSession(); AsyncRead(); return; } } AsyncReadWithCallback(InitializeHandler); }
bool ReadHeader() { PacketHeader header = new PacketHeader(); header.Read(_headerBuffer.GetData()); if (!header.IsValidSize()) { Log.outError(LogFilter.Network, $"WorldSocket.ReadHeaderHandler(): client {GetRemoteIpAddress()} sent malformed packet (size: {header.Size})"); return(false); } _packetBuffer.Resize(header.Size); return(true); }