private static void CreateSession(MessageData mdata, DWMessage packet) { Net_TcpDisconnected(mdata); var seed = 0; string IP = mdata.Get <string>("cid"); string[] IPParts = IP.Split(':'); seed = BitConverter.ToInt32(IPAddress.Parse(IPParts[0]).GetAddressBytes(), 0); TimeSpan ts = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0)); seed += (int)ts.TotalSeconds; var rnd = new Random(seed); var sid = new byte[8]; rnd.NextBytes(sid); var titleID = DWRouter.GetTitleIDForData(mdata); bdMatchMakingInfo info = null; if (titleID == TitleID.T5) { info = new MatchMakingInfoT5(); } else if (titleID == TitleID.IW5) { info = new MatchMakingInfoIW5(); } info.Deserialize(packet); info.SessionID = sid; info.CID = mdata.Get <string>("cid"); info.User = (DWRouter.CIDToUser.ContainsKey(info.CID)) ? DWRouter.CIDToUser[info.CID] : 0; info.Reachable = true; lock (_sessions) { _sessions.Add(BitConverter.ToUInt64(sid, 0), info); } var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)1); reply.ByteBuffer.Write((uint)1); reply.ByteBuffer.Write((uint)1); reply.ByteBuffer.WriteBlob(info.SessionID); reply.Send(true); if (titleID == TitleID.T5) { var tInfo = (MatchMakingInfoT5)info; Log.Debug(tInfo.OnlineID.ToString("X16") + " registered session (map " + tInfo.MapName + ", gametype " + tInfo.GameTypeName + ")"); } else if (titleID == TitleID.IW5) { Log.Debug("Registered session."); } }
public static void DW_PacketReceived(MessageData data) { var type = data.Get <int>("type"); var crypt = data.Get <bool>("crypt"); if (type == 6) { var packet = DWRouter.GetMessage(data); var call = packet.ByteBuffer.ReadByte(); try { switch (call) { case 1: break; case 14: SendGlobalInstantMessage(data, packet); break; default: Log.Debug("unknown packet " + call + " in bdMessaging"); //DWRouter.Unknown(data, packet); break; } } catch (Exception e) { Log.Error(e.ToString()); } } }
public static void DW_PacketReceived(MessageData data) { var type = data.Get <int>("type"); var crypt = data.Get <bool>("crypt"); var packet = DWRouter.GetMessage(data); var call = packet.ByteBuffer.ReadByte(); switch (call) { case 2: GetUserData(data, packet); break; } }
public static DWMessage GetMessage(MessageData data) { return(new DWMessage() { Data = data, ByteBuffer = new DWByteBuffer(data.Get <byte[]>("data")), BitBuffer = new DWBitBuffer(data.Get <byte[]>("data")), Buffer = data.Get <byte[]>("data") }); }
private static void DeleteSession(MessageData mdata, DWMessage packet) { var sidBlob = packet.ByteBuffer.ReadBlob(); var sid = BitConverter.ToUInt64(sidBlob, 0); lock (_sessions) { var matchingSessions = (from session in _sessions where session.Value.CID == mdata.Get <string>("cid") select session); var toRemove = new List <ulong>(); foreach (var session in matchingSessions) { toRemove.Add(session.Key); } foreach (var key in toRemove) { _sessions.Remove(key); } } var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)1); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((uint)0); reply.Send(true); }
public static void Net_TcpSend(MessageData data) { // TODO: optimize this try { var buffer = data.Get <byte[]>("data"); // get the cid var cid = data.Get <string>("cid"); var ci = _instance._clients[cid]; ci.socket.SendBufferSize = 8192; // and BeginSend it ci.socket.ReceiveTimeout = 10000; ci.socket.SendTimeout = 10000; ci.socket.BeginSend(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(_instance.Socket_Send), ci); } catch { } }
public static void SetGlobalKey(MessageData data, byte[] key) { if (key[0] == 0 && key[4] == 0 && key[8] == 0) { //Debugger.Break(); } _keys[data.Get <string>("cid")] = key; }
public static byte[] GetGlobalKey(MessageData data) { var cid = data.Get <string>("cid"); if (_keys.ContainsKey(cid)) { return(_keys[cid]); } return(new byte[24]); }
public static ulong GetIDForData(MessageData data) { var cid = data.Get <string>("cid"); if (!ConnectionsReverse.ContainsKey(cid)) { return(0); } return(ConnectionsReverse[cid]); }
public static TitleID GetTitleIDForData(MessageData data) { var cid = data.Get <string>("cid"); if (!CIDToTitle.ContainsKey(cid)) { return(TitleID.T5); } return(CIDToTitle[cid]); }
public static void DW_PacketReceived(MessageData data) { var type = data.Get <int>("type"); var crypt = data.Get <bool>("crypt"); if (!crypt) { if (type == 28) { HandleClientAuth(data); } else if (type == 12) { HandleServerAuth(data); } else if (type == 26) { HandleIW5ServerAuth(data, type); } } }
public static void DW_PacketReceived(MessageData data) { var type = data.Get <int>("type"); var crypt = data.Get <bool>("crypt"); if (type == 12 && crypt) { var packet = DWRouter.GetMessage(data); var call = packet.ByteBuffer.ReadByte(); switch (call) { case 6: GetServerTime(data, packet); break; default: //DWRouter.Unknown(data, packet); Log.Info("unknown packet " + call + " in bdTitleUtilities"); break; } } }
public static void Net_TcpDisconnected(MessageData data) { var cid = data.Get <string>("cid"); _keys.Remove(cid); CIDToUser.Remove(cid); CIDToName.Remove(cid); CIDToTitle.Remove(cid); if (ConnectionsReverse.ContainsKey(cid)) { Connections.Remove(ConnectionsReverse[cid]); } ConnectionsReverse.Remove(cid); }
private static void InviteToSession(MessageData mdata, DWMessage packet) { var sidBlob = packet.ByteBuffer.ReadBlob(); var sid = BitConverter.ToUInt64(sidBlob, 0); var attachment = packet.ByteBuffer.ReadBlob(); var onlineIDs = new List <ulong>(); while (packet.ByteBuffer.PeekByte() == 10) { onlineIDs.Add(packet.ByteBuffer.ReadUInt64()); } foreach (var onlineID in onlineIDs) { try { var ourID = DWRouter.GetIDForData(mdata); var ourName = DWRouter.CIDToName[mdata.Get <string>("cid")]; var theirID = DWRouter.Connections[onlineID]; var treply = packet.MakeReply(2, false, theirID); // 2 is 'push message' treply.ByteBuffer.Write((uint)6); treply.ByteBuffer.Write(ourID); treply.ByteBuffer.Write(ourName); treply.ByteBuffer.WriteBlob(sidBlob); treply.ByteBuffer.WriteBlob(attachment); treply.Send(true); Log.Debug("sent an invite to " + onlineID.ToString("X16") + " from " + ourID.ToString("X16")); } catch (Exception) { } } var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)21); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((uint)0); reply.Send(true); }
private static void UpdateSession(MessageData mdata, DWMessage packet) { var sidBlob = packet.ByteBuffer.ReadBlob(); var sid = BitConverter.ToUInt64(sidBlob, 0); var titleID = DWRouter.GetTitleIDForData(mdata); MatchMakingInfoT5 info = null; if (titleID == TitleID.T5) { info = new MatchMakingInfoT5(); } else if (titleID == TitleID.IW5) { //info = new MatchMakingInfoIW5(); } info.Deserialize(packet); info.SessionID = sidBlob; info.CID = mdata.Get <string>("cid"); info.User = (DWRouter.CIDToUser.ContainsKey(info.CID)) ? DWRouter.CIDToUser[info.CID] : 0; info.Reachable = true; info.LastTouched = DateTime.Now; _sessions[sid] = info; if (titleID == TitleID.T5) { var tInfo = (MatchMakingInfoT5)info; Log.Debug(tInfo.OnlineID.ToString("X16") + " updated session (map " + tInfo.MapName + ", gametype " + tInfo.GameTypeName + ")"); } else if (titleID == TitleID.IW5) { Log.Debug("Updated session."); } var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)1); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((uint)0); reply.Send(true); }
private static void HandleClientAuth(MessageData data) { var packet = DWRouter.GetMessage(data); bool unknownBool; uint randomNumber; uint gameID; uint ticketLength; byte[] ticket; packet.BitBuffer.UseDataTypes = false; packet.BitBuffer.ReadBoolean(out unknownBool); packet.BitBuffer.UseDataTypes = true; packet.BitBuffer.ReadUInt32(out randomNumber); packet.BitBuffer.ReadUInt32(out gameID); packet.BitBuffer.ReadUInt32(out ticketLength); ticket = new byte[ticketLength]; packet.BitBuffer.ReadBytes((int)ticketLength, out ticket); var cid = data.Get <string>("cid"); // and the connection //var ci = TCPHandler.Connections.Find(c => c.ConnectionID == cid); var SourceSocket = cid.Split(':'); // create state var state = new ClientAuthstate() { GameID = gameID, Ticket = ticket, Packet = packet, Random = randomNumber, OddBool = unknownBool, Source = SourceSocket[0] }; // start thread var thread = new Thread(DoClientAuth); thread.Start(state); }
private static void GetUserData(MessageData mdata, DWMessage packet) { var ip = mdata.Get <string>("cid").Split(':')[0]; var location = _geoIP.getLocation(ip); var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)8); reply.ByteBuffer.Write(1); reply.ByteBuffer.Write(1); reply.ByteBuffer.Write(location.countryCode ?? ""); reply.ByteBuffer.Write(location.countryName ?? ""); reply.ByteBuffer.Write(location.regionName ?? ""); reply.ByteBuffer.Write(location.city ?? ""); reply.ByteBuffer.Write((float)location.latitude); reply.ByteBuffer.Write((float)location.longitude); reply.Send(true); }
public static void Net_TcpDisconnected(MessageData data) { try { var toRemove = new List <ulong>(); lock (_sessions) { foreach (var session in _sessions) { if (session.Value.CID == data.Get <string>("cid")) { toRemove.Add(session.Key); } } foreach (var id in toRemove) { _sessions.Remove(id); } } } catch { } }
public static void DW_PacketReceived(MessageData data) { var type = data.Get <int>("type"); var crypt = data.Get <bool>("crypt"); var weHandle = ((type == 10) || (type == 18) || (type == 8 || (crypt && type == 28) || type == 50 || type == 4 || type == 58) || (type == 23)); try { if (type == 10) { var packet = DWRouter.GetMessage(data); var call = packet.ByteBuffer.ReadByte(); var initTime = DateTime.Now; switch (call) { case 1: UploadFile(data, packet); break; case 3: GetFile(data, packet); break; case 7: GetPublisherFile(data, packet); break; default: Log.Debug("unknown packet " + call + " in bdStorage"); DWRouter.Unknown(data, packet); break; } } else if (type == 18) { try { var packet = DWRouter.GetMessage(data); var reply = packet.MakeReply(5, false); reply.ByteBuffer.Write(new byte[] { 0x2d, 0xb3, 0xa2, 0x4f, 0x1a, 0x36, 0xd0, 0xd2, 0x00, 0x00, 0x04, 0x00, 0x00, 0xee, 0x02, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0xd0, 0x07, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0x88, 0x13, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x02, 0x0c, 0xd1, 0xaa, 0x7a, 0xb1, 0x31, 0xb1, 0xaa, 0x6b, 0x83, 0x51, 0x00, 0x00 }); reply.Send(true); } catch { } } else if (type == 8 || (crypt && type == 28) || type == 50 || type == 4 || type == 58) { try { var packet = DWRouter.GetMessage(data); try { var call = packet.ByteBuffer.ReadByte(); //Log.Debug("Service call identifier is " + call + "."); } catch { } //DWRouter.Unknown(data, packet); } catch { } } else if (type == 23) { try { var packet = DWRouter.GetMessage(data); var call = packet.ByteBuffer.ReadByte(); switch (call) { case 2: GetCounterTotals(data, packet); break; default: Log.Debug("unknown packet " + call + " in bdCounter"); //DWRouter.Unknown(data, packet); break; } } catch { } } /*else if (type != 12 && crypt) * { * var packet = DWRouter.GetMessage(data); * DWRouter.Unknown(data, packet); * }*/ } catch (Exception e) { Log.Error(e.ToString()); } if (weHandle) { var upacket = DWRouter.GetMessage(data); } }
public void handlePacket(MessageData data) { var buffer = data.Get <byte[]>("data"); var source = data.Get <EndPoint>("source"); var stream = new MemoryStream(buffer); var reader = new BinaryReader(stream); var time = data.Get <DateTime>("time"); var delay = (DateTime.Now - time).TotalMilliseconds; var delay2 = DateTime.Now; try { while (stream.Position < stream.Length) { var origin = 0; var len = 0; if (_bytesRead == 0) { _totalBytes = 0; try { _totalBytes = reader.ReadInt32(); } catch { _totalBytes = 0; } //Log.Info("GOT A PACKET OF SIZE " + _totalBytes.ToString("X")); if (_totalBytes == 0xC8) { _totalBytes = 0; break; } if (_totalBytes > (256 * 1024)) { Log.Error("LENGTH IS XBOX"); break; } if (_totalBytes == 0 || _totalBytes < 0) { //TCPHandler.sendPacket(message, client); MessageData packet = new MessageData("none"); packet["data"] = new byte[4]; packet["cid"] = data.Get <string>("cid"); TCPHandler.Net_TcpSend(packet); continue; } _messageBuffer = new MemoryStream(); origin += 4; len -= 4; } len += Math.Min((buffer.Length - (int)stream.Position), (_totalBytes - _bytesRead)); var newBytes = reader.ReadBytes(len); _messageBuffer.Write(newBytes, 0, len); _bytesRead += len; if (_bytesRead > _totalBytes) { //Debugger.Break(); } if (_bytesRead >= _totalBytes) { _bytesRead = 0; _messageBuffer.Position = 0; var breader = new BinaryReader(_messageBuffer); _totalBytes--; var pdtype = breader.ReadByte(); var encrypted = (pdtype == 1); // can be 0, 1 and 0xFF var ptype = 0xFF; byte[] pdata = null; if (pdtype == 0xFF) { // TODO: handle this one Log.Debug("Got a 0xFF pdtype!"); //return; continue; } var initTime = DateTime.Now; if (!encrypted) { ptype = breader.ReadByte(); _totalBytes -= 1; pdata = breader.ReadBytes(_totalBytes); } else { try { var key = GetGlobalKey(data); var iv = DWCrypto.CalculateInitialVector(breader.ReadUInt32()); var edata = breader.ReadBytes(_totalBytes - 4); var ddata = DWCrypto.Decrypt(iv, key, edata); var dstream = new MemoryStream(ddata); var dreader = new BinaryReader(dstream); // TODO: find out why this hash isn't just truncated SHA-1 var hash = dreader.ReadUInt32(); ptype = dreader.ReadByte(); pdata = dreader.ReadBytes((int)(dstream.Length - 5)); dreader.Close(); dstream.Close(); } catch { } } var initTime2 = DateTime.Now; var delay3 = (DateTime.Now - delay2).TotalMilliseconds; //Log.Debug("Received a " + _totalBytes + " byte packet (type " + ptype + ") from DemonWare - delay " + delay + "ms. delay after reading " + delay3 + "ms."); /* * var message = Messages.NewMessage("dw.packet-received"); * message["data"] = pdata; * message["type"] = ptype; * message["crypt"] = encrypted; * message["source"] = source; * message["cid"] = data["cid"]; * message["delay"] = delay; * message["time"] = DateTime.Now; * message.SendNow(); */ MessageData message = new MessageData("none"); message["data"] = pdata; message["type"] = ptype; message["crypt"] = encrypted; message["source"] = source; message["cid"] = data["cid"]; message["ci"] = data["ci"]; message["delay"] = delay; message["time"] = DateTime.Now; redirectPacket(message); /*var msec = (int)((DateTime.Now - initTime).TotalMilliseconds); * var state = GetPerfState(ptype); * state.Add(msec); * * msec = (int)((DateTime.Now - initTime2).TotalMilliseconds); * var state2 = GetPerfState(ptype + 1000); * state2.Add(msec); * * Log.Debug("service " + ptype + " min " + state.Min + "/" + state2.Min + " max " + state.Max + "/" + state2.Max);*/ } } } catch (Exception ex) { Log.Error(ex.ToString()); // disconnect to prevent further pollution of system TCPHandler.ForceDisconnect(data); } reader.Close(); }
public static void DW_PacketReceived(MessageData data) { var type = data.Get <int>("type"); if (type == 7) { var packet = DWRouter.GetMessage(data); bool initialBool; uint gameID, randomNumber; byte[] ticket; packet.BitBuffer.UseDataTypes = false; packet.BitBuffer.ReadBoolean(out initialBool); packet.BitBuffer.UseDataTypes = true; packet.BitBuffer.ReadUInt32(out gameID); packet.BitBuffer.ReadUInt32(out randomNumber); packet.BitBuffer.ReadBytes(128, out ticket); // parse LSG ticket var key = DWTickets.GetKeyFromLSGTicket(ticket); DWRouter.SetGlobalKey(packet.Data, key); lock (DWRouter.Connections) { var id = DWTickets.GetIDFromLSGTicket(ticket); DWRouter.Connections[id] = packet.Data.Get <string>("cid"); } lock (DWRouter.CIDToUser) { var id = DWTickets.GetUserFromLSGTicket(ticket); DWRouter.CIDToUser[packet.Data.Get <string>("cid")] = id; } lock (DWRouter.ConnectionsReverse) { var id = DWTickets.GetIDFromLSGTicket(ticket); DWRouter.ConnectionsReverse[packet.Data.Get <string>("cid")] = id; } lock (DWRouter.CIDToName) { var name = DWTickets.GetNameFromLSGTicket(ticket); DWRouter.CIDToName[packet.Data.Get <string>("cid")] = name; } lock (DWRouter.CIDToTitle) { var title = (TitleID)gameID; DWRouter.CIDToTitle[packet.Data.Get <string>("cid")] = title; } // now make a reply. /* * var reply = packet.MakeReply(1, false); * reply.ByteBuffer.Write(0x8000000000000000); * reply.ByteBuffer.Write(0); * reply.ByteBuffer.Write((byte)6); * reply.ByteBuffer.Write(1); * reply.ByteBuffer.Write(1); * reply.ByteBuffer.Write(0x12345678); * reply.Send(true);*/ } }
/*void DoReceive(SocketAsyncEventArgs args) * { * var client = (TCPClient)args.UserToken; * * while (!client.socket.ReceiveAsync(args)) * { * Log.Debug("Handling stuff - " + client.ConnectionID); * HandleReceive(args); * } * }*/ public static void ForceDisconnect(MessageData message) { _instance.CloseSocket(message.Get <TCPClient>("ci").readEventArgs); }
private void redirectPacket(MessageData data) { data.Arguments["handled"] = false; var type = data.Get <int>("type"); var crypt = data.Get <bool>("crypt"); bool routed = false; try { if (!crypt && (type == 28 || type == 12 || type == 26)) { DWAuther.DW_PacketReceived(data); routed = true; //Log.Debug("got auth packet"); } if (crypt && type == 28) { DWGroups.DW_PacketReceived(data); routed = true; } if (type == 7) { DWLobby.DW_PacketReceived(data); routed = true; //Log.Debug("got lobby packet"); } if (type == 6) { DWMessaging.DW_PacketReceived(data); routed = true; //Log.Debug("got service packet"); } if (type == 21) { DWMatch.DW_PacketReceived(data); routed = true; //Log.Debug("got match packet"); } if ((type == 10) || (type == 18) || (type == 23) || (type == 8 || type == 50 || type == 4 || type == 58)) { DWStorage.DW_PacketReceived(data); routed = true; //Log.Debug("got storage packet"); } if (type == 12 && crypt) { DWTitles.DW_PacketReceived(data); routed = true; //Log.Debug("got Title packet"); } if (type == 8) { DWProfiles.DW_PacketReceived(data); routed = true; } if (type == 27) { DWDML.DW_PacketReceived(data); } if (type == 67) { DWEventLog.DW_PacketReceived(data); } } catch (Exception e) { Log.Error("Exception: " + e.ToString()); } /*if(routed == false) * { * Log.Debug("UNHANDLED PACKET: " + type); * }*/ try { if (crypt && !data.Get <bool>("handled")) { DWRouter.Unknown(data, DWRouter.GetMessage(data)); } } catch { Log.Error("UNKNOWN FAILED, THIS CONNECTION CAN BE CONSIDERED DEAD."); // disconnect to prevent pollution of system TCPHandler.ForceDisconnect(data); } }
private static void CreateSession(MessageData mdata, DWMessage packet) { Net_TcpDisconnected(mdata); var seed = 0; string IP = mdata.Get <string>("cid"); string[] IPParts = IP.Split(':'); seed = BitConverter.ToInt32(IPAddress.Parse(IPParts[0]).GetAddressBytes(), 0); TimeSpan ts = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0)); seed += (int)ts.TotalSeconds; var rnd = new Random(seed); var sid = new byte[8]; rnd.NextBytes(sid); var titleID = DWRouter.GetTitleIDForData(mdata); MatchMakingInfoT5 info = null; if (titleID == TitleID.T5) { info = new MatchMakingInfoT5(); } else if (titleID == TitleID.IW5) { //info = new MatchMakingInfoIW5(); } info.Deserialize(packet); info.SessionID = sid; info.CID = mdata.Get <string>("cid"); info.User = (DWRouter.CIDToUser.ContainsKey(info.CID)) ? DWRouter.CIDToUser[info.CID] : 0; info.Reachable = true; lock (_sessions) { //Delete old sessions int deleted = 0; foreach (var session in _sessions) { if (session.Value.User == info.User) { _sessions.Remove(session.Key); deleted++; } } /* * var duplicateValues = _sessions.GroupBy(x => x.Value).Where(x => x.Count() > 1); * * foreach (var dupSession in _sessions) * { * _sessions.Remove(dupSession.Key); * deleted++; * } */ Console.WriteLine("Deleted {0} old sessions whilst making a new one...", deleted); _sessions.Add(BitConverter.ToUInt64(sid, 0), info); } var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)1); reply.ByteBuffer.Write((uint)1); reply.ByteBuffer.Write((uint)1); reply.ByteBuffer.WriteBlob(info.SessionID); reply.Send(true); if (titleID == TitleID.T5) { var tInfo = (MatchMakingInfoT5)info; Log.Debug(tInfo.OnlineID.ToString("X16") + " registered session (map " + tInfo.MapName + ", gametype " + tInfo.GameTypeName + ")"); } else if (titleID == TitleID.IW5) { Log.Debug("Registered session."); } }
private static void FindSessionByIP(MessageData mdata, DWMessage packet, uint address, ushort port) { IEnumerable <KeyValuePair <ulong, bdMatchMakingInfo> > matchingSessions = null; var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)13); lock (_sessions) { matchingSessions = (from session in _sessions where (session.Value.TitleID == TitleID.T5 && session.Value.IPAddress == address && session.Value.Port == port) || (mdata.Get <IPEndPoint>("source").Address.Address == session.Value.IPAddress && session.Value.InternalIPAddress == address && session.Value.InternalPort == port) select session).Take(1); reply.ByteBuffer.Write((uint)matchingSessions.Count()); reply.ByteBuffer.Write((uint)matchingSessions.Count()); foreach (var session in matchingSessions) { session.Value.Serialize(reply); } } reply.Send(true); Console.WriteLine("get ip {0} returned {1} sessions", address, matchingSessions.Count()); }
public static void DW_PacketReceived(MessageData data) { var type = data.Get <int>("type"); var crypt = data.Get <bool>("crypt"); if (type == 21) { var packet = DWRouter.GetMessage(data); var call = packet.ByteBuffer.ReadByte(); try { switch (call) { case 1: CreateSession(data, packet); break; case 2: UpdateSession(data, packet); break; case 3: DeleteSession(data, packet); break; case 4: FindSessionFromID(data, packet); break; case 5: FindSessions(data, packet); break; case 8: InviteToSession(data, packet); break; case 9: SubmitPerformance(data, packet); break; case 10: GetPerformanceValues(data, packet); break; case 12: UpdateSessionPlayers(data, packet); break; case 13: FindSessionsPaged(data, packet); break; case 14: FindSessionsByEntityIDs(data, packet); break; default: Log.Debug("unknown packet " + call + " in bdMatchMaking"); //DWRouter.Unknown(data, packet); break; } } catch (Exception e) { Log.Error(e.ToString()); } } }