Applications sometimes need to establish and manage a session between computing devices. A session is a set of interactions between computing devices that occurs over a period of time. As an example, real-time communications applications such as MICROSOFT WINDOWS MESSENGER or Voice over Internet Protocol (“VoIP”) establish sessions between communicating devices on behalf of a user. These applications may use various mechanisms to establish sessions, such as a “Session Initiation Protocol” (“SIP”). SIP is an application-layer control protocol that devices can use to discover one another and to establish, modify, and terminate sessions between devices. SIP is an Internet proposed standard. Its specification, “RFC 3261,” is available at <http://www.ietf.org/rfc/rfc3261.txt>. A specification for extensions to SIP relating to event notifications, “RFC 3265,” is available at <http://www.ietf.org/rfc/rfc3265.txt>. Both of these specifications are incorporated herein in their entirety by reference.
A SIP network comprises entities that can participate in a dialog as a client, server, or both. SIP supports four types of entities: user agent, proxy server, redirect server, and registrar. User agents initiate and terminate dialogs by exchanging messages with other SIP entities. A user agent can be a user agent client (“UAC”), which is a device that initiates SIP requests, or a user agent server (“UAS”), which is a device that receives SIP requests and responds to such requests. As examples, “IP-telephones,” personal digital assistants, and any other type of computing device may be user agents. A device can be a UAC in one dialog and a UAS in another, or may change roles during the dialog. A proxy server is a device that acts as a server to clients and a client to servers. In so doing, proxy servers intercept, interpret, or forward messages between UACs and UASs. A redirect server is a device that accepts a SIP request and generates a response directing the UAC that sent the request to contact an alternate network resource. A registrar is a server that accepts registration information from user agents and informs a location service of the received registration information.
SIP supports two message types: requests, which are sent from a UAC to a UAS, and responses, which are sent from a UAS to a UAC, when responding to a request. A SIP message is composed of three parts. The first part of a SIP message is a “request line,” which includes fields to indicate a message method (e.g., INVITE) and a Request URI that identifies the user or service to which the request is being directed. The second part of a SIP message comprises headers whose values are represented as name-value pairs. The third part of a SIP message is the message's body, which is used to describe the session to be initiated or contain data that relates to the session. Message bodies may appear in requests or responses.
User agents can communicate by sending SIP messages during a SIP dialog. A SIP dialog is a peer-to-peer relationship between two user agents that persists for some time. A dialog may be established when a UAC sends an INVITE request to a UAS and the UAS replies with a 200 OK response. A dialog is uniquely identified by a dialog identifier that includes a call identifier, a local tag, and a remote tag. User agents maintain state information for their dialogs that is needed when sending future requests of the dialog. The state information includes the dialog identifier, a local URI, a remote URI, and a route set. The route set is the list of proxy servers that need to be traversed when a request is sent to the other user agent of the dialog. When a UAS receives the INVITE request and a UAC receives an INVITE response, they each initialize their state information for the dialog.
An INVITE request may contain To, From, Call-ID, Via, Contact, and Record-Route headers. The To header identifies the logical identity of the recipient of the request. The From header identifies the logical identity of the initiator of the request. The Call-ID header uniquely identifies a group of messages and is the same for all messages in a dialog. A dialog is uniquely identified by a dialog identifier that includes the Call-ID value from the Call-ID header and a local tag and a remote tag from the From header and To header. The Via headers indicate the path taken by the request so far (e.g., a sequence of network addresses (“URIs”) of devices through which the request has transited) and the path that the corresponding response is to take. The UAC that initiates a request and each proxy server that receives a request adds a Via header containing its URI. Each proxy server that receives a response forwards the response to the device indicated by the next Via header. A Contact header contains the URI of the sender of the message to which subsequent requests of the dialog can be directly sent unless a proxy server indicates that it wants to receive subsequent messages of the dialog. The Record-Route headers of a request specify the URIs of devices (proxy servers) through which subsequent requests of the dialog are to be routed. The UAC that sends the INVITE request may add a Contact header identifying its URI. When a proxy server wants to be in the path of a dialog, it inserts a Record-Route header with its URI into the INVITE request before when forwarding the request.
When a UAS receives an INVITE request, it stores the state information for the dialog. The UAS sets the remote URI to the URI of the Contact header and sets the route set to the Record-Route headers of the request if any. Otherwise, it sets the record set to null.
When the UAS sends a response to the INVITE request, it copies the route set to the response, adds its own Contact header to the response, copies the Via headers to the response, and so on. It then forwards the response to the device identified by the last Via header. Each proxy server that receives the response forwards it to the devices identified by the next Via header.
When the UAC receives the response, it stores the Record-Route headers in reverse order if any as its route set for the dialog and sets the remote URI to the URI of the Contact header.
When either user agent sends a subsequent request of the dialog, it adds Route headers to the request corresponding to the stored route set for the dialog and stores the remote URI into the Request URI. The user agent then sends the request to the device identified by the first Route header if any, otherwise to the device identified by the Request URI. Each proxy server removes the top Route header and forwards the request to the device identified by the next Route header if any, otherwise to the device identified by the Request URI.
A common form of real-time conversation is provided by instant messaging services. An instant messaging service allows participants at endpoints to send messages and have them received within a second or two by the other participants in the conversation. The receiving participants can then send responsive messages to the other participants in a similar manner. To be effective, a real-time conversation relies on the participants' becoming aware of, reviewing, and responding to received messages very quickly. This quick response is in contrast to conventional electronic mail systems in which the recipients of electronic mail messages respond to messages at their convenience.
When an initiating participant wants to start a real-time conversation, that participant needs to know whether the intended participants are available to respond in real time to a message. If not, then communications via conventional electronic mail, voice mail, or some other mechanism may be more appropriate. For example, if the computers of the intended participants are currently powered off, then a real-time conversation may not be possible. Moreover, if their computers are currently powered on, but the intended participants are away from their computers, a real-time conversation is also not possible. The initiating participant would like to know the availability of the intended participants so that an appropriate decision on the form of communication can be made.
The availability status of an entity such as a computer system (i.e., endpoint) or a user associated with that computer system is referred to as “presence information.” Presence information identifies the current “presence state” of the user. Users make their presence information available so that other users can decide how best to communicate with them. For example, the presence information may indicate whether a user is logged on (“online”) with an instant messaging server or is logged off (“offline”). Presence information may also provide more detailed information about the availability of the user. For example, even though a user is online, that user may be away from their computer in a meeting. In such a case, the presence state may indicate “online” and “in a meeting.”
In an instant messaging context, a publishing user (“publisher”) may provide their presence information to a presence server that then provides the presence information to subscribing users (“subscribers”). Thus, a presence server may use a subscriber/publisher model to provide the presence information for the users of the presence service. Whenever the presence information of a user changes, the presence server is notified of the change by that user's computer system and in turn notifies the subscribing users of the change. A subscribing user can then decide whether to initiate an instant messaging conversation based on the presence information of the intended participants. For example, if the presence information indicates that a publishing user is currently in a conference telephone call, then the subscribing user may decide to send an instant message, rather than place a telephone call, to the publishing user. If the subscribing user, however, needs to call and speak with the publishing user, the subscribing user needs to monitor the presence information of the publishing user to know when the call can be placed. When the subscribing user notices that the publishing user's presence information indicates that the telephone conference has been concluded, the subscribing user can then place the telephone call.
When a presence server uses the SIP protocol, it needs to maintain route information for the subscribers so that it can route request messages of a SIP dialog along the same path as the subscribe request message, but in the reverse direction. As a result, a presence server may store for each publisher the route information for each subscriber of that publisher's presence information. Since a presence server can support thousands of publishers and subscribers, the presence server may be required to store a vast amount of route information. It would be desirable to have a technique that would lower the storage requirements of a presence server without requiring modifying a presence server and that would be interoperable with the existing SIP servers, such as proxy servers and registrars.
A method and system in a proxy node of a communication network for proxying messages that are being routed between source and destination endpoints during a dialog. The communication system receives a request message sent from a source endpoint to a destination endpoint. The request message includes route information that identifies a path of nodes through which a request message from the destination endpoint to the source endpoint is to travel after arriving at the proxy node. Upon receiving a request message, the proxy node may generate a mapping of the dialog to the route information. The proxy node then forwards the request message with only its route information to the destination endpoint, removing the stored route information. When the destination endpoint receives the request message, the message only includes route information for the proxy node that stored the route information and any intermediary proxy nodes between that proxy node and the destination endpoint. Thus, the destination endpoint only needs to store the route information relating to that proxy node and the intermediary proxy nodes if any, rather than for all the proxy nodes. When the proxy node receives a request message of the dialog sent from the destination endpoint to the source endpoint, it can add the stored route information to the request message so that the request message can travel along the same route as the original request message to the source endpoint.
This Summary is provided to introduce a selection of concepts in a simplified form that are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used as an aid in determining the scope of the claimed subject matter.
A method and system in a proxy node of a communication network for proxying messages that are being routed between source and destination endpoints during a dialog. In one embodiment, the communication system receives a request message sent from a source endpoint to a destination endpoint. The request message includes route information that identifies a path of nodes through which a request message of the dialog sent from the destination endpoint to the source endpoint is to travel after arriving at the proxy node. For example, if the communication system uses the Session Initiation Protocol (“SIP”), then the proxy node may implement a proxy server and the source and destination endpoints may implement user agents. Upon receiving a request message, the proxy node may generate a mapping of the dialog to the route information. When SIP is used, the route information includes the information of the Record-Route header. The proxy node then forwards the request message with only its route information to the destination endpoint possibly via intermediary proxy nodes. When the destination endpoint receives the request message, the message only includes route information for that proxy node and intermediary proxy nodes between that proxy node and the destination endpoint. When the proxy node receives a request message of the dialog sent from the destination endpoint to the source endpoint, it can add the stored route information to the request message so that the request message can travel along the same route as the original request message to the source endpoint. For example, when SIP is used, the proxy node adds a Route header for each Record-Route header of the original request message. Thus, the destination endpoint only needs to store the route information relating to that proxy node and intermediary proxy nodes if any. If the destination endpoint is a presence server, then the storage requirements for the route information of the presence server can be reduced. Moreover, since the SIP message that is modified by the proxy node complies with SIP, the proxy node is compatible with nodes that comply with SIP.
In one embodiment, the communication system is implemented on a proxy node that includes a registration service. For example, the proxy node may include a SIP proxy server and a SIP registrar. A SIP registrar maintains a mapping of users to endpoints that includes route information for the path between the proxy node and the endpoint. The SIP registrar maintains the route information so that it can include the route information in request messages sent to the endpoints. When the SIP proxy server is co-located with the SIP registrar, the SIP proxy can take advantage of the route information maintained by the SIP registrar. In particular, when the SIP proxy server receives a request message, it can check the information of the SIP registrar to determine whether the information for the source endpoint is stored. If so, the SIP proxy server does not need to store the route information for that source endpoint. When a request message destined for the source endpoint is received by the SIP proxy server, it retrieves the route information for the source endpoint from the information of the SIP registrar. The SIP proxy server then adds the route information to the request message and then forwards the message. In this way, the communication system can avoid storing redundant route information.
In one embodiment, a proxy node that includes a registration server is the last proxy node in the path from the endpoint of the user to a presence server. This characteristic of the path is possible in a communication network in which a registration server can determine the location of the presence servers. The aspects of the path storage system implemented on the presence server can take advantage of this characteristic when the registration server and the presence server are within the same domain. In such a case, the presence server can detect that the registration server is within the same domain and not store the route information. When the presence server sends a request message, it can access the registration database to find the path from the registration server to the endpoint. The presence server can add the route information derived from the path to the message. In such a case, the presence server can avoid storing route information of a message and instead rely upon the registration database.
In one embodiment, an access point for a domain maintains a mapping of other domains to their access points. The mapping is used by the access point to route messages to endpoints in other domains. When the access point node includes a proxy server, the proxy server can take advantage of the access point mapping to reduce the route information that needs to be stored. When the proxy server receives a message from an endpoint in another domain, it need not store the route information for the access point of the other domain. When the proxy server receives a request message that is to be sent to another domain, it can use the domain of the source endpoint to retrieve information to generate a portion of the route information. In this way, when a proxy server is installed on the same node as an access point, the proxy server can avoid storing redundant portions of the route records that are already stored by the access point.
The computing device on which the communication system is implemented may include a central processing unit, memory, input devices (e.g., keyboard and pointing devices), output devices (e.g., display devices), and storage devices (e.g., disk drives). The memory and storage devices are computer-readable media that may contain instructions that implement the communication system. In addition, the data structures and message structures may be stored or transmitted via a data transmission medium, such as a signal on a communications link. Various communication links may be used, such as the Internet, a local area network, a wide area network, a point-to-point dial-up connection, a cell phone network, and so on.
Embodiments of the communication system may be implemented in various operating environments that include personal computers, server computers, hand-held or laptop devices, multiprocessor systems, microprocessor-based systems, programmable consumer electronics, digital cameras, network PCs, minicomputers, mainframe computers, distributed computing environments that include any of the above systems or devices, and so on. The computer systems may be cell phones, personal digital assistants, smart phones, personal computers, programmable consumer electronics, digital cameras, and so on.
The communication system may be described in the general context of computer-executable instructions, such as program modules, executed by one or more computers or other devices. Generally, program modules include routines, programs, objects, components, data structures, and so on that perform particular tasks or implement particular abstract data types. Typically, the functionality of the program modules may be combined or distributed as desired in various embodiments.
From the foregoing, it will be appreciated that specific embodiments of the communication system have been described herein for purposes of illustration, but that various modifications may be made without deviating from the spirit and scope of the invention. Accordingly, the invention is not limited except as by the appended claims.
This application claims the benefit of U.S. Provisional Application No. 60/608,302, entitled “Method and System for Storing Route Information,” filed on Sep. 9, 2004, which is hereby incorporated by reference.
Number | Date | Country | |
---|---|---|---|
60608302 | Sep 2004 | US |