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.
|
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
3. The method of
4. The method of
requesting the software product update; and
receiving the software product update at least partially utilizing the wide area connection.
7. The method of
requesting the software product update
utilizing the broadband connection.
9. The method of
requesting the software product update; and
receiving the software product update at least partially utilizing the dial-up connection.
10. The method of
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
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
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
16. The method of
17. The method of
19. The tangible computer-readable storage device of
20. The tangible computer-readable storage device of
21. The tangible computer-readable storage device of
22. The tangible computer-readable storage device of
25. The device of
26. The device of
29. The method of
30. The method of
31. The method of
34. The tangible computer-readable storage device of
35. The tangible computer-readable storage device of
36. The tangible computer-readable storage device of
37. The tangible computer-readable storage device of
39. The system of
40. The system of
41. The system of
42. The system 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:
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
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
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
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
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
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);
IV. Content Distribution Leveraging a Peer-To-Peer Network Infrastructure
With reference to
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
The above described method can be applied to a variety of content distribution scenarios. One such scenario is illustrated in
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
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
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 on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Mar 24 2004 | MANION, TODD R | Microsoft Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 015157 | /0148 | |
Mar 24 2004 | RAO, RAVI T | Microsoft Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 015157 | /0148 | |
Mar 24 2004 | SHAPPELL, MICHAEL | Microsoft Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 015157 | /0148 | |
Mar 26 2004 | Microsoft Corporation | (assignment on the face of the patent) | / | |||
Oct 14 2014 | Microsoft Corporation | Microsoft Technology Licensing, LLC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 034541 | /0477 |
Date | Maintenance Fee Events |
Sep 14 2017 | M1551: Payment of Maintenance Fee, 4th Year, Large Entity. |
Sep 15 2021 | M1552: Payment of Maintenance Fee, 8th Year, Large Entity. |
Date | Maintenance Schedule |
Apr 01 2017 | 4 years fee payment window open |
Oct 01 2017 | 6 months grace period start (w surcharge) |
Apr 01 2018 | patent expiry (for year 4) |
Apr 01 2020 | 2 years to revive unintentionally abandoned end. (for year 4) |
Apr 01 2021 | 8 years fee payment window open |
Oct 01 2021 | 6 months grace period start (w surcharge) |
Apr 01 2022 | patent expiry (for year 8) |
Apr 01 2024 | 2 years to revive unintentionally abandoned end. (for year 8) |
Apr 01 2025 | 12 years fee payment window open |
Oct 01 2025 | 6 months grace period start (w surcharge) |
Apr 01 2026 | patent expiry (for year 12) |
Apr 01 2028 | 2 years to revive unintentionally abandoned end. (for year 12) |