public void sendToCloudHelper_HelpWithNode(xbs_node node) { xbs_node_message_toCloudHelper_HelpWithNode msg = new xbs_node_message_toCloudHelper_HelpWithNode(node.ip_public, (UInt16)node.port_public); msg.receiver = this; sendNodeMessage(msg); }
public void send_fromCloudhelper_helpWithAddingNode(xbs_node node) { xbs_node_message_fromCloudHelper_ContactNode msg = new xbs_node_message_fromCloudHelper_ContactNode(node.ip_public, (UInt16)node.port_public); msg.receiver = this; sendNodeMessage(msg); }
public void addNode(xbs_node node) { lock (this) { foreach (xbs_node n in node_list) { if (n.Equals(node)) { return; } } node_list.Add(node); } xbs_messages.addInfoMessage(" + Added new node: " + node, xbs_message_sender.NODELIST); node.sendGetClientVersion(); node.sendPing(); node.sendGetNickname(); if (notify_on_new_node) { System.Media.SoundPlayer sound_player = new System.Media.SoundPlayer(); sound_player.SoundLocation = xbs_node_list.NOTIFICATION_SOUND_NODE_JOINED; try { sound_player.Play(); } catch (Exception) { } } purgeAddedNodeFromAddingList(node); listHasJustChanged(); }
public bool Equals(xbs_node node) { if (ip_announced != null && node.ip_announced != null) { if (ip_announced.Equals(node.ip_announced) && port_announced == node.port_announced) { return(true); } } if (ip_sendfrom != null && node.ip_sendfrom != null) { if (ip_sendfrom.Equals(node.ip_sendfrom) && port_sendfrom == node.port_sendfrom) { return(true); } } if (ip_public != null && node.ip_public != null) { if (ip_public.Equals(node.ip_public) && port_public == node.port_public) { return(true); } } return(false); }
public void updateNodeInCloud(String row_data) { IPAddress ip; int port; try { NameValueCollection node_data = HttpUtility.ParseQueryString(row_data); ip = IPAddress.Parse(node_data[xbs_cloudlist_getparameters.NODEIP]); port = int.Parse(node_data[xbs_cloudlist_getparameters.NODEPORT]); } catch (Exception e) { xbs_messages.addInfoMessage("!! Error getting updating node data: " + e.Message, xbs_message_sender.CLOUDLIST, xbs_message_type.ERROR); return; } xbs_node_list node_list = xbs_node_list.getInstance(); if (node_list != null) { xbs_node node = node_list.findNode(ip, port); if (node == null) { node = new xbs_node(ip, port); if (!node_list.local_node.Equals(node)) { #if DEBUG xbs_messages.addDebugMessage(" x found new node in cloudlist update: " + node, xbs_message_sender.CLOUDLIST); #endif node_list.tryAddingNode(node, current_cloudname); } } } }
public void dispatch_in_msg(ref xbs_udp_message udp_msg) { xbs_node tmp_node = null; xbs_node sending_node = node_list.findNode(udp_msg.src_ip, udp_msg.src_port); # if DEBUG if (udp_msg.msg_type != xbs_node_message_type.PING && udp_msg.msg_type != xbs_node_message_type.PONG)
public xbs_node_message_data(xbs_node node, byte[] data_bytes) { type = ttype; data = data_bytes; data_len = (UInt16)data.Length; receiver = node; }
public xbs_node_message_clientversion(xbs_node node, String version_string) { type = ttype; data = getVersionStringByteArray(version_string); data_len = 4; receiver = node; }
public xbs_node addNode(IPAddress ip_announced, int port_announced, IPAddress ip_from, int port_from) { xbs_node node = new xbs_node(ip_announced, port_announced, ip_from, port_from); addNode(node); return(node); }
public void addNode(xbs_node node) { lock (this) { foreach (xbs_node n in node_list) if (n.Equals(node)) return; node_list.Add(node); } xbs_messages.addInfoMessage(" + Added new node: " + node, xbs_message_sender.NODELIST); node.sendGetClientVersion(); node.sendPing(); node.sendGetNickname(); if (notify_on_new_node) { System.Media.SoundPlayer sound_player = new System.Media.SoundPlayer(); sound_player.SoundLocation = xbs_node_list.NOTIFICATION_SOUND_NODE_JOINED; try { sound_player.Play(); } catch (Exception) { } } purgeAddedNodeFromAddingList(node); listHasJustChanged(); }
public xbs_node_message_pong(xbs_node node, byte[] data) { this.data = data; data_len = (UInt16)data.Length; type = ttype; data_len = 0; receiver = node; }
public void sendDelNodeMessage(xbs_node node) { #if DEBUG xbs_messages.addInfoMessage(" ~ sending DelNodeMessage to " + this + " for node " + node, xbs_message_sender.NODE); #endif xbs_node_message_delnode msg = new xbs_node_message_delnode(node.ip_public, (UInt16)node.port_public); msg.receiver = this; sendNodeMessage(msg); }
public xbs_node_message_ping(xbs_node node) { DateTime now = DateTime.Now; data = BitConverter.GetBytes(now.Ticks); data_len = (UInt16)data.Length; type = ttype; receiver = node; }
public void cloudhelper_helpWithNode(IPAddress ip_from, int port_from, IPAddress ip_to, int port_to) { xbs_node node_from = findNode(ip_from, port_from); xbs_node node_to = findNode(ip_to, port_to); if (node_from != null && node_to != null) { node_to.send_fromCloudhelper_helpWithAddingNode(node_from); } }
public xbs_node_message_string(xbs_node node, String str) { this.message_string = str; if (str != null && str.Length > 0) { updateBinarydata(); } else { data_len = 0; } receiver = node; }
public void informNodesOnDelNode(xbs_node node) { xbs_messages.addInfoMessage(" + informing all nodes of removed node " + node, xbs_message_sender.NODELIST); lock (this) { foreach (xbs_node n in node_list) { if (!node.Equals(n)) { n.sendDelNodeMessage(node); } } } }
public void informNodesOnAddNode(xbs_node new_node) { xbs_messages.addInfoMessage(" + informing all nodes of new node " + new_node, xbs_message_sender.NODELIST); lock (this) { foreach (xbs_node node in node_list) { if (!node.Equals(new_node)) { node.sendAddNodeMessage(new_node); } } } }
private void askCloudHelperToSendAddNodeMessage(xbs_node node) { xbs_node cloud_helper; lock (node_list) { cloud_helper = node_list.Count == 0 ? null : node_list[my_random.Next(0, node_list.Count - 1)]; } if (cloud_helper == null) { return; } xbs_messages.addInfoMessage("+ asking (" + node.ask_cloudhelper_count + ") cloud_helper (" + cloud_helper + ") for help to add node " + node, xbs_message_sender.NODELIST); cloud_helper.sendToCloudHelper_HelpWithNode(node); }
public void sendNodeListToNode(xbs_node new_node) { #if DEBUG xbs_messages.addInfoMessage(" + sending Nodelist to " + new_node, xbs_message_sender.NODELIST); #endif lock (this) { foreach (xbs_node node in node_list) { if (!new_node.Equals(node)) { new_node.sendKnownNodeMessage(node); } } } }
public void tryAddingNode(xbs_node new_node, String cloudname) { if (findNodeInAddingList(new_node.ip_public, new_node.port_public) != null) { #if DEBUG xbs_messages.addDebugMessage(" + node already in addingList: " + new_node, xbs_message_sender.NODELIST); #endif return; } lock (node_list_adding) node_list_adding.Add(new_node); //new_node.sendAddNodeMessage(local_node); xbs_node_message_announce msg = new xbs_node_message_announce(new_node.getSendToIP(), new_node.getSendToPort()); if (cloudname != null) { msg.addOption(xbs_node_message_announce.OPTION_CLOUDNAME, cloudname); } new_node.sendNodeMessage(msg); }
private void purgeAddedNodeFromAddingList(xbs_node new_node) { #if DEBUG xbs_messages.addInfoMessage("+ trying to purged node from node_list_adding : " + new_node, xbs_message_sender.NODELIST); #endif lock (node_list_adding) { for (int i = 0; i < node_list_adding.Count; i++) { if (node_list_adding[i].Equals(new_node)) { node_list_adding.RemoveAt(i); #if DEBUG xbs_messages.addInfoMessage("+ purged node from node_list_adding : " + new_node, xbs_message_sender.NODELIST); #endif break; } } } }
public void delNode(xbs_node node) { xbs_node deleted_node = null; lock (this) { foreach (xbs_node n in node_list) { if (n.Equals(node)) { xbs_messages.addInfoMessage(" + removed node " + n, xbs_message_sender.NODELIST); deleted_node = n; node_list.Remove(n); if (notify_on_new_node) { System.Media.SoundPlayer sound_player = new System.Media.SoundPlayer(); sound_player.SoundLocation = xbs_node_list.NOTIFICATION_SOUND_NODE_LEFT; try { sound_player.Play(); } catch (Exception) { } } listHasJustChanged(); break; } } } if (node.get_xbox_count() > 0) { foreach (xbs_xbox xbox in node.getXboxArray()) { xbs_nat.getInstance().informOfRemovedDevice(xbox.mac); } } }
public xbs_node_message_options(xbs_node node) : base(node, null) { data_len = 0; receiver = node; }
public void updateNodeInCloud( String row_data ) { IPAddress ip; int port; try { NameValueCollection node_data = HttpUtility.ParseQueryString( row_data ); ip = IPAddress.Parse(node_data[xbs_cloudlist_getparameters.NODEIP]); port = int.Parse(node_data[xbs_cloudlist_getparameters.NODEPORT]); } catch (Exception e) { xbs_messages.addInfoMessage("!! Error getting updating node data: " + e.Message, xbs_message_sender.CLOUDLIST, xbs_message_type.ERROR); return; } xbs_node_list node_list = xbs_node_list.getInstance(); if (node_list != null) { xbs_node node = node_list.findNode(ip, port); if (node == null) { node = new xbs_node(ip, port); if (!node_list.local_node.Equals(node)) { #if DEBUG xbs_messages.addDebugMessage(" x found new node in cloudlist update: " + node, xbs_message_sender.CLOUDLIST); #endif node_list.tryAddingNode(node, current_cloudname); } } } }
public void injectRemotePacket(ref byte[] data, PhysicalAddress dstMAC, PhysicalAddress srcMAC, ref xbs_node sending_node) { Packet p = null; ARPPacket p_arp = null; IPv4Packet p_ipv4 = null; ICMPv4Packet p_icmp = null; UdpPacket p_udp = null; TcpPacket p_tcp = null; IPAddress source_IP = null; int srcMac_hash = srcMAC.GetHashCode(); // collect all injected source MACs. sniffer needs this to filter packets out lock (injected_macs_hash) { if (!injected_macs_hash.Contains(srcMac_hash)) { injected_macs_hash.Add(srcMac_hash); addMacToKnownMacListFromRemoteNodes(srcMAC); } } if (sending_node != null) { if (sending_node.addXbox(srcMAC)) { node_list.listHasJustChanged(); } } try { p = Packet.ParsePacket(LinkLayers.Ethernet, data); } catch (PcapException pcex) { #if DEBUG xbs_messages.addDebugMessage("!! ERROR! parse packet failed in injectRemotePacket (1): " + pcex.ToString(), xbs_message_sender.SNIFFER, xbs_message_type.ERROR); #endif return; } catch (NotImplementedException niex) { #if DEBUG xbs_messages.addDebugMessage("!! ERROR! parse packet failed in injectRemotePacket (2): " + niex.ToString(), xbs_message_sender.SNIFFER, xbs_message_type.ERROR); #endif return; } // DETERMINE PACKET TYPE if (p.PayloadPacket is IPv4Packet) { p_ipv4 = p.PayloadPacket as IPv4Packet; source_IP = p_ipv4.SourceAddress; if (p_ipv4.PayloadPacket is UdpPacket) { p_udp = p_ipv4.PayloadPacket as UdpPacket; } else if (p_ipv4.PayloadPacket is TcpPacket) { p_tcp = p_ipv4.PayloadPacket as TcpPacket; } } else if (p.PayloadPacket is ARPPacket) { p_arp = p.PayloadPacket as ARPPacket; source_IP = p_arp.SenderProtocolAddress; } else if (p.PayloadPacket is ICMPv4Packet) { p_icmp = p.PayloadPacket as ICMPv4Packet; } else { // UNKNOWN OR UNSUPPORTED PACKET TYPE #if DEBUG //xbs_messages.addDebugMessage("?? WARNING! unknown incoming packet type: " + p.ToString(), xbs_message_sender.SNIFFER, xbs_message_type.WARNING); #endif return; } // filter packet if needed if (is_injected_packet_to_be_filtered(ref p_arp, ref p_ipv4, ref p_udp, ref p_tcp)) { #if DEBUG xbs_messages.addDebugMessage("i> filtered packet: " + p, xbs_message_sender.SNIFFER); #endif return; } // add IP to device from node if (sending_node != null && source_IP != null) { if (sending_node.addIPtoXbox(srcMAC, source_IP)) { #if DEBUG xbs_messages.addDebugMessage("i> added new IP " + source_IP + " to xbox " + srcMAC + " for node " + sending_node, xbs_message_sender.SNIFFER); #endif node_list.listHasJustChanged(); } } #if DEBUG xbs_messages.addDebugMessage("i> " + p, xbs_message_sender.SNIFFER); #endif if (NAT.NAT_enabled) { #if DEBUG System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch(); stopWatch.Start(); #endif EthernetPacketType p_type = NAT.NAT_incoming_packet_PacketDotNet(ref data, dstMAC, srcMAC, ref p, ref p_ipv4, ref p_arp); #if DEBUG stopWatch.Stop(); if (p_type == EthernetPacketType.IpV4) { xbs_sniffer_statistics.NAT_callCount++; if (xbs_sniffer_statistics.NAT_callCount > 1) { xbs_sniffer_statistics.NAT_timeInCode += (UInt64)stopWatch.ElapsedTicks; UInt32 average = (UInt32)(xbs_sniffer_statistics.NAT_timeInCode / (xbs_sniffer_statistics.NAT_callCount - 1)); double average_ms = new TimeSpan(average).TotalMilliseconds; xbs_messages.addDebugMessage("- NAT time: " + stopWatch.ElapsedTicks + "t/" + stopWatch.ElapsedMilliseconds + "ms | NAT count: " + (xbs_sniffer_statistics.NAT_callCount - 1) + " Total Time: " + xbs_sniffer_statistics.NAT_timeInCode + "t=> Average " + average + "t / " + average_ms + "ms", xbs_message_sender.SNIFFER); } } p = Packet.ParsePacket(LinkLayers.Ethernet, data); xbs_messages.addDebugMessage("i> " + p, xbs_message_sender.SNIFFER); #endif } // inject the packet try { pdev.SendPacket(data, data.Length); } catch (PcapException pex) { xbs_messages.addInfoMessage("!! error while injecting packet from " + srcMAC + " to " + dstMAC + " (" + data.Length + ") : " + pex.Message, xbs_message_sender.SNIFFER, xbs_message_type.FATAL_ERROR); } catch (ArgumentException aex) { xbs_messages.addInfoMessage("!! error while injecting packet from " + srcMAC + " to " + dstMAC + " (" + data.Length + ") : " + aex.Message, xbs_message_sender.SNIFFER, xbs_message_type.FATAL_ERROR); } }
private void dispatch_DATA_message(ref xbs_udp_message udp_msg, ref xbs_node sending_node) { if (xbs_sniffer.getInstance() == null) return; byte[] src_mac = new byte[6]; byte[] dst_mac = new byte[6]; Buffer.BlockCopy(udp_msg.data, 0, dst_mac, 0, 6); PhysicalAddress dstMAC = new PhysicalAddress(dst_mac); Buffer.BlockCopy(udp_msg.data, 6, src_mac, 0, 6); PhysicalAddress srcMAC = new PhysicalAddress(src_mac); #if DEBUG //xbs_messages.addDebugMessage(" * DATA (" + udp_msg.data.Length + ") | " + srcMAC + " => " + dstMAC, xbs_message_sender.UDP_LISTENER); #endif xbs_sniffer.getInstance().injectRemotePacket(ref udp_msg.data, dstMAC, srcMAC, ref sending_node); }
public xbs_node_message_announce(xbs_node node) : base(node) { type = ttype; }
public void delNode(xbs_node node) { xbs_node deleted_node = null; lock (this) { foreach (xbs_node n in node_list) if (n.Equals(node)) { xbs_messages.addInfoMessage(" + removed node " + n, xbs_message_sender.NODELIST); deleted_node = n; node_list.Remove(n); if (notify_on_new_node) { System.Media.SoundPlayer sound_player = new System.Media.SoundPlayer(); sound_player.SoundLocation = xbs_node_list.NOTIFICATION_SOUND_NODE_LEFT; try { sound_player.Play(); } catch (Exception) { } } listHasJustChanged(); break; } } if (node.get_xbox_count() > 0) foreach (xbs_xbox xbox in node.getXboxArray()) xbs_nat.getInstance().informOfRemovedDevice(xbox.mac); }
public void sendNodeListToNode(xbs_node new_node) { #if DEBUG xbs_messages.addInfoMessage(" + sending Nodelist to " + new_node, xbs_message_sender.NODELIST); #endif lock (this) { foreach (xbs_node node in node_list) if (!new_node.Equals(node)) new_node.sendKnownNodeMessage(node); } }
public void informNodesOnAddNode(xbs_node new_node) { xbs_messages.addInfoMessage(" + informing all nodes of new node " + new_node, xbs_message_sender.NODELIST); lock (this) { foreach (xbs_node node in node_list) if (!node.Equals(new_node)) node.sendAddNodeMessage(new_node); } }
public void informNodesOnDelNode(xbs_node node) { xbs_messages.addInfoMessage(" + informing all nodes of removed node " + node, xbs_message_sender.NODELIST); lock (this) { foreach (xbs_node n in node_list) if (!node.Equals(n)) n.sendDelNodeMessage(node); } }
public void tryAddingNode(xbs_node new_node, String cloudname) { if (findNodeInAddingList(new_node.ip_public, new_node.port_public) != null) { #if DEBUG xbs_messages.addDebugMessage(" + node already in addingList: " + new_node, xbs_message_sender.NODELIST); #endif return; } lock (node_list_adding) node_list_adding.Add(new_node); //new_node.sendAddNodeMessage(local_node); xbs_node_message_announce msg = new xbs_node_message_announce(new_node.getSendToIP(), new_node.getSendToPort()); if (cloudname!=null) msg.addOption(xbs_node_message_announce.OPTION_CLOUDNAME, cloudname); new_node.sendNodeMessage(msg); }
private xbs_node_message_announce(xbs_node node, String options) : base(node, options) { type = ttype; }
public xbs_node_message_nickname(xbs_node node, String nickname) : base(node, nickname) { type = ttype; }
private void purgeAddedNodeFromAddingList(xbs_node new_node) { #if DEBUG xbs_messages.addInfoMessage("+ trying to purged node from node_list_adding : " + new_node, xbs_message_sender.NODELIST); #endif lock (node_list_adding) { for (int i=0;i<node_list_adding.Count;i++) if (node_list_adding[i].Equals(new_node)) { node_list_adding.RemoveAt(i); #if DEBUG xbs_messages.addInfoMessage("+ purged node from node_list_adding : " + new_node, xbs_message_sender.NODELIST); #endif break; } } }
public xbs_node addNode(IPAddress ip_announced, int port_announced, IPAddress ip_from, int port_from) { xbs_node node = new xbs_node(ip_announced, port_announced, ip_from, port_from); addNode( node ); return node; }
public void injectRemotePacket(ref byte[] data, PhysicalAddress dstMAC, PhysicalAddress srcMAC, ref xbs_node sending_node) { Packet p = null; ARPPacket p_arp = null; IPv4Packet p_ipv4 = null; ICMPv4Packet p_icmp = null; UdpPacket p_udp = null; TcpPacket p_tcp = null; IPAddress source_IP = null; int srcMac_hash = srcMAC.GetHashCode(); // collect all injected source MACs. sniffer needs this to filter packets out lock (injected_macs_hash) { if (!injected_macs_hash.Contains(srcMac_hash)) { injected_macs_hash.Add(srcMac_hash); addMacToKnownMacListFromRemoteNodes(srcMAC); } } if (sending_node != null) if (sending_node.addXbox(srcMAC)) node_list.listHasJustChanged(); try { p = Packet.ParsePacket(LinkLayers.Ethernet, data); } catch (PcapException pcex) { #if DEBUG xbs_messages.addDebugMessage("!! ERROR! parse packet failed in injectRemotePacket (1): " + pcex.ToString(), xbs_message_sender.SNIFFER, xbs_message_type.ERROR); #endif return; } catch (NotImplementedException niex) { #if DEBUG xbs_messages.addDebugMessage("!! ERROR! parse packet failed in injectRemotePacket (2): " + niex.ToString(), xbs_message_sender.SNIFFER, xbs_message_type.ERROR); #endif return; } // DETERMINE PACKET TYPE if (p.PayloadPacket is IPv4Packet) { p_ipv4 = p.PayloadPacket as IPv4Packet; source_IP = p_ipv4.SourceAddress; if (p_ipv4.PayloadPacket is UdpPacket) p_udp = p_ipv4.PayloadPacket as UdpPacket; else if (p_ipv4.PayloadPacket is TcpPacket) p_tcp = p_ipv4.PayloadPacket as TcpPacket; } else if (p.PayloadPacket is ARPPacket) { p_arp = p.PayloadPacket as ARPPacket; source_IP = p_arp.SenderProtocolAddress; } else if (p.PayloadPacket is ICMPv4Packet) p_icmp = p.PayloadPacket as ICMPv4Packet; else { // UNKNOWN OR UNSUPPORTED PACKET TYPE #if DEBUG //xbs_messages.addDebugMessage("?? WARNING! unknown incoming packet type: " + p.ToString(), xbs_message_sender.SNIFFER, xbs_message_type.WARNING); #endif return; } // filter packet if needed if (is_injected_packet_to_be_filtered(ref p_arp, ref p_ipv4, ref p_udp, ref p_tcp)) { #if DEBUG xbs_messages.addDebugMessage("i> filtered packet: " + p, xbs_message_sender.SNIFFER); #endif return; } // add IP to device from node if (sending_node != null && source_IP!=null) if (sending_node.addIPtoXbox(srcMAC, source_IP)) { #if DEBUG xbs_messages.addDebugMessage("i> added new IP "+source_IP+" to xbox "+srcMAC+" for node " + sending_node, xbs_message_sender.SNIFFER); #endif node_list.listHasJustChanged(); } #if DEBUG xbs_messages.addDebugMessage("i> " + p, xbs_message_sender.SNIFFER); #endif if (NAT.NAT_enabled) { #if DEBUG System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch(); stopWatch.Start(); #endif EthernetPacketType p_type = NAT.NAT_incoming_packet_PacketDotNet(ref data, dstMAC, srcMAC, ref p, ref p_ipv4, ref p_arp); #if DEBUG stopWatch.Stop(); if (p_type == EthernetPacketType.IpV4) { xbs_sniffer_statistics.NAT_callCount++; if (xbs_sniffer_statistics.NAT_callCount > 1) { xbs_sniffer_statistics.NAT_timeInCode += (UInt64)stopWatch.ElapsedTicks; UInt32 average = (UInt32)(xbs_sniffer_statistics.NAT_timeInCode / (xbs_sniffer_statistics.NAT_callCount - 1)); double average_ms = new TimeSpan(average).TotalMilliseconds; xbs_messages.addDebugMessage("- NAT time: " + stopWatch.ElapsedTicks + "t/" + stopWatch.ElapsedMilliseconds + "ms | NAT count: " + (xbs_sniffer_statistics.NAT_callCount - 1) + " Total Time: " + xbs_sniffer_statistics.NAT_timeInCode + "t=> Average " + average + "t / " + average_ms + "ms", xbs_message_sender.SNIFFER); } } p = Packet.ParsePacket(LinkLayers.Ethernet, data); xbs_messages.addDebugMessage("i> " + p, xbs_message_sender.SNIFFER); #endif } // inject the packet try { pdev.SendPacket(data, data.Length); } catch (PcapException pex) { xbs_messages.addInfoMessage("!! error while injecting packet from " + srcMAC + " to " + dstMAC + " (" + data.Length + ") : " + pex.Message, xbs_message_sender.SNIFFER, xbs_message_type.FATAL_ERROR); } catch (ArgumentException aex) { xbs_messages.addInfoMessage("!! error while injecting packet from " + srcMAC + " to " + dstMAC + " (" + data.Length + ") : " + aex.Message, xbs_message_sender.SNIFFER, xbs_message_type.FATAL_ERROR); } }
public xbs_node_message_getnickname(xbs_node node) { type = ttype; data_len = 0; receiver = node; }
public xbs_node_message_chatmsg(xbs_node node, String chat_message) : base (node, chat_message) { type = ttype; }
private void updateNodeInMainInfoList(xbs_node node) { ListViewItem lv_item = new ListViewItem(node.ip_public.ToString()); lv_item.SubItems.Add((node.port_sendfrom == node.port_public) ? node.port_public.ToString() : node.port_public + "/" + node.port_sendfrom); String ping = (node.last_ping_delay_ms >= 0) ? node.last_ping_delay_ms + "ms" : "N/A"; lv_item.SubItems.Add(ping); lv_item.SubItems.Add(node.client_version); lv_item.SubItems.Add(node.nickname); lv_item.BackColor = (node.get_xbox_count() == 0) ? Color.FromArgb(255, 235, 235) : Color.FromArgb(235, 255, 235); lv_item.Name = lv_item.Text + lv_item.SubItems[1]; int index = listView_nodes.Items.IndexOfKey(lv_item.Name); ListViewItem lv_item_in_list = (index>=0) ? listView_nodes.Items[index] : null; if (lv_item_in_list != null) { for (int i=2; i<=4; i++) if (lv_item_in_list.SubItems[i].Text != lv_item.SubItems[i].Text) lv_item_in_list.SubItems[i].Text = lv_item.SubItems[i].Text; if (lv_item.BackColor != lv_item_in_list.BackColor) lv_item_in_list.BackColor = lv_item.BackColor; } else listView_nodes.Items.Add(lv_item); }
public void sendKnownNodeMessage(xbs_node node) { sendKnownNodeMessage(node.ip_public, (UInt16)node.port_public); }
public xbs_node_message_getclientversion(xbs_node node) { type = ttype; data_len = 0; receiver = node; }
public bool Equals(xbs_node node) { if (ip_announced!=null && node.ip_announced!=null) if (ip_announced.Equals(node.ip_announced) && port_announced == node.port_announced) return true; if (ip_sendfrom!=null && node.ip_sendfrom!=null) if (ip_sendfrom.Equals(node.ip_sendfrom) && port_sendfrom == node.port_sendfrom) return true; if (ip_public != null && node.ip_public != null) if (ip_public.Equals(node.ip_public) && port_public == node.port_public) return true; return false; }
protected xbs_node_message_options(xbs_node node, String options) : base(node, options) { receiver = node; }
public void dispatch_in_msg(ref xbs_udp_message udp_msg) { xbs_node tmp_node = null; xbs_node sending_node = node_list.findNode(udp_msg.src_ip, udp_msg.src_port); # if DEBUG if (udp_msg.msg_type != xbs_node_message_type.PING && udp_msg.msg_type != xbs_node_message_type.PONG) { String str_send_node = (sending_node == null) ? udp_msg.src_ip + ":" + udp_msg.src_port : sending_node.ToString() + " " + sending_node.nickname; //xbs_messages.addDebugMessage(" * IN " + udp_msg.msg_type + " " + str_send_node, xbs_message_sender.UDP_LISTENER); } # endif switch (udp_msg.msg_type) { case xbs_node_message_type.DATA: dispatch_DATA_message(ref udp_msg, ref sending_node); break; case xbs_node_message_type.ANNOUNCE: xbs_node_message_announce msg_announce = new xbs_node_message_announce(udp_msg.data); tmp_node = new xbs_node(udp_msg.src_ip, udp_msg.src_port); #if DEBUG StringBuilder options_string = new StringBuilder(); foreach (KeyValuePair<string, string> item in msg_announce.getAllOptions()) options_string.Append(item.Key + "=" + item.Value + " ; "); xbs_messages.addDebugMessage(" * IN ANNOUCE: " + tmp_node + " | options: " + options_string.ToString(), xbs_message_sender.UDP_LISTENER); #endif bool send_packet = true; if (msg_announce.hasOption(xbs_node_message_announce.OPTION_CLOUDNAME)) if (!msg_announce.getOption(xbs_node_message_announce.OPTION_CLOUDNAME).Equals(xbs_cloudlist.getInstance().current_cloudname)) send_packet = false; if (send_packet) tmp_node.sendAddNodeMessage(node_list.local_node); break; case xbs_node_message_type.KNOWNNODE: xbs_node_message_knownnode msg_knownnode = new xbs_node_message_knownnode(udp_msg.data); // only accept KNOWNNODE messages when not part of a cloud if (!xbs_cloudlist.getInstance().part_of_cloud) { tmp_node = node_list.findNode(msg_knownnode.ip, msg_knownnode.port); if (tmp_node == null) { tmp_node = new xbs_node(msg_knownnode.ip, msg_knownnode.port); #if DEBUG xbs_messages.addDebugMessage(" * trying to add known node: " + tmp_node, xbs_message_sender.UDP_LISTENER); #endif node_list.tryAddingNode(tmp_node, xbs_cloudlist.getInstance().current_cloudname); } #if DEBUG else xbs_messages.addDebugMessage(" * already in contact with node: " + tmp_node, xbs_message_sender.UDP_LISTENER); #endif } break; case xbs_node_message_type.ADDNODE: xbs_node_message_addnode msg_addnode = new xbs_node_message_addnode(udp_msg.data); # if DEBUG xbs_messages.addDebugMessage(" * received ADDNODE from " + udp_msg.src_ip + ":" + udp_msg.src_port + " for " + msg_addnode.ip + ":" + msg_addnode.port, xbs_message_sender.UDP_LISTENER); # endif if (sending_node == null) { // node not known, add to nodelist tmp_node = node_list.addNode(msg_addnode.ip, msg_addnode.port, udp_msg.src_ip, udp_msg.src_port); tmp_node.sendAddNodeMessage(node_list.local_node); if (!xbs_cloudlist.getInstance().part_of_cloud) node_list.sendNodeListToNode(tmp_node); } break; case xbs_node_message_type.DELNODE: xbs_node_message_delnode msg_delnode = new xbs_node_message_delnode(udp_msg.data); # if DEBUG xbs_messages.addDebugMessage(" * received DELNODE from " + udp_msg.src_ip + ":" + udp_msg.src_port + " for " + msg_delnode.ip + ":" + msg_delnode.port, xbs_message_sender.UDP_LISTENER); # endif try { tmp_node = node_list.delNode(udp_msg.src_ip, (UInt16)udp_msg.src_port); } catch (Exception ex) { xbs_messages.addInfoMessage("!! error on deleting node: " + ex.Message, xbs_message_sender.UDP_LISTENER, xbs_message_type.ERROR); } if (tmp_node != null && xbs_chat.message_when_nodes_join_or_leave) xbs_chat.addSystemMessage(tmp_node.nickname + " left."); break; case xbs_node_message_type.PING: tmp_node = (sending_node != null) ? sending_node : new xbs_node(udp_msg.src_ip, udp_msg.src_port); xbs_node_message_pong msg_pong = new xbs_node_message_pong(tmp_node, udp_msg.data); tmp_node.sendNodeMessage(msg_pong); break; case xbs_node_message_type.PONG: if (sending_node != null) { sending_node.pong(xbs_node_message_pong.getDelay(udp_msg.data).Milliseconds); node_list.listHasJustChanged(); } break; case xbs_node_message_type.GETNODELIST: tmp_node = (sending_node != null) ? sending_node : new xbs_node(udp_msg.src_ip, udp_msg.src_port); node_list.sendNodeListToNode(tmp_node); break; case xbs_node_message_type.GETCLIENTVERSION: tmp_node = (sending_node != null) ? sending_node : new xbs_node(udp_msg.src_ip, udp_msg.src_port); xbs_node_message_clientversion msg_gcv = new xbs_node_message_clientversion(tmp_node, xbs_settings.xbslink_version); tmp_node.sendNodeMessage(msg_gcv); break; case xbs_node_message_type.CLIENTVERSION: if (sending_node != null) { xbs_node_message_clientversion msg_cv = new xbs_node_message_clientversion(udp_msg.data); sending_node.client_version = msg_cv.version_string; node_list.listHasJustChanged(); } break; case xbs_node_message_type.CHATMSG: if (sending_node != null) { xbs_node_message_chatmsg msg_chat = new xbs_node_message_chatmsg(udp_msg.data); xbs_chat.addChatMessage(sending_node.nickname, msg_chat.getChatMessage()); } break; case xbs_node_message_type.NICKNAME: if (sending_node != null) { xbs_node_message_nickname msg_nick = new xbs_node_message_nickname(udp_msg.data); sending_node.nickname = msg_nick.getNickname(); sending_node.nickname_received = true; node_list.listHasJustChanged(); if ( xbs_chat.message_when_nodes_join_or_leave ) xbs_chat.addSystemMessage(sending_node.nickname + " joined."); } break; case xbs_node_message_type.GETNICKNAME: tmp_node = (sending_node!=null) ? sending_node : new xbs_node(udp_msg.src_ip, udp_msg.src_port); xbs_node_message_nickname msg_snick = new xbs_node_message_nickname(tmp_node, node_list.local_node.nickname); tmp_node.sendNodeMessage(msg_snick); break; case xbs_node_message_type.SERVERHELLO: lock (_locker_HELLO) { xbs_upnp.isPortReachable = true; Monitor.PulseAll(_locker_HELLO); } break; case xbs_node_message_type.TO_CLOUDHELPER_HELPWITHNODE: xbs_node_message_toCloudHelper_HelpWithNode msg_toCloudHelpWith = new xbs_node_message_toCloudHelper_HelpWithNode(udp_msg.data); node_list.cloudhelper_helpWithNode(udp_msg.src_ip, udp_msg.src_port, msg_toCloudHelpWith.ip, msg_toCloudHelpWith.port); break; case xbs_node_message_type.FROM_CLOUDHELPER_CONTACTNODE: xbs_node_message_fromCloudHelper_ContactNode msg_fromCloudContactNode = new xbs_node_message_fromCloudHelper_ContactNode(udp_msg.data); tmp_node = new xbs_node(msg_fromCloudContactNode.ip, msg_fromCloudContactNode.port); node_list.tryAddingNode(tmp_node, xbs_cloudlist.getInstance().current_cloudname); break; } if (sending_node != null) sending_node.statistics.receivedPacket((uint)udp_msg.data_len + xbs_udp_message.HEADER_LENGTH); }
public xbs_node_message_chatmsg(xbs_node node, String chat_message) : base(node, chat_message) { type = ttype; }
private void askCloudHelperToSendAddNodeMessage(xbs_node node) { xbs_node cloud_helper; lock (node_list) { cloud_helper = node_list.Count == 0 ? null : node_list[my_random.Next(0, node_list.Count - 1)]; } if (cloud_helper == null) return; xbs_messages.addInfoMessage("+ asking ("+node.ask_cloudhelper_count+") cloud_helper (" + cloud_helper + ") for help to add node " + node, xbs_message_sender.NODELIST); cloud_helper.sendToCloudHelper_HelpWithNode(node); }