Methods and computer readable mediums are described that facilitate inviting user entities on a network. The method may include initiating a first application for sending an invitation by a first user entity on a first endpoint, selecting a second user entity to receive the invitation, and selecting an activity. The method may also include sending from the first endpoint to the second user entity the invitation to participate in the activity if the first endpoint determines the activity is supported by a computing application on the first endpoint.
|
1. A computer-implemented method of inviting a user entity to participate in a selected activity on a peer network, the computer-implemented method comprising:
receiving an input initiating a first computing application for sending an invitation by a first user entity on a first endpoint on the peer network;
receiving a selection of a second user entity to receive the invitation;
resolving an address for a second endpoint on the peer network associated with the second user entity using a peer-to-peer serverless protocol;
receiving, at the first endpoint through the peer network, capability information, wherein the capability information is different from the address of the second endpoint, the capability information describing capabilities of the second endpoint to perform a collaborative user activity by executing a software application installed at the second endpoint, the capability information including at least dynamic real-time capabilities of the second user entity and identifying the software application at the second endpoint regardless of whether the software application at the second endpoint is being executed when the capability information is received at the first endpoint;
receiving a selection at the first endpoint of an activity from a plurality of activities, wherein the selected activity is supported by an application at the first endpoint;
before sending the invitation, determining at the first endpoint, based on the received capability information, whether the second user entity endpoint supports the selected activity; and
in response to determining at the first endpoint that the second user entity endpoint supports the selected activity, sending from the first endpoint to the resolved address of the second user entity endpoint the invitation from the first user entity to the second user entity to participate in the selected activity by executing the software application at the second endpoint.
6. A computer storage medium not consisting of a propagated data signal and having computer executable instructions for performing a method of inviting a user entity to participate in a selected activity on a peer network, the method comprising:
receiving an input initiating a first computing application for sending an invitation by a first user entity on a first endpoint on the peer network;
receiving a selection of a second user entity to receive the invitation;
resolving an address for a second endpoint on the peer network associated with the second user entity using a peer-to-peer serverless protocol;
receiving, at the first endpoint through the peer network, capability information, wherein the capability information is different from the address of the second endpoint, the capability information describing capabilities of the second endpoint to perform a collaborative user activity by executing a software application installed at the second endpoint, the capability information including at least dynamic real-time capabilities of the second user entity and identifying the software application at the second endpoint regardless of whether the software application at the second endpoint is being executed when the capability information is received at the first endpoint;
receiving a selection at the first endpoint of an activity from a plurality of activities, wherein the selected activity is supported by an application at the first endpoint;
before sending the invitation, determining at the first endpoint, based on the received capability information, whether the second user entity endpoint supports the selected activity; and
in response to determining at the first endpoint that the second user entity endpoint supports the selected activity, sending from the first endpoint to the resolved address of the second user entity endpoint the invitation from the first user entity to the second user entity to participate in the selected activity by executing the software application at the second endpoint.
9. A system for inviting a user entity to participate in a selected activity on a peer network, comprising:
a processing unit;
a memory, communicatively coupled to the processing unit, storing instructions that, when executed by the processing unit, perform the following method:
receiving an input initiating a first computing application for sending an invitation by a first user entity on a first endpoint on the peer network;
receiving a selection of a second user entity to receive the invitation;
resolving an address for a second endpoint on the peer network associated with the second user entity using a peer-to-peer serverless protocol;
receiving, at the first endpoint through the peer network, capability information, wherein the capability information is different from the address of the second endpoint, the capability information describing capabilities of the second endpoint to perform a collaborative user activity by executing a software application installed at the second endpoint, the capability information including at least dynamic real-time capabilities of the second user entity and identifying the software application at the second endpoint regardless of whether the software application at the second endpoint is being executed when the capability information is received at the first endpoint;
receiving a selection at the first endpoint of an activity from a plurality of activities, wherein the selected activity is supported by an application at the first endpoint;
before sending the invitation, determining at the first endpoint, based on the received capability information, whether the second user entity endpoint supports the selected activity; and
in response to determining at the first endpoint that the second user entity supports the selected activity, sending from the first endpoint to the resolved address of the second user entity endpoint the invitation from the first user entity to the second user entity to participate in the selected activity by executing the software application at the second endpoint.
2. The computer-implemented method of
3. The computer-implemented method of
4. The computer-implemented method of
5. The computer-implemented method of
7. The computer storage medium of
8. The computer storage medium of
10. The system of
|
The subject matter of the present application is generally related to the following commonly-owned applications filed on the same day as the present application:
U.S. patent application Ser. No. 11/112,134 (U.S. Patent Publication No. 2006/0242235 A1), entitled “PRESENCE MONITORING IN A SERVERLESS PEER-TO-PEER SYSTEM”;
U.S. patent application Ser. No. 11/112,135 (U.S. Patent Publication No. 2006/0239279 A1), entitled “CONTACT MANAGEMENT IN A SERVERLESS PEER-TO-PEER SYSTEM”; and
U.S. patent application Ser. No. 11/112,133 (U.S. Patent Publication No. 2006/0239234 A1), entitled “AN APPLICATION PROGRAMMING INTERFACE FOR DISCOVERING ENDPOINTS IN A SERVERLESS PEER TO PEER NETWORK”.
These applications are hereby incorporated by reference herein in their entireties for all purposes.
Server based communication services such as the Messenger service provided by MSN® communication services permit users to sign into a server-based network and then use the services of the network (e.g., e-mail, text messaging, etc.). A server may store a contact list for the user and the user can add and delete persons from the contact list. When the user signs in, a server or servers may notify persons in the user's contact list that the user is “online.” Similarly, the server or servers may notify the user of persons in the user's contact list that are “online.”
The MICROSOFT® Corporation also provides Peer-to-Peer Networking software for use with its WINDOWS® operating systems. With this system, users can create a network of peer computers and can communicate with one another without having to sign into a central server. For example, users can create a peer-to-peer group and then create a chat room in which all members of the group can post messages and see messages posted by others in the group. The system may also allow peers to invite others to participate in collaborative activities. The chat room is maintained using the peer computers and without the need for a central server.
Methods and computer readable mediums are described that facilitate inviting user entities on a network. The method may include initiating a first application for sending an invitation by a first user entity on a first endpoint, selecting a second user entity to receive the invitation, and selecting an activity. The method may also include sending from the first endpoint to the second user entity the invitation to participate in the activity if the first endpoint determines the activity is supported by a computing application on the first endpoint.
Additionally, the method may include that the first application for sending the invitation is the computing application, that the first application for sending the invitation is a messenger application, and initiating a name resolution mechanism to locate a second endpoint for the second user entity. The method may further include querying a presence store to locate a second endpoint for the second user entity, sending the invitation synchronously or asynchronously, canceling an asynchronous invitation at the first endpoint, and sending the invitation in a secure or unsecure manner.
Furthermore, methods are described that facilitate receiving invitations on a network. The method may include initiating, at a receiving endpoint, a first application for receiving an invitation from a sending endpoint to participate in an activity, receiving the invitation at the receiving endpoint, and launching a computing application on the receiving endpoint to execute the activity if the receiving endpoint determines the activity is capable of being executed by the computing application at the receiving endpoint.
Additionally, the method may include the first application for receiving the invitation is the computing application, the first application for receiving the invitation is a messenger application, and the receiving endpoint receives the invitation by at least one of a generic invitation listener application, a messenger application, or the computing application at the receiving endpoint. The method may further include registering activity capabilities of the computing application at the receiving endpoint with a presence store, receiving the invitation synchronously or asynchronously, receiving the invitation in a secure or unsecure manner, and retrieving, by the sending endpoint, status information of the invitation sent to the receiving endpoint.
Although the following text sets forth a detailed description of numerous different embodiments, it should be understood that the legal scope of the description is defined by the words of the claims set forth at the end of this patent. The detailed description is to be construed as exemplary only and does not describe every possible embodiment since describing every possible embodiment would be impractical, if not impossible. Numerous alternative embodiments could be implemented, using either current technology or technology developed after the filing date of this patent, which would still fall within the scope of the claims.
It should also be understood that, unless a term is expressly defined in this patent using the sentence “As used herein, the term ‘——————’ is hereby defined to mean . . . ” or a similar sentence, there is no intent to limit the meaning of that term, either expressly or by implication, beyond its plain or ordinary meaning, and such term should not be interpreted to be limited in scope based on any statement made in any section of this patent (other than the language of the claims). To the extent that any term recited in the claims at the end of this patent is referred to in this patent in a manner consistent with a single meaning, that is done for sake of clarity only so as to not confuse the reader, and it is not intended that such claim term by limited, by implication or otherwise, to that single meaning. Finally, unless a claim element is defined by reciting the word “means” and a function without the recital of any structure, it is not intended that the scope of any claim element be interpreted based on the application of 35 U.S.C. §112, sixth paragraph.
The steps of the claimed method and apparatus are operational with numerous other general purpose or special purpose computing system environments or configurations. Examples of well known computing systems, environments, and/or configurations that may be suitable for use with the methods or apparatus of the claims include, but are not limited to, personal computers, server computers, hand-held or laptop devices, multiprocessor systems, microprocessor-based systems, set top boxes, programmable consumer electronics, network PCs, minicomputers, mainframe computers, distributed computing environments that include any of the above systems or devices, and the like.
The steps of the claimed method and apparatus may be described in the general context of computer-executable instructions, such as program modules, being executed by a computer. Generally, program modules include routines, programs, objects, components, data structures, etc. that perform particular tasks or implement particular abstract data types. The methods and apparatus may also be practiced in distributed computing environments where tasks are performed by remote processing devices that are linked through a communications network. In a distributed computing environment, program modules may be located in both local and remote computer storage media including memory storage devices.
With reference to
Computer 110 typically includes a variety of computer readable media. Computer readable media can be any available media that can be accessed by computer 110 and includes both volatile and nonvolatile media, removable and non-removable media. By way of example, and not limitation, computer readable media may comprise computer storage media and communication media. Computer storage media includes both volatile and nonvolatile, 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. Computer storage media includes, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD) or other optical disk storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to store the desired information and which can accessed by computer 110. Communication media typically embodies 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 includes 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, communication media includes wired media such as a wired network or direct-wired connection, and wireless media such as acoustic, RF, infrared and other wireless media. Combinations of the any of the above should also be included within the scope of computer readable media.
The system memory 130 includes computer storage media in the form of volatile and/or nonvolatile memory such as read only memory (ROM) 131 and random access memory (RAM) 132. A basic input/output system 133 (BIOS), containing the basic routines that help to transfer information between elements within computer 110, such as during start-up, is typically stored in ROM 131. RAM 132 typically contains data and/or program modules that are immediately accessible to and/or presently being operated on by processing unit 120. By way of example, and not limitation,
The computer 110 may also include other removable/non-removable, volatile/nonvolatile computer storage media. By way of example only,
The drives and their associated computer storage media discussed above and illustrated in
The computer 110 may operate in a networked environment using logical connections to one or more remote computers, such as a remote computer 180. The remote computer 180 may be a personal computer, a server, a router, a network PC, a peer device or other common network node, and typically includes many or all of the elements described above relative to the computer 110, although only a memory storage device 181 has been illustrated in
When used in a LAN networking environment, the computer 110 is connected to the LAN 171 through a network interface or adapter 170. When used in a WAN networking environment, the computer 110 typically includes a modem 172 or other means for establishing communications over the WAN 173, such as the Internet. The modem 172, which may be internal or external, may be connected to the system bus 121 via the user input interface 160, or other appropriate mechanism. In a networked environment, program modules depicted relative to the computer 110, or portions thereof, may be stored in the remote memory storage device. By way of example, and not limitation,
The system 200 may include a presence system 204 that monitors the presence of other entities on the communication network. An entity may be, for example, a particular person, a device (e.g., a printer, a copier, a computer, a scanner, etc.) a position in an organization (e.g., “manager,” “customer service representative,” etc.), an organization, etc. Presence on a network may generally refer to a current status of an entity with regard to their willingness or ability to communicate via the network, but may also refer to additional or alternative information regarding the entity such as a current activity of the entity. Presence on a network may be represented by presence information. Examples of presence information may include, but are not limited to, one or more of an indication that an entity is “online,” an indication that an entity is “out to lunch,” an indication that an entity is “away,” an indication that an entity will “be right back,” an indication that an entity is “idle,” an indication that an entity is “busy,” an indication that an entity is “on the phone,” an indication that an entity is “watching a movie,” an indication that an entity is “playing Halo®,” an indication that an entity is “helping another customer,” an indication of a device status (e.g., a printer with status “busy,” “idle,” etc). Presence information may include one or more enumerated strings and/or rich presence (e.g., custom strings generated by a user entity). For example, a user entity could define a custom presence state as, “I am out of the office. Will return tomorrow.” Presence information obtained by the presence system 204 may be stored in a presence store 208.
The presence system 204 may facilitate a user entity to monitor (or “subscribe”) to presence information of other entities. This may include the presence system 204 polling other computing systems periodically, for example. Additionally or alternatively, other computing systems corresponding to other user entities may transmit event indications to the system 200 that notify the presence system 204 of events such as a change in presence state. For example, an event may occur when a user's presence changes from “offline” to “online,” and the presence system 204 may detect this event. The presence system 204 could then notify other applications or software modules (e.g., such as the application 280) that the event occurred.
The presence system 204 may also monitor capabilities of other entities published on the network 202. Capabilities of an entity may include, for example, static capabilities such as whether a computing system of the entity is configured to execute a particular software application, whether a computing system of the entity has a particular hardware device, etc. Capabilities of an entity may also include, for example, dynamic capabilities such as real-time capabilities of an entity with respect to a game software application currently being executed on the entity's computing system, etc. An entity publishing capabilities on the network may refer to permitting other entities to be able to monitor the capabilities via the network 202. Capability information obtained by the presence system 204 may be stored in a capability store 212.
The presence system 204 may also monitor objects of other entities published on the network 202. Objects of an entity may include, for example, data objects such as files, structures, pictures, sounds, a description such as meta-data, a name-value pair, etc. An entity publishing objects on the network may refer to permitting other entities to be able to monitor the objects via the network 202. As just one example, publishing an object may permit an entity to provide other entities with information specific to an application being executed by a computing system of the entity and/or real-time information. With respect to a game application, for instance, a published object could include information regarding a player's current score, a weapon currently in possession of the player, etc. Objects information obtained by the presence system 204 may be stored in an objects store 216.
The presence system 204 may also provide (or “publish”) presence information associated with a user entity (i.e., the entity associated with the system 200) to other entities on the network 202. The presence information associated with the user entity may be stored in the presence store 208 or some other storage. Similarly, the presence system 204 may also provide (or “publish”) information regarding capabilities of the user entity to other entities on the network 202. The capability information associated with the user entity may be stored in a capability store 208. Further, the presence system 204 may also provide (or “publish”) information regarding objects of the user entity to other entities on the network. The object information associated with the user entity may be stored in an object store 216, or some other storage. Similarly, the presence system 204 may facilitate an ability for the user entity to monitor (or “subscribe-to”) presence information. As such, when presence information is monitored by the user entity, subsequent changes may elicit events for which the user entity is notified. For example, if the monitored presence information changes from “away” to “playing Halo®,” an event may trigger thereby notifying the user entity of a change.
The presence system 204 may interface with a contact store 240 that stores information regarding other entities. The contact store 240 may store information for an entity such as one or more of a secure identifier, a human readable alias, an indicator of whether presence information for this entity is to be monitored, and an indicator of whether to allow this entity to obtain presence information regarding the user entity. An entity as represented in the contact store 240 may be referred to as a contact.
Each user entity may have one or more communication endpoints with which it is associated. Generally, different communication endpoints associated with a user entity may include different communication termination points associated with the entity, such as different computing systems. As an example, endpoints for a particular entity may include a desktop computer at work, a desktop computer at home, a personal digital assistant (PDA), etc. Optionally, different communication endpoints associated with a user entity may also include different software applications being executed by a single computing system. Endpoint information may include a peer name, a machine name, or a device type, to name a few.
The presence system 204 may also interface with a communication system 260, which is coupled to the communication network 202. The communication system 260 may establish connections between the system 200 and other peer computing systems associated with other entities. Establishing a connection may include, for example, one or more of determining an endpoint associated with an entity, resolving an address of the endpoint, authenticating communications, encrypting and decrypting communications, etc. In one implementation, the communication system 260 may include a Peer Name Resolution Protocol (PNRP), or similar. The PNRP may resolve a name (e.g., a peer name) for a contact to derive its IP address without reliance upon a Domain Name System (DNS), commonly used by server computers. In another implementation, the communication system 260 may interface with an authentication system 270 that is itself coupled to the contact store 240. In attempting to establish a connection with another computing system, the communication system 260 may receive from the other computing system an indication of an identifier associated with an entity. The authentication system 270 may then check whether information about the entity with the security identifier presented is stored in the contact store 240. If the identifier is not found in the contact store 240, the connection may be refused.
A connection may be secured. Establishing a connection and communicating over a connection may include, for example, one or more of utilizing a secure channel, utilizing secure socket layer (SSL) techniques, utilizing transport layer security (TLS) techniques, utilizing public/private key pairs, utilizing authentication techniques (e.g., X.509 certificates, encrypted signatures utilizing a pretty good privacy (PGP) program, etc.), utilizing a peer name resolution protocol (PNRP), transmission control protocol (TCP), internet protocol (IP), internet protocol version six (IPv6), etc. Resolving an address of an endpoint may include, for example, resolving a PNRP identifier to an IP address and a port.
A software application 280, or some other software module, may communicate with the presence system 204 to obtain presence information, capabilities information, and/or objects information associated with other user entities on the communication network 202. For example, the presence system 204 may provide a set of application programming interfaces (APIs) that permit software applications to request and receive information regarding presence, capabilities, and/or objects associated with other user entities. The presence system 204 may retrieve the requested information from the presence store 208, capabilities store 212, and/or the objects store 216. Additionally or alternatively, the presence system 204 could obtain requested information from the other user entities via the communication system 260 and the communication network 202. Generally speaking, “availability” may refer to presence information, capabilities and objects. A user entity has the ability to publish all, some, or none of this information.
An Invitation API 282 may permit an application 280 used by a user entity to invite other contacts or user entities of a serverless network to participate in a collaborative activity. The Invitation API 282 may employ the use of the Presence System 204 to determine contacts from the contact store 240. Additionally, the Presence System 204 may retrieve capability information located in the capability store 212. If a particular contact in the contact store 240 has no associated capability information, the Invitation API 282 or, alternatively, the Application 280 may employ a Capabilities API 284 to determine the capabilities of another user entity's endpoint. A capability may be a collaborative activity including any activity which is supported by an application on multiple endpoints. For example, a contact may support the activity of Halo® game play because the contact's endpoint has the Halo® gaming application installed. The Invitation API may allow the contact owner to determine other contacts on a serverless network that may support the activity of Halo® game-play.
When the Invitation API locates a contact that supports the activity, an invitation may be sent by the user entity (invitor) to that contact (invitee), thereby allowing the invitee to respond to the invitation. A response may include standard invitee options of “accept,” “reject,” or “ignore.” Other response options may include standard or custom text such as “busy now, please invite me later,” or “please try again after 9 pm.” However, if the invitee is not present at the endpoint, or simply chooses not to acknowledge the invitation with “accept,” “reject,” or “ignore,” then the invitation may time-out. Upon expiration of a time-out period, the invitation may disappear from view at the invitee's endpoint, thereby minimizing clutter on the invitee's desktop. Optionally, an invitee may configure alert settings so that, for example, invitation dialog boxes do not interrupt an invitee while giving a presentation. As such, any incoming invitations may automatically receive an indication that the invitee is unavailable. The invitee may further customize such indications, for example, “Presentation ongoing, please try after 4 pm.”
Alternatively, if the user entity's endpoint supports the activity, the method may determine if the messenger, or some other application, sends the invitation at block 314. The method may include a default setting in which the messenger always performs the invitation, or the particular application supporting the activity performs the invitation. The method may also prompt the user entity to choose one of the aforementioned options. If the messenger performs the invitation, then, via the Invite API's, the method may launch the corresponding application which supports the activity at block 316. On the other hand, the application supporting the activity may perform the invitation by calling the Invite API 282 which may also set environment variables to the application and launch such application at block 318. The Invite API 282 may also permit the invitation to hold application specific data and/or pass parameters to the application. Such data and parameters may be useful for handshaking of remote applications. Environment variables may include a list of invitees, or other information pertaining to the activity, the application supporting the activity, and the contacts invited to participate in the activity. Once those variables are set at block 318 they may be read by the application 280 at block 320. The application may then use a function call from the Invitation API 282 at block 322 to send the invitation. If, however, a contact has multiple points of presence, the Invitation API 282 may send the invitation to all endpoints for which the invitee is associated.
Notice that, in the alternative, if the computing application 352 is to perform the invitation in lieu of the messenger, control passes from the computing application 352 to block 354 where the user entity may select a contact with which to perform a collaborative activity.
An invitation function call from the Invitation API 282 may require sending parameters derived from the calling application, whether the calling application is the messenger or the application supporting the activity. For example, the sending parameters may include the receiving name or names, the receiving contact endpoint (e.g., an IP address and port), activity information, and a function call handle, to name a few. The Communication System 260 may determine whether a particular endpoint for a contact name is known at block 324. If unknown, block 326 may use the Communication System 260 to determine a corresponding IP address and port for the contact, and then establish a connection with that endpoint at block 328. The Communication System 260 may employ PNRP, or similar, to resolve such endpoint credentials without a server. The activity information may also include a globally unique identifier (GUID) to identify an appropriate application to the invitee (recipient) that may support the desired activity. The activity information may also include an invitation message (e.g., “Let's talk about the TPS report now.”) and other information to support various requirements of any particular activity. The handle may allow the function call to receive event information after the invitation is sent to an invitee. Such a handle is particularly useful for asynchronous function calls, however the function calls employed by the Invitation API 282 may also be synchronous, in which case a response is promptly received, or the function call times out. Additionally, another handle may identify the invitation instance so that a cancellation function call may correctly identify a specific invitation to cancel. Generally speaking, upon the user making the function call to send an invitation, an invitation session is created having a corresponding GUID. This GUID may be used to identify responses received as a result of this particular invitation. The Invitation API may serialize the invitation in XML (or other) format before sending to the invitee via the Communication System 260.
However, if the activity is supported by the listener endpoint, then the invitee may acknowledge the invitation, perhaps via a dialog box, by accepting, rejecting, or ignoring 410. Again, a decline message may be sent at block 408 in which the message may further describe potential reasons for the decline (e.g., activity is not supported at this endpoint, user did not allow the activity, etc.). The response may also be sent automatically by the invitee through a default setting (e.g., always reject invitations from Bob to play Halo®). For example, the invitee may accept all invitations by default, reject all invitations by default, or ignore all invitations by default. Additionally, the invitee may have a default setting of accept, reject or ignore based on the specific identity of the inviter. For example, the invitee may choose to accept all invitations by default if the inviter is a buddy, reject all invitations by default if the inviter is unknown (not in the invitee's contact store), or ignore an invitation by default if the inviter is an in-law. Similar to block 318 in
If the invitee's endpoint is running the messenger application, then the messenger application may already have appropriate environment variables. As such, blocks 426 through 428 accomplish receipt of the invitation and initiation of the collaborative activity. Similarly, blocks 456 through 466 may execute if the invitee already happens to have the application running that supports the collaborative activity. In such a case, the method does not need to query the invitee's endpoint for the application supporting the collaborative activity because it is already running, but the invitee may still choose to accept, reject, or ignore at block 460.
Returning briefly to block 310 of
A user entity may call, via the application 280, a capability query function to learn about application capabilities when the GUID is known. However, the user entity may first call a capability enumeration function to obtain a list of all capabilities currently registered at an endpoint, including the endpoint of the user entity. The user entity may then select one capability from the enumerated list and call the capability query function for more specific capability information supported by that particular application.
The following exemplary scenario illustrates Invitation API functionality. A user entity named Toby has friends named Bob and Alice in his contacts list. Bob and Alice have each allowed publication of their presence information, and Toby notices that Bob is online and has the game Halo® installed. Toby selects Bob from his contact list and sends an invitation to Bob containing a request to play Halo®. The Invitation API 282 determines that no endpoint connection is currently available and, consequently, employs the Communication Module 260 which may use PNRP to resolve an endpoint from Bob's contact information in Toby's contact store. When such endpoint is determined, the Communication Module 260 may optionally authenticate a connection via the Authentication System 270 between Bob and Toby and then send the invitation. Assuming Bob has his Messenger application running, it receives the invitation and the Capabilities API 284 is called to verify that Halo® is supported on Bob's computer. If it is supported, the Invitation API 282 presents Toby with an option (via a pop-up user interface) to “accept,” “reject,” or “ignore” the invitation. Bob accepts, the Halo® application is launched, and an “accept” message is returned to the invitor (Toby).
Although the forgoing text sets forth a detailed description of numerous different embodiments, it should be understood that the scope of the patent is defined by the words of the claims set forth at the end of this patent. The detailed description is to be construed as exemplary only and does not describe every possible embodiment because describing every possible embodiment would be impractical, if not impossible. Numerous alternative embodiments could be implemented, using either current technology or technology developed after the filing date of this patent, which would still fall within the scope of the claims.
Thus, many modifications and variations may be made in the techniques and structures described and illustrated herein without departing from the spirit and scope of the present claims. Accordingly, it should be understood that the methods and apparatus described herein are illustrative only and are not limiting upon the scope of the claims.
Manion, Todd R., Gupta, Rohit, Thaler, David G., Anirudh, Anirudh, Rao, Ravi, Weisberg, Tomer, Flannery, Eliot John, Parks, III, Upshur Warren, Tao, Kevin R., Classen, Andre R.
Patent | Priority | Assignee | Title |
10031724, | Jul 08 2015 | Microsoft Technology Licensing, LLC | Application operation responsive to object spatial status |
10198252, | Jul 02 2015 | Microsoft Technology Licensing, LLC | Transformation chain application splitting |
10198405, | Jul 08 2015 | Microsoft Technology Licensing, LLC | Rule-based layout of changing information |
10261985, | Jul 02 2015 | Microsoft Technology Licensing, LLC | Output rendering in dynamic redefining application |
10277582, | Aug 27 2015 | Microsoft Technology Licensing, LLC | Application service architecture |
10915584, | Sep 22 2015 | DROPBOX, INC | Event-related document generation |
11328096, | Apr 30 2019 | JFrog, Ltd. | Data bundle generation and deployment |
11340894, | Apr 30 2019 | JFrog, Ltd. | Data file partition and replication |
11386233, | Apr 30 2019 | JFrog, Ltd. | Data bundle generation and deployment |
11502851, | Jul 19 2019 | JFrog Ltd. | Software release verification |
11533331, | Jul 19 2019 | JFrog Ltd. | Software release tracking and logging |
11695829, | Jan 09 2020 | JFROG LTD | Peer-to-peer (P2P) downloading |
11726777, | Apr 30 2019 | JFrog, Ltd. | Data file partition and replication |
11860680, | Nov 24 2020 | JFROG LTD | Software pipeline and release validation |
11886390, | Apr 30 2019 | JFrog Ltd. | Data file partition and replication |
11909890, | Jul 19 2019 | JFrog Ltd. | Software release verification |
11921902, | Apr 30 2019 | JFrog Ltd. | Data bundle generation and deployment |
12061889, | Oct 29 2021 | JFROG LTD | Software release distribution across a hierarchical network |
12069127, | Jan 09 2020 | JFrog Ltd. | Peer-to-peer (P2P) downloading |
8762467, | Oct 25 2010 | Malikie Innovations Limited | System and method for enabling applications to communicate using a peer-to-peer (P2P) system |
9250983, | Jun 01 2012 | Malikie Innovations Limited | System and method for sharing items between electronic devices |
9658836, | Jul 02 2015 | Microsoft Technology Licensing, LLC | Automated generation of transformation chain compatible class |
9712472, | Jul 02 2015 | Microsoft Technology Licensing, LLC | Application spawning responsive to communication |
9733915, | Jul 02 2015 | Microsoft Technology Licensing, LLC | Building of compound application chain applications |
9733993, | Jul 02 2015 | Microsoft Technology Licensing, LLC | Application sharing using endpoint interface entities |
9770655, | Oct 01 2007 | Disney Enterprises, Inc. | Mesh synchronization |
9785484, | Jul 02 2015 | Microsoft Technology Licensing, LLC | Distributed application interfacing across different hardware |
9860145, | Jul 02 2015 | Microsoft Technology Licensing, LLC | Recording of inter-application data flow |
9979679, | Oct 25 2010 | Malikie Innovations Limited | System and method for enabling applications to communicate using a peer-to-peer (P2P) system |
ER9207, |
Patent | Priority | Assignee | Title |
4874963, | Feb 11 1988 | TTI Inventions A LLC | Neuromorphic learning networks |
5293457, | May 15 1989 | Mitsubishi Denki Kabushiki Kaisha | Neural network integrated circuit device having self-organizing function |
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 |
5706462, | Feb 23 1996 | Microsoft Technology Licensing, LLC | Self optimizing font width cache |
5712914, | Sep 29 1995 | Intel Corporation | Digital certificates containing multimedia data extensions |
5748736, | Jun 14 1996 | System and method for secure group communications via multicast or broadcast | |
5761421, | Mar 25 1996 | Oracle America, Inc | System and method for secure peer-to-peer communication between downloaded programs |
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 |
5905884, | Jun 17 1992 | Microsoft Technology Licensing, LLC | Method and system for registering and retrieving data formats for objects using a persistent registry |
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 |
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 |
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 |
6148383, | Jul 09 1998 | International Business Machines Corporation | Storage system employing universal timer for peer-to-peer asynchronous maintenance of consistent mirrored storage |
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 |
6189034, | May 08 1996 | Apple Inc | Method and apparatus for dynamic launching of a teleconferencing application upon receipt of a call |
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 |
6219706, | Oct 16 1998 | Cisco Technology, Inc. | Access control for networks |
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 |
6560636, | Jul 16 1997 | Microsoft Technology Licensing, LLC | Methods for performing client-hosted application sessions in distributed processing systems |
6564261, | May 10 1999 | Telefonaktiebolaget LM Ericsson | Distributed system to intelligently establish sessions between anonymous users over various networks |
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 |
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 |
6704293, | Dec 06 1999 | Telefonaktiebolaget LM Ericsson | Broadcast as a triggering mechanism for route discovery in ad-hoc networks |
6714966, | Jul 31 2000 | PH MADISON FUNDING LLC | Information delivery service |
6721890, | May 04 1999 | Microsoft Technology Licensing, LLC | Application specific distributed firewall |
6725281, | Jun 11 1999 | Rovi Technologies Corporation | Synchronization of controlled device state using state table and eventing in data-driven remote device control model |
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 |
6779004, | Jun 11 1999 | Rovi Technologies Corporation | Auto-configuring of peripheral on host/peripheral computing platform with peer networking-to-host/peripheral adapter for peer networking connectivity |
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 |
6892230, | Jun 11 1999 | Rovi Technologies Corporation | Dynamic self-configuration for ad hoc peer networking using mark-up language formated description messages |
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 |
6968179, | Jul 27 2000 | Microsoft Technology Licensing, LLC | Place specific buddy list services |
6981043, | Mar 27 2001 | International Business Machines Corporation | Apparatus and method for managing multiple user identities on a networked computer system |
6982982, | Oct 23 2001 | ARRIS ENTERPRISES LLC | System and method for providing a congestion optimized address resolution protocol for wireless ad-hoc networks |
6983400, | May 16 2002 | Oracle America, Inc | Distributed test harness model |
6986258, | Aug 29 2002 | Nanomix, Inc.; NANOMIX, INC | Operation of a hydrogen storage and supply system |
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 |
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 |
7197049, | Jul 22 1998 | Microsoft Technology Licensing, LLC | Method for switching protocols transparently in multi-user applications |
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 |
7340500, | Jan 22 2001 | Oracle America, Inc | Providing peer groups in a peer-to-peer environment |
7346696, | May 21 2002 | ATLASSIAN US, INC | Group access management system |
7401152, | Jan 22 2001 | Oracle America, Inc | Resource identifiers for a peer-to-peer environment |
7401153, | Jan 22 2001 | Oracle America, Inc | Peer-to-peer computing architecture |
20010003191, | |||
20010035976, | |||
20010053213, | |||
20020027569, | |||
20020059425, | |||
20020073204, | |||
20020078243, | |||
20020095399, | |||
20020097267, | |||
20020112058, | |||
20020120774, | |||
20020124081, | |||
20020140730, | |||
20020143944, | |||
20020143989, | |||
20020144149, | |||
20020154172, | |||
20020184358, | |||
20020188657, | |||
20020188881, | |||
20020194484, | |||
20030014485, | |||
20030018725, | |||
20030036941, | |||
20030037146, | |||
20030055892, | |||
20030056093, | |||
20030056094, | |||
20030088544, | |||
20030097425, | |||
20030117433, | |||
20030126027, | |||
20030131073, | |||
20030135629, | |||
20030140119, | |||
20030147386, | |||
20030174682, | |||
20030177184, | |||
20030191753, | |||
20030193961, | |||
20030196060, | |||
20030204626, | |||
20030204742, | |||
20030208583, | |||
20030217073, | |||
20030217142, | |||
20030225843, | |||
20040008652, | |||
20040019640, | |||
20040037271, | |||
20040064568, | |||
20040064693, | |||
20040078436, | |||
20040082351, | |||
20040088325, | |||
20040100953, | |||
20040111423, | |||
20040111439, | |||
20040111469, | |||
20040111515, | |||
20040111525, | |||
20040117446, | |||
20040120344, | |||
20040122898, | |||
20040122901, | |||
20040128350, | |||
20040133640, | |||
20040140730, | |||
20040141005, | |||
20040142709, | |||
20040143603, | |||
20040148333, | |||
20040148611, | |||
20040153506, | |||
20040162871, | |||
20040172452, | |||
20040172455, | |||
20040172456, | |||
20040184445, | |||
20040190549, | |||
20040193686, | |||
20040205167, | |||
20040205243, | |||
20040210639, | |||
20040228531, | |||
20040242329, | |||
20040249907, | |||
20040249953, | |||
20040249970, | |||
20040255029, | |||
20040260771, | |||
20040260800, | |||
20050004916, | |||
20050004968, | |||
20050004984, | |||
20050007962, | |||
20050009537, | |||
20050022210, | |||
20050027805, | |||
20050038856, | |||
20050066001, | |||
20050071440, | |||
20050074018, | |||
20050080768, | |||
20050080848, | |||
20050080859, | |||
20050086300, | |||
20050088980, | |||
20050091388, | |||
20050091529, | |||
20050097503, | |||
20050102245, | |||
20050102356, | |||
20050108371, | |||
20050114487, | |||
20050125529, | |||
20050125560, | |||
20050128956, | |||
20050138119, | |||
20050157659, | |||
20050165934, | |||
20050171799, | |||
20050177715, | |||
20050182967, | |||
20050198173, | |||
20050220139, | |||
20050223086, | |||
20050235038, | |||
20060010204, | |||
20060015562, | |||
20060031451, | |||
20060036692, | |||
20060112177, | |||
20060161554, | |||
20060173959, | |||
20060182113, | |||
20060190600, | |||
20060212583, | |||
20060239294, | |||
20060239295, | |||
20060242235, | |||
20060242236, | |||
20060245235, | |||
20070220156, | |||
20070233875, | |||
20070239869, | |||
20080005325, | |||
20080031460, | |||
20080137580, | |||
20090248868, | |||
EP1248441, | |||
GB2378268, | |||
JP2002197246, | |||
JP2002335269, | |||
JP2004265174, | |||
WO120450, | |||
WO2005046164, | |||
WO2006115934, | |||
WO2006116020, | |||
WO2006116056, |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Apr 22 2005 | Microsoft Corporation | (assignment on the face of the patent) | / | |||
Apr 26 2005 | CLASSEN, ANDRE R | Microsoft Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 015978 | /0548 | |
Apr 26 2005 | THALER, DAVID G | Microsoft Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 015978 | /0548 | |
Apr 26 2005 | ANIRUDH, ANIRUDH | Microsoft Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 015978 | /0548 | |
Apr 26 2005 | GUPTA, ROHIT | Microsoft Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 015978 | /0548 | |
Apr 26 2005 | PARKS, III, UPSHUR WARREN | Microsoft Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 015978 | /0548 | |
Apr 26 2005 | WEISBERG, TOMER | Microsoft Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 015978 | /0548 | |
Apr 26 2005 | FLANNERY, ELIOT JOHN | Microsoft Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 015978 | /0548 | |
Apr 26 2005 | RAO, RAVI | Microsoft Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 015978 | /0548 | |
Apr 26 2005 | MANION, TODD R | Microsoft Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 015978 | /0548 | |
Apr 27 2005 | TAO, KEVIN R | Microsoft Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 015978 | /0548 | |
Oct 14 2014 | Microsoft Corporation | Microsoft Technology Licensing, LLC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 034543 | /0001 |
Date | Maintenance Fee Events |
Mar 25 2015 | M1551: Payment of Maintenance Fee, 4th Year, Large Entity. |
Mar 28 2019 | M1552: Payment of Maintenance Fee, 8th Year, Large Entity. |
Mar 29 2023 | M1553: Payment of Maintenance Fee, 12th Year, Large Entity. |
Date | Maintenance Schedule |
Oct 11 2014 | 4 years fee payment window open |
Apr 11 2015 | 6 months grace period start (w surcharge) |
Oct 11 2015 | patent expiry (for year 4) |
Oct 11 2017 | 2 years to revive unintentionally abandoned end. (for year 4) |
Oct 11 2018 | 8 years fee payment window open |
Apr 11 2019 | 6 months grace period start (w surcharge) |
Oct 11 2019 | patent expiry (for year 8) |
Oct 11 2021 | 2 years to revive unintentionally abandoned end. (for year 8) |
Oct 11 2022 | 12 years fee payment window open |
Apr 11 2023 | 6 months grace period start (w surcharge) |
Oct 11 2023 | patent expiry (for year 12) |
Oct 11 2025 | 2 years to revive unintentionally abandoned end. (for year 12) |