package com.limegroup.gnutella; import org.limewire.core.api.browse.BrowseListener; import org.limewire.friend.api.FriendPresence; import org.limewire.io.GUID; import org.limewire.util.MediaType; public interface SearchServices { /** * Returns true if the given response for the query with the given guid is a * result of the Madragore worm (8KB files of form "x.exe"). Returns false * if guid is not recognized. <i>Ideally this would be done by the normal * filtering mechanism, but it is not powerful enough without the query * string.</i> * * @param guid the value returned by query(..). MUST be 16 byts long. * @param resp a response delivered by ActivityCallback.handleQueryReply * @see ResponseVerifier#isMandragoreWorm(byte[], Response) */ public boolean isMandragoreWorm(byte[] guid, Response response); public boolean matchesQuery(byte[] guid, Response response); /** * Returns true if the given response is of the same type as the the query * with the given guid. Returns 100 if guid is not recognized. * * @param guid the value returned by query(..). MUST be 16 bytes long. * @param resp a response delivered by ActivityCallback.handleQueryReply * @see ResponseVerifier#matchesType(byte[], Response) */ public boolean matchesType(byte[] guid, Response response); /** Purges the query from the QueryUnicaster (GUESS) and the ResultHandler * (which maintains query stats for the purpose of leaf guidance). * @param guid The GUID of the query you want to get rid of.... */ public void stopQuery(GUID guid); /** * Accessor for the last time a query was originated from this host. * * @return a <tt>long</tt> representing the number of milliseconds since * January 1, 1970, that the last query originated from this host */ public long getLastQueryTime(); /** * Sends a 'What Is New' query on the network. * * @return The SearchResultStats corresponding to the guid. */ public void queryWhatIsNew(final byte[] guid, final MediaType type); /** * Searches the network for files with the given metadata. * * @param richQuery metadata query to insert between the nulls, * typically in XML format * @see query(byte[], String, MediaType) * * @return The SearchResultStats corresponding to the guid. */ public void query(final byte[] guid, final String query, final String richQuery, final MediaType type); /** * Searches the network for files with the given query string and * minimum speed, i.e., same as query(guid, query, minSpeed, null). * * @see query(byte[], String, MediaType) */ public void query(byte[] guid, String query); /** * Searches the network for files of the given type with the given * GUID, query string and minimum speed. If type is null, any file type * is acceptable.<p> * * ActivityCallback is notified asynchronously of responses. These * responses can be matched with requests by looking at their GUIDs. (You * may want to wrap the bytes with a GUID object for simplicity.) An * earlier version of this method returned the reply GUID instead of taking * it as an argument. Unfortunately this caused a race condition where * replies were returned before the GUI was prepared to handle them. * * @param guid the guid to use for the query. MUST be a 16-byte * value as returned by newQueryGUID. * @param query the query string to use * @param minSpeed the minimum desired result speed * @param type the desired type of result (e.g., audio, video), or * null if you don't care */ public void query(byte[] guid, String query, MediaType type); /** * Returns a new GUID for passing to query. * This method is the central point of decision making for sending out OOB * queries. */ public byte[] newQueryGUID(); /** * Initiates a non-blocking browse of <code>address</code> with * session guid <code>browseGuid</code>. */ public BrowseHostHandler doAsynchronousBrowseHost(FriendPresence friendPresence, GUID browseGuid, BrowseListener browseListener); }