Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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;            
        }
Exemplo n.º 3
0
        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";
        }
Exemplo n.º 4
0
        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();
        }
Exemplo n.º 5
0
        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();
        }
Exemplo n.º 6
0
        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);
        }