December 10th, 2005
|
flame-retardant | | Join Date: November 22nd, 2005
Posts: 196
| |
If you read the documentation at http://www.the-gdf.org/ you'll see that non-standard or optional features are negotiated either during a handshake phase or by GGEP extensions. Clients that don't support the features will simply ignore the headers respectively GGEP blocks.
The Gnutella protocol is pretty extensible even without negotiating new features with other vendors. Some features are certainly rather useless nonetheless if they are not widely supported. Whenever possible vendors should and will of course discuss a new feature and agree on a common specification because everything else adds bloat the protocol and the software and may also cause trouble later.
However, some vendors may simply be uninterested in certain features either because they have become redundant or because their software follows a different paradigma, has a different user-base or a different purpose.
Gnutella has always used HTTP for file transfers, so it's no wonder that even rather old or poorly written clients can download files from new and old clients. Since then features like e.g., SHA-1 checksums, swarming, partial file sharing, download mesh, Tiger-Tree Hashes have been added to increase the efficiency and reliability. This is however still based on standard HTTP and uses only a few extra headers to negotiate features or pass additional information. Most of these are not vital features and clients can get away without them. Such clients are hardly more than a proof-of-concept though and will perform sub-optimally. |