This application relates generally to computer services, and more specifically to accessing network services.
Universal Description, Discovery and Integration (UDDI) provides a protocol for providing a requestor of a service location with one or more service locations. A service location is an address, text string, or data that identifies or locates a service. A service location may include one or more of a network address, e.g., an Internet Protocol (IP) address of 122.233.22.1, a domain name such as www.uspto.gov, a port number, e.g., 2343, a path name such as /bookinventory/scientific, a network protocol, and an email address. One example of a service location is http://www.uspto.gov:2243/bookinventory/scientific. Another example of a service location is scientificbooks@uspto.gov. A Uniform Resource Identifier (URI) may qualify as a service location.
In the UDDI model, service locations are published in a UDDI registry or database. Additionally, information about the service, such as which protocols the service uses may also be placed in the UDDI registry.
In the UDDI model, a client requests a location of a service from a UDDI server. The server then queries the UDDI registry to map the client request to a service location. Then, the server returns a service location to the client. Typically, the client then uses the service location to access the service.
In the following detailed description of exemplary embodiments of the invention, reference is made to the accompanied drawings, which form a part hereof, and which are shown by way of illustration, specific exemplary embodiments of which the invention may be practiced. These embodiments are described in sufficient detail to enable those skilled in the art to practice the invention, and it is to be understood that other embodiments can be utilized, and other changes can be made, without departing from the spirit or scope of the present invention. The following detailed description is, therefore, not to be taken in a limiting sense, and the scope of the present invention is defined by the appended claims.
Throughout the specification and claims, the following terms take the meanings explicitly associated herein, unless the context clearly dictates otherwise.
The term “or” is an inclusive “or” operator, and is equivalent to the term “and/or”, unless the context clearly dictates otherwise.
The term “based on” is not exclusive and allows for being based on additional factors not described, unless the context clearly dictates otherwise.
The term “network” includes any method or medium for transmitting information from one device to another, unless the context clearly dictates otherwise. A network may interconnect devices that are relatively local to each other (sometimes referred to as a local area network), devices that are relatively spread out with respect to each other (sometimes referred to as a wide area network), or some combination thereof. A network may include wired or wireless communication links. A widely recognized network is the Internet which connects millions of devices around the world.
The term “Web service” describes specific business functionality exposed by an organization or person, usually through an Internet connection, for the purpose of providing a way for another organization, person, or software program to use the service. Web services may be used for electronic commerce. For example, one company may call another's service to send a purchase order directly via an Internet connection. Another example is a service that calculates the cost of shipping a package of a certain size or weight a specified number of miles via a specific carrier. A service can be exposed in a network other than the Internet. Throughout this document, service and Web service are used interchangeably.
As illustrated in
The mass memory generally includes random access memory (“RAM”) 106, read-only memory (“ROM”) 114, and one or more permanent mass storage devices, such as hard disk drive 108. The mass memory stores operating system 116 for controlling the operation of network device 100. The operating system 116 may comprise an operating system such as UNIX®, LINUX®, or Windows®.
In one embodiment, the mass memory stores program code and data for implementing a load balancer 118, and program code and data for implementing a persistence engine 120. The mass memory can also store additional program code 124 and data for performing the functions of network device 100. The mass memory can further include one or more user programs 126 for controlling the network device 100. In particular, in accordance with one embodiment of the present invention, at least one of the user programs 126 interacts with, provides data to, receives data from, and controls the load balancer 118 and the persistence engine 120 which maintains connections between clients and servers.
In one embodiment, the network device 100 includes one or more Application Specific Integrated Circuit (ASIC) chips 130 connected to the bus 104. The ASIC chip 130 includes logic that performs some of the functions of network device 100. For example, in one embodiment, the ASIC chip 130 performs a number of packet processing functions, to process incoming packets. In one embodiment, the ASIC chip 130 includes the persistence engine 120, or a portion thereof. In one embodiment, the network device 100 includes one or more field-programmable gate arrays (FPGA) (not shown), instead of, or in addition to, the ASIC chip 130. A number of functions of the network device can be performed by the ASIC chip 130, by an FPGA, by the CPU 102 with the logic of program code stored in mass memory, or by any combination of the ASIC chip, the FPGA, and the CPU.
In one embodiment, the network device 100 includes an SSL proxy (not shown) that performs cryptographic operations. In one embodiment, the SSL proxy is a separate network device from the traffic manager. In one embodiment, a separate network device performs the functions of the persistence engine 120.
Computer storage media can include 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. Examples of computer storage media include RAM 106, ROM 114, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD) or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium that can store the information and that can be accessed by a computing device.
Network device 100 can also include an input/output interface (not shown) for communicating with external devices or users.
Network device 100 can be implemented as one or more “blades” where the term “blade” refers to one of multiple electronic circuit boards or cards that are installed in a hardware chassis with a backplane. An exemplary blade can include one or more processors, volatile and non-volatile memory, interfaces suitable for communicating information to and from the blade, and other components for enabling the operation of one or more applications. A blade can also include a specialized interface for the backplane and other interfaces, such as a USB port, FIREWIRE port, serial port, RF interface, IR interface, Ethernet interface, IDE controller, and the like. An application running on a blade can employ any of these interfaces to communicate information to other applications running on other blades or devices coupled to the blade server. Network device 100 can also be implemented as a combination of blades and additional components in chassis.
When operating as a traffic manager, network device 100 typically includes one or more network interfaces and performs one or more of the operations of routing, translating, and switching packets. A traffic manager having a single network connection is also within the scope of the present invention.
In one example of the invention, network device 100 is a load-balancing traffic manager. In this example, the traffic manager includes load-balancing and control logic that can be implemented in software, hardware, or a combination of software and hardware.
The BIG-IP® Traffic Manager, by F5 Networks of Seattle, Wash., is an example of a traffic manager that can be used to perform embodiments of the invention. Various functions of the BIG-IP Traffic Manager are disclosed in the BIG-IP Reference Guide, version 4.5.
Resolver 210 is coupled to DNS server 215, service database 220, and server 205. Client 225 is coupled to server 205, target service 230, and DNS server 216. Each coupling between two devices may be, for example, through a local area network (LAN), wide area network (WAN), telephone network, the Internet, some other network, or some combination thereof.
Server 205 is a computing device that receives requests from client 225. Server 205 DNS servers 215-216, resolver 210, service database 220, and target service 230 may each be implemented on or by any device capable of executing instructions. Such devices may include, for example, computers, network appliances, multiprocessor systems, microprocessor-based or programmable consumer electronics, network PCs, cell phones, smart phones, pagers, radio frequency (RF) devices, infrared (IR) devices, CBs, personal digital assistants (PDAs), POCKET PCs, wearable computers, integrated devices combining one or more of the preceding devices, and the like. Network device 100 of
When receiving a request for a service location, server 205 may receive information from client 225 such as the service requested, policies, client 225's address, geography, location, priority, digital identification, preferences, security clearance, and characteristics. Client preferences may include attributes of the service or delivery of the service. These attributes might include, for example, cost of service, speed of service, quality of service (QoS), response time, freshness of data on service, reliability of service, bandwidth, and latency. Generally, client-preferences are specified by the client, an application on the client, or a user utilizing the client. Client preferences may be stored on the client and transmitted when requesting a service location or they may be stored on a server. When stored on a server, a client address or ID may be used to access the client preferences. Client preferences may include a weighting assigned to each of a number of attributes.
Characteristics of client 225 include client hardware, software, network configurations, and client system capacities. Client characteristics may include, for example, client 225's operating system, brand, e.g., Compaq, Dell, etc., language, CPU, compression capabilities, bandwidth capabilities, or other characteristics of client 225. Client characteristics can also include data describing a user, organization, or other entity operating, owning, or otherwise associated with client 225. Server 205 may also receive a trace route of packets sent from client 225 that indicates a route over which the packets traveled to reach server 205.
In addition to receiving information about a client, server 205 may calculate various pieces of information about client 225 using client 225's address or digital identification. For example, server 205 may include a lookup database (not shown) that matches a client's address or identification with a particular physical location or geography. In addition, server 205 may include a policies database that includes rules that determine which service locations will be returned to a client based on one or more of a client's priority, security clearance, client preferences, and characteristics.
Policies may be established which dictate which service locations a client may be provided. In generally, a policy is a rule that applies to one or more clients. A policy is typically established by an administrator or automatically. In one embodiment, the resolver uses a policy that relates to the available capacity of a server to determine whether a client is provided a service location on the server. Available capacity can be measured with respect to CPU utilization, available memory, bandwidth, response time, or any other measure of capacity. For example, some clients requesting a service may be given service locations to servers with less than 20% CPU utilization. Based on a policy that applies to them, some clients may be referred exclusively to some servers to provide better response time, bandwidth, or otherwise. Some clients may be given service locations based on a policy that accounts for cost of service, QoS, speed, traffic, and response time. For example, a corporate client may pay to have a policy that refers the corporate client to service locations with a certain QoS, speed, traffic, and response time. It will be recognized that a policy could be applied based on an address of the client, an identification of the client, such as a digital ID, or otherwise. Furthermore, one or more policies could apply to a single client or group of clients.
Resolver 210 is a device or process that receives a set of service locations and optional client information and returns a set of service locations that are based on policy, the client information, or the received set of service locations. In the embodiment of the invention shown in
Resolver 210 may also check the health at service locations. Resolver 210 may do this proactively by polling service locations or passively by listening for status reports from service locations. Health checks can be performed in response to receiving a request or independent of receiving a request. Health checks performed in response to receiving a request can be used to resolve subsequent requests. Resolver 210 can check the health of services at one or more service locations by calling a method on one or more servers running the services at the service locations. The method could returns various statistics, such as CPU utilization, memory usage, hard disk space available, processes active, bandwidth available, usage, etc. Resolver 210 might check the health of services at one or more service locations by calling a network device that controls access to the one or more service locations, such as a load balancer or traffic manager. The load balancer or traffic manager could then query the service locations or return health based on previous information collected. It will be recognized that health could be collected in many other ways without departing from the spirit or scope of the present invention.
After receiving information about a request and client, resolver 210 determines one or more service locations that match the client's criteria. Resolver 210 may consult service database 220 to look up the appropriate service locations. Resolver 210 may also consult DNS server 215 to resolve DNS names into addresses or to determine the health of services running at service locations. For each service location, resolver 210 may return a network address, such as 122.233.22.1, or resolver 210 may return a domain name, such as www.uspto.gov. When Server 205 returns locations containing domain names, the client 225 can use DNS server 216 or a similar network address resolution facility, to convert the string into a physical network address. It will be recognized that returning a network address may alleviate client 225 from performing its own DNS lookup (such as by consulting DNS server 216) and may give resolver 210 more control over to which network address client 225 subsequently requests a service. For example, if a domain name mapped to more than one network address, by returning a network address, instead of a domain name, resolver 210 could select a specific network address for the domain name instead of relying on another DNS server that client 225 may consult, such as DNS server 216, to determine a network address.
DNS servers 215-216 typically resolve domain names into network addresses. To do so, a DNS server that receives a domain name converts a string representing the domain name into a network address. As discussed previously, however, a DNS server, such as DNS server 215, may have extended capabilities in checking the health of servers. One such product capable of checking the health of servers is 3-DNS® produced by F5 Networks of Seattle, Wash.
Although shown separate from resolver 210, service database 220 may reside on the same device as resolver 210. Service database 220 is used to map a service location to another or the same service location. Service database 220 may comprise a UDDI registry.
Client 225 is any device or process that requests a service and uses the service. Client 225 may be implemented using, for example, one or more of the devices enumerated for server 205. In some embodiments of the invention, client 225 is a server that is requesting service locations on behalf of itself or another client. After receiving a list of service locations from server 205, typically, client 225 then selects one of the service locations from the list and accesses the service at the service location.
Client 225 is coupled to target service 230 and server 205. Server 205 includes resolver 210 and is coupled to service database 220 and DNS server 215. Each coupling between two devices may be, for example, through a local area network (LAN), wide area network (WAN), telephone network, the Internet, some other network, or some combination thereof.
In part,
Load balancer 425 is coupled to and provides access to servers 430-432. Load balancer 425 is also coupled to health monitor 420 and client 225. UDDI server 405 is coupled to client 225, UDDI registry 410, and resolver 415. Each coupling between two devices may be, for example, through a local area network (LAN), wide area network (WAN), telephone network, the Internet, some other network, or some combination thereof.
UDDI server 405 is a server that receives requests for service locations from client 225. UDDI server 405 receives a request for a service location and utilizes UDDI registry 410 to map the request to one or more service locations. For example, client 225 might make a request for a book publisher service. As attributes of the request, client 225 may request technical books in English or Spanish. This request is received by UDDI server 405. UDDI server 405 passes the information to UDDI registry 410 which returns one or more service locations.
Although shown separate from UDDI server 405, UDDI registry 410 is typically implemented as a part of UDDI server 405. UDDI registry 410 typically contains entries that map a request for a service location to one or more service locations. In response to a request for a service that deals with technical books in English or Spanish, UDDI registry 410 may return a list including details about qualifying services. UDDI registry 410 may, for example, return a company name, a contact, and a network address for each qualifying service.
After receiving the list of qualifying services, the UDDI server passes the list, the client's address, and any other information received from the client to resolver 415. For example, if UDDI registry 410 returned a Uniform Resource Locator (URL), e.g. http://www.scientificbooks.uspto.gov, then this URL would be passed to resolver 415 together with the other information specified above.
After receiving the list of qualifying services together with the client's address and any other information received from the client, resolver 415 determines which service location(s) are to be returned to UDDI server 405. Resolver 415 may consult health monitor 420 in determining which service location(s) are returned to UDDI server 405. When queried with a list of service locations, health monitor 420 may return a health report of each of the service locations listed. Resolver 415 may cache the health of service locations for use until an expiration time or may query health monitor 420 each time resolver 415 receives service locations from UDDI server 405. The health report returned by health monitor 420 may score each service location based on various factors such as CPU utilization, bandwidth consumed in servicing current requests, number of current requests, whether the service is up and running, or any other factors indicative of the health of the service. Resolver 415 may then use the scores for each service location together with client preferences and policies in determining which service locations to return to UDDI server 405. Resolver 415 may also return scores and rankings that correspond to the service locations to UDDI server 405.
When more than one service locations are to be returned to UDDI server 405, resolver 415 may return a list ordered by any of many characteristics, such as cost of service, QoS, speed, smallest amount of traffic, fastest response time, or any other characteristic desired or requested.
Health monitor 420 may query load balancer 425 for the health of services found on servers 430-432. In addition, or alternatively, health monitor 420 may query each of the servers individually to determine the health of services found on the servers. When resolver 415 consults health monitor 420 for the health of services at particular service locations, health monitor 420 may indicate that certain service locations are not functioning. Resolver 415 may use this information in determining which service locations to return to UDDI server 405.
In some embodiments of the invention, health monitor 420 is controlled by or integrated with resolver 415.
After receiving a list of service locations, client 225 may determine which service location to use access the service at the service location.
Load balancer 425 directs traffic to and from servers 430-432. Load balancer 425 may use any load balancing or traffic management method desired or needed to direct traffic to servers 430-432. Load balancer 425 may have facilities for checking the health of services on servers 430-432. Load balancer 425 may also have facilities for reporting the health of services on servers 430-432 to another device such as health monitor 420. An exemplary device that may be used to implement load balancer 425 is network device 100 of
Servers 430-432 may be implemented by any of the devices described in conjunction with server 205 of
Although not shown in
Furthermore, in some embodiments of the invention, target service 230 of
At block 510, the client requests a service location. As discussed above, the client request can include client data, such as client address, geography, location, priority, digital identification, preferences, security clearance, policies, and client characteristics. For example, referring to
At block 515, request is mapped to one or more service locations. In an embodiment of the invention, referring to
At block 520, the resolver receives the list of service locations and accumulates data in preparation of producing another list of service locations that may be the same or different from the list received, depending on the client, health of services, policies, or other criteria. As used in
At a block 522, a score is determined for each service location, based on the accumulated data and policies. The service locations are ranked, based on their corresponding scores. A set of service locations is selected for returning to the service requestor. The determination of which service locations are selected can be based on a policy decision. For example, one policy can be to return a predetermined number of service locations. Another exemplary policy can be to return only service locations that have a corresponding score above a specified threshold value. Yet another exemplary policy can vary the number of returned service locations based on specific factors, such as reliability of the service locations, amount of network traffic, or other specified criteria.
The determination of scores corresponding to each service location can be based on any one or more of the policies employed, the accumulated data, client preferences, configured parameters, or aggregate data. For example, when responding to a request that specifies N different criteria be used in selecting locations, the following formula can be used:
where Wn is a weighting factor corresponding to criteria n, and Dn is a value representing the data for criteria n on a scale from 0 to 100. The maximum score using this formula is
A score corresponding to a service location may be a single value (as described above) or a vector value. A vector value can include one or more criteria and values associated with the criteria. For example, criteria may include bandwidth available and CPU utilization. A score can include a vector that indicates the bandwidth available and the CPU utilization at a service location. It will be recognized that a score that includes a vector value allows for more sophisticated post-processing by an intermediate device, as an intermediate device can apply its own selection algorithm to the values included in the vector. Similarly, a requestor that can receive a score may also apply its own selection algorithm to the values included in the vector. Furthermore, a requestor may have preferences that is does not sent in a request. The requestor may do this for privacy reasons or because the resolver does not support the preferences. After receiving a score, the requestor may apply its own selection algorithm to the values included in the returned vector.
A requestor is any device that requests a list of service locations. A requestor may request service locations for itself or on behalf of another device. A requestor is not limited to a client that will later access a service executing at the service location. In one embodiment of the invention, the requestor is a client that later accesses a service executing at the service location. In other embodiments, the requestor is a UDDI server, proxy server, or some other intermediate device that is capable of utilizing scores. A requestor may be capable of receiving a single valued score or a vector valued score.
The algorithm for determining scores can include additional calculations, such as threshold values for one or more criteria. For example, a specific criteria might have a threshold value, such that any service location having a data value below this threshold is given a score of zero, regardless of other criteria. After block 522, processing continues at block 525.
At block 525, a list of service locations is returned to the client. In an embodiment of the invention, referring to
At block 530, processing ends. At this point, the client may select a service location and access the service at the service location. The process shown in
Returning scores corresponding to each service location allows the client and intermediary processes to further process the returned rankings of service locations.
At block 615, data is accumulated regarding the client based on the client address. For example, geography information may be accumulated about a client based on the client's address. In addition, the client address may in some cases be used as a key to index a database including client preferences and a database including policies. After block 615, processing continues at block 620.
At block 620, a determination is made as to whether to resolve based on health of services running at service locations. If so, processing continues at block 625; otherwise, processing continues at block 630.
At block 625, health data is accumulated. As described previously, health data may include various statistics about a server upon which a service is executing. These statistics may include CPU utilization, memory usage, hard disk space available, processes active, bandwidth available, and usage to name a few. The health data may have been collected previously or may be collected in response to receiving a request. After block 625, processing continues at block 630.
At block 630, a determination is made as to whether to resolve based on client policy. If so, processing continues at block 635; otherwise, processing continues at block 640.
At block 635, policies that apply to the client are accumulated. For example, a resolver may access a policies database to determine which policies apply to the requesting client. For example, a policy may indicate that a client be sent service locations on servers with less than 20% CPU utilization. After block 635, processing continues at block 640.
At block 640, a determination is made as to whether to resolve based on other criteria. Other criteria may include client preferences and client characteristics. If so, processing continues at block 645; otherwise, processing continues at block 650.
At block 645, data based on other criteria is accumulated. Other criteria may include, for example, characteristics of the client, operating system, brand of computer on which the client is running, security clearance of the client, criteria sent by the client, a trace route of packets received by the client, or any other criteria. As described earlier, such characteristics may be sent by the client or looked up by the resolver upon receipt of a request. After block 645, processing continues at block 650.
The process returns at block 650.
The root resolver 708 receives a request for a service location from client 704. The root resolver transmits the request to each of the resolvers 710-712. The root resolver can also transmit, either with the request or separately, data that it has received or determined pertaining to characteristics of the client 704, health data, and policies.
In response to receiving the transmitted request and associated data, each of the resolvers 710-712 performs operations as previously described for configurations having a single resolver. Each resolver can use all or any portion of the data it received from the root resolver. A resolver can also retrieve or determine data independently. In the illustration of
In response to receiving a list of service locations from each of the resolvers 710-712, the root resolver 708 combines the items from each list to produce a master list of service locations. The root resolver 708 may also produce its own list of service locations and combine this list with lists from other resolvers to produce the master list. The root resolver 708 then transmits the master list of service locations, along with corresponding scores for each list item, to the requesting client. It is understood that the requesting client may be server 706 acting as a client or client 704. It should also be understood that when transmitting the master list to client 704, that the master list may pass through server 706 or be transmitted directly to client 704.
The resolvers 710-712 can be logically configured in a number of ways with respect to the service locations which they provide to requestors. In one embodiment, each of the resolvers 710-712 is associated with a set of service locations that does not overlap with any set associated with any other of the other resolvers 710-712. In one embodiment, the sets of service locations associated with each resolver overlap.
The set of service locations associated with each resolver can be configured according to one or more of a number of criteria. In one configuration, a set of service locations is associated with a resolver using the physical location of the service locations as a criteria. In another configuration, a set of service locations is associated with a resolver using information that indicates the entities that control or own the service locations as criteria. A resolver can be configured to specialize in certain types of services or in services of a specified quality. Network domains and other factors can be used to assign service locations to resolvers. In one configuration, each of the resolvers 710-712 has the same associated set of service locations. For example, in some configurations, each of the resolvers 710-712 may be associated with and return service locations for services executing on servers 722-730.
Each of the resolvers 710-712 can use substantially similar algorithms or differing algorithms for determining scores of service locations. Each of the resolvers 710-712 can use identical factors or different factors for determining scores for service locations. For example, one resolver can be configured to use health factors and not use client characteristics, while a second resolver can be configured to use client characteristics and not use health factors.
The root resolver 708 can combine the lists of service locations it receives from each resolver by using the scores received from each resolver. In one embodiment, the scores are normalized, so that the combined list can be ranked based only on the received scores. In another embodiment, scores received by each resolver are multiplied by a weighting factor corresponding to the resolver. When a service location is common to more than one list, the scores can be averaged or added to obtain a final score, or manipulated in other ways.
The use of multiple resolvers can increase the overall capacity of the system. The use of multiple resolvers can also increase the availability of the system as well as the freshness of data, such as health data. Having one or more resolvers that specialize in certain factors can increase the accuracy of the system and allow the one or more resolvers to be more finely tuned to those factors.
At block 808, the root resolver receives, from zero or more other resolvers, a set of service locations and scores. At block 810, the root resolver combines all of the results optionally with a set of service locations independently determined by the root resolver and produces a combined list of service locations or scores. At block 812, the process ends. Process 802 may be performed each time multiple resolvers are used to resolve a request for a service location into one or more service locations.
In one embodiment, the returned scores corresponding to each service location include component scores, such as a score for each criteria employed. This allows intermediate resolvers, servers, or the client to further manipulate scores. For example, a root resolver might have more accurate data corresponding to a specific criteria, and use this to replace the corresponding portion of the score calculation received from another resolver. In an other application, a client might desire to not disclose certain criteria policies or data it considers confidential. The client can perform additional calculations on the received scores based on these polices or data. In one configuration, a client might employ a private root resolver, and transmit confidential information to the private root resolver. When the private root resolver invokes one or more other resolvers, the confidential information can be withheld. The root resolver can then post-process results returned from the other resolver based on the confidential information it has available. Similarly, a client or a private root resolver might desire specific enhanced processing that is not supported by the general resolvers. Including component scores provides additional capability to post-process returned scores, for use by the client.
The use of scores is not limited to scores passed between resolvers in a hierarchy or otherwise. Scores may be passed to other intermediate devices that may use the scores to perform additional processing. Scores may also be passed to a requester. In one embodiment of the invention, a server, such as UDDI server 205 of
Embodiments of the invention may use a synchronous messaging system or an asynchronous messaging system to communicate a request for a list of service locations corresponding to a service and a response to the request. A synchronous messaging system is one in which a request and a response to the request are sent during a single communication session. Some exemplary synchronous messaging systems include Common Object Request Broker Architecture (CORBA), HyperText Transport Protocol (HTTP), Distributed Component Object Model (DCOM), extensible Markup Language-Remote Procedure Call (XML-RPC), Java® Remote Method Invocation (RMI), and the like. An asynchronous messaging system is one in which a request and a response to the request are not sent during a single communication session. Some exemplary asynchronous messaging systems include SMTP and Post Office Protocol (POP). It will be understood, however, that any messaging system that allows communication of a request or response may be used without departing from the spirit or scope of the present invention.
The above specification, examples, and data provide a complete description of the manufacture and use of the composition of the invention. Since many embodiments of the can be made without departing from the spirit or scope of the invention, the resides in the claims hereinafter appended.
This application is a continuation of application Ser. No. 10/431,394 filed May 6, 2003, the contents of which are incorporated herein by reference.
Number | Date | Country | |
---|---|---|---|
Parent | 10431394 | May 2003 | US |
Child | 11802669 | May 2007 | US |