Exemple #1
0
        public void ProcessPing(StandardPingTunnelPacket ping, UdpClient udpClient)
        {
            StandardPongTunnelPacket pong = new StandardPongTunnelPacket()
            {
                data = ping.data
            };

            byte[] bytes = pong.getBytes();
            udpClient.Send(bytes, bytes.Length, ping.ip);
            //Logger.Debug("Sent a UDP pong [seq=" + ping.data[0] + "] to " + ping.ip);
        }
Exemple #2
0
        public BasicTunnelPacket getPacket(byte[] bytes, IPEndPoint ip)
        {
            BasicTunnelPacket packet;

            switch (bytes[BasicTunnelPacket.PKT_POS_TYPE])
            {
            case BasicTunnelPacket.PKT_TYPE_PING:
                packet = new StandardPingTunnelPacket();
                break;

            case BasicTunnelPacket.PKT_TYPE_PONG:
                packet = new StandardPongTunnelPacket();
                break;

            case BasicTunnelPacket.PKT_TYPE_SYNC_RS:
                packet = new StandardSyncRsTunnelPacket();
                break;

            case BasicTunnelPacket.PKT_TYPE_SYNC_RQ:
                packet = new StandardSyncRqTunnelPacket();
                break;

            case BasicTunnelPacket.PKT_TYPE_WAVE_RS:
                packet = new StandardWaveTunnelRsPacket();
                break;

            case BasicTunnelPacket.PKT_TYPE_WAVE_RQ:
                packet = new StandardWaveTunnelRqPacket();
                break;

            case BasicTunnelPacket.PKT_TYPE_DATA:
                packet = new StandardTunnelDataPacket();
                break;

            case BasicTunnelPacket.PKT_TYPE_NOP:
                packet = new StandardTunnelNopPacket();
                break;

            case BasicTunnelPacket.PKT_TYPE_CLOSE:
                packet = new StandardCloseTunnelPacket();
                break;

            default:
                throw new UnknownPacketException("Failed to determine packet type [" + bytes[BasicTunnelPacket.PKT_POS_TYPE] + "]");
            }
            packet.processPacket(bytes, ip);
            return(packet);
        }
Exemple #3
0
        public int Ping(IPEndPoint ipEndPoint, int timeout, UdpClient udpClient)
        {
            StandardPingTunnelPacket ping = new StandardPingTunnelPacket()
            {
                data = new[] { _pingSeq++ }
            };
            long startTime = DateTime.Now.Ticks;

            _pingEvent.Reset();
            byte[] bytes = ping.getBytes();
            udpClient.Send(bytes, bytes.Length, ipEndPoint);
            if (!_pingEvent.WaitOne(timeout))
            {
                throw new TimeoutException("Timeout occured while attempting to ping [seq=" + ping.data[0] + "] " + ipEndPoint);
            }
            long stopTime       = DateTime.Now.Ticks;
            int  pingTimeMillis = (int)((stopTime - startTime) / 10000);

            Logger.Debug("Successfully UDP pinged [seq=" + ping.data[0] + "] tunnel " + Id + " in " + pingTimeMillis + "ms");
            return(pingTimeMillis);
        }