Disclosed is a method for efficiently distributing content by leveraging the use of a peer-to-peer network infrastructure. In a network of peers, a handful peers can receive content from centralized servers. These peers can then flood this content out to more clients who in turn can send the content along to others. Ultimately, a request for content can be fulfilled by locating the closest peer and obtaining the content from that peer. In one embodiment the method can be used to distribute content by creating content distribution groups of one or more client computing devices and redirecting requests for content from the server to the content distribution group. A further contemplated embodiment efficiently streams time sensitive data through the use of a spanning tree architecture of peer-to-peer clients. In yet another embodiment the present invention provides for more efficient use of bandwidth for shared residential broadband connections.

Patent
   8688803
Priority
Mar 26 2004
Filed
Mar 26 2004
Issued
Apr 01 2014
Expiry
Mar 20 2030
Extension
2185 days
Assg.orig
Entity
Large
12
231
window open
28. A method for distributing, from a first computing device to a second computing device over a peer-to-peer network, a software product update from a content server, the method comprising:
obtaining the software product update, by the first computing device, from the content server via a broadband connection, the first computing device being a client of the content server and a peer in the peer-to-peer network;
communicating, by the first computing device, to one or more peers in the peer-to-peer network that the software product update is available to be obtained from the first computing device; and
providing the software product update, by the first computing device, to the second computing device via the peer-to-peer network, based at least in part upon a determination of a closest peer closest to the second computing device that comprises the software product update, where more than one peer has obtained the software product update, where the first computing device is determined to be the closest peer to the second computing device that comprises the software product update, where the first computing device is connected to the second computing device via a home network, and where the content server is external to the home network.
1. A method for distributing, from a first computing device to a second computing device over a peer-to-peer network, a software product update from a content server, the method comprising:
obtaining the software product update, by the first computing device, from the content server via a broadband connection, the first computing device being a client of the content server and a peer in the peer-to-peer network;
communicating, by the first computing device, to one or more peers in the peer-to-peer network that the software product update is available to be obtained from the first computing device;
locating, by the second computing device, a closest peer closest to the second computing device, that comprises the software product update, where more than one peer has obtained the software product update;
determining, by the second computing device, that the first computing device is the closest peer to the second computing device that comprises the software product update; and
obtaining the software product update, by the second computing device, from the first computing device via the peer-to-peer network, the first computing device connected to the second computing device via a home network, the content server external to the home network.
18. A tangible computer-readable storage device comprising instructions that when executed perform a method for distributing, from a first computing device to a second computing device over a peer-to-peer network, a software product update from a content server, the method comprising:
obtaining the software product update, by the first computing device, from the content server via a broadband connection, the first computing device being a client of the content server and a peer in the peer-to-peer network;
communicating, by the first computing device, to one or more peers in the peer-to-peer network that the software product update is available to be obtained from the first computing device;
locating, by the second computing device, a closest peer closest to the second computing device, that comprises the software product update, where more than one peer has obtained the software product update;
determining, by the second computing device, that the first computing device is the closest peer to the second computing device that comprises the software product update; and
obtaining the software product update, by the second computing device, from the first computing device via the peer-to-peer network, the first computing device connected to the second computing device via a home network, the content server external to the home network.
33. A tangible computer-readable storage device comprising instructions that when executed perform a method for receiving, by a second computing device from a first computing device over a peer-to-peer network, a software product update from a content server, the method comprising:
locating, by the second computing device, a closest peer closest to the second computing device, that comprises the software product update, where more than one peer has obtained the software product update;
determining, by the second computing device, that the first computing device is the closest peer to the second computing device that comprises the software product update; and
obtaining the software product update, by the second computing device, from the first computing device via the peer-to-peer network, where the software product update is obtained by the first computing device from the content server via a broadband connection, the first computing device being a client of the content server and a peer in the peer-to-peer network, where one or more peers in the peer-to-peer network are communicated to by the first computing device that the software product update is available to be obtained from the first computing device, where the first computing device is connected to the second computing device via a home network, and where the content server is external to the home network.
38. A system for distributing, from a first computing device to a second computing device over a peer-to-peer network, a software product update from a content server, the system comprising:
the content server;
a first network component comprising at least some of the peer-to-peer network;
a second network component comprising at least some of a broadband connection between the content server and the first computing device;
the first computing device configured to:
obtain the software product update from the content server via the broadband connection, the first computing device being a client of the content server and a peer in the peer-to-peer network; and
communicate to one or more peers in the peer-to-peer network that the software product update is available to be obtained from the first computing device; and
the second computing device configured to:
locate a closest peer closest to the second computing device, that comprises the software product update, where more than one peer has obtained the software product update;
determine that the first computing device is the closest peer to the second computing device that comprises the software product update; and
obtain the software product update from the first computing device via the peer-to-peer network, the first computing device connected to the second computing device via a home network, the content server external to the home network.
23. A device for distributing, from a first computing device to a second computing device over a peer-to-peer network, a software product update from a content server, the device comprising:
one or more computer processing devices; and
memory comprising instructions that when executed at least in part via at least some of the one or more computer processing devices perform a method, comprising:
obtaining the software product update, by the first computing device, from the content server via a broadband connection, the first computing device being a client of the content server and a peer in the peer-to-peer network;
communicating, by the first computing device, to one or more peers in the peer-to-peer network that the software product update is available to be obtained from the first computing device;
locating, by the second computing device, a closest peer closest to the second computing device, that comprises the software product update, where more than one peer has obtained the software product update;
determining, by the second computing device, that the first computing device is the closest peer to the second computing device that comprises the software product update; and
obtaining the software product update, by the second computing device, from the first computing device via the peer-to-peer network, the first computing device connected to the second computing device via a home network, the content server external to the home network.
2. The method of claim 1, the first computing device and the second computing device connected via a local area connection.
3. The method of claim 1, the first computing device and the second computing device connected via a wide area connection.
4. The method of claim 3, the obtaining the software product update by the first computing device comprising:
requesting the software product update; and
receiving the software product update at least partially utilizing the wide area connection.
5. The method of claim 1, the peer-to-peer network associated with a spanning tree architecture.
6. The method of claim 1, the home network comprising a home broadband connection.
7. The method of claim 1, the obtaining the software product update by the first computing device comprising:
requesting the software product update
utilizing the broadband connection.
8. The method of claim 1, the home network comprising a dial-up connection.
9. The method of claim 8, the obtaining the software product update by the first computing device comprising:
requesting the software product update; and
receiving the software product update at least partially utilizing the dial-up connection.
10. The method of claim 1, the communicating to one or more peers in the peer-to-peer network comprising:
updating a local data store with informational data about the software product update; and
propagating the informational data to one or more local data stores residing on one or more peers in the peer-to-peer network.
11. The method of claim 1, the determining comprising:
identifying, by the second computing device, in a local data store of a peer in the peer to peer network, a record corresponding to the software product update; and
determining, from the record, at least one computing device in the peer-to-peer network that possesses the software product update, the at least one computing device comprising the first computing device.
12. The method of claim 1, the obtaining the software product update by the second computing device comprising:
sending the software product update, by the first computing device, to the second computing device; and
accepting the software product update, by the second computing device, from the first computing device.
13. The method of claim 1, the obtaining of the software product update, by the first computing device, and the obtaining the software product update, by the second computing device, from the first computing device occurring as a real-time stream of the software product update.
14. The method of claim 1, the software product update comprising a patch for a product.
15. The method of claim 1, the software product update comprising an upgrade for an application.
16. The method of claim 1, the software product update downloaded from the content server at least partially via a Wide Area network.
17. The method of claim 1, the software product update signed by a source of a product that the software product update is configured to update.
19. The tangible computer-readable storage device of claim 18, the peer-to-peer network associated with a spanning tree architecture.
20. The tangible computer-readable storage device of claim 18, the method comprising identifying, by the second computing device, in a local data store of a peer in the peer to peer network, a record corresponding to the software product update.
21. The tangible computer-readable storage device of claim 20, the method comprising determining, from the record, at least one computing device in the peer-to-peer network that possesses the software product update.
22. The tangible computer-readable storage device of claim 18, the software product update comprising an upgrade for an application.
24. The device of claim 23, the peer-to-peer network associated with a spanning tree architecture.
25. The device of claim 23, the method comprising identifying, by the second computing device, in a local data store of a peer in the peer to peer network, a record corresponding to the software product update.
26. The device of claim 25, the method comprising determining, from the record, at least one computing device in the peer-to-peer network that possesses the software product update.
27. The device of claim 23, the software product update comprising a patch for an application.
29. The method of claim 28, the software product update comprising at least one of a patch for a product and an upgrade for an application.
30. The method of claim 28, the first computing device comprising a first instance of a replicated store.
31. The method of claim 30, the replicated store comprising metadata.
32. The method of claim 31, the metadata associated with the software product update.
34. The tangible computer-readable storage device of claim 33, the software product update comprising a patch for a product.
35. The tangible computer-readable storage device of claim 33, the software product update comprising an upgrade for an application.
36. The tangible computer-readable storage device of claim 33, the peer-to-peer network associated with a spanning tree architecture.
37. The tangible computer-readable storage device of claim 33, the software product update signed by a source of a product that the software product update is configured to update.
39. The system of claim 38, the first computing device comprising a first instance of a replicated store, the second computing device comprising a second instance of the replicated store.
40. The system of claim 39, the first instance comprising at least a first indication that the first computing device comprises a first piece of content.
41. The system of claim 40, the second instance comprising at least a second indication that the second computing device comprises a second piece of content.
42. The system of claim 39, at least one of:
the first instance updated to comprise an indication comprised in the second instance; and
the second instance updated to comprise an indication comprised in the first instance.

The present invention relates generally to the distribution of content in a computer network and, more particularly, to methods for efficiently distributing content using a peer-to-peer networking infrastructure.

Traditionally, the task of distributing content over a network to a client computing device has been one that is highly server-intensive. In the typical model, the clients will connect to a server to receive content directly from the server on an individual basis. In the case of a large enterprise installation, for instance, this model implies that every client is required to connect to the server to receive data from it making it very difficult for the server to handle such large amounts of simultaneous requests for data.

A server-only content distribution model can also present problems with respect to bandwidth availability. With the advent of affordable and easily maintainable home networking equipment it is becoming more common for several computers in a household, or residential area, to share a single broadband or dial-up connection. A household having five computers, for example, may need to download software (e.g., patches, product upgrades, etc.) from a central server (e.g., windowsupdate.com) to each computer. Since there is a single point of receipt from outside the home network, if all five computers, or even less than all five, are requesting the same content at overlapping times the computers will be splitting the available bandwidth of the connection while receiving the same content.

Not only does a server-based content distribution solution have drawbacks in the enterprise and home settings but also in the internet setting as well. For example, the interconnected nature of the Internet has, among other things, accelerated the spread of computer viruses and worms. Unfortunately, virus cleansing and repair remains a reactionary process whereby the necessary virus definition files are distributed upon identification of the virus “in the wild.” Time is therefore of the essence in distributing the virus definition files to stanch the spread of the virus. When a new virus is first identified, the virus definition distribution servers can become overloaded with requests or could even be made unavailable (e.g., through a denial of service attack or some similar nefarious method) as part of the scheme to propagate the spread of the virus. A solution where the virus definitions are obtained only from a centralized server on the internet fails to safeguard against this eventuality and additionally fails to provide a method whereby the virus definitions can be distributed to the maximum number of computers in the most efficient fashion.

One potential solution to the problems described above is to use a series of redundant content distribution servers that may serve to distribute the load of demand over a number of servers. Such a solution however has several drawbacks. First, server hardware and software, and in particular the type of server hardware and software needed for intensive data delivery tasks, is typically expensive and requires experienced administration resources. Additionally, such a solution only scales in a linear fashion. For example, suppose 1,000 clients are currently receiving their content from a single server. Adding one more content distributing server reduces the average number of clients to a server to 500. Adding a third reduces this number to approximately 333, and so on. Thus a significant number of servers must be added to reduce the number of clients receiving content from a particular server to desired or manageable levels. Finally, a further drawback to this solution is that the content to be distributed and the distribution ability will always remain solely on the servers and hence only available in a limited fashion.

In view of the foregoing, the present invention provides a method for efficiently distributing content by leveraging the use of a peer-to-peer network infrastructure. Peer-to-peer networking provides an infrastructure that enables computing devices to communicate and share information securely with one another without the need of a server or other third party to facilitate the communication. A peer-to-peer networking infrastructure can be effectively employed to improve the efficiency of content distribution and the corresponding scalability. In a network of peers, a handful of the peers can receive content from centralized servers. These peers can then flood this content out to a few more peers who in turn can send the content along to others. Ultimately, this method produces a result whereby a request for content can be fulfilled by locating the closest peer and obtaining the content from that peer.

In one embodiment the above method can be used to distribute content over the Internet or within an enterprise installation by creating content distribution groups of one or more computing devices that are also peers in one or more peer-to-peer networks. Content requests on the server can then be redirected to a content distribution group for distribution to peers to reduce load on the centralized content distribution server.

A further contemplated embodiment efficiently streams time sensitive content through the use of a spanning tree architecture of peer-to-peer clients. On-line meeting materials or webcast concerts or similar time sensitive content can be distributed in a highly efficient manner by geometrically increasing the amount of content distributing computing devices over time.

In yet another embodiment the present invention provides for more efficient use of bandwidth in home networks or shared residential broadband or dial-up connections. In a peer-to-peer content distribution scenario one client computing device can download content over the connection while the other computing devices can simply obtain the content from the peer that downloaded it, thereby eliminating the need for bandwidth to be used by multiple client computing devices in downloading the same content.

While the appended claims set forth the features of the present invention with particularity, the invention, together with its objects and advantages, may be best understood from the following detailed description taken in conjunction with the accompanying drawings of which:

FIG. 1 is a schematic diagram of an exemplary computer architecture on which the method of the invention can be implemented;

FIG. 2 is a schematic diagram showing an exemplary communications network in which the method of the invention can be practiced;

FIG. 3 is a schematic diagram showing an exemplary peer-to-peer networking infrastructure architecture;

FIG. 4 is a schematic diagram illustrating the process of a peer node joining a peer-to-peer group;

FIG. 5 is a flowchart illustrating the process of a peer node joining a peer-to-peer group;

FIG. 6 is a schematic diagram showing an exemplary peer-to-peer group;

FIG. 7 is a flowchart illustrating the process of content distribution leveraging a peer-to-peer networking infrastructure;

FIG. 8 is a schematic diagram showing an implementation of content distribution leveraging a peer-to-peer networking infrastructure for a residential network;

FIG. 9 is a schematic diagram showing an implementation of content distribution leveraging a peer-to-peer networking infrastructure for the Internet; and

FIG. 10 is a schematic diagram showing an implementation of content distribution leveraging a peer-to-peer networking infrastructure for an enterprise installation.

In the description that follows, the invention is described with reference to acts and symbolic representations of operations that are performed by one or more computing devices, unless indicated otherwise. As such, it will be understood that such acts and operations, which are at times referred to as being computer-executed, include the manipulation by the processing unit of the computing device of electrical signals representing data in a structured form. This manipulation transforms the data or maintains them at locations in the memory system of the computing device, which reconfigures or otherwise alters the operation of the computing device in a manner well understood by those skilled in the art. The data structures where data are maintained are physical locations of the memory that have particular properties defined by the format of the data. However, while the invention is being described in the foregoing context, it is not meant to be limiting as those of skill in the art will appreciate that several of the acts and operations described hereinafter may also be implemented in hardware.

Turning to the drawings, wherein like reference numerals refer to like elements, the invention is illustrated as being implemented in a suitable networking environment. The following description is based on illustrated embodiments of the invention and should not be taken as limiting the invention with regard to alternative embodiments that are not explicitly described herein.

I. Exemplary Environment

Referring to FIG. 1, the present invention relates to communications between network nodes on connected networks. Each of the network nodes resides in a device that may have one of many different computer architectures. For descriptive purposes, FIG. 1 shows a schematic diagram of an exemplary architecture usable for these devices. The architecture portrayed is only one example of a suitable environment and is not intended to suggest any limitation as to the scope of use or functionality of the invention. Neither should the computing devices be interpreted as having any dependency or requirement relating to any one or combination of components illustrated in FIG. 1. The invention is operational with numerous other general-purpose or special-purpose computing or communications environments or configurations. Examples of well known computing systems, environments, and configurations suitable for use with the invention include, but are not limited to, mobile telephones, pocket computers, personal computers, servers, multiprocessor systems, microprocessor-based systems, minicomputers, mainframe computers, and distributed computing environments that include any of the above systems or devices.

In its most basic configuration, a computing device 100 typically includes at least one processing unit 102 and memory 104. The memory 104 may be volatile (such as RAM), non-volatile (such as ROM and flash memory), or some combination of the two. This most basic configuration is illustrated in FIG. 1 by the dashed line 106.

Computing device 100 can also contain storage media devices 108 and 110 that may have additional features and functionality. For example, they may include additional storage (removable and non-removable) including, but not limited to, PCMCIA cards, magnetic and optical disks, and magnetic tape. Such additional storage is illustrated in FIG. 1 by removable storage 108 and non-removable storage 110. Computer-storage media include volatile and non-volatile, removable and non-removable media implemented in any method or technology for storage of information such as computer-readable instructions, data structures, program modules, or other data. Memory 104, removable storage 108, and non-removable storage 110 are all examples of computer-storage media. Computer-storage media include, but are not limited to, RAM, ROM, EEPROM, flash memory, other memory technology, CD-ROM, digital versatile disks, other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage, other magnetic storage devices, and any other media that can be used to store the desired information and that can be accessed by the computing device.

Computing device 100 can also contain communication channels 112 that allow it to communicate with other devices. Communication channels 112 are examples of communications media. Communications media typically embody computer-readable instructions, data structures, program modules, or other data in a modulated data signal such as a carrier wave or other transport mechanism and include any information-delivery media. The term “modulated data signal” means a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal. By way of example, and not limitation, communications media include wired media, such as wired networks and direct-wired connections, and wireless media such as acoustic, radio, infrared, and other wireless media. The term computer-readable media as used herein includes both storage media and communications media. The computing device 100 may also have input components 114 such as a keyboard, mouse, pen, a voice-input component, and a touch-input device. Output components 116 include screen displays, speakers, printers, and rendering modules (often called “adapters”) for driving them. The computing device 100 has a power supply 118. All these components are well known in the art and need not be discussed at length here.

II. Server-Based Content Distribution

The present invention is directed to methods for efficiently distributing content over computer networks. Referring to FIG. 2, an exemplary communications network architecture is illustrated. Accompanying a computing device 100 on a local area network (LAN) 120 is a server 200 and a router 202. The router 202 allows the devices on the LAN 120 to communicate over an internetwork 204 to remote computing devices 206. The Internet is one example of an internetwork. In the present example, the server 200 can be a network server which the computing device 100 may access for content distribution over the LAN 120 and the remote computing device can be a remote content distribution server which the computing device may access for content distribution over the Internet 204 or similar wide area network (WAN).

Traditionally, the task of distributing content over a network 120 to a client computing device 100 has been one that is highly server-intensive. In the typical model, the clients 100 will connect to a server 200, 206 to receive content directly from the server 200, 206 on an individual basis. In the case of a large enterprise installation, for instance, this model implies that every client 100 is required to connect to the internal network server 200 to receive content (e.g., data) from it making it very difficult for the server to handle large amounts of simultaneous requests for content. In the case of a home network or similar shared residential broadband or dial-up connectivity scenario, this model implies that every computer 100 sharing the connection 208 is required to connect to the external content server 206 to receive data from it, thereby splitting the available bandwidth of the connection 208 when requests are made by the computing devices 100 at overlapping times. External content servers 206 exposed on the Internet can become overloaded when there is a spike in requests for time sensitive content regardless of whether the requests are originating from inside an enterprise installation or residential gateway. In addition, the server based content distribution model may fail to provide content availability contingency scenarios for periods of server unavailability. Attempts to address the limitations of server-based content distribution have focused on additional server redundancy, however such solutions do not scale well under severe demand and are generally not cost effective.

III. Peer-To-Peer Networking Infrastructure

The present invention leverages the use of a peer-to-peer network infrastructure for efficient content distribution. In the description that follows the invention is described as being implemented over a peer-to-peer network infrastructure such as the Windows® Peer-to-Peer Networking Infrastructure by Microsoft of Redmond, Wash. As will be appreciated by one of ordinary skill in the art, the network infrastructure should be understood to include any network infrastructure possessing the necessary communications and security protocols.

Turning to FIG. 3, an exemplary peer-to-peer architecture is illustrated. The peer-to-peer infrastructure resides primarily between the operating system (OS) 300 and socket 302 layers and the application layer 318. Of particular importance are the discovery 308, graphing 306, and grouping 312 components. At the bottom most layer of the architecture is the core OS 300. The OS is, in one embodiment, the Windows operating system by Microsoft of Redmond, Wash. As will be appreciated by one of ordinary skill in the art, the OS should be understood to also include similar operating systems. Residing between the peer-to-peer architecture and the OS is the network communications socket layer 302. The socket layer 302 allows the peer-to-peer architecture to leverage the operating system's interface with lower level network communication protocols. The discovery protocol 308 is a peer name resolution protocol (PNRP) that enables the resolution of a peer name to an IP address in a completely serverless fashion. Thus, with the discovery protocol 308, it is possible for a computing device to locate a peer on a network without the need for a separate server to maintain peer network location information. The graphing component 306 allows for the organization of a given set of network nodes so that data can be efficiently disseminated amongst them. Specifically, graphing 306 addresses data dissemination in a network that is not fully connected and provides for one-to-many dissemination of the data. The grouping component 312 associates a security model with one or more graphs created by the graphing component 306. With the grouping 312 module, a peer is able to create a group, own a group, and define members (users or machines) that are allowed to join the group.

In one embodiment of the graphing component 306 employed by the present invention, interfaces and methods can be implemented through an application programming interface (API). Such an embodiment is particularly well suited for the Microsoft Windows XP operating system in which the APIs may be as follows:

// Graph interfaces
HRESULT WINAPI PeerGraphStartup(
    IN WORD wVersionRequested,
    OUT PPEER_VERSION_DATA pVersionData);
HRESULT WINAPI PeerGraphShutdown( );
VOID WINAPI PeerGraphFreeData(
    IN PVOID pvData);
HRESULT WINAPI PeerGraphGetItemCount(
    IN HPEERENUM hPeerEnum,
    OUT PULONG pCount);
HRESULT WINAPI PeerGraphGetNextItem(
    IN HPEERENUM hPeerEnum,
    IN OUT PULONG pCount,
    OUT PVOID * ppvItems);
HRESULT WINAPI PeerGraphEndEnumeration(
    IN HPEERENUM hPeerEnum);
HRESULT WINAPI PeerGraphCreate(
    IN PPEER_GRAPH_PROPERTIES  pGraphProperties,
    IN PCWSTR pwzDatabaseName,
    IN PPEER_SECURITY_INTERFACE
pSecurityInterface,
    OUT PHGRAPH phGraph);
HRESULT WINAPI PeerGraphOpen(
    IN PCWSTR pwzGraphId,
    IN PCWSTR pwzPeerId,
    IN PCWSTR pwzDatabaseName,
    IN PPEER_SECURITY_INTERFACE
pSecurityInterface,
    IN ULONG cRecordTypeSyncPrecedence,
    IN GUID * pRecordTypeSyncPrecedence,
    OUT PHGRAPH phGraph);
HRESULT WINAPI PeerGraphListen(
    IN HGRAPH hGraph,
    IN DWORD dwScope,
    IN DWORD dwScopeId,
    IN WORD wPort);
HRESULT WINAPI PeerGraphConnect(
    IN HGRAPH hGraph,
    IN PCWSTR pwzPeerId,
    IN PPEER_ADDRESS pAddress,
    OUT ULONGLONG * pullConnectionId);
HRESULT WINAPI PeerGraphClose(
    IN HGRAPH hGraph);
HRESULT WINAPI PeerGraphDelete(
    IN PCWSTR pwzGraphId,
    IN PCWSTR pwzPeerId,
    IN PCWSTR pwzDatabaseName);
HRESULT WINAPI PeerGraphGetStatus(
    IN HGRAPH   hGraph,
    OUT DWORD *  pdwStatus);
HRESULT WINAPI PeerGraphGetProperties(
    IN HGRAPH hGraph,
    OUT PPEER_GRAPH_PROPERTIES *
ppGraphProperties);
HRESULT WINAPI PeerGraphSetProperties(
    IN HGRAPH hGraph,
    IN PPEER_GRAPH_PROPERTIES pGraphProperties);
// Eventing interfaces
HRESULT WINAPI PeerGraphRegisterEvent(
    IN HGRAPH hGraph,
    IN HANDLE hEvent,
    IN ULONG cEventRegistrations,
    IN PPEER_GRAPH_EVENT_REGISTRATION
pEventRegistrations,
    OUT HPEEREVENT * phPeerEvent);
HRESULT WINAPI PeerGraphUnregisterEvent(
    IN HPEEREVENT hPeerEvent);
HRESULT WINAPI PeerGraphGetEventData(
    IN HPEEREVENT hPeerEvent,
    OUT PPEER_GRAPH_EVENT_DATA * ppEventData);
// Data Storage
HRESULT WINAPI PeerGraphGetRecord(
    IN HGRAPH hGraph,
    IN GUID * pRecordId,
    OUT PPEER_RECORD * ppRecord);
HRESULT WINAPI PeerGraphAddRecord(
    IN HGRAPH hGraph,
    IN PPEER_RECORD pRecord,
    OUT GUID * pRecordId);
HRESULT WINAPI PeerGraphUpdateRecord(
    IN HGRAPH hGraph,
    IN PPEER_RECORD pRecord);
HRESULT WINAPI PeerGraphDeleteRecord(
    IN HGRAPH hGraph,
    IN GUID * pRecordId,
    IN BOOL fLocal);
HRESULT WINAPI PeerGraphEnumRecords(
    IN HGRAPH hGraph,
    IN GUID * pRecordType,
    IN PCWSTR pwzPeerId,
    OUT HPEERENUM * phPeerEnum);
HRESULT WINAPI PeerGraphSearchRecords(
    IN HGRAPH hGraph,
    IN PCWSTR pwzCriteria,
    OUT HPEERENUM * phPeerEnum);
HRESULT WINAPI PeerGraphExportDatabase(
    IN HGRAPH hGraph,
    IN PCWSTR pwzFilePath);
HRESULT WINAPI PeerGraphImportDatabase(
    IN HGRAPH hGraph,
    IN PCWSTR pwzFilePath);
HRESULT WINAPI PeerGraphValidateDeferredRecords(
    IN HGRAPH hGraph,
    IN ULONG cRecordIds,
    IN GUID * pRecordIds);
// Node/Connection interfaces
HRESULT WINAPI PeerGraphOpenDirectConnection(
    IN HGRAPH hGraph,
    IN PCWSTR pwzPeerId,
    IN PPEER_ADDRESS  pAddress,
    OUT ULONGLONG * pullConnectionId);
HRESULT WINAPI PeerGraphSendData(
    IN HGRAPH hGraph,
    IN ULONGLONG ullConnectionId,
    IN GUID * pType,
    IN ULONG cbData,
    IN PVOID pvData);
HRESULT WINAPI PeerGraphCloseDirectConnection(
    IN HGRAPH hGraph,
    IN ULONGLONG ullConnectionId);
HRESULT WINAPI PeerGraphEnumConnections(
    IN HGRAPH hGraph,
    IN DWORD dwFlags,    //
PEER_CONNECTION_FLAGS
    OUT HPEERENUM * phPeerEnum);
HRESULT WINAPI PeerGraphEnumNodes(
    IN HGRAPH hGraph,
    IN PCWSTR pwzPeerId,
    OUT HPEERENUM * phPeerEnum);
HRESULT WINAPI PeerGraphSetPresence(
    IN HGRAPH hGraph,
    IN BOOL fPresent);
HRESULT WINAPI PeerGraphGetNodeInfo(
    IN HGRAPH hGraph,
    IN ULONGLONG ullNodeId,
    OUT PPEER_NODE_INFO * ppNodeInfo);
HRESULT WINAPI PeerGraphSetNodeAttributes(
    IN HGRAPH hGraph,
    IN PCWSTR pwzAttributes);
HRESULT WINAPI PeerGraphSystemTimeFromGraphTime(
    IN HGRAPH hGraph,
    IN  FILETIME * pftGraphTime,
    OUT FILETIME * pftSystemTime);

In one embodiment of the grouping component 312 employed by the present invention, interfaces and methods can be implemented through an API. Such an embodiment is particularly well suited for the Microsoft Windows XP operating system in which the APIs may be as follows:

HRESULT WINAPI PeerGroupStartup(
    IN WORD wVersionRequested,
    OUT PPEER_VERSION_DATA pVersionData);
HRESULT WINAPI PeerGroupShutdown( );
VOID WINAPI PeerFreeData(
    IN PVOID pvData);
HRESULT WINAPI PeerGetItemCount(
    IN HPEERENUM hPeerEnum,
    OUT PULONG pCount);
HRESULT WINAPI PeerGetNextItem(
    IN HPEERENUM hPeerEnum,
    IN OUT PULONG pCount,
    OUT PVOID * ppvItems);
HRESULT WINAPI PeerEndEnumeration(
    IN HPEERENUM hPeerEnum);
//////////////////////////////////////////////////
// Group interfaces
HRESULT WINAPI PeerGroupCreate(
    IN PPEER_GROUP_PROPERTIES pProperties,
    OUT HGROUP * phGroup);
HRESULT WINAPI PeerGroupOpen(
    IN PCWSTR pwzIdentity,
    IN PCWSTR pwzGroupPeerName,
    IN PCWSTR pwzCloud,
    OUT HGROUP * phGroup);
HRESULT WINAPI PeerGroupJoin(
    IN PCWSTR pwzIdentity,
    IN PCWSTR pwzInvitation,
    IN PCWSTR pwzCloud,
    OUT HGROUP * phGroup);
HRESULT WINAPI PeerGroupConnect(
    IN HGROUP hGroup);
HRESULT WINAPI PeerGroupClose(
    IN HGROUP hGroup);
HRESULT WINAPI PeerGroupDelete(
    IN PCWSTR pwzIdentity,
    IN PCWSTR pwzGroupPeerName);
HRESULT WINAPI PeerGroupCreateInvitation(
    IN HGROUP hGroup,
    IN PCWSTR pwzIdentityInfo,
    IN FILETIME * pftExpiration,
    IN ULONG cRoles,
    IN PEER_ROLE_ID*   pRoles,
    OUT PWSTR * ppwzInvitation);
HRESULT WINAPI PeerGroupParseInvitation(
    IN PCWSTR pwzInvitation,
    OUT PPEER_INVITATION_INFO * ppInvitationInfo);
HRESULT WINAPI PeerGroupGetStatus(
    IN HGROUP hGroup,
    OUT DWORD * pdwStatus);
HRESULT WINAPI PeerGroupGetProperties(
    IN HGROUP hGroup,
    OUT PPEER_GROUP_PROPERTIES * ppProperties);
HRESULT WINAPI PeerGroupSetProperties(
    IN HGROUP hGroup,
    IN PPEER_GROUP_PROPERTIES pProperties);
HRESULT WINAPI PeerGroupEnumMembers(
    IN HGROUP hGroup,
    IN DWORD dwFlags,    //
PEER_MEMBER_FLAGS
    IN PCWSTR pwzIdentity,
    OUT HPEERENUM * phPeerEnum);
HRESULT WINAPI PeerGroupOpenDirectConnection(
    IN HGROUP hGroup,
    IN PCWSTR pwzIdentity,
    IN PPEER_ADDRESS  pAddress,
    OUT ULONGLONG * pullConnectionId);
HRESULT WINAPI PeerGroupCloseDirectConnection(
    IN HGROUP hGroup,
    IN ULONGLONG ullConnectionId);
HRESULT WINAPI PeerGroupEnumConnections(
    IN HGROUP hGroup,
    IN DWORD dwFlags,     //
PEER_CONNECTION_FLAGS
    OUT HPEERENUM * phPeerEnum);
HRESULT WINAPI PeerGroupSendData(
    IN HGROUP hGroup,
    IN ULONGLONG ullConnectionId,
    IN GUID * pType,
    IN ULONG cbData,
    IN PVOID pvData);
// Eventing interfaces
HRESULT WINAPI PeerGroupRegisterEvent(
    IN HGROUP hGroup,
    IN HANDLE hEvent,
    IN DWORD cEventRegistration,
    IN PPEER_GROUP_EVENT_REGISTRATION
pEventRegistrations,
    OUT HPEEREVENT * phPeerEvent);
HRESULT WINAPI PeerGroupUnregisterEvent(
    IN HPEEREVENT hPeerEvent);
HRESULT WINAPI PeerGroupGetEventData(
    IN HPEEREVENT hPeerEvent,
    OUT PPEER_GROUP_EVENT_DATA * ppEventData);
// Data Storage
HRESULT WINAPI PeerGroupGetRecord(
    IN HGROUP hGroup,
    IN GUID * pRecordId,
    OUT PPEER_RECORD * ppRecord);
HRESULT WINAPI PeerGroupAddRecord(
    IN HGROUP hGroup,
    IN PPEER_RECORD pRecord,
    OUT GUID * pRecordId);
HRESULT WINAPI PeerGroupUpdateRecord(
    IN HGROUP hGroup,
    IN PPEER_RECORD pRecord);
HRESULT WINAPI PeerGroupDeleteRecord(
    IN HGROUP hGroup,
    IN GUID * pRecordId);
HRESULT WINAPI PeerGroupEnumRecords(
    IN HGROUP hGroup,
    IN GUID * pRecordType,
    OUT HPEERENUM * phPeerEnum);
HRESULT WINAPI PeerGroupSearchRecords(
    IN HGROUP hGroup,
    IN PCWSTR pwzCriteria,
    OUT HPEERENUM * phPeerEnum);
HRESULT WINAPI PeerGroupExportDatabase(
    IN HGROUP hGroup,
    IN PCWSTR pwzFilePath);
HRESULT WINAPI PeerGroupImportDatabase(
    IN HGROUP hGroup,
    IN PCWSTR pwzFilePath);
HRESULT WINAPI PeerGroupAuthorizeMembership(
    IN HGROUP hGroup,
    IN PPEER_MEMBERSHIP_INFO pMemberInfo,
    IN BOOL fAuthorize);
HRESULT WINAPI PeerGroupPeerTimeToUniversalTime(
    IN HGROUP hGroup,
    IN FILETIME * pftPeerTime,
    OUT FILETIME * pftUniversalTime);
HRESULT WINAPI PeerGroupUniversalTimeToPeerTime(
    IN HGROUP hGroup,
    IN FILETIME * pftUniversalTime,
    OUT FILETIME * pftPeerTime);

FIGS. 4 and 5 illustrate the peer-to-peer group creation and joining process. Beginning with step 500, the group creator 100 requests that a peer identity for the application be created by the identity manager 310. Next, in step 502, the group creator 100 requests that a group 404 be created. In step 504 a group joiner 100 requests that a peer identity be created by the identity manager 310. Next, in step 506, using the discovery protocol 308 the group joiner 100 locates a group 404 to join. In step 508 the group joiner 100 opens the group 404 that the joiner wishes to join and in step 510 the group joiner 100 sends its identity 400 credentials to the group creator 100. Upon receipt of the group joiner's identity credentials 400 by the group creator 100, in step 512, the group creator 100 requests that an invitation 402 be created to send to the group joiner 100. Next, in step 514, the group creator 100 sends the invitation 402 to the group joiner 100. Upon receipt of the invitation 402 in step 516, the group joiner 100 accepts the invitation 402 and joins the group 404 in step 518. The preceding steps can be repeated resulting in the formation of a peer-to-peer group such as the one illustrated in FIG. 6.

IV. Content Distribution Leveraging a Peer-To-Peer Network Infrastructure

With reference to FIG. 6, an exemplary peer-to-peer group is illustrated. In the group, each peer-to-peer node 100 is reachable via a path on the graph of the group. Each peer node 100 in the group has an instance of the replicated store 314. The replicated store 314 is associated with a graph or a group and maintains metadata as to the current state of each node. When a node 100 connects to a group it first synchronizes the replicated store database 314. The nodes 100 maintain this database automatically.

The replicated store 314 houses metadata about the peer-to-peer group in the form of records 600 residing in the store 314. Each record can contain a record ID field, a record type field, and an attribute field. In the case of the present invention, the metadata in the store reflects what content has been distributed to nodes 100 of the group. For each piece of content that has been distributed to a node 100 in the group, a record 600 corresponding to that piece of content exists in the replicated store 314. This record 600 possesses a location attribute that enables a node 100 in the group to ascertain if the desired content is available from within the peer group and, if so, from which nodes 100 in the group.

Turning to FIG. 7, the method of peer-to-peer content distribution leveraging a peer-to-peer networking infrastructure is illustrated. Beginning with step 700, a content distribution server publishes content for distribution. Continuing with step 702, a client computing device makes a request to the content distribution server for the published content. In step 704, the content distribution server sends the content to the client computing device and, in step 706, the client computing device receives the desired content. Next, in step 708, the client computing device updates the instance of the replicated store located on the client computing device to reflect the content that was obtained in step 706. In step 710, the update to the replicated store is propagated through the peer-to-peer group to the instances of the replicated store on the nodes of the group. Next, in step 712, a node desiring a piece of content can consult the replicated store to determine if the content is obtainable via the peer-to-peer group. Finally, in step 714, a node which has located the content it desires can receive that content from the peer node in the group having the desired content.

The above described method can be applied to a variety of content distribution scenarios. One such scenario is illustrated in FIG. 8. FIG. 8 depicts a residential network connected to the Internet 204 via a shared broadband or dial-up connection 208. In a connectivity scheme such as this one, all of the computing devices in the residential network share the bandwidth of the connection 208. In this scenario, leveraging the peer-to-peer networking infrastructure in distributing content would result in a savings of bandwidth of the shared connection 208. Under a server-based content distribution scheme, a home network having five computers desiring content (e.g., applications, patches, product upgrades, virus definitions, etc.) from a central server would require that each computer individually obtain the content. This necessitates five separate requests for content from the central server 206, each request drawing on bandwidth of the connection 208. As illustrated in FIG. 8, the home network can form a peer-to-peer group 404 of computing devices and one client computing device can download the desired content from the external content server 206 via the Internet 204 and connection 208. The other peer computing devices can then simply obtain the content from the node that downloaded it from the external content server 206. The scenario can also be extended for use with applications such as distributed web caches wherein clients can download a web content from another client close to it who may have downloaded that web content recently. Since the speed of the local network connections will typically far rival that of the broadband or dial-up connection, this results in a better overall experience for the user.

An additional scenario in which the leveraging of the peer-to-peer network infrastructure results in a more efficient distribution of content is illustrated in FIG. 9. Suppose, for example, the external content server 206 of FIG. 9 is a virus definition server for a large antivirus company. As will be appreciated by one of ordinary skill in the art, the virus definition development life-cycle is typically characterized as a very short “ship cycle.” As soon as a new antivirus definition file is available, it is shipped and/or made available for download to the antivirus subscribers. The frequency of such updates to antivirus programs is quite high. Under a server-based content distribution scenario, these updates would be hosted on the external content server 206. The spikes in downloading of these updates, when posted, could potentially cause scaling issues. By leveraging the peer-to-peer networking infrastructure in distributing content, such as virus updates, load on the external content server 206 can be reduced. As illustrated in FIG. 9, a content distribution group 404 can be created and managed by the external content server 206 and requests for content from computing devices 100 can be redirected from the server 206 to the content distribution group 404. Thus, only a handful of customers would need to connect up to the main anti-virus server 206 and the virus patch would automatically be propagated through the content distribution group. In this scenario, the patch itself would likely be signed by the company to ensure that no customer in the distribution group 404 could spoof the patch as coming from the company.

Yet another scenario in which the leveraging of the peer-to-peer network infrastructure can result in a more efficient distribution of content is illustrated in FIG. 10. In a large network such as an enterprise installation, the speed of dissemination of content can be improved when only one or two computing devices 100 download desired content and then, in turn, deliver the content to other computing devices 100. In addition, the computing devices 100 which receive the content from those computing devices 100 that downloaded the content from the content server 206 can advertise the presence of the content such that the load on individual computing devices gets spread out over time. This scenario lends itself well to large enterprise installations where it is not unusual for there to be a need for all computing devices in remote branch offices to download software from a remote server located across a slow wide area network (WAN) link. In much the same respect as the peer-to-peer content distribution solution for a residential network in FIG. 8, the speed of the local network connections will typically be superior to that of the WAN connection and thus result in a more efficient distribution of content. Additionally, in much the same way that the peer-to-peer content distribution solution of FIG. 9 increases the speed at which content can be disseminated over a large area such as the Internet, the peer-to-peer content distribution scenario of FIG. 10 can be particularly useful in situations where the dissemination of the content is time-sensitive, such as a presentation file for an on-line company meeting or a streaming audio file for an on-line concert performance.

In view of the many possible embodiments to which the principles of this invention may be applied, it should be recognized that the embodiments described herein with respect to the drawing figures are meant to be illustrative only and should not be taken as limiting the scope of invention. For example, for performance reasons the method of the present invention may be implemented in hardware, rather than in software. Therefore, the invention as described herein contemplates all such embodiments as may come within the scope of the following claims and equivalents thereof.

Rao, Ravi T., Manion, Todd R., Shappell, Michael

Patent Priority Assignee Title
10142411, May 29 2015 Microsoft Technology Licensing, LLC Dynamic swarm segmentation
10305748, May 19 2014 AUERBACH, MICHAEL HARRISON TRETTER Dynamic computer systems and uses thereof
10338909, Sep 08 2016 AO Kaspersky Lab System and method of distributing software updates
10666735, May 19 2014 AUERBACH, MICHAEL HARRISON TRETTER Dynamic computer systems and uses thereof
10949193, Sep 08 2016 AO Kaspersky Lab System and method of updating active and passive agents in a network
11172026, May 19 2014 AUERBACH, MICHAEL H Dynamic computer systems and uses thereof
11412038, Apr 15 2010 Qualcomm Incorporated Network-assisted peer discovery
11630700, Mar 23 2020 T-Mobile USA, Inc. Local edge device
12061889, Oct 29 2021 JFROG LTD Software release distribution across a hierarchical network
9703546, Dec 21 2015 Schneider Electric Software, LLC Monitoring application states for deployment during runtime operations
9742853, May 19 2014 AUERBACH, MICHAEL HARRISON TRETTER Dynamic computer systems and uses thereof
9830141, Dec 23 2013 GOOGLE LLC Providing a software update to computing devices on the same network
Patent Priority Assignee Title
5369705, Jun 03 1992 International Business Machines Corp Multi-party secure session/conference
5371794, Nov 02 1993 Sun Microsystems, Inc. Method and apparatus for privacy and authentication in wireless networks
5386542, Oct 31 1991 International Business Machines Corporation System for generating a time reference value in the MAC layer of an ISO/OSI communications model among a plurality of nodes
5586264, Sep 08 1994 International Business Machines Corporation Video optimized media streamer with cache management
5712914, Sep 29 1995 Intel Corporation Digital certificates containing multimedia data extensions
5731421, May 03 1992 Ciba Specialty Chemicals Corporation Monoazo dyes having a fiber-reactive 2-vinylsulfonyl-5-sufoaniline diazo component and a fiber-reactive halotriazinyl-substituted coupling component of the benzene or naphthalene series
5744794, Feb 13 1993 University of Strathclyde Apparatus for detecting aqueous environments
5748736, Jun 14 1996 System and method for secure group communications via multicast or broadcast
5806075, Sep 24 1993 Oracle International Corporation Method and apparatus for peer-to-peer data replication
5832514, Jun 26 1996 Microsoft Technology Licensing, LLC System and method for discovery based data recovery in a store and forward replication process
5854898, Feb 24 1995 Apple Inc System for automatically adding additional data stream to existing media connection between two end points upon exchange of notifying and confirmation messages therebetween
5901227, Jun 20 1996 EMC IP HOLDING COMPANY LLC Method and apparatus for implementing partial and complete optional key escrow
5901228, Nov 04 1993 EMC Corporation; DECHO CORP ; IOMEGA CORP ; CARBONITE INC ; AUTONOMY, INC ; Pro Softnet Corporation Commercial online backup service that provides transparent extended storage to remote customers over telecommunications links
5907685, Aug 04 1995 Microsoft Technology Licensing, LLC System and method for synchronizing clocks in distributed computer nodes
5917480, Jun 04 1996 Microsoft Technology Licensing, LLC Method and system for interacting with the content of a slide presentation
5922074, Feb 28 1997 EMC IP HOLDING COMPANY LLC Method of and apparatus for providing secure distributed directory services and public key infrastructure
5933849, Apr 10 1997 AT&T Properties, LLC; AT&T INTELLECTUAL PROPERTY II, L P Scalable distributed caching system and method
5944794, Sep 30 1994 Kabushiki Kaisha Toshiba User identification data management scheme for networking computer systems using wide area network
5982898, Mar 07 1997 AT&T Corp. Certification process
5987376, Jul 16 1997 Microsoft Technology Licensing, LLC System and method for the distribution and synchronization of data and state information between clients in a distributed processing system
6012096, Apr 23 1998 Microsoft Technology Licensing, LLC Method and system for peer-to-peer network latency measurement
6016505, Apr 30 1996 Meta Platforms, Inc Program product to effect barrier synchronization in a distributed computing environment
6044350, Dec 24 1998 Pitney Bowes Inc. Certificate meter with selectable indemnification provisions
6061692, Nov 04 1997 Microsoft Technology Licensing, LLC System and method for administering a meta database as an integral component of an information server
6078948, Feb 03 1998 Syracuse University Platform-independent collaboration backbone and framework for forming virtual communities having virtual rooms with collaborative sessions
6081845, Mar 18 1997 Fujitsu Limited ARP server
6085320, May 15 1996 EMC Corporation Client/server protocol for proving authenticity
6088805, Feb 13 1998 International Business Machines Corporation Systems, methods and computer program products for authenticating client requests with client certificate information
6092201, Oct 24 1997 Entrust Technologies Method and apparatus for extending secure communication operations via a shared list
6097811, Nov 02 1995 ASSA ABLOY AB Tree-based certificate revocation system
6108687, Mar 02 1998 HEWLETT-PACKARD DEVELOPMENT COMPANY, L P System and method for providing a synchronized display to a plurality of computers over a global computer network
6113652, Apr 27 1995 FOURNIER ASSETS LIMITED LIABILITY COMPANY Communications network equipment capable of non-disruptive software upgrade
6128740, Dec 08 1997 Entrust Technologies Limited Computer security system and method with on demand publishing of certificate revocation lists
6134658, Jun 09 1997 Microsoft Technology Licensing, LLC Multi-server location-independent authentication certificate management system
6141760, Oct 31 1997 HEWLETT-PACKARD DEVELOPMENT COMPANY, L P System and method for generating unique passwords
6143383, May 22 1998 Hollister Incorporated Multilayer chlorine-free film with barrier layer of a polyamide blend and ostomy pouches formed therefrom
6155840, Sep 18 1998 AT HOME BONDHOLDERS LIQUIDATING TRUST System and method for distributed learning
6163809, Dec 08 1997 Microsoft Technology Licensing, LLC System and method for preserving delivery status notification when moving from a native network to a foreign network
6167567, May 05 1998 Hewlett Packard Enterprise Development LP Technique for automatically updating software stored on a client computer in a networked client-server environment
6173277, Oct 25 1996 HERE GLOBAL B V Interface layer for navigation system
6205481, Mar 17 1998 ARRAY NETWORKS, INC Protocol for distributing fresh content among networked cache servers
6216110, Feb 27 1998 Microsoft Technology Licensing, LLC System and method for publishing calendar information to a publicly accessible location
6237025, Oct 01 1993 Pragmatus AV LLC Multimedia collaboration system
6266420, Oct 08 1998 Entrust Corporation Method and apparatus for secure group communications
6269099, Jul 01 1998 Hewlett Packard Enterprise Development LP Protocol and method for peer network device discovery
6311209, Jul 16 1997 Microsoft Technology Licensing, LLC Methods for performing client-hosted application sessions in distributed processing systems
6336141, Jan 08 1997 Hitachi, Ltd. Method of collectively managing dispersive log, network system and relay computer for use in the same
6351813, Feb 09 1996 Digital Privacy, Inc. Access control/crypto system
6363352, Nov 13 1998 Microsoft Technology Licensing, LLC Automatic scheduling and formation of a virtual meeting over a computer network
6470375, Dec 29 1995 HEWLETT-PACKARD DEVELOPMENT COMPANY, L P System and method for managing the execution of system management tasks
6490253, Nov 22 2000 Seagate Technology LLC Peer to peer interconnect diagnostics
6526411, Nov 15 1999 CEDAR LANE TECHNOLOGIES INC System and method for creating dynamic playlists
6529950, Jun 17 1999 International Business Machines Corporation Policy-based multivariate application-level QoS negotiation for multimedia services
6532217, Jun 29 1998 HANGER SOLUTIONS, LLC System for automatically determining a network address
6557054, May 31 1994 TMI SOLUTIONS, LLC Method and system for distributing updates by presenting directory of software available for user installation that is not already installed on user station
6560636, Jul 16 1997 Microsoft Technology Licensing, LLC Methods for performing client-hosted application sessions in distributed processing systems
6581110, Dec 07 1999 International Business Machines Corporation Method and system for reading and propagating authenticated time throughout a worldwide enterprise system
6636854, Dec 07 2000 International Business Machines Corporation Method and system for augmenting web-indexed search engine results with peer-to-peer search results
6636889, Jan 04 2000 International Business Machines Corporation System and method for client replication of collaboration space
6653933, Aug 18 2000 PANASONIC ELECTRIC WORKS CO , LTD Autonomous local area distributed network
6654796, Oct 07 1999 Cisco Technology, Inc System for managing cluster of network switches using IP address for commander switch and redirecting a managing request via forwarding an HTTP connection to an expansion switch
6658568, Feb 13 1995 Intertrust Technologies Corporation Trusted infrastructure support system, methods and techniques for secure electronic commerce transaction and rights management
6665867, Jul 06 2000 International Business Machines Corporation Self-propagating software objects and applications
6674459, Oct 24 2001 Microsoft Technology Licensing, LLC Network conference recording system and method including post-conference processing
6675205, Oct 14 1999 MEC MANAGEMENT, LLC Peer-to-peer automated anonymous asynchronous file sharing
6675261, Dec 22 2000 ORACLE, USA; Oracle International Corporation; Oracle Corporation Request based caching of data store data
6683865, Oct 15 1999 Nokia Technologies Oy System for routing and switching in computer networks
6701344, Jul 31 2000 PH MADISON FUNDING LLC Distributed game environment
6714966, Jul 31 2000 PH MADISON FUNDING LLC Information delivery service
6728753, Jun 15 1999 Microsoft Technology Licensing, LLC Presentation broadcasting
6745178, Apr 28 2000 GLOBALFOUNDRIES Inc Internet based method for facilitating networking among persons with similar interests and for facilitating collaborative searching for information
6748530, Nov 12 1998 Fuji Xerox Co., Ltd. Certification apparatus and method
6754829, Dec 14 1999 Intel Corporation Certificate-based authentication system for heterogeneous environments
6775782, Mar 31 1999 SNAP INC System and method for suspending and resuming digital certificates in a certificate-based user authentication application system
6791582, Dec 29 2000 International Business Machines Corporation Method and system for identifying and displaying information that is new or has been updated in a place
6801604, Jun 25 2001 Nuance Communications, Inc Universal IP-based and scalable architectures across conversational applications using web services for speech and audio processing resources
6823327, Dec 11 1995 PanaLogIn LLC World wide web registration information processing system
6839769, May 31 2001 Intel Corporation Limiting request propagation in a distributed file system
6912622, Apr 15 2002 Microsoft Technology Licensing, LLC Multi-level cache architecture and cache management method for peer-to-peer name resolution protocol
6920455, May 19 1999 Oracle America, Inc Mechanism and method for managing service-specified data in a profile service
6938042, Apr 03 2002 Microsoft Technology Licensing, LLC Peer-to-peer file sharing
6961764, May 14 1999 Fujitsu Limited Description distributed computer system and method of applying maintenance thereto
6968179, Jul 27 2000 Microsoft Technology Licensing, LLC Place specific buddy list services
6976258, Nov 30 1999 HANGER SOLUTIONS, LLC Providing quality of service guarantees to virtual hosts
6981043, Mar 27 2001 International Business Machines Corporation Apparatus and method for managing multiple user identities on a networked computer system
6983400, May 16 2002 Oracle America, Inc Distributed test harness model
6990514, Sep 03 1999 Cisco Technology, Inc Unified messaging system using web based application server for management of messages using standardized servers
7062681, Dec 03 2002 Microsoft Technology Licensing, LLC Method and system for generically reporting events occurring within a computer system
7065579, Jan 22 2001 Oracle America, Inc System using peer discovery and peer membership protocols for accessing peer-to-peer platform resources on a network
7065587, Apr 02 2001 Microsoft Technology Licensing, LLC Peer-to-peer name resolution protocol (PNRP) and multilevel cache for use therewith
7068789, Sep 19 2001 Microsoft Technology Licensing, LLC Peer-to-peer name resolution protocol (PNRP) group security infrastructure and method
7073132, Nov 03 1999 Apple Inc Method, system, and computer readable medium for managing resource links
7130999, Mar 27 2002 Intel Corporation Using authentication certificates for authorization
7139760, Jan 27 2003 Microsoft Technology Licensing, LLC Peer-to-peer record structure and query language for searching and discovery thereof
7146609, May 17 2002 Oracle America, Inc Method, system and article of manufacture for a firmware image
7159223, May 12 2000 ZW Company, LLC Methods and systems for applications to interact with hardware
7181620, Nov 09 2001 Cisco Technology, Inc.; Cisco Technology, Inc Method and apparatus providing secure initialization of network devices using a cryptographic key distribution approach
7185194, May 17 2000 Fujitsu Limited System and method for distributed group management
7191438, Feb 23 2001 LENOVO SINGAPORE PTE LTD Computer functional architecture and a locked down environment in a client-server architecture
7197049, Jul 22 1998 Microsoft Technology Licensing, LLC Method for switching protocols transparently in multi-user applications
7206934, Sep 26 2002 Oracle America, Inc Distributed indexing of identity information in a peer-to-peer network
7213060, Apr 23 2002 Canon Kabushiki Kaisha Web based creation of printer instances on a workstation
7272636, Apr 24 2001 Oracle America, Inc Peer group name server
7299351, Sep 19 2001 Microsoft Technology Licensing, LLC Peer-to-peer name resolution protocol (PNRP) security infrastructure and method
7313792, Sep 08 2003 Microsoft Technology Licensing, LLC Method and system for servicing software
7321928, Nov 22 2000 Switchfire Limited Super peering architecture
7415439, Jul 06 2001 Nokia Corporation Digital rights management in a mobile communications environment
7484225, Aug 08 2002 Oracle America, Inc System and method for describing and identifying abstract software modules in peer-to-peer network environments
7499981, Jul 06 2001 Intel Corporation Methods and apparatus for peer-to-peer services
7516187, Jul 03 2002 LG Electronics Inc. Remote control system for home appliance network and method for operating the same
7536465, Nov 22 2000 Microsoft Technology Licensing, LLC Universal naming scheme for peer-to-peer resources
7567987, Oct 24 2003 Microsoft Technology Licensing, LLC File sharing in P2P group shared spaces
7568195, Dec 16 2003 Microsoft Technology Licensing, LLC Determining a maximal set of dependent software updates valid for installation
7574706, Dec 15 2003 Microsoft Technology Licensing, LLC System and method for managing and communicating software updates
7610378, Nov 22 2000 Microsoft Technology Licensing, LLC Locator and tracking service for peer-to-peer resources
7716286, Dec 10 2003 ZEROTOUCHDIGITAL, INC Method and apparatus for utility computing in ad-hoc and configured peer-to-peer networks
7739240, Dec 09 2002 Hewlett Packard Enterprise Development LP Replication and replica management in a wide area file system
7805719, Nov 17 2000 HEWLETT-PACKARD DEVELOPMENT COMPANY, L P System and method for updating and distributing information
8019725, Dec 15 2004 Apple Inc Software update management
8041798, Sep 11 2003 Oracle America, Inc Self-healing grid mechanism
8225304, Mar 23 2004 Kabushiki Kaisha Toshiba; Toshiba Tec Kabushiki Kaisha System and method for remotely securing software updates of computer systems
20010003191,
20010035976,
20010053213,
20020027567,
20020073204,
20020078243,
20020097267,
20020140730,
20020143989,
20020144149,
20020154172,
20020174422,
20020184358,
20020188657,
20020188881,
20020191018,
20020194484,
20030009586,
20030009752,
20030014485,
20030036941,
20030055892,
20030056093,
20030056094,
20030088544,
20030097468,
20030126027,
20030135629,
20030140119,
20030147386,
20030191753,
20030196060,
20030217073,
20030233455,
20040039781,
20040060044,
20040064693,
20040078436,
20040082351,
20040088325,
20040100953,
20040107242,
20040111423,
20040111469,
20040111515,
20040111525,
20040117446,
20040120344,
20040122898,
20040122901,
20040128350,
20040133640,
20040141005,
20040143603,
20040148333,
20040148611,
20040172455,
20040172456,
20040181487,
20040184445,
20040202206,
20040205243,
20040221043,
20040236863,
20040237081,
20040242329,
20040249970,
20040260761,
20040260771,
20040261071,
20040264385,
20040268344,
20050004984,
20050005270,
20050009537,
20050027805,
20050038856,
20050060432,
20050066001,
20050080768,
20050080859,
20050086300,
20050102245,
20050102356,
20050114487,
20050125529,
20050125560,
20050144080,
20050171799,
20050198173,
20050198493,
20050235038,
20060041882,
20060064754,
20070169074,
20080031460,
20100191833,
20110289495,
20130007098,
EP1248441,
GB2378268,
JP10149398,
JP11205331,
JP11265369,
JP2000151715,
JP2002197246,
JP2002281086,
JP2002335269,
WO120450,
WO2005046164,
/////
Executed onAssignorAssigneeConveyanceFrameReelDoc
Mar 24 2004MANION, TODD R Microsoft CorporationASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS 0151570148 pdf
Mar 24 2004RAO, RAVI T Microsoft CorporationASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS 0151570148 pdf
Mar 24 2004SHAPPELL, MICHAELMicrosoft CorporationASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS 0151570148 pdf
Mar 26 2004Microsoft Corporation(assignment on the face of the patent)
Oct 14 2014Microsoft CorporationMicrosoft Technology Licensing, LLCASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS 0345410477 pdf
Date Maintenance Fee Events
Sep 14 2017M1551: Payment of Maintenance Fee, 4th Year, Large Entity.
Sep 15 2021M1552: Payment of Maintenance Fee, 8th Year, Large Entity.


Date Maintenance Schedule
Apr 01 20174 years fee payment window open
Oct 01 20176 months grace period start (w surcharge)
Apr 01 2018patent expiry (for year 4)
Apr 01 20202 years to revive unintentionally abandoned end. (for year 4)
Apr 01 20218 years fee payment window open
Oct 01 20216 months grace period start (w surcharge)
Apr 01 2022patent expiry (for year 8)
Apr 01 20242 years to revive unintentionally abandoned end. (for year 8)
Apr 01 202512 years fee payment window open
Oct 01 20256 months grace period start (w surcharge)
Apr 01 2026patent expiry (for year 12)
Apr 01 20282 years to revive unintentionally abandoned end. (for year 12)