Exemple #1
0
        public void RespondHandshake()
        {
            using (var stream = Bitstream.Create()) {
                stream.WriteChar(C2S_CONNECT);
                stream.WriteUInt32(SOURCE_VERSION);
                stream.WriteUInt32(STEAM_VERSION);
                stream.WriteUInt32(server_challenge);
                stream.WriteUInt32(client_challenge);

                stream.Write(Encoding.UTF8.GetBytes(client.CVars["name"]));
                stream.WriteByte(0);

                stream.Write(Encoding.UTF8.GetBytes(details.Secret.ToString()));
                stream.WriteByte(0);

                // num players
                stream.WriteByte(1);

                // cvars
                stream.WriteByte((byte)CLC_Messages.clc_SplitPlayerConnect);

                var split = new CCLCMsg_SplitPlayerConnect();
                split.convars = client.ExposeCVars();
                Serializer.SerializeWithLengthPrefix(stream, split, PrefixStyle.Base128);

                connection.EnqueueOutOfBand(stream.ToBytes());
            }
        }
Exemple #2
0
        public void RespondHandshake()
        {
            using (var stream = Bitstream.Create())
            {
                stream.WriteChar(C2S_CONNECT);
                stream.WriteUInt32(SOURCE_VERSION);
                stream.WriteUInt32(STEAM_VERSION);
                stream.WriteUInt32(server_challenge);
                stream.WriteUInt32(client_challenge);

                stream.Write(Encoding.UTF8.GetBytes(state.CVars["name"]));
                stream.WriteByte(0);

                stream.Write(Encoding.UTF8.GetBytes(details.PassKey.ToString()));
                stream.WriteByte(0);

                // num players to join, obviously one in this case
                stream.WriteByte(1);

                // cvars
                stream.WriteByte((byte)CLC_Messages.clc_SplitPlayerConnect);

                var split = new CCLCMsg_SplitPlayerConnect();
                split.convars = state.ExposeCVars();
                Serializer.SerializeWithLengthPrefix(stream, split, PrefixStyle.Base128);

                // auth ticket
                var bytes = new byte[details.ServerAuthTicket.Length];
                details.ServerAuthTicket.CopyTo(bytes, 0);

                var carry = false;
                for (var i = 0; i < bytes.Length; ++i)
                {
                    var d = (byte)(((bytes[i] * 2) % 256) + (carry ? 1 : 0));
                    carry    = bytes[i] > 127;
                    bytes[i] = d;
                }
                stream.Write(bytes);

                connection.EnqueueOutOfBand(stream.ToBytes());
            }
        }