Q2: Difference between revisions

From Gnutella2
Jump to navigation Jump to search
No edit summary
(No difference)

Revision as of 16:43, 20 March 2005

/Q2 - Gnutella2 Query

The /Q2 packet is the generic Gnutella2 object query descriptor. It contains search criteria, identification, authentication, return addressing and the type of information the search client is interested in.

Sending

A node should send a /Q2 packet to another node when it wishes to execute a query on that node (and its searchable relations). /Q2 packets should always be filtered against a query hash table if one is available for the outbound link.

Receiving

Upon receiving a query, a node should:

  • Verify its authentication
  • Send an acknowledgment if it was not received from a hub
  • Forward it to connected nodes if necessary (detailed below)
  • Process it locally and dispatch results

Forwarding

Forwarding of /Q2 packets is achieved based on fixed rules:

  • A query received from a leaf or via UDP is forwarded to all connected nodes
  • A query received from a hub is forwarded to connected leaves only

Payload

The payload of a /Q2 packet consists of a GUID which uniquely identifies the search operation.

Children

This packet has many defined child packet types at the current time:

  • /G2/UDP - Return Address and Authentication
  • /G2/URN - Universal Resource Name
  • /G2/DN - Descriptive Name (Generic) Criteria
  • /G2/MD - Metadata Criteria
  • /G2/SZR - Object Size Restriction Criteria
  • /G2/I - Interest

/Q2/UDP - Return Address and Authentication

The /Q2/UDP child packet specifies the return address to be used for all direct replies, and the query key authentication which authorises transmissions to this address. If the query key is invalid, the query should be discarded and a valid query key issued to the nominated address (if desired).

Sending

This child is required if the query is to be delivered via UDP. It is optional if delivered via TCP: if not included, replies will be reverse forwarded via TCP.

Receiving

If this child is present, all replies should be directed to the nominated address. The query key should be verified before replying.

Payload

A network address (variable length) followed by a query key (fixed length of 32 bits).

Children

This packet has no known children at the current time.

/Q2/URN - Universal Resource Name

The /Q2/URN child specifies an exact universal resource name which will match the query. Rules:

  • If one or more URNs are present in a query, whether or not they are understood, matching must occur on URN only – other criteria should be ignored.
  • If multiple URNs are present, only one need match an object for it to be considered a match for the query.
  • Following from the above, multiple URNs of the same family may be specified and match multiple objects (this allows a compound query for several known objects to be executed in one packet).

Sending

This child should be added if a specific URN is being sought.

Payload

A string identifying the URN families followed by the URN in either text or binary representation. Text representations should always be 8-bit so that they can be considered binary.

The following compact URN families are recognised:

  • bitprint or bp - 20 bytes of SHA1 followed by 24 bytes of tiger-tree root
  • sha1 - 20 bytes of SHA1
  • tree:tiger/ or ttr - 24 bytes of tiger-tree root
  • md5 - 16 bytes of MD5
  • ed2k - 16 bytes of compound MD4 (ed2k style root hash)

Children

This packet has no known children at the current time.

/Q2/DN - Descriptive Name (Generic) Criteria

The descriptive name child provides generic query text to be used in matching objects.

Payload

A string in the simple query language.

Children

This packet has no known children at the current time.

/Q2/MD - Metadata Criteria

The metadata child provides an XML document containing rich query information. The schema identified in the XML must match a metadata schema of prospective matching objects.

Payload

A string containing XML. The header is optional. Standard plural/singular Gnutella metadata schemas are used, for example:


<?xml version="1.0"?>
<applications xsi:noNamespaceSchemaLocation="http://www.shareaza.com/schemas/application.xsd">
  <application title="Shareaza"/>
</applications>

All string values are in simple query language, including XML attribute and element values.

Children

This packet has no known children at the current time.

/Q2/SZR - Size Restriction Criteria

The size restriction criteria specify a minimum and maximum size for matching objects.

Payload

A minimum size followed by a maximum size, both quoted in bytes. These two numbers may be expressed as two 32 bit integers or two 64 bit integers.

Children

This packet has no known children at the current time.

/Q2/I - Interest

The Interest packet advertises an interest in certain information classes, effectively filtering the information that will be returned about matching objects.

Sending

Send an interest packet to restrict the type of information that will be returned about matching objects. For example if querying only to find instances of a known object, advertise interest for "URL" only. Omitting the interest packet produces a default set of response information.

Receiving

If an interest packet is received, only return the requested information types. If no interest packet is present, return all available information that is feasible. Extensions may be withheld.

Payload

An array of strings identifying information classes. The following are defined:

  • URL - Locations where matching objects can be found
  • DN - Descriptive names of matching objects
  • MD - Full metadata of matching objects
  • COM - User comments, ratings and reviews of matching objects
  • FS - Partially available objects

Note that default URNs are always supplied and need not be requested.

Children

This packet has no known children at the current time.