Beispiel #1
0
        private void HandleResponse(byte[] buffer)
        {
            if (buffer[0Xf0 + 42] == 0x35 && buffer[0xf2 + 42] == 0x2) // Offer
            {
                m_IStatusUpdate.UpdateStatus("Received DHCP Offer");
                GetOfferData(ref buffer);
                SendRequest();
            }
            else if (buffer[0Xf0 + 42] == 0x35 && buffer[0xf2 + 42] == 0x5) // ACK
            {
                string strIP         = IPToString(m_dwRequestedIP);
                string strSubnetMask = IPToString(m_dwSubnetMask);
                m_IStatusUpdate.UpdateStatus("Received DHCP ACK with IP " + strIP);
                NetworkManagement networkMgmt = new NetworkManagement();

                if (networkMgmt.setIP(MAC, strIP, strSubnetMask))
                {
                    m_IStatusUpdate.UpdateStatus("Set network card IP to " + strIP);
                }
                else
                {
                    m_IStatusUpdate.UpdateStatus("Failed to change network card IP");
                }
                m_State = DHCPState.BOUND;
            }
        }
Beispiel #2
0
        public void Connect(IStatusUpdate IStatusUpdate)
        {
            m_State         = DHCPState.INIT;
            m_bStop         = false;
            m_IStatusUpdate = IStatusUpdate;
            m_Instance      = this;
            m_Device        = null;
            m_dtBound       = DateTime.MaxValue;

            m_FilterThread = new Thread(new ThreadStart(StartFilter));
            m_FilterThread.Start();

            m_TimerThread = new Thread(new ThreadStart(TimerHandler));
            m_TimerThread.Start();
        }
Beispiel #3
0
        private void TimerHandler()
        {
            DHCPState previousState = m_State;

            while (!m_bStop)
            {
                switch (m_State)
                {
                case DHCPState.INIT:
                    previousState = DHCPState.INIT;
                    SendDiscover();
                    break;

                case DHCPState.DISCOVER:
                    m_State       = DHCPState.INIT;
                    previousState = DHCPState.DISCOVER;
                    break;

                case DHCPState.BOUND:
                    if (previousState != m_State)
                    {
                        previousState = DHCPState.BOUND;

                        byte[] temp = BitConverter.GetBytes(m_dwLeaseTime);
                        Array.Reverse(temp);
                        int dwLeaseTime = BitConverter.ToInt32(temp, 0);

                        m_spanLease = new TimeSpan(0, 0, dwLeaseTime / 2);
                        m_dtBound   = DateTime.Now;
                    }
                    if (DateTime.Now.Subtract(m_dtBound) > m_spanLease)
                    {
                        m_State = DHCPState.INIT;
                    }
                    break;

                default:
                    break;
                }
                Thread.Sleep(5000);
            }
        }