Пример #1
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;
        }
Пример #2
0
        private void AppendResult(G2PacketQH2 res)
        {
            G2Peer g2peer = G2Peer.ParseG2Peer (res);
            if (g2peer == null)
                return;

            /** Create a new search result from the hub ip  and the search transaction */
            SearchResult Results = new SearchResult(new System.Net.IPEndPoint(res.RemotePeer.Address,res.RemotePeer.Port),Transaction);

            bool PeerBrowsable = false;
            bool isFirewalled = false;
            int fileCount = 0;
            List<G2File> files = new List<G2File>();
            // add the files to the collections.
            foreach (G2Packet child in res.children)
            {
                if (child.type.Equals(G2PacketType.BH))
                {
                    PeerBrowsable = true;
                    continue;
                }
                if (child.type.Equals(G2PacketType.FW))
                {
                    isFirewalled = true;
                    continue;
                }
                if (!child.type.Equals(G2PacketType.H))
                    continue;

                G2PacketH hit = child as G2PacketH;
                G2File file = G2File.ParseHit(hit,FileLocationFound.ServerIndex);
                if (file == null) continue;
                files.Add(file);

                fileCount += 1;

            }
            if (fileCount == 0) return; // may have some hosts having only partial file,so no file for the application ...

            Results.PeerCollection.Add(g2peer);
            Peer p = Results.PeerCollection.Find(g2peer); // to get the right object reference may not be needed .. ?
            if (p.Ip.StartsWith ("192.168")) {
                return ;
            }
            foreach (G2File file in files)
            {
                p.Files.Add(file);
                file.PeerDiffusedFiles.Add(p); // ?? necessary or wrong ?
                Results.FileCollection.Add(file);
            }
            files.Clear();
            files = null;

            TotalFiles += fileCount;

            G2Log.Write("SearchResults : New result from " + res.RemotePeer.ToString() + " for " + SearchedWord + " ==> " + fileCount + " files");

            // try to see if we already have launched an browsing research on this peer or not
            bool notAlreadySearched = !PeersBrowsed.Contains(p);
            // make sure that the browsing will not increase the waiting time of the application for the result
            bool notTooLate = StartSearchTime.AddMilliseconds(Settings.WAIT_TIME_BROWSING_MS)
                < StartSearchTime.AddMilliseconds(Settings.SEARCH_TIME_OUT_MS + 100); // +100 to make sure browsing has time to regroup all
            bool notConnectedHub = res.RemotePeer.Address.ToString() != p.Ip;

            // verify that we dont search the hub, taht the peer is browsable and NOT firewalled
            // TODO can send a PUSH packet to the hub that will bring the peer to establish a connection to us
            if ( notConnectedHub && PeerBrowsable && !isFirewalled && notAlreadySearched && notTooLate)
            {

                    PeersBrowsed.Add(p);
                    G2BrowseSearch browser = new G2BrowseSearch(p,Results);
                    browser.EndSearch += new BrowseSearchEnd(BrowsingTerminated);
                    browser.StartBrowsing();
            }
            else // sends results to application
            {
                RegroupResults(Results);
            }
        }
Пример #3
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);
        }
Пример #4
0
 /**
  * Call this when you have a result packet belonging to this search result object
  * */
 public void PushResultPacket(G2PacketQH2 pack)
 {
     lock (LockBuffer)
     {
         Buffer.PushPacketToReceive(pack);
         Monitor.Pulse(LockBuffer);
     }
 }