private void close_app(int exit_code) { if (cloudlist != null) { if (cloudlist.part_of_cloud) { cloudlist.LeaveCloud(); } } if (sniffer != null) { sniffer.close(); sniffer = null; } if (udp_listener != null) { node_list.sendLogOff(); udp_listener.shutdown(); udp_listener = null; } if (upnp != null) { if (upnp.isUPnPavailable()) { upnp.upnp_deleteAllPortMappings(); } } stop_threads(); #if DEBUG xbs_messages.addDebugMessage("exiting program.", xbs_message_sender.GENERAL); #endif output_queued_messages(); #if DEBUG Console.ReadLine(); #endif exit_code = 0; if (windows_console_attached) { FreeConsole(); } if (System.Windows.Forms.Application.MessageLoop) { System.Windows.Forms.Application.Exit(); } else { System.Environment.Exit(exit_code); } }
private void engine_stop() { button_announce.Enabled = false; if (cloudlist!=null) if (cloudlist.part_of_cloud) cloudlist.LeaveCloud(); timer1.Stop(); xbs_settings.settings.Save(); if (sniffer != null) { sniffer.close(); sniffer = null; } if (udp_listener != null) { node_list.sendLogOff(); udp_listener.shutdown(); udp_listener = null; } if (upnp != null) { if (upnp.isUPnPavailable()) upnp.upnp_deleteAllPortMappings(); upnp.upnp_stopDiscovery(); } engine_started = false; xbs_messages.addInfoMessage("Engine stopped.", xbs_message_sender.GENERAL); listView_nodes.Items.Clear(); treeView_nodeinfo.Nodes.Clear(); NAT.ip_pool.freeAllIPs(); updateNATIPPoolListView(); button_start_engine.Text = "Start Engine"; textBox_maininfo.Text = "Engine not started."; textBox_chatEntry.ReadOnly = true; textBox_chatEntry.Clear(); textBox_CloudName.Enabled = false; textBox_CloudPassword.Enabled = false; textBox_CloudMaxNodes.Enabled = false; button_CloudJoin.Enabled = false; button_CloudLeave.Enabled = false; textBox_chatNickname.ReadOnly = false; button_reset_settings.Enabled = true; }
private void resume_start_engine() { if (ExceptionMessage.ABORTING) return; ICaptureDevice pdev; if (pcap_devices.Count == 0) { MessageBox.Show("XBSlink did not find any available network adapters in your system." + Environment.NewLine + "Does your user have enough system rights?", "XBSlink error", MessageBoxButtons.OK, MessageBoxIcon.Error); Close(); return; } try { pdev = pcap_devices[comboBox_captureDevice.SelectedIndex]; } catch (Exception) { MessageBox.Show("XBSlink could not set the capture device.", "XBSlink error", MessageBoxButtons.OK, MessageBoxIcon.Error); Close(); return; } try { udp_listener = new xbs_udp_listener(internal_ip, UInt16.Parse(textBox_local_Port.Text), node_list); } catch (Exception e) { xbs_messages.addInfoMessage("!! Socket Exception: could not bind to port " + textBox_local_Port.Text, xbs_message_sender.GENERAL, xbs_message_type.FATAL_ERROR); xbs_messages.addInfoMessage("!! the UDP socket is not ready to send or receive packets. Please check if another application is running on this port.", xbs_message_sender.GENERAL, xbs_message_type.FATAL_ERROR); System.Windows.Forms.MessageBox.Show(e.Message); abort_start_engine = true; } if (abort_start_engine || ExceptionMessage.ABORTING) { udp_listener = null; return; } try { if (use_UPnP && upnp.isUPnPavailable()) { external_ip = upnp.upnp_getPublicIP(); upnp.upnp_create_mapping(Mono.Nat.Protocol.Udp, udp_listener.udp_socket_port, udp_listener.udp_socket_port); } } catch (Exception) { xbs_messages.addInfoMessage("!! UPnP port mapping failed", xbs_message_sender.GENERAL, xbs_message_type.ERROR); } if (external_ip==null) external_ip = xbs_upnp.getExternalIPAddressFromWebsite(); IPAddress local_node_ip = (external_ip == null) ? internal_ip : external_ip; node_list.local_node = new xbs_node(local_node_ip, udp_listener.udp_socket_port); node_list.local_node.nickname = textBox_chatNickname.Text; try { sniffer = new xbs_sniffer((LibPcapLiveDevice)pdev, checkBox_enable_MAC_list.Checked, generateSnifferMacList(), checkBox_mac_restriction.Checked, node_list, NAT, network_device_gateways[internal_ip], checkBox_excludeGatewayIPs.Checked); sniffer.start_capture(); } catch (ArgumentException aex) { xbs_messages.addInfoMessage("!! starting Packet sniffer failed (1): " + aex.Message, xbs_message_sender.GENERAL, xbs_message_type.ERROR); abort_start_engine = true; udp_listener = null; sniffer = null; return; } catch (PcapException pcex) { xbs_messages.addInfoMessage("!! starting Packet sniffer failed (2): " + pcex.Message, xbs_message_sender.GENERAL, xbs_message_type.ERROR); abort_start_engine = true; udp_listener = null; sniffer = null; return; } if (ExceptionMessage.ABORTING) return; try { if (checkBox_useCloudServerForPortCheck.Checked) checkIncomingPortWithCloudServer(); } catch (Exception) { xbs_messages.addInfoMessage("!! open port check failed", xbs_message_sender.GENERAL, xbs_message_type.WARNING); } if (ExceptionMessage.ABORTING) return; timer1.Enabled = true; button_announce.Enabled = true; saveRegistryValues(); xbs_messages.addInfoMessage("engine ready. waiting for incoming requests.", xbs_message_sender.GENERAL); switch_tab = tabPage_clouds; textBox_chatEntry.ReadOnly = false; textBox_chatEntry.Clear(); autoswitch_on_chat_message = checkBox_chatAutoSwitch.Checked; textBox_CloudName.Enabled = true; textBox_CloudPassword.Enabled = true; textBox_CloudMaxNodes.Enabled = true; button_CloudJoin.Enabled = true; button_CloudLeave.Enabled = false; engine_started = true; button_start_engine.Enabled = true; button_start_engine.Text = "Stop Engine"; }
private void initialize() { node_list = new xbs_node_list(); udp_listener = new xbs_udp_listener(node_list); upnp = new xbs_upnp(); }
private void start_engine() { if (option_upnp) { discover_upnp(); } LibPcapLiveDevice pdev = loadCaptureDevice(option_capture_device); if (pdev == null) { xbs_messages.addInfoMessage("!! ERROR - could not load capture device with name \"" + option_capture_device + "\"", xbs_message_sender.GENERAL, xbs_message_type.FATAL_ERROR); close_app(-2); } NAT = new xbs_nat(); node_list = new xbs_node_list(); node_list.notify_on_new_node = false; if (option_local_port == 0) { option_local_port = xbs_udp_listener.standard_port; } GatewayIPAddressInformationCollection local_gateways = xbs_console_app.getGatewaysForBindIP(option_local_ip); try { udp_listener = new xbs_udp_listener(option_local_ip, option_local_port, node_list); } catch (Exception e) { xbs_messages.addInfoMessage("!! ERROR opening UDP port " + option_local_port, xbs_message_sender.GENERAL, xbs_message_type.FATAL_ERROR); xbs_messages.addInfoMessage(e.Message, xbs_message_sender.GENERAL); close_app(-7); } try { if (option_upnp && upnp.isUPnPavailable()) { external_ip = upnp.upnp_getPublicIP(); upnp.upnp_create_mapping(Mono.Nat.Protocol.Udp, udp_listener.udp_socket_port, udp_listener.udp_socket_port); } } catch (Exception) { xbs_messages.addInfoMessage("!! UPnP port mapping failed", xbs_message_sender.GENERAL, xbs_message_type.ERROR); } if (external_ip == null) { external_ip = xbs_upnp.getExternalIPAddressFromWebsite(); } IPAddress local_node_ip = (external_ip == null) ? option_local_ip : external_ip; node_list.local_node = new xbs_node(local_node_ip, udp_listener.udp_socket_port); if (option_nickname != null) { node_list.local_node.nickname = option_nickname; } sniffer = new xbs_sniffer(pdev, false, null, false, node_list, NAT, local_gateways, true); sniffer.start_capture(); if (ExceptionMessage.ABORTING) { close_app(-10); } if (option_cloudserver == null) { option_cloudserver = xbs_cloudlist.DEFAULT_CLOUDLIST_SERVER; } if (option_cloudname != null) { if (option_password == null) { option_password = ""; } if (option_cloudname.Length >= xbs_cloudlist.MIN_CLOUDNAME_LENGTH) { try { cloudlist.JoinOrCreateCloud(option_cloudserver, option_cloudname, option_maxnodes.ToString(), option_password, node_list.local_node.ip_public, node_list.local_node.port_public, node_list.local_node.nickname, xbs_upnp.isPortReachable, xbs_settings.xbslink_version); } catch (Exception e) { xbs_messages.addInfoMessage("!! ERROR connecting to cloud " + option_cloudname, xbs_message_sender.GENERAL, xbs_message_type.ERROR); xbs_messages.addInfoMessage(e.Message, xbs_message_sender.GENERAL, xbs_message_type.ERROR); } } else { xbs_messages.addInfoMessage("!! ERROR - cloudname is too short. " + xbs_cloudlist.MIN_CLOUDNAME_LENGTH + " chars minimum", xbs_message_sender.GENERAL, xbs_message_type.ERROR); close_app(-12); } } main_engine_loop(); }
private void start_engine() { if (option_upnp) discover_upnp(); LibPcapLiveDevice pdev = loadCaptureDevice(option_capture_device); if (pdev == null) { xbs_messages.addInfoMessage("!! ERROR - could not load capture device with name \"" + option_capture_device + "\"", xbs_message_sender.GENERAL, xbs_message_type.FATAL_ERROR); close_app(-2); } NAT = new xbs_nat(); node_list = new xbs_node_list(); node_list.notify_on_new_node = false; if (option_local_port == 0) option_local_port = xbs_udp_listener.standard_port; GatewayIPAddressInformationCollection local_gateways = xbs_console_app.getGatewaysForBindIP(option_local_ip); try { udp_listener = new xbs_udp_listener(option_local_ip, option_local_port, node_list); } catch (Exception e) { xbs_messages.addInfoMessage("!! ERROR opening UDP port " + option_local_port, xbs_message_sender.GENERAL, xbs_message_type.FATAL_ERROR); xbs_messages.addInfoMessage(e.Message, xbs_message_sender.GENERAL); close_app(-7); } try { if (option_upnp && upnp.isUPnPavailable()) { external_ip = upnp.upnp_getPublicIP(); upnp.upnp_create_mapping(Mono.Nat.Protocol.Udp, udp_listener.udp_socket_port, udp_listener.udp_socket_port); } } catch (Exception) { xbs_messages.addInfoMessage("!! UPnP port mapping failed", xbs_message_sender.GENERAL, xbs_message_type.ERROR); } if (external_ip == null) external_ip = xbs_upnp.getExternalIPAddressFromWebsite(); IPAddress local_node_ip = (external_ip == null) ? option_local_ip : external_ip; node_list.local_node = new xbs_node(local_node_ip, udp_listener.udp_socket_port); if (option_nickname!=null) node_list.local_node.nickname = option_nickname; sniffer = new xbs_sniffer(pdev, false, null, false, node_list, NAT, local_gateways, true); sniffer.start_capture(); if (ExceptionMessage.ABORTING) close_app(-10); if (option_cloudserver == null) option_cloudserver = xbs_cloudlist.DEFAULT_CLOUDLIST_SERVER; if (option_cloudname != null) { if (option_password == null) option_password = ""; if (option_cloudname.Length >= xbs_cloudlist.MIN_CLOUDNAME_LENGTH) { try { cloudlist.JoinOrCreateCloud(option_cloudserver, option_cloudname, option_maxnodes.ToString(), option_password, node_list.local_node.ip_public, node_list.local_node.port_public, node_list.local_node.nickname, xbs_upnp.isPortReachable, xbs_settings.xbslink_version); } catch (Exception e) { xbs_messages.addInfoMessage("!! ERROR connecting to cloud " + option_cloudname, xbs_message_sender.GENERAL, xbs_message_type.ERROR); xbs_messages.addInfoMessage(e.Message, xbs_message_sender.GENERAL, xbs_message_type.ERROR); } } else { xbs_messages.addInfoMessage("!! ERROR - cloudname is too short. " + xbs_cloudlist.MIN_CLOUDNAME_LENGTH + " chars minimum", xbs_message_sender.GENERAL, xbs_message_type.ERROR); close_app(-12); } } main_engine_loop(); }
private void close_app( int exit_code ) { if (cloudlist != null) if (cloudlist.part_of_cloud) cloudlist.LeaveCloud(); if (sniffer != null) { sniffer.close(); sniffer = null; } if (udp_listener != null) { node_list.sendLogOff(); udp_listener.shutdown(); udp_listener = null; } if (upnp != null) if (upnp.isUPnPavailable()) upnp.upnp_deleteAllPortMappings(); stop_threads(); #if DEBUG xbs_messages.addDebugMessage("exiting program.", xbs_message_sender.GENERAL); #endif output_queued_messages(); #if DEBUG Console.ReadLine(); #endif exit_code = 0; if (windows_console_attached) FreeConsole(); if (System.Windows.Forms.Application.MessageLoop) System.Windows.Forms.Application.Exit(); else System.Environment.Exit(exit_code); }