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; }
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); } }
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); }
/** * 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); } }