This document is a quick overview of how to best make your Gnutella 0.6 client crawler compatible with the LimeWire crawler. Header Processing ----------------- Upon a connection attempt, if you receive the header Crawler: majorversion.minorversion respond with the headers Leaves: ipleaf1:port, ipleaf2:port, ... Peers: ippeer1:port, ippeer2:port, ... After finishing the connection process, just close the connection. The majorversion.minorversion of the crawler header is currently 0.1. Leaves specify the ip and port of leaf nodes connected to your client if it is running as an ultrapeer. Peers specify the non-leaf clients that you are connected to. i.e. ultrapeers, 0.6 and 0.4 style clients. Example: Crawler Client ----------------------------------------------------------- GNUTELLA CONNECT/0.6 User-Agent: LimeWire (crawl) X-Ultrapeer: False Query-Routing: 0.1 Crawler: 0.1 GNUTELLA/0.6 200 OK User-Agent: BearShare Leaves: 127.0.0.1:80,127.0.0.2:6346, 127.0.0.3:6346 Peers: 127.0.0.4:6346,127.0.0.5:6346, 127.0.0.6:6346 GNUTELLA/0.6 200 OK Disconnect Disconnect This is the preferred method of delivering leaves and peers to the LimeWire crawler. The LimeWire crawler will currently wait 40 seconds before disconnecting. In fact, it always attempts to employ the following backup algorithm. Traditional Crawler Pings ------------------------- In backup to the pure header only algorithm, the LimeWire crawler will establish the connection as above and then send a crawler ping with hop=0,TTL=2 and read your pong responses. After sending the crawler ping, it also sends a network ping with hop=1, ttl=6 in an attempt to discover more hosts. All pongs are processed. Note that they should not be "Big" pongs with GGEP extensions.