User:Old Death/Gnutella Web Cache

A Gnutella web cache, also known as a GWebCache, is used by Gnutella2 and Gnutella clients to make an initial connection to their respective networks. A GWebCache uses standard HTTP to transmit data.

Gnutella Web Cache
Gnutella requires Gnutella Web Caches (GWC) to get IPs to establish a connection to the network. These are critical to ensuring the health of the network.

A GWC is a simple script that can be put on any webserver that supports one of the following scripting languages:
 * JSP (Java Servlet)
 * Jums Web Cache (Excellent for heavy loads)
 * C
 * GhostWhiteCrab (For dedicated server environments and people who know how to compile C source code!)
 * ASP
 * Gerry GWC
 * Lynn (v.s. 0.5)
 * Lynn (v.s. 0.4)
 * LynnX
 * Perl
 * Jon Atkins' perlgcache
 * The original GnuWebCache
 * PHP (Tip: PHP GWCs are usually the easiest to run and setup on a server.)
 * PHPGnuCacheII
 * Bazooka G2WC
 * The original GnuWebCache (PHP version is no longer supported)
 * Skulls! Multi-Network WebCache
 * Beacon Cache
 * Cachechu G2WC

Specification 1
OK
 * Networks Served
 * Gnutella
 * Format
 * Update went fine:
 * Ex: OK
 * Update Warning (Small prob., not that bad):
 * Ex:

WARNING: Error Message WARNING: Error Message
 * Severe Warning (No 'OK' message sent)
 * Ex:


 * URL Output:
 * Ex: http://somefreakinrandomcache.com/cache/gcache.php
 * OR - WITH A PORT NUMBER (If not 80)
 * Ex: http://somefreakinrandomcache.com:8080/cache/gcache.php
 * Host Output:
 * Ex: 66.132.55.12:6346
 * Pong (ping variable response) - was explained below under the topic: variables.
 * Example Cache Output (Beacon Cache) For urlfile Command
 * Example "urlfile Output" URL: Ex: http://grantgalitz.com/Beacon/gwc.php?ping=1&client=RAZA&version=2.3.1.3&urlfile=1
 * Example URL Output:


 * Example Cache Output (Beacon Cache) For hostfile Command
 * Example "hostfile Output" URL: Ex: http://grantgalitz.com/Beacon/gwc.php?ping=1&client=RAZA&version=2.3.1.3&hostfile=1
 * Example Host Output:


 * For combining a hostfile and urlfile request:
 * Warning: This is non-standard.
 * Example Cache Output (Beacon Cache) For bfile Command
 * Example "bfile Output" URL: Ex: http://grantgalitz.com/Beacon/gwc.php?ping=1&client=RAZA&version=2.3.1.3&bfile=1
 * Example Host and URL Output:


 * Variables
 * Mandatory
 * ping:
 * Response should have this always: PONG
 * After, put the cache's name. ex: PONG fakecache 0.01
 * client:
 * Four letter code of the client. ex: RAZA
 * version:
 * Version number of the client.
 * urlfile:
 * Used by the client to request alternate cache urls.
 * hostfile:
 * Used by the client to request IPs with port numbers attached.
 * url:
 * Client update giving an alternate cache URL.
 * Formatted with a http:// prefix to each cache.
 * ip:
 * Client update giving one's IP to submit.
 * url1:
 * OLD OUTDATED Client update giving an alternate cache URL.
 * Formatted with a http:// prefix to each cache.
 * ip1:
 * OLD OUTDATED Client update giving one's IP to submit.
 * Optional
 * bfile:
 * For clients to request both URLs and IPs from the cache at the same time.
 * statfile:
 * Statistics of the cache request:
 * First line: Total requests of the cache number.
 * Second line: Requests of the cache an hour number.
 * Third line: Updates of the cache an hour number.

Specification 2

 * Networks Served
 * Gnutella, Gnutella2, etc.
 * Format
 * Information Output
 * Starts with: I|
 * Categories
 * Pong (ping variable response) - Described below under the topic: variables.
 * Update Status Response
 * Format: I|update
 * Responses
 * I|update|OK
 * - Everything went fine.
 * I|update|OK|WARNING
 * Small warning.
 * I|update|WARNING
 * Severe warning
 * Plain Warnings
 * Format: I|WARNING
 * Append any warning messages after it - Ex: I|WARNING|You came back too early
 * Extra Info - Described below under the topic: variables.
 * Host Output
 * Starts with: H|
 * Add the IP with its port:
 * Ex: H|0.0.0.0:6346
 * Add the time, thereafter, of the host's (In seconds*) time in cache:
 * Ex: H|0.0.0.0:6346|45
 * If cluster exists with cluster=somerandomwords
 * Add the clustered words after the host's age:
 * Ex: H|0.0.0.0:6346|45|somerandomwords
 * URL Output
 * Starts with: U|
 * Add the URL with http:// before it, plus the port (if it's not 80).
 * Ex: U|http://somerandomcache.com/
 * Add the time, thereafter, of the URL's time (In seconds*) in cache:
 * Ex: U|http://somerandomcache.com/|45
 * Example Cache Output (Beacon Cache) For get Command
 * Example URL: http://grantgalitz.com/Beacon/gwc.php?get=1&client=RAZA&version=2.3.1.3&net=gnutella2&ping=1
 * Example "Get" Output:

solely on case alone.
 * Variables
 * Mandatory
 * ping:
 * Main Part: I|pong|
 * Then add the cache name and version: I|pong|fakecache 0.01
 * Then lastly add the network support:
 * I|pong|fakecache 0.01|gnutella
 * - Gnutella only
 * I|pong|fakecache 0.01|gnutella2
 * - Gnutella2 only
 * I|pong|fakecache 0.01|gnutella-gnutella2
 * - Gnutella and Gnutella2 served
 * get:
 * Used by clients to requests alternate cache URLs along with IPs and their port numbers.
 * update:
 * url:
 * Client update giving an alternate cache URL.
 * Formatted with a http:// prefix to each cache.
 * ip:
 * Client update giving one's IP to submit.
 * net:
 * Which network to serve the client.
 * Gnutella
 * Ex: net=gnutella
 * Gnutella2
 * Ex: net=gnutella2
 * Should always be lowercase
 * GWCs should automatically convert network name given to lowercase to prevent Net ID mismatches
 * client:
 * Four letter code of the client. ex: RAZA
 * version:
 * Version number of the client.
 * Optional
 * cluster:
 * To add extra info to an IP update.
 * Output by cache: H|0.0.0.0|AGE OF HOST (Seconds)|clustering some bull****
 * x_leaves:
 * Number of leaves running on a given Gnutella2 hub.
 * statfile:
 * Statistics of the cache request:
 * First line: Total requests of the cache number.
 * Second line: Requests of the cache an hour number.
 * Third line: Updates of the cache an hour number.
 * info:
 * Output extra details of your cache.
 * Start with the informational response: I|
 * Ex: I|open-source|1
 * support:
 * To output USEFUL details of your cache.
 * Start with the informational response: I|
 * Ex: I|support|gnutella2
 * spec:
 * To force the specification parameter
 * Currently is only supported by Beacon Cache II

Pinging Caches With Your Cache

 * Please follow this standard:
 * Client: TEST
 * Version: Your Cache's Name
 * The old value for "version" was 1
 * Some variables to attach to the ping (compatibility):
 * multi
 * Used by some gwcs in their pings to other gwcs.
 * It tells the pinged cache to ignore the "net" parameter (so it should never say network not supported) and outputting the pong using this format, if possible, "I|pong|[cache name] [cache version]|[supported networks list]|[url adding is enabled]" - example: I|pong|Skulls 0.2.8a|gnutella-gnutella2|1
 * Used by Skulls GWC only.
 * cache
 * This is added to every request made by some gwcs, it is for statistical purposes only.
 * It simply tells the remote cache that the client is a GWC.
 * Help
 * For PHP
 * Use the fsockopen function to open a connection to a cache.
 * Make sure you "write" to the fsockopen carry value to open the GWC's target file.
 * http://us.php.net/manual/en/function.fsockopen.php

Variable Combination Standards

 * Net variable decides specification!
 * There are many ways to determine spec., but going with net is the safe way.
 * Skulls GWC does not use the network parameter to determine specification level.
 * Beacon Cache (I and II) uses the network parameter to determine the specification level.
 * Your cache needs to be able to process certain combinations of variables.
 * Update variable
 * Update should not fail if absent if spec. 2.
 * A Specification 2 parameter.
 * Spec 1 parameters used in Spec 2:
 * Should still accept hostfile and urlfile responses for spec. 2.
 * Beacon Cache (I and II) accepts these parameters on spec 2.
 * The 'spec' paameter can be used to force a specification:
 * Only known to exist in Beacon Cache II, it can force the request to be handled as a specification 1 or 2 request.
 * Spec 1 = 'spec=1'
 * Spec 2 = 'spec=2'
 * If 'spec' is not equal to any current spec, then default to the predetermined spec.
 * Multiple variable requests
 * If for instance a ping and request exist, you should always handle them properly.
 * Same goes with other combos like an update and ping, statfile + ping and info.
 * Handle multiple variables as BEST as possible!
 * Some scanners and GWCs like to fit all their requests into one URL send.

Further Information

 * Original GWC site
 * GWC Spec. 1
 * GWC Spec. 2