Patent ID: 7509372

Claim:
A method for operating a data sharing application in a peer-to-peer network, wherein nodes within the peer-to-peer network can operate both in a client mode while requesting data in a server mode while transmitting data, the method comprising: receiving from a first peer node to request for a copy of a specified file at a second peer node; and in response to receiving the request, returning a response message to the first peer node, wherein the response message comprises an alternate node list associated with the specified file, wherein the alternate node list comprises a set of node identifiers indicating a set of alternate peer nodes within the peer-to-peer network that may have a copy of the specified file; maintaining an uploadable file list at the second peer node, wherein the uploadable file list comprises a set of file identifiers indicating a set of files stored on the second peer node that are available for uploading in response to received requests; associating an alternate node list with each file in the list of files that are available for uploading; in response to receiving the request, determining whether or not the second peer node is in an overload condition; and in response to a determination that the second peer node is not in an overload condition, sending a copy of the specified file to the first peer node; obtaining a node identifier for the first peer node wherein a node identifier is an Internet Protocol (IP) address; adding the node identifier for the first peer node to the alternate node list associated with the specified file; in response to receiving the request, determining whether or not the second peer node is in an overload condition; in response to a determination that the second peer node is in an overload condition, generating the response message; retrieving a copy of a file from a third peer node; storing the retrieved file at the second peer node; obtaining a node identifier for the third peer node; adding the node identifier for the third peer node to the alternate node list associated with the retrieved file; associating a timestamp with the node identifier in the alternate node list associated with the retrieved file to indicate a time value at which the retrieved file was retrieved from the third peer node; and, processing the alternate node list associated with the specified file with respect to a set of timestamps within the alternate node list in order to delete node identifiers associated with timestamps that are older than a configurable threshold value.