Пример #1
0
        public void testLNI(G2Packet packTest)
        {
            G2PacketLNI rLNI = (G2PacketLNI)packTest;
            G2PacketGU rGU = (G2PacketGU) rLNI.getFirstChildPacket (G2PacketType.GU);
            G2PacketNA rNA = (G2PacketNA) rLNI.getFirstChildPacket (G2PacketType.NA);
            G2PacketV rV = (G2PacketV)rLNI.getFirstChildPacket (G2PacketType.V);

            G2Packet lni = new G2PacketLNI();
            lni.AddChild (new G2PacketNA (rNA.node));
            lni.AddChild (new G2PacketGU (rGU.nodeGuid));
            lni.AddChild (new G2PacketV (rV.Str));
            lni.FinalizePacket ();
            G2Log.Write(lni.ToString());
            MemoryStream s1 = new MemoryStream ((int)rLNI.getTotalPacketLength ());
            MemoryStream s2 = new MemoryStream ((int)lni.getTotalPacketLength ());
            rLNI.Write (s1);
            lni.Write (s2);

            byte[] b1 = s1.ToArray ();
            byte[] b2 = s2.ToArray ();

            if (b1.Length != b2.Length) {
                G2Log.Write (" NOT EQUAL");
                return;
            }
            for (int i = 0; i < b1.Length; i++) {
                if (b1 [i] != b2 [i]) {
                    G2Log.Write ("NOT EQUAL");
                    return;
                }
            }
            G2Log.Write ("EQUAL !!");
        }
Пример #2
0
 /**
  * Take a search related packets i.e. QA (ack) or QH2 (hit)
  * and stores it into SearchResults class
  * */
 public void EnqueueResultPacket(NodePeer p, G2Packet pack)
 {
     // a hub packet ACK a query
     if (pack.type == G2PacketType.QA)
     {
         G2PacketQA qa = pack as G2PacketQA;
         G2SearchResults res = null;
         bool exists = SearchResults.TryGetValue(qa.guid, out res);
         if (!exists)  // no entry => not a search we initiated
             G2Log.Write("G2SearchManager : Received ACK of non asked Query");
         else
         {
             res.SetAcknowledgement(qa);
             G2Log.Write("G2SearchManager Received ACK of search " + SearchDB[qa.guid].Keywords[0]);
         }
     }
         // Hit packet !
     else if (pack.type == G2PacketType.QH2)
     {
         G2PacketQH2 qh2 = pack as G2PacketQH2;
         G2SearchResults res = null;
         bool exists = SearchResults.TryGetValue(qh2.searchGuid, out res);
         if (exists)
         { // a new result packet coming for a requested query
             res.PushResultPacket(qh2);
             //if (res.TotalFiles > MAX_RESULTS)
             //    G2Network.Instance.StopNetwork();
         }
         else // got a response for a query we did not ask ?
             G2Log.Write("G2SearchManager : Received a Hit on a NON ASKED Query");
     }
 }
Пример #3
0
        public Header(G2Packet packet)
        {
            int totalPayloadLength = packet.getTotalPayloadLength ();
            initialize(totalPayloadLength,
                        packet.type,
                        packet.children.Count > 0 ? true : false,
                getLenLen(totalPayloadLength),
                (byte)System.Text.Encoding.UTF8.GetBytes(packet.type).Length) ;

            controlByte = ComputeControlByte();
        }
Пример #4
0
        public Header(G2Packet packet)
        {
            int totalPayloadLength = packet.getTotalPayloadLength();

            initialize(totalPayloadLength,
                       packet.type,
                       packet.children.Count > 0 ? true : false,
                       getLenLen(totalPayloadLength),
                       (byte)System.Text.Encoding.UTF8.GetBytes(packet.type).Length);

            controlByte = ComputeControlByte();
        }
Пример #5
0
        public G2Packet getFirstChildPacket(string type)
        {
            G2Packet p = null;

            foreach (G2Packet cp in children)
            {
                if (cp.type.Equals(type))
                {
                    p = cp;
                    break;
                }
            }
            return(p);
        }
Пример #6
0
        public string getStringFromChildType(string type)
        {
            G2Packet pack = getFirstChildPacket(type);

            if (pack == null)
            {
                return("");
            }
            G2PacketString strPack = pack as G2PacketString;

            if (strPack == null)
            {
                return("");
            }
            return(strPack.Str);
        }
Пример #7
0
        public G2Packet HandlePacket(NodePeer p, G2Packet pack)
        {
            switch (pack.type)
            {
                case G2PacketType.PI:

                    return HandlePacketPI(p, pack as G2PacketPI);

                case G2PacketType.UPROC:
                    return HandlePacketUPROC(p, pack as G2PacketUPROC);

                case G2PacketType.LNI:
                    return HandlePacketLNI(p, pack as G2PacketLNI);
                case G2PacketType.KHL:
                    return HandlePacketKHL(p, pack as G2PacketKHL);
                case G2PacketType.QA:
                    return HandlePacketQA(p, pack as G2PacketQA);
                default:
                    return HandleDefault(p, pack);
            }
        }
Пример #8
0
 public void AddChild(G2Packet p)
 {
     children.Add(p);
 }
Пример #9
0
        public static G2Packet getPacketByHeader(Header h)
        {
            G2Packet packet = null;

            switch (h.type)
            {
            case G2PacketType.PVU:
                packet = new G2PacketPVU(h);
                break;

            case G2PacketType.COM:
                packet = new G2PacketCOM(h);
                break;

            case G2PacketType.PART:
                packet = new G2PacketPART(h);
                break;

            case G2PacketType.SZ:
                packet = new G2PacketSZ(h);
                break;

            case G2PacketType.Q2:
                packet = new G2PacketQ2(h);
                break;

            case G2PacketType.DN:
                packet = new G2PacketDN(h);
                break;

            case G2PacketType.KHL:
                packet = new G2PacketKHL(h);
                break;

            case G2PacketType.QA:
                packet = new G2PacketQA(h);
                break;

            case G2PacketType.SS:
                packet = new G2PacketSS(h);
                break;

            case G2PacketType.QH2:
                packet = new G2PacketQH2(h);
                break;

            case G2PacketType.HG:
                packet = new G2PacketHG(h);
                break;

            case G2PacketType.PI:
                packet = new G2PacketPI(h);
                break;

            case G2PacketType.UDP:
                packet = new G2PacketUDP(h);
                break;

            case G2PacketType.PO:
                packet = new G2PacketPO(h);
                break;

            case G2PacketType.S:
                packet = new G2PacketS(h);
                break;

            case G2PacketType.D:
                packet = new G2PacketD(h);
                break;

            case G2PacketType.LNI:
                packet = new G2PacketLNI(h);
                break;

            case G2PacketType.GU:
                packet = new G2PacketGU(h);
                break;

            case G2PacketType.NA:
                packet = new G2PacketNA(h);
                break;

            case G2PacketType.QKR:
                packet = new G2PacketQKR(h);
                break;

            case G2PacketType.QKA:
                packet = new G2PacketQKA(h);
                break;

            case G2PacketType.SNA:
                packet = new G2PacketSNA(h);
                break;

            case G2PacketType.QNA:
                packet = new G2PacketQNA(h);
                break;

            case G2PacketType.V:
                packet = new G2PacketV(h);
                break;

            case G2PacketType.LS:
                packet = new G2PacketLS(h);
                break;

            case G2PacketType.HS:
                packet = new G2PacketHS(h);
                break;

            case G2PacketType.TLS:
                packet = new G2PacketTLS(h);
                break;

            case G2PacketType.TS:
                packet = new G2PacketTS(h);
                break;

            case G2PacketType.NH:
                packet = new G2PacketNH(h);
                break;

            case G2PacketType.RA:
                packet = new G2PacketRA(h);
                break;

            case G2PacketType.BUP:
                packet = new G2PacketBUP(h);
                break;

            case G2PacketType.H:
                packet = new G2PacketH(h);
                break;

            case G2PacketType.URL:
                packet = new G2PacketURL(h);
                break;

            case G2PacketType.URN:
                packet = new G2PacketURN(h);
                break;

            case G2PacketType.UPRO:
                packet = new G2PacketUPRO(h);
                break;

            case G2PacketType.NICK:
                packet = new G2PacketNICK(h);
                break;

            case G2PacketType.BH:
                packet = new G2PacketBH(h);
                break;

            case G2PacketType.FW:
                packet = new G2PacketFW(h);
                break;

            case G2PacketType.MD:
                packet = new G2PacketMD(h);
                break;

            case G2PacketType.UPROC:
                packet = new G2PacketUPROC(h);
                break;

            case G2PacketType.UPROD:
                packet = new G2PacketUPROD(h);
                break;

            case G2PacketType.XML:
                packet = new G2PacketXML(h);
                break;

            default:
                packet = new G2PacketDefault(h);
                break;
            }
            return(packet);
        }
Пример #10
0
        private int ReadPacket(MemoryStream stream, out G2Packet pack)
        {
            Header h = null;
            try
            {
                h = Header.ReadHeader(stream);
            }
            catch (Exception e) {
                throw e;
            }
            int packLength = (int)(h.PayloadLength + h.HeaderLength);
            // if stream is not enough big to contain all the packet we need to read more
            if (packLength > stream.Length)
                throw new NotEnoughDataException("Not enough data in buffer");

            pack = G2PacketType.getPacketByHeader(h);
            // Set the remote host into packet for further analysis
            pack.RemotePeer = this.peer;

            // we have a unknown packet so we just read till the end of the packet
            if (pack.type == G2PacketType.DEFAULT)
            {
                // anyway, read & store the bytes
                return (int)(h.HeaderLength + pack.ReadPayload(stream, h.PayloadLength));
            }

            // we have read header, now we calculate how much byte we need to read more (children + payload)
            int byteToRead = h.PayloadLength;
            int byteRead = 0;
            bool endOfChildStream = false;

            if (h.compound)
            {

                while (true)
                {

                    G2Packet childPacket;
                    try
                    {
                        int bRead = ReadPacket(stream, out childPacket);
                        //Debug.Assert(bRead == childPacket.getTotalPacketLength(),
                            //"ReadPacket:ChildPacket " + childPacket.type + "  bRead = " + bRead + " vs " + childPacket.getTotalPacketLength());
                    }
                    catch (BigEndianPacketException e)
                    {
                        throw e;
                    }
                    catch (EndOfStreamException e)
                    {
                        byteRead += 1;
                        break;
                    }

                    pack.AddChild(childPacket);
                    byteRead += childPacket.getTotalPacketLength();
                    // root packet does NOT have a payload
                    if (byteRead == byteToRead)
                    {
                        endOfChildStream = true;
                        break;
                    }

                }
            }
            // have to count the remaining bytes, because length in header includes child packets.
            if (!endOfChildStream && (byteRead < byteToRead))
                byteRead += pack.ReadPayload(stream, byteToRead - byteRead);

            // return total read byte number
            return (int)(byteRead + h.HeaderLength);
        }
Пример #11
0
 /**
  * Analyse packet and return a packet to send (if there is one)
  * or null
  * */
 private G2Packet HandleDefault(NodePeer p,G2Packet pack)
 {
     return null;
 }
Пример #12
0
 /**
  * Push a packet just received, to be analyzed further
  * */
 public void PushPacketToReceive(G2Packet pack)
 {
     lock (ReceiveBuffer) {
         ReceiveBuffer.Enqueue(pack);
         var type = pack.packetHeader.type;
         type += pack.type == G2PacketType.DEFAULT ? " (unknown) " : "";
         G2Log.Write("PacketBuffer : Enqueued incoming packet " + type + " to receive  from " +pack.RemotePeer.ToString());
     }
 }
Пример #13
0
 /**
  * Push a packet to the buffer to be sent by the connection of the peer
  * */
 public void PushPacketToSend(G2Packet pack)
 {
     lock (SendBuffer) {
         SendBuffer.Enqueue(pack);
         var type = pack.packetHeader.type;
         type += pack.type == G2PacketType.DEFAULT ? " (unknown) " : "";
         G2Log.Write("PacketBuffer : Enqueued packet " + type + " to send to " + pack.RemotePeer.ToString());
         Monitor.Pulse (SendBuffer);
     }
 }
Пример #14
0
 public void AddChild(G2Packet p)
 {
     children.Add(p);
 }