WO2003069475A2 - A plug-in api for modular network transaction processing - Google Patents

A plug-in api for modular network transaction processing Download PDF

Info

Publication number
WO2003069475A2
WO2003069475A2 PCT/US2003/003611 US0303611W WO03069475A2 WO 2003069475 A2 WO2003069475 A2 WO 2003069475A2 US 0303611 W US0303611 W US 0303611W WO 03069475 A2 WO03069475 A2 WO 03069475A2
Authority
WO
WIPO (PCT)
Prior art keywords
plug
processing
modules
transaction
module
Prior art date
Application number
PCT/US2003/003611
Other languages
French (fr)
Other versions
WO2003069475A3 (en
Inventor
Jeremy S. De Bonet
Original Assignee
Idetic, Inc.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US10/342,113 external-priority patent/US7073178B2/en
Application filed by Idetic, Inc. filed Critical Idetic, Inc.
Priority to AU2003209028A priority Critical patent/AU2003209028A1/en
Publication of WO2003069475A2 publication Critical patent/WO2003069475A2/en
Publication of WO2003069475A3 publication Critical patent/WO2003069475A3/en

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/541Interprogram communication via adapters, e.g. between incompatible applications
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/14Session management
    • H04L67/141Setup of application sessions
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/14Session management
    • H04L67/143Termination or inactivation of sessions, e.g. event-controlled end of session
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/14Session management
    • H04L67/146Markers for unambiguous identification of a particular session, e.g. session cookie or URL-encoding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/563Data redirection of data network streams
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/568Storing data temporarily at an intermediate stage, e.g. caching

Definitions

  • the invention relates generally to computer and software architectures, and more particularly to systems and methods for constructing network transaction processing platforms that comprise plug- in modules which control the manner in which transactions between a client and a server are processed.
  • a vast majority of the computer systems that are currently in use are not configured strictly as stand-alone devices. In other words, they are coupled to other computers, and possibly other types of devices, through one or more networks. For example, it is typical for a personal computer set up for use at a person's home or business to be connected to other computers (e.g., web servers) via the Internet. Communications between networked computers can be handled in many different ways For example, a single computer can run multiple network programs at the same time, and each program can use any communication protocol (or protocols) that chooses. The only restriction on these programs is that only one program can bind to a specific TCP or UDP port at a time.
  • a particular program can use different protocols, a particular program can perform one or many tasks. For example, a program can perform the tasks of a content server, a content proxy, a caching proxy, a transformation proxy, an advertisement insertion proxy, a content optimization server or proxy, and so on.
  • Prior art programs for handling network communications have typically been designed to perform a single task per program.
  • Prior art programs that perform multiple tasks are actually quite rare.
  • prior art programs act as dispatchers to other programs that perform different tasks.
  • a Web server can be configured to dispatch received requests to different programs (e.g., CGI's), depending upon the actual URL that is requested.
  • Prior art programs therefore present a number of difficulties in designing a system that performs multiple tasks. For example, because prior art programs are typically designed to perform a single task, chaining these single tasks with others often involves rewriting most or all of the corresponding programs.
  • each program may have to independently provide such functionality as caching, logging, configuration, authorization, monitoring, communications, and so on.
  • the invention comprises systems and methods for processing network transactions by breaking down the transactions into several stages and performing the processing corresponding to each stage using a different plug-in module.
  • One embodiment of the invention comprises an application programming interface (API) that enables the use of individual plug-in modules to perform different stages of the processing of a transaction.
  • the API defines a series of interfaces to corresponding plug-in processing modules, where each interface corresponds to a stage of processing of a transaction and the API conveys transaction information from one plug-in module to the next, until all of the processing stages have been completed.
  • the API may be implemented, for example, in a server application that is designed to process network transactions. In one embodiment, transactions are broken down into seven stages: initializing the transaction; sending an opening statement; getting a request; logging in and obtaining authorization; generating a response; sending the response; and terminating the transaction.
  • a set of plug-in modules each one corresponding to one of the stages, is provided to handle the processing for each of the stages.
  • the plug-in modules use the API to pass transaction information from one module to the next and to thereby completely process the transaction.
  • different sets of plug-in modules can be installed to provide the needed processing, whether it be different functionality, or different protocols.
  • the software application and/or API described above are embodied in a computer-readable medium such as a floppy disk, hard disk drive, CD-ROM, DVD-ROM, RAM, ROM, DASD array, magnetic tape, optical storage device and the like.
  • the computer readable medium may comprise a RAM or other memory which forms part of a computer system.
  • the computer system would thereby be enabled to perform a method in accordance with the present disclosure and is believed to be within the scope of the appended claims. Numerous additional embodiments are also possible.
  • the various embodiments of the invention may provide a number of advantages over prior art systems and methods. For example, because many modules can run within the same program, a single port can be shared by different modules and thereby different tasks can be performed on requests to a single port.
  • the present architecture supports listening to multiple ports, each with the same or different protocols and module dispatching rules. Further, rather than dispatching requests to completely new programs, the present method allows for dynamically selecting different series of modules to process the transaction, making possible substantial overlap and reuse of functionality. Still further, changing the tasks performed by a program can be achieved by writing new modules or simply by rearranging or recombining preexisting modules. Still further, modules within the program may access common resources and make calls to functions provided by other modules (e.g., caching, logging, configuration, authorization, monitoring, communications, etc.). Thus, for example, different caching modules (which might have slightly different behaviors) can store and retrieve their content from the same cache ⁇ thus maximizing the chances of achieving a cache hit.
  • modules e.g., caching, logging, configuration, authorization, monitoring, communications, etc.
  • the number of protocols supported by the system may be rapidly increased.
  • the modular processing of the stages may also increase the ability of the system to adjust and modify the functionality that is provided in the processing of the transactions (e.g., adding new tasks).
  • the use of the API may therefore provide greater control and flexibility over the various stages of transaction processing.
  • new modules can be created by parties other than the producer of the server application and plugged into the system without the need to expose source code.
  • FIGURE 1 is a diagram illustrating some of the basic components of a network system in one embodiment.
  • FIGURE 2 is a diagram illustrating the components of an exemplary computer system in one embodiment.
  • FIGURE 3 is a diagram illustrating the modular structure of a server application in accordance with one embodiment.
  • FIGURE 4 is a diagram illustrating the structure of a server application in accordance with the prior art.
  • FIGURE 5 is a diagram illustrating the flow of data from one plug-in module to the next in the processing of a network transaction in accordance with one embodiment.
  • FIGURE 6 is a diagram illustrating the replacement of a plug-in module to the transaction processing application in accordance with one embodiment.
  • FIGURE 7 is a diagram illustrating the replacement of multiple plug-in modules to the transaction processing application in accordance with one embodiment.
  • FIGURE 8 is a diagram illustrating the processing of a network transaction using the server application of FIGURE 3.
  • FIGURE 9 is a diagram illustrating the processing of a network transaction using the prior art server application of FIGURE 4.
  • FIGURE 10 is a diagram illustrating the initialization and termination of pathways and sessions, and the processing of transactions within a session in one embodiment.
  • FIGURE 11 is a diagram illustrating the initialization and termination of pathways and sessions, and the processing of transactions within a session in one embodiment.
  • the invention comprises systems and methods for processing transactions in a server by breaking down the transaction into several stages and performing the processing corresponding to each stage using a different plug-in module that is interfaced with the server application.
  • One embodiment of the invention comprises an application programming interface (API) that enables the use of individual plug-in modules to perform different stages of the processing of a transaction.
  • the API may be implemented, for example, in a server application that is designed to process network transactions.
  • transactions are broken down into seven stages: initializing the transaction; sending an opening statement; getting a request; logging in and obtaining authorization; generating a response; sending the response; and terminating the transaction.
  • a set of plug-in modules, each one corresponding to one of the stages, is provided to handle the processing for each of the stages.
  • the plug-in modules use the API to pass transaction information from one module to the next and to thereby completely process the transaction.
  • different sets of plug-in modules can be installed to provide the needed processing, whether it be different functionality, or different protocols.
  • the various embodiments of the invention may provide a number of advantages over prior art systems and methods. For example, by creating a system that breaks down network transactions into a series of stages, and by processing each of the stages in a modular fashion, the number of protocols supported by the system can be rapidly increased. The modular processing of the stages also increases the ability of the system to adjust and modify the communication that takes place within the processing of the transactions. The use of the API therefore provides greater control and flexibility over the various stages of transaction processing. Still further, by extending the API to include plug- in functionality, new modules can be created by parties other than the producer of the server application and plugged into the system without the need to expose source code.
  • FIGURE 1 a diagram illustrating some of the basic components of a network system is shown. As depicted in this figure, the system comprises a client 12 and a server 14, each of which is interconnected to a network 16. Server 14 is configured to provide information responsive to requests from client 12 (i.e., to service the requests).
  • client 12 and server 14 comprise network transactions.
  • client 12 generates a request and transmits the request via network 16 to server 14.
  • server 14 processes the request and generates a response to the request. For example, server 14 may retrieve a web page that was requested by client 12. This response is then transmitted from server 14 to client 12 via network 16.
  • FIGURE 1 the network configuration illustrated in FIGURE 1 is intended to be exemplary rather than limiting. Other embodiments may employ alternative configurations. For example, there may be multiple clients and multiple servers that are interconnected by multiple individual networks. Alternatively, a client may be directly coupled to a server without an intervening network. Many such variations are possible.
  • client 12 may convert signals received from server 14 to a human understandable form and may convert input from a human understandable form to appropriate electronic, optical, radio-frequency, or other signals to be used by server 14.
  • server 14 may convert the signals to a human understandable form when sending a communication to the operator and may convert input from a human understandable form to appropriate electronic, optical, radio-frequency, or other signals to be used by client 12.
  • each of client 12 and server 14 is implemented in a corresponding computer system.
  • These computer systems may comprise general purpose desktop computers, laptop computers, or other types of devices capable of communicating over network 16 and processing the information communicated between them.
  • FIGURE 2 a diagram illustrating the components of an exemplary computer system is shown. The computer system illustrated in this figure may be used as a platform for either client 12 or server 14.
  • computer system 20 comprises a central processing unit (“CPU") 22, read-only memory (“ROM”) 24, random access memory (“RAM”) 26, hard disk drive (“HD”) or storage memory 28, and input/output device(s) (“I/O") 29.
  • I/O 29 can include a keyboard, monitor, printer, electronic pointing device (e.g., mouse, trackball, stylus, etc.), or the like.
  • the computer systems that provide platforms for the client and server may each have more than one CPU, ROM, RAM, HD, I/O, or other hardware components.
  • the computer illustrated in FIGURE 2 is depicted in as having one of each of the listed hardware components. It should be noted that FIGURE 2 is a simplification of an exemplary hardware configuration. Many other alternative hardware configurations are possible and known to persons of skill in the art.
  • Computer and "computer system,” as used herein, are intended to include any type of data processing system capable of performing the functions described herein.
  • Computer-readable media refers to any medium that can store program instructions that can be executed by a computer, and includes floppy disks, hard disk drives, CD-ROMs, DVD-ROMs, RAM, ROM, DASD arrays, magnetic tapes, floppy diskettes, optical storage devices and the like.
  • the different protocols that can be supported and functionalities that can be provided by different servers may result from the use of different software applications.
  • the support of different protocols and functionalities is facilitated in the present embodiment by running a modular software application on the server computer. More particularly, the software application uses an API that enables individual plug-in modules to be used to perform different stages of the processing of network transactions.
  • FIGURE 3 a diagram illustrating the structure of a server application in accordance with one embodiment is shown.
  • a network server application 40 runs on top of the operating system 30 of the server computer.
  • Network server application 40 interfaces with a plurality of plug-in modules 51-57 which perform the processing of transactions handled by the server.
  • Server application 40 interfaces with plug-in modules 51-57 via an API (not shown in FIGURE 3) that defines the interface with each module.
  • Plug-in modules 51-57 correspond to the seven stages of the transaction processing identified above (initializing the transaction; sending an opening statement; getting a request; logging in and obtaining authorization; generating a response; sending the response; and terminating the transaction). These stages will be described in more detail below.
  • FIGURE 3 stands in stark contrast to the typical structure of prior art applications, which are represented by the structure illustrated in FIGURE 4.
  • prior art applications employed a single application 100 running on the operating system 30 to provide the necessary processing. If it was necessary to change the processing (e.g., modifying the functionality or supported protocols), the entire application had to be rewritten or replaced. Using the present methodologies, the same changes can be made by replacing one or more of the plug-in modules (51-57), which requires substantially fewer resources.
  • FIGURE 5 a diagram illustrating the flow of data from one plug-in module to the next in the processing of a network transaction is shown.
  • FIGURE 5 corresponds to the structure of FIGURE 3, but includes only a portion of the structure.
  • plug-in modules 58 and 59 interface with server application 40 via API 45.
  • Each of modules 58 and 59 performs the processing for a corresponding portion of the total processing for the transaction (i.e., each performs the processing for a corresponding stage).
  • the plug-in modules in this figure are referenced by numbers 58 and 59, rather than any of 51-57 because FIGURE 5 is representative of any pair of consecutive modules in the group 51-57.
  • modules 58 and 59 may correspond to modules 51 and 52, modules 52 and 53, modules 53 and 54, and so on.
  • Plug-in module 58 receives any transaction information it requires and begins performing its stage of processing for the transaction. If module 58 corresponds to module 51, it receives this information from the client via the network. Otherwise, module 58 receives the necessary transaction information from the preceding plug-in module via API 45. When module 58 completes its stage of the processing, the resulting transaction information is conveyed to plug-in module 59 via API 45. Plug-in module 59 then performs its stage of the processing. If there are modules subsequent to module 59, the resulting transaction information is conveyed to the subsequent module via API 45. If module 59 corresponds to module 57 of FIGURE 3, processing of the transaction is complete, and the results are conveyed to the client via the network.
  • FIGURE 6 a diagram illustrating the replacement of a plug-in module to the transaction processing application is shown.
  • the application is first configured with plug-in modules 51-54, 55a, 56 and 57.
  • Module 55a corresponds to the generation of a response to a request.
  • it is only necessary to provide a new plug-in module, 55b, that provides the desired functionality and to replace the original module, 55a, with the new module, 55b.
  • FIGURE 7 an alternative module-replacement scenario is illustrated.
  • the transaction processing application is initially configured to process HTTP transactions. If it is desired to handle transactions using other protocols, this can be accomplished by replacing the HTTP modules (5 lc-57c) with modules (5 ld-57d) supporting the alternative protocol (e.g., FTP).
  • the alternative protocol e.g., FTP
  • FIGURE 7 depicts the replacement of all seven plug- in modules, it may be possible to accomplish the same purpose through replacement of fewer modules the same processing is performed in a particular stage, independent of the protocol change.
  • modules may be accomplished dynamically (i.e., while the application is executing) by making the modules available and simply instantiating a communication pathway using calls to the modules that are appropriate for the pathway (this will be addressed in more detail below).
  • portions of the methods described herein may be implemented in suitable software code that may reside within ROM 24, RAM 26, hard disk drives 28 or other computer-readable media within the system.
  • the software code may also be contained on a separable data storage device, such as a removable hard disk, or on removable computer-readable media such as a DASD array, magnetic tape, floppy diskette, optical storage device, or the like.
  • the software code may comprise lines of compiled C *"1" , Java, or other language code.
  • the various software components may reside on a single computer or on any combination of separate computers. Other configurations may also be used.
  • the functions of server 14 may be implemented in multiple computers that interact to perform the functions of the server.
  • a computer program or its software components within such code may be embodied in more than one computer-readable medium.
  • components of the software may reside on multiple computers.
  • FIGURE 8 a diagram illustrating the processing of a network transaction using the server application of FIGURE 3 is shown.
  • the processing of the transaction is depicted as block 60.
  • the processing within block 60 is broken down into seven stages represented by blocks 61-67.
  • Block 61 corresponds to the processing that is performed by plug-in module 51 (i.e., initialization of the transaction), while block 62 corresponds to the processing of plug-in module 52 (i.e., sending an opening statement), and so on.
  • plug-in module 51 i.e., initialization of the transaction
  • plug-in module 52 i.e., sending an opening statement
  • the processing of the network transactions is broken down into the seven stages of: initializing the transaction; sending an opening statement; getting a request; logging in and obtaining authorization; generating a response; sending the response; and terminating the transaction. These stages are used because processing for every network transaction includes these stages, although the sending of an opening statement may be optional.
  • the processing of a network transaction will be described below to illustrate the functions of each of the stages.
  • a pathway is a type of communication that may be employed to carry on communications between the client and a server.
  • the client and server may set up a pathway for HTTP communications, POP communications, MMS communications, SMS communications, instant messaging, file transfers (via FTP), or the like.
  • the client and server use a particular pathway for communications of a corresponding type.
  • a series of communications between the client and server using this pathway comprise a session.
  • Each individual communication between the client and server e.g., a request for a web page and the resulting service of that page) is a transaction.
  • a client and server may communicate by: initializing a pathway (71); initializing a session (72); processing a set of transactions (73-76); terminating the session (77); and then terminating the pathway (78).
  • FIGURE 11 the overall processing of the transaction (80) consists of transaction initialization (81), sending an opening statement (82), getting a request from the client (83), logging in and obtaining authorization (84), generating a response (85), sending the response to the client (86) and terminating the transaction (87).
  • these processing stages are implemented in one embodiment using individual plug-in modules that interface with the server application via an API.
  • the API can be defined as described below.
  • pathway parameters can be set up. An example is shown below.
  • Session parameters can make use of the pathway parameters, for example, to set up default or systemwide values. Session parameters exist only for the duration of the current session, and are unique to the current session (i.e. multiple concurrent sessions each have their own session parameters) typedef bool (*Session_Initialization)
  • Each session comprises a series of transactions.
  • transaction parameters are set up.
  • An example of the API definition for this stage is shown below.
  • transaction parameters exist only for a single transaction, typedef bool (*Transaction_Initialization)
  • each transaction can begin with zero, one or a series of messages being sent from the system to the client.
  • An example of the API definition for this stage is shown below. This stage may not be required in some types of transactions, typedef bool (*Send_Opening_Message) (
  • a request is received from the client.
  • An example of the API definition for this stage is shown below.
  • a request optionally comprises a request header and/or a request buffer. typedef bool (*Get_Request)
  • Authorization can be based on many different factors, including user ID, client IP address, account information, system usage information, etc. typedef bool (* Authorization)
  • the request is analyzed and a response is generated.
  • An example of the API definition for this stage is shown below.
  • a secondary request may be generated to some other content server and that response can be optionally manipulated and put in place of the response header and buffer.
  • typedef bool (*Generate_Response)
  • the Generate_Response stage is the point at which the processing performed by a proxy typically differs from that of a server.
  • the information responsive to the client request is generated locally.
  • the proxy attempts to locally generate the information responsive to the request (e.g., by retrieving the information from a cache). If the proxy cannot provide the responsive information itself, the proxy forwards the request on behalf of the client to a server, which returns the responsive information to the proxy. In other words, the proxy either generates the requested information by itself, or it obtains the information from a server.
  • One or many modules can be used to issue requests to servers on behalf of the client (see the http_make_request_to_server module in the multi-task example below).
  • a whole fleet of such modules e.g.: pop_make_request_to_server, nntp_make_request_to_server, https_make_request_to_server, ftp_make_request_to_server, etc.
  • Cross-protocol applications can be easily created by just plugging in a different make_request_to_server module. For example, HTTP requests can be converted to POP so that the web can be used to access email attachments. Further, many requests to servers could be made in response to receiving a single client request.
  • a proxy could: speed up the download of information by requesting information simultaneously from multiple servers, or could combine information from multiple different requests to the same server. Finally, the response is sent to the client.
  • An example of the API definition for this stage is shown below. typedef bool (*Send_Response)
  • a cleanup function can be called which can generate logs, free allocated resources etc.
  • An example of the API definition for this stage is shown below, typedef bool (*Transaction_Termination)
  • the transaction and session can be immediately terminated, and the connection closed.
  • the pathway can be terminated, and connections will not be made or accepted.
  • a new pathway can be created by calling an installation function.
  • each of the specified functions is called for the corresponding stage of processing (e.g., setting up the pathway and its sessions, and processing the transactions), bool Install_New_Pathway( const Pathway_Initialization pathway_initialization, const Session_Initialization session_initialization, const Transaction_Initialization transaction_initialization, const Send_Opening_Message send_opening_message, const Get_Request get_request, const Authorization authorization, const Generate_Response generate_response, const Send_Response send_response, const Transaction_Termination transaction_termination, const Session Termination session_termination, const Pathway_Termination pathway_termination ); Many simpler installation functions can be created on top of the general function set forth above by allowing the function caller to only specify functions for some of the pathway stages.
  • a pathway may alternatively be configured to perform multiple tasks.
  • a pathway can be configured to dynamically select different series of modules to process a particular transaction. There can be substantial overlap and reuse of functionality between the different series of modules.
  • a method and system can comprise a software architecture that allows different applications in the same or different communications protocols to interact with shared resources within a computer. More specifically, code for a computer program may be written to increase the amount of code that is generic to (i.e., shared by) more than one application or communications protocol and reduce the amount of code that handle application-specific or protocol-specific actions. In one embodiment, a transaction may be broken down into a set of discrete actions. The discrete actions may include functions that are common to more than one network application. These functions may be performed by the shared resources.
  • code that is specific to a particular protocol or application may be written as part of a software plug-in module with function calls to functions of the shared resources.
  • Each software plug-in module may substantially act similar to a manager for the action, where common tasks are delegated to the shared resources and the module performs specialized functions.
  • Each protocol may have its own set of software plug-in modules for the discrete actions. New applications and support for new protocols can be added by developing a new set of plug-in modules instead of writing an entirely new program. New applications for the same protocol may be developed by replacing or editing as little as one plug-in module from a different application in the same protocol.
  • the software architecture can reduce development time, increase the likelihood that new applications may be developed quickly with fewer changes from an existing application, more protocols will be properly supported, and reduce the burden on hardware and software resources.
  • a network includes an interconnected set of server and client computers over a publicly available medium (e.g., the Internet) or over an internal (company-owned) system.
  • a user at a client computer may gain access to the network using a network access provider.
  • An Internet Service Provider (“ISP") is a common type of network access provider.
  • the terms “comprises,” “comprising,” “includes,” “including,” “has,” “having” or any other variation thereof, are intended to cover a non-exclusive inclusion.
  • a method, process, article, or apparatus that comprises a list of elements is not necessarily limited to only those elements but may include other elements not expressly listed or inherent to such method, process, article, or apparatus.
  • "or” refers to an inclusive or and not to an exclusive or. For example, a condition A or B is satisfied by any one of the following: A is true (or present) and B is false (or not present), A is false (or not present) and B is true (or present), and both A and B are true (or present).
  • software component is intended to mean at least a portion of a computer program (i.e., a software application).
  • a software application i.e., a software application
  • An example includes a software plug-in module or the like.
  • Different software components may reside in the same computer program or in different computer programs on the same computer or different computers.
  • FIG. 1 illustrates such an exemplary hardware architecture and includes client computer 120, proxy computer 140, and server computer 160.
  • Client computer 120 and proxy computer 140 are bi-directionally coupled to network 11, and proxy computer 140 and server computer 160 are bi-directionally coupled to network 13.
  • Each of networks 11 and 13 may be an internal network or an external network (e.g., the Internet). In one embodiment, networks 11 and 13 may be the same network, such as the Internet.
  • Computers 140 and 160 may be bi-directionally coupled to databases 14 and 16, respectively.
  • Client computer 120 can include a desktop computer, a laptop computer, a personal digital assistant, a cellular phone, or nearly other device capable of communicating over network 11. Other client computers (not shown) may also be bi-directionally coupled to network 11.
  • the proxy computer 140 can be a server computer, but in another embodiment may be a client computer. Other server computers (not shown) similar to server computer 160 may be bi-directionally coupled to network 13.
  • each of proxy computer 140 and server computer 160 may be replaced by a plurality of computers (not shown) that may be interconnected to each other over a network or a combination of networks.
  • the client computer 120 can include central processing unit (“CPU") 122, read-only memory
  • ROM read only memory
  • RAM random access memory
  • HD hard drive
  • I/O input/output device(s)
  • Proxy computer 140 can include CPU 142, ROM 144, RAM 146, HD 148, and I/O 149
  • server computer 160 can include CPU 162, ROM 164, RAM 166, HD 168, and I/O 169.
  • Each of the computers in FIG. 1 may have more than one CPU, ROM, RAM, HD, I/O, or other hardware components.
  • each computer is illustrated as having one of each of the hardware components, even if more than one is used.
  • FIG. 1 is a simplification of an exemplary hardware configuration. Many other alternative hardware configurations are possible and known to skilled artisans.
  • Each of computers 120, 140, and 160 is an example of a data processing system.
  • ROM 124, 144, and 164; RAM 126, 146, and 166; HD 128, 148, and 168; and databases 14 and 16 can include media that can be read by CPU 122, 142, or 162. Therefore, each of these types of memories includes a data processing system readable medium. These memories may be internal or external to computers 120, 140, or 160.
  • FIG. 2 illustrates a combination of software code elements 204, 206, and 208 that are embodied within a data processing system readable medium 202, on HD 148.
  • the instructions may be stored as software code elements on a DASD array, magnetic tape, floppy diskette, optical storage device, or other appropriate data processing system readable medium or storage device.
  • the computer-executable instructions may be lines of compiled assembly, C, C 1"1" , Java, or other language code.
  • Other architectures may be used.
  • the functions of any one of the computers may be performed by a different computer shown in FIG. 1.
  • a computer program or its software components with such code may be embodied in more than one data processing system readable medium in more than one computer.
  • the various software components may reside on a single computer or on any combination of separate computers. In alternative embodiments, some or all of the software components may reside on the same computer. For example, one or more the software component(s) of the proxy computer 140 could reside on the client computer 120, the server computer 160, or both. In still another embodiment, the proxy computer 140 and database 14 may not be required if the functions performed by the proxy computer 140 are merged into client computer 120 or server computer 160. In such an embodiment, the client computer 120 and server computer 160 may be bi-directionally coupled to the same network (not shown in FIG. 1).
  • Communications between any of the computers in FIG. 1 can be accomplished using electronic, optical, radio-frequency, or other signals.
  • client computer 120 may convert the signals to a human understandable form when sending a communication to the user and may convert input from a human to appropriate electronic, optical, radio-frequency, or other signals to be used by, computers 140 or 160.
  • server computer 160 may convert the signals to a human understandable form when sending a communication to the operator and may convert input from a human to appropriate electronic, optical, radio-frequency, or other signals to be used by computers 120, 140, or 160.
  • the method can comprise breaking down a transaction into a set of discrete actions.
  • the actual definitions used for separating the transaction into the discrete actions is variable and may be selected by skilled artisans in manners that best suit their particular transactions, hardware requirements, and software requirements.
  • the method can also include determining which functions within the set of discrete actions are common to more than one application. As more are identified, the number of shared resources can increase and the amount of application-specific code can be decreased. Therefore, skilled artisans are encouraged to examine the software from many different levels of abstraction to discover potential shared resources that may otherwise be missed.
  • the method can further comprise generating software components for the discrete actions.
  • a set of software plug-in modules can correspond to the different discrete actions for the transaction.
  • Each application may have its own set of software plug-in modules.
  • the amount of code within each software plug-in module should be kept relatively low if the identification of shared resources was performed properly. To the extent code for any shared resources does not currently exist, code for the shared resources should be generated to maximize its ability to be used by as many different plug-in modules as possible.
  • At least two of the software plug-in modules for different applications can make function calls to any one or more of the shared resources. For different applications using the same protocol, only a request manipulation plug-in module, a content manipulation plug-in module, or both may be the only modules changed.
  • creating new application for the same protocol may be simplified because other plug-in modules used for the application may be copied from another application using the same protocol. These other plug-in modules may be substantially the same between the applications. By replacing or editing the request manipulation plug-in module, content manipulation plug-in module, or both, new applications may be developed very quickly.
  • each protocol may have a module that performs substantially the same action as any or all of the similar module(s) for the other protocol(s) though reducing this duplicative code by combining the common functionality is preferable.
  • the software architecture is illustrated in FIGs. 3 and 4 and is directed towards an electronic transaction that can be performed over a network.
  • a basic idea behind the architecture is to allow programming code for shared resources to be commonly used by as many different network applications as possible. Note that all of the resources may or may not be shared by all the applications.
  • the programming code for each application-specific plug-in module may include code to connect the incoming communication in any supported application to the shared resources.
  • a user of the software architecture can reduce development time, increase the likelihood that more applications in the same or different protocols will be properly supported (especially proprietary protocols that may be used by only a limited number of computers or users), and reduce the burden on hardware and software resources for different applications because only relatively small plug-in modules may be used.
  • each row of boxes 3200, 3400, and 3600 represents different applications in the same or different protocols.
  • row 3200 may represent a first application using HTTP
  • row 3400 may represent a different application using HTTP
  • row 3600 may represent yet another application in a different protocol, such as POP, SNMP, WAP, and the like.
  • POP POP
  • SNMP SNMP
  • WAP WAP
  • the architecture may be configured to allow the addition of future applications.
  • the software architecture easily supports at least three different and potentially many more protocols.
  • each of the boxes 3202 through 3214 represents different stages (actions) that may occur during an electronic transaction.
  • box 3202 may represent a request reception plug-in module
  • box 3204 may represent an authorization plug-in module
  • box 3206 may represent a request manipulation plug-in module
  • box 3208 may represent a content retrieval plug-in module
  • box 3210 may represents a content manipulation plug-in module
  • box 3212 may represent a content delivery plug-in module
  • box 3214 may represent a post-response communication plug-in module (e.g., acknowledgement, billing, etc.).
  • Each module may correspond to one or more of the discrete actions. Details about the individual plug-in modules are described later in this specification.
  • box 3402 represents an incoming message reception plug-in module for a different application using the same protocol as box 3202
  • box 3602 represents an incoming message reception plug-in module for yet another application using a different protocol compared to box 3202.
  • New applications that make use of already-supported protocols can be developed with a minimum of effort. This is achieved by creating a new row, which makes use of protocol specific plug-ins used in another row and combines them with other plug-ins developed for the specific application at hand.
  • Some plug-in modules may be substantially the same for many different applications in the same protocol. In different protocols, the plug-in modules for at least some of the different applications may provide substantially the same functionality, although the code within those plug-in modules may be different compared to similar modules for the other protocols.
  • shared resources are illustrated as planes 3102, 3104, and 3106 that lie beneath each of the rows 3200, 3400, and 3600.
  • interfaces may be made to each of the shared resources for each plug-in module.
  • functional connectivity 4102 links module 3214 and shared resource 3102.
  • functional connectivity 4104 links module 3214 and shared resource 3104
  • functional connectivity 4106 links module 3214 shared resource 3106. Links 4102, 4104, and 4106 can be achieved by function calls to the shared resources.
  • Examples of the shared resources may include a content cache, a parameter cache, a connection pool, a domain name server cache, a clock, a counter, a database, a global variables space (e.g., a logging database), or the like.
  • a list of potential shared resources is nearly limitless. Note that not all shared resources may be connected to all modules along a row. For example, modules 3202 and 3204 may not need access to the content cache because they may not receive or process content returned for a request.
  • Each connection from a client may be handled independently on its own thread. However in other embodiments, fewer threads or a single thread can be used to operate all connections to a specific row that supports a particular application or protocol. Unless stated to the contrary, the method below is described from the perspective of proxy computer 140.
  • FIG. 5 includes a flow diagram of a method of performing an electronic transaction that corresponds to the software plug-in modules that lie along any of rows 3200, 3400, and 3600. Note that all modules are not required and that functions of some modules may be combined with others (e.g., authorization may be part of processing an initial request). The process flow diagram will be briefly covered followed by a more detailed description of each module.
  • the method can comprise receiving a request from a client computer using a request reception plug-in module (block 502) and performing authorization using an authorization plug-in module (block 504).
  • the method can also comprise manipulating a request using a request manipulation plug-in module (block 512).
  • the method can further comprise retrieving content using a content retrieval plug-in module (block 522).
  • the method can yet further comprise manipulating returned content using a content manipulation plug-in module (block 532) and sending the modified content to the client computer using a content delivery plug-in module (block 534).
  • the method can still further comprise processing post-response communications using a post-response plug-in module (block 542).
  • the flow of information could be in the opposite direction (server computer 160 seeking information from client computer 120).
  • the method can comprise receiving a request from client computer 120 using request reception plug-in module 3202 (block 502 in FIG. 5).
  • Request reception plug-in module 3202 can be used when a request from client computer 120 is received or accessed by proxy computer 140.
  • Module 3202 can initially generate an associative array from portions of the header of the request. Part or all of the associative array may be used by the other modules along the same row.
  • the associative array may provide information that can be part of function calls to the shared resources.
  • Any or all the data may be passed from any prior plug-in module (e.g., module 3202) to any or all the subsequent plug-in modules along the same row (e.g., 3204, 3206, 3208, 3210, 3212, or 3214).
  • the method can also comprise performing authorization using authorization plug-in module
  • the authorization plug-in module 3204 is optional and can be used for determining whether a user at client computer 120 has proper authorization.
  • the authorization modules may be based on an Internet Protocol ("IP") address or a name and a password.
  • Module 3204 may send the IP address or name and password to a shared resource to determine if the user is allowed access.
  • the method can further comprise manipulating the request using request manipulation plug-in module 3206 (block 512).
  • Request manipulation plug-in module 3206 may be used to modify, replace, or otherwise manipulate the request.
  • proxy computer 140 may have code to redirect a URL within a request to a different URL. More specifically, proxy computer 140 may make a function call to that shared resource using the requested URL. The shared resource may pass the different URL back to module 3206.
  • Module 3206 may have the logic to put the different URL in the correct protocol, so that it will be understood by a computer that may receive the redirected request.
  • the method can yet further comprise retrieving content using content retrieval plug-in module 3208 (block 522).
  • Content retrieval plug-in module 3208 may be used to send the request and receive or access content in response to the original request or manipulated request. More specifically, a request originating from client computer 120 may have been processed by proxy computer 140 before being received by server computer 160. Content from server computer 160, in response to the processed request from proxy computer 140, would be processed using module 3208. Similar to module 3202, the code may parse the content from server computer 160 into a header portion and a content portion and append that information onto a previously generated associative array. The method can still further comprise manipulating returned content from the server computer using content manipulation plug-in module 3210 (block 532).
  • Content manipulation plug- in module 3210 may be used to add or modify content before sending it to client computer 120. More specifically, proxy computer 140 may add advertisements or supplementary information from third parties to the content provided by server computer 160. In an alternative embodiment, part or all of the content originating from server computer 160 may be deleted or replaced with other content.
  • the method can comprise sending the modified content to the client computer using content delivery plug-in module 3212 (block 534). Content delivery plug-in module 3212 may be used to route the content, after manipulation, if any, to client computer 120. Some of the information in the associative array generated when the original request from client computer 120 was processed may be used by module 3212 when sending the outgoing content to client computer 120.
  • the method can also comprise processing post-response communications using post-response plug-in module 3214 (block 542).
  • Post-response communication plug-in module 3214 may be used for acknowledgement, billing, or other purposes. For example, after content is successfully sent to client computer 120 from module 3212, module 3124 could then charge the user's credit card for that transaction. Alternatively, module 3214 may look for a signal that service to or from client computer 120 or server computer 160 is being terminated for the current transaction. Such post-response processing may be helpful in avoiding invoices or other bills sent to a user at client computer 120 if a product or service was either incomplete or defective or to properly reflect the connect time for a transaction.
  • System statistics are examples of information that may be within a global variable space. This information may be useful to proxy computer 140 or another computer, such as client computer 120 or server computer 160, in monitoring activity.
  • the statistics may include how many computers are connected to proxy computer 140, the amount of time each of those computers are connected to proxy computer 140, the amount of or time lapsed during transactions being processed through proxy computer 140, or the like.
  • a module such as authorization module 3204. If too many users are currently logged into proxy computer 140, authorization may be denied even if the computer attempting a connection to proxy computer 140 has proper security clearance.
  • a signal from module 3214 can be sent to the logging system within the shared resources.
  • a new client computer may now gain access to the services provided by proxy computer 140 after the connection from the other transaction is terminated. Attention is now directed to more specific activities that may be performed by a specific module, and how that specific module may interact with other modules for the same transaction using a specific application. The process flow diagram illustrated in FIGs. 6-8 is used to describe some of the specific activities.
  • an incoming communication may be a request from client computer 120 sent to proxy computer 140 for www.yahoo.com.
  • the client computer 120 is communicating using HTTP, using a NetscapeTM browser (of AOL Time Warner, Inc. of New York, New York), and has a MacOS XTM operating system (of Apple Computer, Inc. of Cupertino, California).
  • the method can comprise receiving an incoming communication for a specific application (block 602).
  • the communication can comprise a request, a message, or other form of communication.
  • the communication can be sent by client computer 120 and received or accessed by proxy computer 140 via network 11.
  • Proxy computer 140 can access or read at least a portion of the incoming communication and determine the specific application for the communication.
  • the incoming communication is a request from client computer 120 sent to proxy computer 140 for www.yahoo.com.
  • the incoming communication will also contain other information within the header of the request. In the example, the other information can include the browser and operating system of client computer 120.
  • proxy computer 140 can determine which row 3200, 3400, 3600, or other or row of plug-in modules will be used for the transaction. At this point in the method, proxy computer 140 may activate any or all of the plug-in modules for the row corresponding to the specific application. In one embodiment, plug-in modules within each row may be activated only as they are first used. Referring to the example, the request is for an application corresponding to row 3200. Therefore, plug-in module 3202 may be activated. If the communication is for another application, plug-in module 3402 or 3602 may be activated for the particular application.
  • the method can further comprise routing the incoming communication to a first software plug-in module for the specific application (block 604).
  • Proxy computer 140 can route the request to request reception software plug-in module 3202 because the incoming request uses the application corresponding to row 3200.
  • the method can comprise parsing the incoming communication into a header portion and a content portion (block 622). The parsing can be performed by module 3202 to obtain information from the request.
  • the method can also comprise generating an associative array using information contained within the header portion (block 624).
  • the associative array can include nearly any finite number of rows. Each row can comprise a key and a value. The key can comprise a parameter within the header portion, and the value can comprise a value for that parameter.
  • the header portion may include one or more lines of a command followed by a command argument. The command may be a key, and the command argument may be the corresponding value for the key.
  • the associative array may be searched by the key or the value. By knowing conventions used by each of the protocols for incoming communications and the characteristics of headers used for those protocols, formation of the associative array can be performed without complicated coding requirements.
  • the associative array is flexible regarding the number of rows and allows different sizes of associative arrays to be used for different protocols.
  • one of the lines within the header may include a line with "User- Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:l.l) Gecko.”
  • the key will be "User-Agent,” and the value will be " Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:l.l) Gecko.”
  • a line may include "RETR 27," where 27 is an object identifier for is a particular item to be retrieved.
  • the key will be "COMMAND,” and the value will be “RETR.”
  • a second entry will be made with a key of "ARGUMENT” and a value of "27.”
  • a line may include “get 47.12.112.38,” where 47.12.112.38 corresponds to an object identifier.
  • the key will be "COMMAND”, and the value will be “GET,” and a second entry will have the key “ARGUMENT” and the value "47.12.112.38.”
  • the content may or may not be part of the associative array. If it is, the associative array can include a key of "CONTENT" and the entire content data block as the value. For an image, the content may be a very large amount of data. Alternatively, the associative array may be paired with a data pointer that points to the data block, rather than incorporating it directly into the associative array.
  • the associative array may include information as shown in Table 1 below. Descriptive names are used instead of actual names to aid in understanding the associative array. Also, the associative array may include many more rows. Because the associative array may be searched by key or value, the order of the rows is unimportant.
  • the method can also comprise generating a function call to at least one of the shared resources using data within the associative array (block 702 in FIG. 7).
  • proxy computer 140 can make a function call to a shared resource, more specifically to a clock (shared resource) and a logging system (another shared resource) to get the time and log the beginning of the transaction.
  • the logging information may include the time and a transaction identifier. Note that some of the information within the associative array could be sent with the function call to the shared resource.
  • the method can further comprise receiving data from the function call (block 704).
  • the transaction identifier may be passed back to module 3202.
  • the method can still further comprise processing data from the function call with other code within the first software module (block 706).
  • Module 3202 may be more focused on processing the incoming message rather than processing data coming back from the function call.
  • Other modules such as the content deliver plug- in module 3212, may perform such data processing. Note that the application-specific processing may occur before, during, or after function call(s), if any, are made to the shared resource(s).
  • Authorization module 3204 may use some of the information that was collected or generated by module 3202. Passing the information reduces the load on hardware by not sending a communication from proxy computer 140 to another computer (e.g., client computer 120) or making the same or similar function call to a shared resource for the same information.
  • the method can also comp ⁇ se generating a function call to at least one of the shared resources using data within the associative array (block 822).
  • Authorization module 3204 may make a function call to the parameter system to determine if the user has proper authorization, whether access can be granted (whether number of users currently connected to proxy computer has exceeded its limits), priority of connection (level or speed of service to be provided), etc.
  • Module 3204 may pass user name and password when making the function call to the logging system
  • Module 3204 may also make a function call to the shared clock to obtain a time for the action.
  • the method can also comp ⁇ se receiving data from the function call (block 824).
  • the data may include information regarding whether user at client computer 120 has proper secunty clearance, whether the connection could be made, priority of the connection, and the like.
  • the method can further comprise processing data from the function call with other code within the current software plug-m module (block 826).
  • An example may include sending a communication from proxy computer 140 to client computer 120 informing the user whether the connection was made. Alternatively, no further processing may occur with module 3204.
  • the remaining modules along row 3200 will be addressed to complete the example transaction to give a better understanding of actions within the modules and some function calls that those modules may make. More or fewer modules may be used. Also, more, fewer, or different function calls may be made by the modules.
  • a function call can be made to a shared resource to determine if the request should be changed.
  • the function call may pass information that a request for www.yahoo.com has been received or accessed.
  • the shared resource may include logic to replace the original client request with www.***.com.
  • the associative array may be changed to replace www.yahoo.com with www.***.com or be appended to note that the manipulated request is www.***.com.
  • Module 3208 may perform the content retrieval.
  • a function call can be made to a content cache (shared resource) at proxy computer 140 to determine if the content cache includes a network page for www.***.com specifically formatted for a computer having a NetscapeTM browser and a MacOS XTM operating system. Note that the browser and operating system information can be obtained from the associative array. If the content cache has the network page, it can be passed to module 3208. Otherwise, module 3208 may formulate an HTTP request to server computer 160 requesting the network page for the specific browser and operating system of client computer 120. After proxy computer 140 obtains the proper network page from server computer 160, module 3208 may send a function call to the content cache at proxy computer 140 to cache the network page. The proper network page and other information previously collected may be sent to module 3210.
  • Content manipulation module 3210 may delete, add, or replace some or all of the content within the proper network page returned. For example, when the proper Google network page is received or accessed, module 3210 may add advertisement(s) around the border(s) of the page. A function call can be made to a shared resource to determine which advertisement(s) should be added. The logging system may keep track of which advertisement is being added, whose advertisement it is, and how many times the advertisement has been added during the current billing cycle. The logging system, which is a shared resource, may access the counter (another shared resource) by itself. In other works, some or all of the shared resources may interact with each other without requiring an application-specific software plug-in module to intervene. The manipulated content and other information may be passed to module 3212.
  • Content delivery software plug-in module 3212 may take the Google network page formatted for a NetscapeTM browser and MacOS XTM operating system and the advertisement(s) from module 3210 and prepare a communication using HTTP. The communication can be sent from proxy computer 140 to client computer 120. Function calls can be made to the logging system to note the actual content sent to client computer 120 and time sent. Any or all information collected or generated by modules 3202-3212 may be passed to module 3214. Post-response communications module 3214 may be used to track usage or billing information. At the end of a transaction, module 3214 may make a function call to the clock to determine the current time, and make another function call to the logging system to determine how much time lapsed during the transaction and record any billing information.
  • the billing information may be within a shared resource managed by an accounting department.
  • Billing information for the user at client computer 120 may be passed from one of the shared resources to module 3214, which may return some of the information for the user at client computer 120.
  • Proxy computer 140 may send a message to client computer 120 similar to "You were connected for 2.1 minutes and were charged $1.27. Thank you for using our service.” Alternatively, no message may be sent and the method may end.
  • the power of creating new applications for the same protocol may be better understood with the flow diagram in FIG. 9 and an example.
  • different applications may be generated for different priorities of users for a network site.
  • the communication protocol may use HTTP.
  • the method can comprise developing a first set of plug-in modules for a first application (block 902). The set may correspond to row 3200 and be directed to premium users of a network site. A new application may need to be developed for regular users of the network site.
  • the communication protocol may also use HTTP.
  • the method can comprise copying the first set of plug- in modules to form a second set of plug-in modules (block 922).
  • the request manipulation plug-in module For the new application, only the request manipulation plug-in module, the content manipulation plug-in module, or both may be replaced.
  • the remainder of the plug-in modules may be unchanged and be substantially the same as the remainder of the plug-in modules for the first application.
  • the method may comprise replacing a first request manipulation plug-in module with a second request manipulation plug-in module for a second application (block 924).
  • the premium user may have access to some network pages that the regular user may not. If the regular user requests a premium page, the second request manipulation module may direct the regular user to another network page for which the regular user has proper access.
  • the method may also comprise replacing a first content manipulation plug-in module with a second content manipulation plug-in module for the second application (block 926).
  • the premium user may have only 10 percent of his or her window occupied by advertisements, whereas the regular user may have 50 percent of his or her window occupied by advertisements.
  • the second content manipulation module may reformat the retrieved content to allow for more advertising space.
  • the second content manipulation module may also access the shared resources to obtain the advertisements and keep track of which advertisements were used.
  • Device dependent optimization of network pages can be achieved by plugging in a module which transcodes content using settings developed for the particular device that made the initial request.
  • the method can still further comprise executing the second application using the second set of plug-in modules (block 942).
  • those modules may be generated by editing code within the corresponding modules within the first set for the first application.
  • client computer 120 may make a request for information within a database located at server computer 160.
  • the request may be handled in a manner similar to a request for a network page. If the user does not have proper authorization to all information within a request, the request manipulation module may request only that information for which the user has property access or the content manipulation module may add information stating that the user does not have proper access to some or all the information.
  • the multiple-protocol software architecture and plug-in modules may be installed in client computer 120 or server computer 160. Not all modules in proxy computer 140 may be needed by client computer 120 or server computer 160.
  • Authorization modules 3204, 3404, and 3604 may not be used or can be coded to allow authorization (always authorized) at client computer 120.
  • the content manipulation modules 3210, 3410, and 3610 may not be used by the server computer 160.
  • the software components can be designed to maximize their ability use shared resources while minimizing the amount of code used for application-specific operations. Therefore, relatively smaller plug-in modules (compared to the shared resources) may be used to access the shared resources illustrated in the planes below the modules. In this manner, less code needs to be written for a new protocol compared to the prior-art method of writing or copying and modifying an entire program for a specific protocol. For applications in the same protocol, the specific coding requirements may be much less. Furthermore, protocols are more likely to be supported because the coding requirements are less, and therefore, may be generated for protocols that have relatively fewer users compared to other protocols. The method and system are significantly more efficient in both time and cost compared to existing prior-art methods dealing with the problem of many different applications in the same or different protocols.
  • FIG.1 A first figure.

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer And Data Communications (AREA)
  • Stored Programmes (AREA)

Abstract

Systems and methods for processing network transactions by breaking down the transactions into several stages and performing the processing corresponding to each stage using a different plug-in module. One embodiment of the invention comprises an application programming interface (API) that enables the use of individual plug-in modules to perform different stages of the processing of a transaction. The API defines a series of interfaces to corresponding plug-in processing modules, where each interface corresponds to a stage of processing of a transaction and the API conveys transaction information from one plug-in module to the next, until all of the processing stages have been completed. The API may be embodied in a network transaction processing application that is adaptable to different functionalities and different protocols by plugging different modules into the interface provided by the API.

Description

DESCRIPTION
A PLUG-IN API FOR MODULAR NETWORK TRANSACTION PROCESSING
Related applications
This application claims priority to U.S Provisional Patent Application No. 60/354,976, entitled "A Plug-In API For Modular Network Transaction Processing," by Jeremy S. de Bonet, filed February 7, 2002, which is hereby fully incorporated by reference herein. Additionally, U.S Provisional Patent Application No. 60/349,344, entitled "Modular Plug-In Transaction Processing Architecture" by de Bonet et al., filed January 18, 2002 and U.S. Provisional Patent Application No. 60/349,424, entitled "Network Proxy Platform that Simultaneously Supports Data Transformation, Storage, and Manipulation for Multiple Protocols" by de Bonet et al., filed on January 18, 2002, U.S Patent
Application Seπal No. 10/342,113 (Attorney Docket No. IDETl 130-1), entitled "Method and System of Performing Transactions Using Shared Resources and Different Applications," by de Bonet et al , filed January 14, 2003 are incorporated by reference herein.
Reference To Appendices An Appendix is included in this application by way of attachment, the totality of which is hereby incorporated by reference for all purposes as an integral part of this application The Appendix is entitled "Network Proxy Platform and Its Use" and includes 17 pages of text and 8 sheets of drawings.
Background Field of the invention
The invention relates generally to computer and software architectures, and more particularly to systems and methods for constructing network transaction processing platforms that comprise plug- in modules which control the manner in which transactions between a client and a server are processed.
Related art
A vast majority of the computer systems that are currently in use are not configured strictly as stand-alone devices. In other words, they are coupled to other computers, and possibly other types of devices, through one or more networks. For example, it is typical for a personal computer set up for use at a person's home or business to be connected to other computers (e.g., web servers) via the Internet. Communications between networked computers can be handled in many different ways For example, a single computer can run multiple network programs at the same time, and each program can use any communication protocol (or protocols) that chooses. The only restriction on these programs is that only one program can bind to a specific TCP or UDP port at a time. Thus, only one program can listen for requests on any given port (e.g., port 80, which is the standard port for HTTP), but a second program (e.g., an FTP server or even another Web server) running at the same time can only listen for requests on a different port. Just as a particular program can use different protocols, a particular program can perform one or many tasks. For example, a program can perform the tasks of a content server, a content proxy, a caching proxy, a transformation proxy, an advertisement insertion proxy, a content optimization server or proxy, and so on.
Even though it is possible for programs to perform multiple tasks, prior art programs for handling network communications have typically been designed to perform a single task per program. Prior art programs that perform multiple tasks are actually quite rare. In some instances, prior art programs act as dispatchers to other programs that perform different tasks. For example, a Web server can be configured to dispatch received requests to different programs (e.g., CGI's), depending upon the actual URL that is requested. Prior art programs therefore present a number of difficulties in designing a system that performs multiple tasks. For example, because prior art programs are typically designed to perform a single task, chaining these single tasks with others often involves rewriting most or all of the corresponding programs. Further, because different programs are typically used to perform different tasks (e.g., as in the foregoing example of the Web server that dispatches requests to other programs), there is little or no sharing of functionality between these programs. Thus, each program may have to independently provide such functionality as caching, logging, configuration, authorization, monitoring, communications, and so on.
Summary of the invention One or more of the problems outlined above may be solved by the various embodiments of the invention. Broadly speaking, the invention comprises systems and methods for processing network transactions by breaking down the transactions into several stages and performing the processing corresponding to each stage using a different plug-in module.
One embodiment of the invention comprises an application programming interface (API) that enables the use of individual plug-in modules to perform different stages of the processing of a transaction. The API defines a series of interfaces to corresponding plug-in processing modules, where each interface corresponds to a stage of processing of a transaction and the API conveys transaction information from one plug-in module to the next, until all of the processing stages have been completed. The API may be implemented, for example, in a server application that is designed to process network transactions. In one embodiment, transactions are broken down into seven stages: initializing the transaction; sending an opening statement; getting a request; logging in and obtaining authorization; generating a response; sending the response; and terminating the transaction. A set of plug-in modules, each one corresponding to one of the stages, is provided to handle the processing for each of the stages. The plug-in modules use the API to pass transaction information from one module to the next and to thereby completely process the transaction. Depending upon the type of communication that is being carried on between two parties, different sets of plug-in modules can be installed to provide the needed processing, whether it be different functionality, or different protocols.
The software application and/or API described above are embodied in a computer-readable medium such as a floppy disk, hard disk drive, CD-ROM, DVD-ROM, RAM, ROM, DASD array, magnetic tape, optical storage device and the like. It should be noted that the computer readable medium may comprise a RAM or other memory which forms part of a computer system. The computer system would thereby be enabled to perform a method in accordance with the present disclosure and is believed to be within the scope of the appended claims. Numerous additional embodiments are also possible. The various embodiments of the invention may provide a number of advantages over prior art systems and methods. For example, because many modules can run within the same program, a single port can be shared by different modules and thereby different tasks can be performed on requests to a single port. Further, the present architecture supports listening to multiple ports, each with the same or different protocols and module dispatching rules. Further, rather than dispatching requests to completely new programs, the present method allows for dynamically selecting different series of modules to process the transaction, making possible substantial overlap and reuse of functionality. Still further, changing the tasks performed by a program can be achieved by writing new modules or simply by rearranging or recombining preexisting modules. Still further, modules within the program may access common resources and make calls to functions provided by other modules (e.g., caching, logging, configuration, authorization, monitoring, communications, etc.). Thus, for example, different caching modules (which might have slightly different behaviors) can store and retrieve their content from the same cache ~ thus maximizing the chances of achieving a cache hit.
Further, by creating a system that breaks down network transactions into a series of stages, and by processing each of the stages in a modular fashion, the number of protocols supported by the system may be rapidly increased. The modular processing of the stages may also increase the ability of the system to adjust and modify the functionality that is provided in the processing of the transactions (e.g., adding new tasks). The use of the API may therefore provide greater control and flexibility over the various stages of transaction processing. Still further, by extending the API to include plug-in functionality, new modules can be created by parties other than the producer of the server application and plugged into the system without the need to expose source code. Brief description of the drawings
Other objects and advantages of the invention may become apparent upon reading the following detailed description and upon reference to the accompanying drawings. FIGURE 1 is a diagram illustrating some of the basic components of a network system in one embodiment.
FIGURE 2 is a diagram illustrating the components of an exemplary computer system in one embodiment.
FIGURE 3 is a diagram illustrating the modular structure of a server application in accordance with one embodiment.
FIGURE 4 is a diagram illustrating the structure of a server application in accordance with the prior art.
FIGURE 5 is a diagram illustrating the flow of data from one plug-in module to the next in the processing of a network transaction in accordance with one embodiment. FIGURE 6 is a diagram illustrating the replacement of a plug-in module to the transaction processing application in accordance with one embodiment.
FIGURE 7 is a diagram illustrating the replacement of multiple plug-in modules to the transaction processing application in accordance with one embodiment.
FIGURE 8 is a diagram illustrating the processing of a network transaction using the server application of FIGURE 3.
FIGURE 9 is a diagram illustrating the processing of a network transaction using the prior art server application of FIGURE 4.
FIGURE 10 is a diagram illustrating the initialization and termination of pathways and sessions, and the processing of transactions within a session in one embodiment. FIGURE 11 is a diagram illustrating the initialization and termination of pathways and sessions, and the processing of transactions within a session in one embodiment.
While the invention is subject to various modifications and alternative forms, specific embodiments thereof are shown by way of example in the drawings and the accompanying detailed description. It should be understood, however, that the drawings and detailed description are not intended to limit the invention to the particular embodiment which is described. This disclosure is instead intended to cover all modifications, equivalents and alternatives falling within the scope of the present invention as defined by the appended claims. Detailed Description
One or more preferred embodiments of the invention are described below. It should be noted that these and any other embodiments described below are exemplary and are intended to be illustrative of the invention rather than limiting. Broadly speaking, the invention comprises systems and methods for processing transactions in a server by breaking down the transaction into several stages and performing the processing corresponding to each stage using a different plug-in module that is interfaced with the server application.
One embodiment of the invention comprises an application programming interface (API) that enables the use of individual plug-in modules to perform different stages of the processing of a transaction. The API may be implemented, for example, in a server application that is designed to process network transactions. In one embodiment, transactions are broken down into seven stages: initializing the transaction; sending an opening statement; getting a request; logging in and obtaining authorization; generating a response; sending the response; and terminating the transaction. A set of plug-in modules, each one corresponding to one of the stages, is provided to handle the processing for each of the stages. The plug-in modules use the API to pass transaction information from one module to the next and to thereby completely process the transaction. Depending upon the type of communication that is being carried on between two parties, different sets of plug-in modules can be installed to provide the needed processing, whether it be different functionality, or different protocols. The various embodiments of the invention may provide a number of advantages over prior art systems and methods. For example, by creating a system that breaks down network transactions into a series of stages, and by processing each of the stages in a modular fashion, the number of protocols supported by the system can be rapidly increased. The modular processing of the stages also increases the ability of the system to adjust and modify the communication that takes place within the processing of the transactions. The use of the API therefore provides greater control and flexibility over the various stages of transaction processing. Still further, by extending the API to include plug- in functionality, new modules can be created by parties other than the producer of the server application and plugged into the system without the need to expose source code.
It should be noted that, while the description of the various embodiments contained in this disclosure focus on communications between a client and a server, other embodiments of the invention may concern communications between any two parties. There need not be a client-server relationship between them. Thus, embodiments of the invention may be designed to handle processing of a facsimile communications between one facsimile machine and another, voice-over-IP communications between a cellular phone and a computer, or any other type of network communications. One embodiment of the invention is implemented in a network environment. Referring to FIGURE 1, a diagram illustrating some of the basic components of a network system is shown. As depicted in this figure, the system comprises a client 12 and a server 14, each of which is interconnected to a network 16. Server 14 is configured to provide information responsive to requests from client 12 (i.e., to service the requests).
The communications between client 12 and server 14 comprise network transactions. In a typical transaction, client 12 generates a request and transmits the request via network 16 to server 14. Upon receiving the request, server 14 processes the request and generates a response to the request. For example, server 14 may retrieve a web page that was requested by client 12. This response is then transmitted from server 14 to client 12 via network 16.
It should be noted that the network configuration illustrated in FIGURE 1 is intended to be exemplary rather than limiting. Other embodiments may employ alternative configurations. For example, there may be multiple clients and multiple servers that are interconnected by multiple individual networks. Alternatively, a client may be directly coupled to a server without an intervening network. Many such variations are possible.
Communications between client 12 and server 14 can be accomplished using electronic, optical, radio-frequency, or other signals. For example, client 12 may convert signals received from server 14 to a human understandable form and may convert input from a human understandable form to appropriate electronic, optical, radio-frequency, or other signals to be used by server 14. Similarly, when an operator is at server 14, server 14 may convert the signals to a human understandable form when sending a communication to the operator and may convert input from a human understandable form to appropriate electronic, optical, radio-frequency, or other signals to be used by client 12.
In one embodiment, each of client 12 and server 14 is implemented in a corresponding computer system. These computer systems may comprise general purpose desktop computers, laptop computers, or other types of devices capable of communicating over network 16 and processing the information communicated between them. Referring to FIGURE 2, a diagram illustrating the components of an exemplary computer system is shown. The computer system illustrated in this figure may be used as a platform for either client 12 or server 14.
As shown in FIGURE 2, computer system 20 comprises a central processing unit ("CPU") 22, read-only memory ("ROM") 24, random access memory ("RAM") 26, hard disk drive ("HD") or storage memory 28, and input/output device(s) ("I/O") 29. I/O 29 can include a keyboard, monitor, printer, electronic pointing device (e.g., mouse, trackball, stylus, etc.), or the like.
The computer systems that provide platforms for the client and server may each have more than one CPU, ROM, RAM, HD, I/O, or other hardware components. For simplicity, the computer illustrated in FIGURE 2 is depicted in as having one of each of the listed hardware components. It should be noted that FIGURE 2 is a simplification of an exemplary hardware configuration. Many other alternative hardware configurations are possible and known to persons of skill in the art.
"Computer" and "computer system," as used herein, are intended to include any type of data processing system capable of performing the functions described herein. "Computer-readable media," as used herein, refers to any medium that can store program instructions that can be executed by a computer, and includes floppy disks, hard disk drives, CD-ROMs, DVD-ROMs, RAM, ROM, DASD arrays, magnetic tapes, floppy diskettes, optical storage devices and the like.
As explained above, the different protocols that can be supported and functionalities that can be provided by different servers may result from the use of different software applications. The support of different protocols and functionalities is facilitated in the present embodiment by running a modular software application on the server computer. More particularly, the software application uses an API that enables individual plug-in modules to be used to perform different stages of the processing of network transactions.
Referring to FIGURE 3, a diagram illustrating the structure of a server application in accordance with one embodiment is shown. As shown in the figure, a network server application 40 runs on top of the operating system 30 of the server computer. Network server application 40 interfaces with a plurality of plug-in modules 51-57 which perform the processing of transactions handled by the server. Server application 40 interfaces with plug-in modules 51-57 via an API (not shown in FIGURE 3) that defines the interface with each module. Plug-in modules 51-57 correspond to the seven stages of the transaction processing identified above (initializing the transaction; sending an opening statement; getting a request; logging in and obtaining authorization; generating a response; sending the response; and terminating the transaction). These stages will be described in more detail below.
The structure of the present application has illustrated in FIGURE 3 stands in stark contrast to the typical structure of prior art applications, which are represented by the structure illustrated in FIGURE 4. As shown in this figure, rather than using plug-in modules to perform the transaction processing, prior art applications employed a single application 100 running on the operating system 30 to provide the necessary processing. If it was necessary to change the processing (e.g., modifying the functionality or supported protocols), the entire application had to be rewritten or replaced. Using the present methodologies, the same changes can be made by replacing one or more of the plug-in modules (51-57), which requires substantially fewer resources.
Referring to FIGURE 5, a diagram illustrating the flow of data from one plug-in module to the next in the processing of a network transaction is shown. FIGURE 5 corresponds to the structure of FIGURE 3, but includes only a portion of the structure. As depicted in this figure, plug-in modules 58 and 59 interface with server application 40 via API 45. Each of modules 58 and 59 performs the processing for a corresponding portion of the total processing for the transaction (i.e., each performs the processing for a corresponding stage). It should be noted that the plug-in modules in this figure are referenced by numbers 58 and 59, rather than any of 51-57 because FIGURE 5 is representative of any pair of consecutive modules in the group 51-57. Thus, for example, modules 58 and 59 may correspond to modules 51 and 52, modules 52 and 53, modules 53 and 54, and so on. Plug-in module 58 receives any transaction information it requires and begins performing its stage of processing for the transaction. If module 58 corresponds to module 51, it receives this information from the client via the network. Otherwise, module 58 receives the necessary transaction information from the preceding plug-in module via API 45. When module 58 completes its stage of the processing, the resulting transaction information is conveyed to plug-in module 59 via API 45. Plug-in module 59 then performs its stage of the processing. If there are modules subsequent to module 59, the resulting transaction information is conveyed to the subsequent module via API 45. If module 59 corresponds to module 57 of FIGURE 3, processing of the transaction is complete, and the results are conveyed to the client via the network.
The flow of processing described above corresponds to a single transaction processing pathway. A single program may instantiate multiple pathways that use different combinations of modules to perform the necessary processing. A single pathway may perform one or multiple tasks. The processing associated with each pathway will be performed in generally the same manner as described above, using the modules called upon instantiation of that pathway. It should be noted that different pathways may call the same modules and thereby reuse the same program code. Referring to FIGURE 6, a diagram illustrating the replacement of a plug-in module to the transaction processing application is shown. In this example, the application is first configured with plug-in modules 51-54, 55a, 56 and 57. Module 55a corresponds to the generation of a response to a request. In order to modify the manner in which a response to the request is generated, it is only necessary to provide a new plug-in module, 55b, that provides the desired functionality and to replace the original module, 55a, with the new module, 55b.
Referring to FIGURE 7, an alternative module-replacement scenario is illustrated. In this figure, the transaction processing application is initially configured to process HTTP transactions. If it is desired to handle transactions using other protocols, this can be accomplished by replacing the HTTP modules (5 lc-57c) with modules (5 ld-57d) supporting the alternative protocol (e.g., FTP). It should be noted that, although the illustration of FIGURE 7 depicts the replacement of all seven plug- in modules, it may be possible to accomplish the same purpose through replacement of fewer modules the same processing is performed in a particular stage, independent of the protocol change. It should also be noted that the replacement of modules may be accomplished dynamically (i.e., while the application is executing) by making the modules available and simply instantiating a communication pathway using calls to the modules that are appropriate for the pathway (this will be addressed in more detail below). Portions of the methods described herein may be implemented in suitable software code that may reside within ROM 24, RAM 26, hard disk drives 28 or other computer-readable media within the system. The software code may also be contained on a separable data storage device, such as a removable hard disk, or on removable computer-readable media such as a DASD array, magnetic tape, floppy diskette, optical storage device, or the like. In one embodiment, the software code may comprise lines of compiled C*"1", Java, or other language code.
The various software components may reside on a single computer or on any combination of separate computers. Other configurations may also be used. For example, the functions of server 14 may be implemented in multiple computers that interact to perform the functions of the server. Additionally, a computer program or its software components within such code may be embodied in more than one computer-readable medium. Similarly, components of the software may reside on multiple computers.
Referring to FIGURE 8, a diagram illustrating the processing of a network transaction using the server application of FIGURE 3 is shown. In this figure, the processing of the transaction is depicted as block 60. The processing within block 60 is broken down into seven stages represented by blocks 61-67. Block 61 corresponds to the processing that is performed by plug-in module 51 (i.e., initialization of the transaction), while block 62 corresponds to the processing of plug-in module 52 (i.e., sending an opening statement), and so on. Upon completion of all of the individual stages, processing of the transaction is completed. Again, this processing contrasts the prior art, in which the transaction processing was not segregated into stages, but was instead combined into one block (see item 110 of FIGURE 9) so that even minor changes required the application as a whole to be rewritten or replaced.
In the embodiments described above, the processing of the network transactions is broken down into the seven stages of: initializing the transaction; sending an opening statement; getting a request; logging in and obtaining authorization; generating a response; sending the response; and terminating the transaction. These stages are used because processing for every network transaction includes these stages, although the sending of an opening statement may be optional. The processing of a network transaction will be described below to illustrate the functions of each of the stages.
In one embodiment, the processing of the network transactions is based upon the notion of a transaction processing pathway. A pathway is a type of communication that may be employed to carry on communications between the client and a server. For example, the client and server may set up a pathway for HTTP communications, POP communications, MMS communications, SMS communications, instant messaging, file transfers (via FTP), or the like. There may be several pathways set up between the client and server, each one for a different type of communications. The client and server use a particular pathway for communications of a corresponding type. A series of communications between the client and server using this pathway comprise a session. Each individual communication between the client and server (e.g., a request for a web page and the resulting service of that page) is a transaction. Thus, in a simple example (illustrated in FIGURE 10), a client and server may communicate by: initializing a pathway (71); initializing a session (72); processing a set of transactions (73-76); terminating the session (77); and then terminating the pathway (78).
Just as there may be multiple sessions within a pathway and multiple transactions within a session, there are multiple stages within the processing of each transaction. The stages of the transaction processing in one embodiment are illustrated in FIGURE 11. As shown in this figure, the overall processing of the transaction (80) consists of transaction initialization (81), sending an opening statement (82), getting a request from the client (83), logging in and obtaining authorization (84), generating a response (85), sending the response to the client (86) and terminating the transaction (87). As described above, these processing stages are implemented in one embodiment using individual plug-in modules that interface with the server application via an API. The API can be defined as described below. During initialization of the pathway, pathway parameters can be set up. An example is shown below. A preferred way of setting up the parameters is to use the method described in "System And Method For Program Configuration" (U.S. Patent Application No. 10/345,084, filed January 15, 2003), which is incorporated by reference as if set forth herein in its entirety). Other suitable methods could be used, however. Additionally, as with all stages, log information can be generated. typedef bool (*Pathway_Initialization)
( const Parameters &pafhway_parameters, Log &pathway_log
); Each new connection is considered a session. When a new connection is established, the step of session initialization occurs. An example is shown below. During this stage, parameters for the session are set up. Session parameters can make use of the pathway parameters, for example, to set up default or systemwide values. Session parameters exist only for the duration of the current session, and are unique to the current session (i.e. multiple concurrent sessions each have their own session parameters) typedef bool (*Session_Initialization)
(
Parameters &session_parameters, const Parameters &pafhway_parameters, Log &session_log, const Log &pathway_log Connection &connection
);
Each session comprises a series of transactions. During initialization of a new transaction, transaction parameters are set up. An example of the API definition for this stage is shown below. Like session parameters, transaction parameters exist only for a single transaction, typedef bool (*Transaction_Initialization)
(
Parameters &transaction_parameters, const Parameters &session_parameters, const Parameters &pathway_parameters, Log &transaction_log, const Log &session_log, int number_of_transactions );
Depending on the communication protocol, each transaction can begin with zero, one or a series of messages being sent from the system to the client. An example of the API definition for this stage is shown below. This stage may not be required in some types of transactions, typedef bool (*Send_Opening_Message) (
Parameters &transaction_parameters, const Parameters &session_parameters, const Parameters &pathway_parameters, Log &transaction_log, Connection &connection
);
Next, a request is received from the client. An example of the API definition for this stage is shown below. Depending on the nature of the communication protocol, a request optionally comprises a request header and/or a request buffer. typedef bool (*Get_Request)
(
Parameters &transaction_parameters, const Parameters &session_parameters, const Parameters &pathway_parameters, Header &request_header, Buffer &request_buffer Log &transaction_log, Connection &connection
); In the next stage of processing, authorization of the request is performed. An example of the
API definition for this stage is shown below. Authorization can be based on many different factors, including user ID, client IP address, account information, system usage information, etc. typedef bool (* Authorization)
( Parameters &transaction_parameters, const Parameters &sessionjparameters, const Parameters &pathway_parameters, Request &request, Log &transaction_log );
In the next stage of processing, the request is analyzed and a response is generated. An example of the API definition for this stage is shown below. In the case where the system is acting as a proxy, a secondary request may be generated to some other content server and that response can be optionally manipulated and put in place of the response header and buffer. typedef bool (*Generate_Response)
(
Parameters &transaction_parameters, const Parameters &session_parameters, const Parameters &pathway_parameters, const Header &request_header, const Buffer &request_buffer Header &response_header, Buffer &response_buffer Log &transaction_log );
It should be noted that the Generate_Response stage is the point at which the processing performed by a proxy typically differs from that of a server. In the case of a server, the information responsive to the client request is generated locally. In the case of the proxy, the proxy attempts to locally generate the information responsive to the request (e.g., by retrieving the information from a cache). If the proxy cannot provide the responsive information itself, the proxy forwards the request on behalf of the client to a server, which returns the responsive information to the proxy. In other words, the proxy either generates the requested information by itself, or it obtains the information from a server.
One or many modules can be used to issue requests to servers on behalf of the client (see the http_make_request_to_server module in the multi-task example below). A whole fleet of such modules, e.g.: pop_make_request_to_server, nntp_make_request_to_server, https_make_request_to_server, ftp_make_request_to_server, etc. Cross-protocol applications can be easily created by just plugging in a different make_request_to_server module. For example, HTTP requests can be converted to POP so that the web can be used to access email attachments. Further, many requests to servers could be made in response to receiving a single client request. For example, a proxy could: speed up the download of information by requesting information simultaneously from multiple servers, or could combine information from multiple different requests to the same server. Finally, the response is sent to the client. An example of the API definition for this stage is shown below. typedef bool (*Send_Response)
(
Parameters &transaction_parameters, const Parameters &session_parameters, const Parameters &pathway_parameters, ResponseHeader &responseHeader,
ResponseBuffer &responsebuffer Log &transaction_log, Connection &connection
); At the end of a transaction, a cleanup function can be called which can generate logs, free allocated resources etc. An example of the API definition for this stage is shown below, typedef bool (*Transaction_Termination)
(
Parameters &transaction_parameters, const Parameters &session_parameters, const Parameters &pafhway_parameters, Log &transaction_log, Connection &connection
); At the end of a session, the connection is closed and a cleanup function can be called which can generate logs, free allocated resources, etc. An example is shown below, typedef bool (*Session_Termination)
( const Parameters &sessionjparameters, const Parameters &pathway_parameters, Log &session_log, Connection &connection
); When the system is shut down, or a soft restart is required, the pathway is terminated. A cleanup function can be called at these times to generate logs, free allocated resources, etc. typedef bool (*Pathway_Termination)
( const Parameters &pathway_parameters, Log &pathway_log
);
If any of the functions for the stages return a false value, the transaction and session can be immediately terminated, and the connection closed. In the case of a false response from the Pathway_* functions, the pathway can be terminated, and connections will not be made or accepted. A new pathway can be created by calling an installation function. During the use of this pathway, each of the specified functions is called for the corresponding stage of processing (e.g., setting up the pathway and its sessions, and processing the transactions), bool Install_New_Pathway( const Pathway_Initialization pathway_initialization, const Session_Initialization session_initialization, const Transaction_Initialization transaction_initialization, const Send_Opening_Message send_opening_message, const Get_Request get_request, const Authorization authorization, const Generate_Response generate_response, const Send_Response send_response, const Transaction_Termination transaction_termination, const Session Termination session_termination, const Pathway_Termination pathway_termination ); Many simpler installation functions can be created on top of the general function set forth above by allowing the function caller to only specify functions for some of the pathway stages. Default functions are inserted for the non-specified stages. An example of this would be the function below, which allows for the creation of an HTTP module that can generate requests on the fly. bool Install_SimpleHTTPResonse_Pathway( const Generate Response generate response,
) { return Install_New_Pathway(
General_HTTP_Pathway_Initialization,
General_HTTP_Session_Initialization,
General_HTTP_Transaction_Initialization,
GeneralJrlTTP Send Opening Message, General_HTTP_Get_Request,
General HTTP Authorization, generate_response,
General HTTP Send Response,
General_HTTP_Transaction_Termination, General_HTTP_Session_Termination,
General HTTP Pathway Termination
); }
By decomposing the transaction processing system into these modular stages, e.g. using the
API specified here, the creation of new pathways to support different functionality and protocols becomes substantially easier than was the case for the methods of the prior art.
It should be noted that the pathways described above perform a single task. That is, they process each transaction in the same manner. As noted above, a pathway may alternatively be configured to perform multiple tasks. Thus, rather than dispatching requests to completely different programs, a pathway can be configured to dynamically select different series of modules to process a particular transaction. There can be substantial overlap and reuse of functionality between the different series of modules. An example which might perform one of several tasks in a web proxy is shown below. Send_Opening_Message ==> [do_nothing_module] Get_Request ==> [get_http_request_module]
Authorization ==> [http_proxy_authorization]
if (task is caching proxy) { Generate_Response ==> [http_check_cache]
==> [http_make_request_to_server] ==> [http_add_to_cache]
} else if (task is transformation proxy) { Generate_Response ==> [http_make_request_to_server]
==> [optimize_content]
} else if (task is pass-thru proxy) {
Generate_Response ==> [http_make_request_to_server] } else if (task is web server) {
Generate_Response ==> [get_file_off_disk]
}
Send_Response ==> [http_send_response]
Transaction_Termination ==> [do_nothing_module]
In this example, "<stage> ==> [modules]" means that that identified transaction stage (<stage>) is associated with the list of modules ([modules]) following the arrows (==>). It can be seen in this example that most of the modules are shared across all tasks (e.g. get_http_request_rnodule is used by all), while other modules (e.g. http_make_request_to_server) used only for certain ones of the tasks.
The benefits and advantages which may be provided by the present invention have been described above with regard to specific embodiments. These benefits and advantages, and any elements or limitations that may cause them to occur or to become more pronounced are not to be construed as critical, required, or essential features of any or all of the claims. As used herein, the terms "comprises," "comprising," or any other variations thereof, are intended to be interpreted as non-exclusively including the elements or limitations which follow those terms. Accordingly, a system, method, or other embodiment that comprises a set of elements is not limited to only those elements, and may include other elements not expressly listed or inherent to the claimed embodiment. While the present invention has been described with reference to particular embodiments, it should be understood that the embodiments are illustrative and that the scope of the invention is not limited to these embodiments. Many variations, modifications, additions and improvements to the embodiments described above are possible. It is contemplated that these variations, modifications, additions and improvements fall within the scope of the invention as detailed within the following claims.
APPENDIX I NETWORK PROXY PLATFORM AND ITS USE
Reference is made in detail to exemplary embodiments of the network proxy platform and its use, examples of which are illustrated in the accompanying drawings. Wherever possible, the same reference numbers will be used throughout the drawings to refer to the same or like parts (elements). A method and system can comprise a software architecture that allows different applications in the same or different communications protocols to interact with shared resources within a computer. More specifically, code for a computer program may be written to increase the amount of code that is generic to (i.e., shared by) more than one application or communications protocol and reduce the amount of code that handle application-specific or protocol-specific actions. In one embodiment, a transaction may be broken down into a set of discrete actions. The discrete actions may include functions that are common to more than one network application. These functions may be performed by the shared resources. For each action, code that is specific to a particular protocol or application may be written as part of a software plug-in module with function calls to functions of the shared resources. Each software plug-in module may substantially act similar to a manager for the action, where common tasks are delegated to the shared resources and the module performs specialized functions. Each protocol may have its own set of software plug-in modules for the discrete actions. New applications and support for new protocols can be added by developing a new set of plug-in modules instead of writing an entirely new program. New applications for the same protocol may be developed by replacing or editing as little as one plug-in module from a different application in the same protocol. The software architecture can reduce development time, increase the likelihood that new applications may be developed quickly with fewer changes from an existing application, more protocols will be properly supported, and reduce the burden on hardware and software resources.
A few terms are defined or clarified to aid in understanding the descriptions that follow. A network includes an interconnected set of server and client computers over a publicly available medium (e.g., the Internet) or over an internal (company-owned) system. A user at a client computer may gain access to the network using a network access provider. An Internet Service Provider ("ISP") is a common type of network access provider.
As used herein, the terms "comprises," "comprising," "includes," "including," "has," "having" or any other variation thereof, are intended to cover a non-exclusive inclusion. For example, a method, process, article, or apparatus that comprises a list of elements is not necessarily limited to only those elements but may include other elements not expressly listed or inherent to such method, process, article, or apparatus. Further, unless expressly stated to the contrary, "or" refers to an inclusive or and not to an exclusive or. For example, a condition A or B is satisfied by any one of the following: A is true (or present) and B is false (or not present), A is false (or not present) and B is true (or present), and both A and B are true (or present).
The term "software component" is intended to mean at least a portion of a computer program (i.e., a software application). An example includes a software plug-in module or the like. Different software components may reside in the same computer program or in different computer programs on the same computer or different computers.
Before discussing embodiments of the network proxy platform, an exemplary hardware architecture for using network proxy platform is described. FIG. 1 illustrates such an exemplary hardware architecture and includes client computer 120, proxy computer 140, and server computer 160. Client computer 120 and proxy computer 140 are bi-directionally coupled to network 11, and proxy computer 140 and server computer 160 are bi-directionally coupled to network 13. Each of networks 11 and 13 may be an internal network or an external network (e.g., the Internet). In one embodiment, networks 11 and 13 may be the same network, such as the Internet. Computers 140 and 160 may be bi-directionally coupled to databases 14 and 16, respectively. Client computer 120 can include a desktop computer, a laptop computer, a personal digital assistant, a cellular phone, or nearly other device capable of communicating over network 11. Other client computers (not shown) may also be bi-directionally coupled to network 11. The proxy computer 140 can be a server computer, but in another embodiment may be a client computer. Other server computers (not shown) similar to server computer 160 may be bi-directionally coupled to network 13.
In an alternative embodiment, each of proxy computer 140 and server computer 160 may be replaced by a plurality of computers (not shown) that may be interconnected to each other over a network or a combination of networks. For simplicity, a single system is shown for each of proxy computer 140 and server computer 160. The client computer 120 can include central processing unit ("CPU") 122, read-only memory
("ROM") 124, random access memory ("RAM") 126, hard drive ("HD") or storage memory 128, and input/output device(s) ("I/O") 129. I/O 129 can include a keyboard, monitor, printer, electronic pointing device (e.g., mouse, trackball, stylus, etc.), or the like. Proxy computer 140 can include CPU 142, ROM 144, RAM 146, HD 148, and I/O 149, and server computer 160 can include CPU 162, ROM 164, RAM 166, HD 168, and I/O 169.
Each of the computers in FIG. 1 may have more than one CPU, ROM, RAM, HD, I/O, or other hardware components. For simplicity, each computer is illustrated as having one of each of the hardware components, even if more than one is used. Note that FIG. 1 is a simplification of an exemplary hardware configuration. Many other alternative hardware configurations are possible and known to skilled artisans. Each of computers 120, 140, and 160 is an example of a data processing system. ROM 124, 144, and 164; RAM 126, 146, and 166; HD 128, 148, and 168; and databases 14 and 16 can include media that can be read by CPU 122, 142, or 162. Therefore, each of these types of memories includes a data processing system readable medium. These memories may be internal or external to computers 120, 140, or 160.
Portions of the methods described herein may be implemented in suitable software code that may reside within ROM 124, 144, or 164, RAM 126, 146, or 166, or HD 128, 148, or 168. The instructions in an embodiment may be contained on a data storage device, such as HD 148. FIG. 2 illustrates a combination of software code elements 204, 206, and 208 that are embodied within a data processing system readable medium 202, on HD 148. Alternatively, the instructions may be stored as software code elements on a DASD array, magnetic tape, floppy diskette, optical storage device, or other appropriate data processing system readable medium or storage device.
In an illustrative embodiment, the computer-executable instructions may be lines of compiled assembly, C, C1"1", Java, or other language code. Other architectures may be used. For example, the functions of any one of the computers may be performed by a different computer shown in FIG. 1. Additionally, a computer program or its software components with such code may be embodied in more than one data processing system readable medium in more than one computer.
In the hardware configuration above, the various software components may reside on a single computer or on any combination of separate computers. In alternative embodiments, some or all of the software components may reside on the same computer. For example, one or more the software component(s) of the proxy computer 140 could reside on the client computer 120, the server computer 160, or both. In still another embodiment, the proxy computer 140 and database 14 may not be required if the functions performed by the proxy computer 140 are merged into client computer 120 or server computer 160. In such an embodiment, the client computer 120 and server computer 160 may be bi-directionally coupled to the same network (not shown in FIG. 1).
Communications between any of the computers in FIG. 1 can be accomplished using electronic, optical, radio-frequency, or other signals. For example, when a user is at client computer 120, client computer 120 may convert the signals to a human understandable form when sending a communication to the user and may convert input from a human to appropriate electronic, optical, radio-frequency, or other signals to be used by, computers 140 or 160. Similarly, when an operator is at server computer 160, server computer 160 may convert the signals to a human understandable form when sending a communication to the operator and may convert input from a human to appropriate electronic, optical, radio-frequency, or other signals to be used by computers 120, 140, or 160.
Attention is now directed to the methodology of developing a software architecture for the software in accordance with one embodiment. The method can comprise breaking down a transaction into a set of discrete actions. The actual definitions used for separating the transaction into the discrete actions is variable and may be selected by skilled artisans in manners that best suit their particular transactions, hardware requirements, and software requirements. The method can also include determining which functions within the set of discrete actions are common to more than one application. As more are identified, the number of shared resources can increase and the amount of application-specific code can be decreased. Therefore, skilled artisans are encouraged to examine the software from many different levels of abstraction to discover potential shared resources that may otherwise be missed.
The method can further comprise generating software components for the discrete actions. A set of software plug-in modules can correspond to the different discrete actions for the transaction. Each application may have its own set of software plug-in modules. The amount of code within each software plug-in module should be kept relatively low if the identification of shared resources was performed properly. To the extent code for any shared resources does not currently exist, code for the shared resources should be generated to maximize its ability to be used by as many different plug-in modules as possible. At least two of the software plug-in modules for different applications, whether they use the same or different protocols, can make function calls to any one or more of the shared resources. For different applications using the same protocol, only a request manipulation plug-in module, a content manipulation plug-in module, or both may be the only modules changed. Therefore, creating new application for the same protocol may be simplified because other plug-in modules used for the application may be copied from another application using the same protocol. These other plug-in modules may be substantially the same between the applications. By replacing or editing the request manipulation plug-in module, content manipulation plug-in module, or both, new applications may be developed very quickly.
Regarding applications in different protocols, each protocol may have a module that performs substantially the same action as any or all of the similar module(s) for the other protocol(s) though reducing this duplicative code by combining the common functionality is preferable.
Attention is now directed to the software architecture of the software in accordance with one embodiment. The software architecture is illustrated in FIGs. 3 and 4 and is directed towards an electronic transaction that can be performed over a network. A basic idea behind the architecture is to allow programming code for shared resources to be commonly used by as many different network applications as possible. Note that all of the resources may or may not be shared by all the applications. The programming code for each application-specific plug-in module may include code to connect the incoming communication in any supported application to the shared resources. By limiting the code within the plug-in modules, a user of the software architecture can reduce development time, increase the likelihood that more applications in the same or different protocols will be properly supported (especially proprietary protocols that may be used by only a limited number of computers or users), and reduce the burden on hardware and software resources for different applications because only relatively small plug-in modules may be used.
In FIG. 3, each row of boxes 3200, 3400, and 3600 represents different applications in the same or different protocols. For example, row 3200 may represent a first application using HTTP, row 3400 may represent a different application using HTTP, and row 3600 may represent yet another application in a different protocol, such as POP, SNMP, WAP, and the like. Note that the series of dots between rows 3400 and 3600 indicate that many other applications in the same or different protocols may be present. Additionally, the architecture may be configured to allow the addition of future applications. The software architecture easily supports at least three different and potentially many more protocols.
Referring to row 3200, each of the boxes 3202 through 3214 represents different stages (actions) that may occur during an electronic transaction. For example, box 3202 may represent a request reception plug-in module, box 3204 may represent an authorization plug-in module, box 3206 may represent a request manipulation plug-in module, box 3208 may represent a content retrieval plug-in module, box 3210 may represents a content manipulation plug-in module, box 3212 may represent a content delivery plug-in module, and box 3214 may represent a post-response communication plug-in module (e.g., acknowledgement, billing, etc.). Each module may correspond to one or more of the discrete actions. Details about the individual plug-in modules are described later in this specification. Note that the other rows 3400 and 3600 include corresponding boxes for substantially the same types of actions except that they are designed for different applications. More specifically, box 3402 represents an incoming message reception plug-in module for a different application using the same protocol as box 3202, and box 3602 represents an incoming message reception plug-in module for yet another application using a different protocol compared to box 3202. New applications that make use of already-supported protocols can be developed with a minimum of effort. This is achieved by creating a new row, which makes use of protocol specific plug-ins used in another row and combines them with other plug-ins developed for the specific application at hand. Some plug-in modules may be substantially the same for many different applications in the same protocol. In different protocols, the plug-in modules for at least some of the different applications may provide substantially the same functionality, although the code within those plug-in modules may be different compared to similar modules for the other protocols.
Within the software architecture, shared resources are illustrated as planes 3102, 3104, and 3106 that lie beneath each of the rows 3200, 3400, and 3600. Referring to FIG. 4, interfaces may be made to each of the shared resources for each plug-in module. Specifically referring to box 3214, functional connectivity 4102 links module 3214 and shared resource 3102. Likewise, functional connectivity 4104 links module 3214 and shared resource 3104, and functional connectivity 4106 links module 3214 shared resource 3106. Links 4102, 4104, and 4106 can be achieved by function calls to the shared resources. Examples of the shared resources may include a content cache, a parameter cache, a connection pool, a domain name server cache, a clock, a counter, a database, a global variables space (e.g., a logging database), or the like. A list of potential shared resources is nearly limitless. Note that not all shared resources may be connected to all modules along a row. For example, modules 3202 and 3204 may not need access to the content cache because they may not receive or process content returned for a request. Each connection from a client may be handled independently on its own thread. However in other embodiments, fewer threads or a single thread can be used to operate all connections to a specific row that supports a particular application or protocol. Unless stated to the contrary, the method below is described from the perspective of proxy computer 140.
FIG. 5 includes a flow diagram of a method of performing an electronic transaction that corresponds to the software plug-in modules that lie along any of rows 3200, 3400, and 3600. Note that all modules are not required and that functions of some modules may be combined with others (e.g., authorization may be part of processing an initial request). The process flow diagram will be briefly covered followed by a more detailed description of each module.
The method can comprise receiving a request from a client computer using a request reception plug-in module (block 502) and performing authorization using an authorization plug-in module (block 504). The method can also comprise manipulating a request using a request manipulation plug-in module (block 512). The method can further comprise retrieving content using a content retrieval plug-in module (block 522). The method can yet further comprise manipulating returned content using a content manipulation plug-in module (block 532) and sending the modified content to the client computer using a content delivery plug-in module (block 534). The method can still further comprise processing post-response communications using a post-response plug-in module (block 542). Note that not all of the activities described in the process flow diagram are required, that a limitation within a specific activity may not be required, and that further activities may be performed in addition to those illustrated. Also, some of the activities may be performed substantially simultaneously during with other activities. After reading this specification, skilled artisans will be capable of determining what activities can be used for their specific needs. Attention is now directed to the protocol-specific plug-in modules along the rows 3200, 3400, and 3600 and how they are related to the activities illustrated in FIG. 5. Although the discussion is directed to row 3200, the corresponding modules along other rows can provide similar functionality. Also, in the example below, client computer 120 is sending a request for content to proxy computer 140, and server computer 160 is providing content in response to the request. The flow of information could be in the opposite direction (server computer 160 seeking information from client computer 120). The method can comprise receiving a request from client computer 120 using request reception plug-in module 3202 (block 502 in FIG. 5). Request reception plug-in module 3202 can be used when a request from client computer 120 is received or accessed by proxy computer 140. Module 3202 can initially generate an associative array from portions of the header of the request. Part or all of the associative array may be used by the other modules along the same row. The associative array may provide information that can be part of function calls to the shared resources. Any or all the data (including the associative array) may be passed from any prior plug-in module (e.g., module 3202) to any or all the subsequent plug-in modules along the same row (e.g., 3204, 3206, 3208, 3210, 3212, or 3214). The method can also comprise performing authorization using authorization plug-in module
3204 (block 504). The authorization plug-in module 3204 is optional and can be used for determining whether a user at client computer 120 has proper authorization. The authorization modules may be based on an Internet Protocol ("IP") address or a name and a password. Module 3204 may send the IP address or name and password to a shared resource to determine if the user is allowed access. The method can further comprise manipulating the request using request manipulation plug-in module 3206 (block 512). Request manipulation plug-in module 3206 may be used to modify, replace, or otherwise manipulate the request. For example, proxy computer 140 may have code to redirect a URL within a request to a different URL. More specifically, proxy computer 140 may make a function call to that shared resource using the requested URL. The shared resource may pass the different URL back to module 3206. Module 3206 may have the logic to put the different URL in the correct protocol, so that it will be understood by a computer that may receive the redirected request.
The method can yet further comprise retrieving content using content retrieval plug-in module 3208 (block 522). Content retrieval plug-in module 3208 may be used to send the request and receive or access content in response to the original request or manipulated request. More specifically, a request originating from client computer 120 may have been processed by proxy computer 140 before being received by server computer 160. Content from server computer 160, in response to the processed request from proxy computer 140, would be processed using module 3208. Similar to module 3202, the code may parse the content from server computer 160 into a header portion and a content portion and append that information onto a previously generated associative array. The method can still further comprise manipulating returned content from the server computer using content manipulation plug-in module 3210 (block 532). Content manipulation plug- in module 3210 may be used to add or modify content before sending it to client computer 120. More specifically, proxy computer 140 may add advertisements or supplementary information from third parties to the content provided by server computer 160. In an alternative embodiment, part or all of the content originating from server computer 160 may be deleted or replaced with other content. The method can comprise sending the modified content to the client computer using content delivery plug-in module 3212 (block 534). Content delivery plug-in module 3212 may be used to route the content, after manipulation, if any, to client computer 120. Some of the information in the associative array generated when the original request from client computer 120 was processed may be used by module 3212 when sending the outgoing content to client computer 120.
The method can also comprise processing post-response communications using post-response plug-in module 3214 (block 542). Post-response communication plug-in module 3214 may be used for acknowledgement, billing, or other purposes. For example, after content is successfully sent to client computer 120 from module 3212, module 3124 could then charge the user's credit card for that transaction. Alternatively, module 3214 may look for a signal that service to or from client computer 120 or server computer 160 is being terminated for the current transaction. Such post-response processing may be helpful in avoiding invoices or other bills sent to a user at client computer 120 if a product or service was either incomplete or defective or to properly reflect the connect time for a transaction. Along similar lines, one of the planes as illustrated in FIG. 3 may include global space variables that may need to be used by other shared resources, proxy computer 140, or the plug-in modules. System statistics are examples of information that may be within a global variable space. This information may be useful to proxy computer 140 or another computer, such as client computer 120 or server computer 160, in monitoring activity. The statistics may include how many computers are connected to proxy computer 140, the amount of time each of those computers are connected to proxy computer 140, the amount of or time lapsed during transactions being processed through proxy computer 140, or the like.
These global variables may be used in conjunction with a module, such as authorization module 3204. If too many users are currently logged into proxy computer 140, authorization may be denied even if the computer attempting a connection to proxy computer 140 has proper security clearance. After another transaction by another client computer is terminated, a signal from module 3214 can be sent to the logging system within the shared resources. A new client computer may now gain access to the services provided by proxy computer 140 after the connection from the other transaction is terminated. Attention is now directed to more specific activities that may be performed by a specific module, and how that specific module may interact with other modules for the same transaction using a specific application. The process flow diagram illustrated in FIGs. 6-8 is used to describe some of the specific activities. Again, unless stated to the contrary, the method is primarily described from the perspective of proxy computer 140. To aid in understanding the method in FIGs. 6-8, a specific example is used and occasionally referenced. In the example, an incoming communication may be a request from client computer 120 sent to proxy computer 140 for www.yahoo.com. The client computer 120 is communicating using HTTP, using a Netscape™ browser (of AOL Time Warner, Inc. of New York, New York), and has a MacOS X™ operating system (of Apple Computer, Inc. of Cupertino, California).
Referring to FIG. 6, the method can comprise receiving an incoming communication for a specific application (block 602). The communication can comprise a request, a message, or other form of communication. The communication can be sent by client computer 120 and received or accessed by proxy computer 140 via network 11. Proxy computer 140 can access or read at least a portion of the incoming communication and determine the specific application for the communication. In the example, the incoming communication is a request from client computer 120 sent to proxy computer 140 for www.yahoo.com. The incoming communication will also contain other information within the header of the request. In the example, the other information can include the browser and operating system of client computer 120.
After determining the application for the communication, proxy computer 140 can determine which row 3200, 3400, 3600, or other or row of plug-in modules will be used for the transaction. At this point in the method, proxy computer 140 may activate any or all of the plug-in modules for the row corresponding to the specific application. In one embodiment, plug-in modules within each row may be activated only as they are first used. Referring to the example, the request is for an application corresponding to row 3200. Therefore, plug-in module 3202 may be activated. If the communication is for another application, plug-in module 3402 or 3602 may be activated for the particular application.
The method can further comprise routing the incoming communication to a first software plug-in module for the specific application (block 604). Proxy computer 140 can route the request to request reception software plug-in module 3202 because the incoming request uses the application corresponding to row 3200. The method can comprise parsing the incoming communication into a header portion and a content portion (block 622). The parsing can be performed by module 3202 to obtain information from the request.
The method can also comprise generating an associative array using information contained within the header portion (block 624). The associative array can include nearly any finite number of rows. Each row can comprise a key and a value. The key can comprise a parameter within the header portion, and the value can comprise a value for that parameter. In general, the header portion may include one or more lines of a command followed by a command argument. The command may be a key, and the command argument may be the corresponding value for the key. The associative array may be searched by the key or the value. By knowing conventions used by each of the protocols for incoming communications and the characteristics of headers used for those protocols, formation of the associative array can be performed without complicated coding requirements. The associative array is flexible regarding the number of rows and allows different sizes of associative arrays to be used for different protocols.
For HTTP, one of the lines within the header may include a line with "User- Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:l.l) Gecko." The key will be "User-Agent," and the value will be " Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:l.l) Gecko." For POP, a line may include "RETR 27," where 27 is an object identifier for is a particular item to be retrieved. The key will be "COMMAND," and the value will be "RETR." A second entry will be made with a key of "ARGUMENT" and a value of "27." For SNMP, a line may include "get 47.12.112.38," where 47.12.112.38 corresponds to an object identifier. The key will be "COMMAND", and the value will be "GET," and a second entry will have the key "ARGUMENT" and the value "47.12.112.38."
The content may or may not be part of the associative array. If it is, the associative array can include a key of "CONTENT" and the entire content data block as the value. For an image, the content may be a very large amount of data. Alternatively, the associative array may be paired with a data pointer that points to the data block, rather than incorporating it directly into the associative array.
Turning to the example, the associative array may include information as shown in Table 1 below. Descriptive names are used instead of actual names to aid in understanding the associative array. Also, the associative array may include many more rows. Because the associative array may be searched by key or value, the order of the rows is unimportant.
Table 1. Exemplary associative array
Figure imgf000029_0001
The method can also comprise generating a function call to at least one of the shared resources using data within the associative array (block 702 in FIG. 7). In the example, proxy computer 140 can make a function call to a shared resource, more specifically to a clock (shared resource) and a logging system (another shared resource) to get the time and log the beginning of the transaction. The logging information may include the time and a transaction identifier. Note that some of the information within the associative array could be sent with the function call to the shared resource. The method can further comprise receiving data from the function call (block 704). In the example, the transaction identifier may be passed back to module 3202. The method can still further comprise processing data from the function call with other code within the first software module (block 706). Module 3202 may be more focused on processing the incoming message rather than processing data coming back from the function call. Other modules, such as the content deliver plug- in module 3212, may perform such data processing. Note that the application-specific processing may occur before, during, or after function call(s), if any, are made to the shared resource(s).
A determination may be made whether the first software plug-m module is the last software plug-m module (diamond 722). If so, the method may end. Otherwise, the method may continue with passing any or all of the data (including the associative array) from a prior software plug-m module to the next software plug-m module (block 802 in FIG. 8). In the example, the next software plug-m module is authonzation module 3204. Authorization module 3204 may use some of the information that was collected or generated by module 3202. Passing the information reduces the load on hardware by not sending a communication from proxy computer 140 to another computer (e.g., client computer 120) or making the same or similar function call to a shared resource for the same information.
The method can also compπse generating a function call to at least one of the shared resources using data within the associative array (block 822). Authorization module 3204 may make a function call to the parameter system to determine if the user has proper authorization, whether access can be granted (whether number of users currently connected to proxy computer has exceeded its limits), priority of connection (level or speed of service to be provided), etc. Module 3204 may pass user name and password when making the function call to the logging system Module 3204 may also make a function call to the shared clock to obtain a time for the action.
The method can also compπse receiving data from the function call (block 824). The data may include information regarding whether user at client computer 120 has proper secunty clearance, whether the connection could be made, priority of the connection, and the like. The method can further comprise processing data from the function call with other code within the current software plug-m module (block 826). An example may include sending a communication from proxy computer 140 to client computer 120 informing the user whether the connection was made. Alternatively, no further processing may occur with module 3204.
A determination may be made whether the current software plug-in module is the last software plug-m module (diamond 842). If so, the method may end. Otherwise, the method may continue with block 802 m FIG. 8 and proceed in an iterative manner until the last software plug-m module is reached. The remaining modules along row 3200 will be addressed to complete the example transaction to give a better understanding of actions within the modules and some function calls that those modules may make. More or fewer modules may be used. Also, more, fewer, or different function calls may be made by the modules.
Data can be passed to request manipulation software plug-in module 3206. A function call can be made to a shared resource to determine if the request should be changed. The function call may pass information that a request for www.yahoo.com has been received or accessed. The shared resource may include logic to replace the original client request with www.***.com. The associative array may be changed to replace www.yahoo.com with www.***.com or be appended to note that the manipulated request is www.***.com.
Module 3208 may perform the content retrieval. A function call can be made to a content cache (shared resource) at proxy computer 140 to determine if the content cache includes a network page for www.***.com specifically formatted for a computer having a Netscape™ browser and a MacOS X™ operating system. Note that the browser and operating system information can be obtained from the associative array. If the content cache has the network page, it can be passed to module 3208. Otherwise, module 3208 may formulate an HTTP request to server computer 160 requesting the network page for the specific browser and operating system of client computer 120. After proxy computer 140 obtains the proper network page from server computer 160, module 3208 may send a function call to the content cache at proxy computer 140 to cache the network page. The proper network page and other information previously collected may be sent to module 3210.
Content manipulation module 3210 may delete, add, or replace some or all of the content within the proper network page returned. For example, when the proper Google network page is received or accessed, module 3210 may add advertisement(s) around the border(s) of the page. A function call can be made to a shared resource to determine which advertisement(s) should be added. The logging system may keep track of which advertisement is being added, whose advertisement it is, and how many times the advertisement has been added during the current billing cycle. The logging system, which is a shared resource, may access the counter (another shared resource) by itself. In other works, some or all of the shared resources may interact with each other without requiring an application-specific software plug-in module to intervene. The manipulated content and other information may be passed to module 3212.
Content delivery software plug-in module 3212 may take the Google network page formatted for a Netscape™ browser and MacOS X™ operating system and the advertisement(s) from module 3210 and prepare a communication using HTTP. The communication can be sent from proxy computer 140 to client computer 120. Function calls can be made to the logging system to note the actual content sent to client computer 120 and time sent. Any or all information collected or generated by modules 3202-3212 may be passed to module 3214. Post-response communications module 3214 may be used to track usage or billing information. At the end of a transaction, module 3214 may make a function call to the clock to determine the current time, and make another function call to the logging system to determine how much time lapsed during the transaction and record any billing information. The billing information may be within a shared resource managed by an accounting department. Billing information for the user at client computer 120 may be passed from one of the shared resources to module 3214, which may return some of the information for the user at client computer 120. Proxy computer 140 may send a message to client computer 120 similar to "You were connected for 2.1 minutes and were charged $1.27. Thank you for using our service." Alternatively, no message may be sent and the method may end.
Note that not all of the activities described in the process flow diagram in FIGs. 6-8 are required, that a limitation within a specific activity may not be required, and that further activities may be performed in addition to those illustrated. Also, some of the activities may be performed substantially simultaneously during with other activities. After reading this specification, skilled artisans will be capable of determining what activities can be used for their specific needs.
The power of creating new applications for the same protocol may be better understood with the flow diagram in FIG. 9 and an example. In one embodiment, different applications may be generated for different priorities of users for a network site. The communication protocol may use HTTP. The method can comprise developing a first set of plug-in modules for a first application (block 902). The set may correspond to row 3200 and be directed to premium users of a network site. A new application may need to be developed for regular users of the network site. The communication protocol may also use HTTP. The method can comprise copying the first set of plug- in modules to form a second set of plug-in modules (block 922).
For the new application, only the request manipulation plug-in module, the content manipulation plug-in module, or both may be replaced. The remainder of the plug-in modules may be unchanged and be substantially the same as the remainder of the plug-in modules for the first application.
The method may comprise replacing a first request manipulation plug-in module with a second request manipulation plug-in module for a second application (block 924). For example, the premium user may have access to some network pages that the regular user may not. If the regular user requests a premium page, the second request manipulation module may direct the regular user to another network page for which the regular user has proper access.
The method may also comprise replacing a first content manipulation plug-in module with a second content manipulation plug-in module for the second application (block 926). The premium user may have only 10 percent of his or her window occupied by advertisements, whereas the regular user may have 50 percent of his or her window occupied by advertisements. The second content manipulation module may reformat the retrieved content to allow for more advertising space. The second content manipulation module may also access the shared resources to obtain the advertisements and keep track of which advertisements were used. Device dependent optimization of network pages (desktop computer vs. cellular phone, etc.) can be achieved by plugging in a module which transcodes content using settings developed for the particular device that made the initial request. After one or both of the request manipulation and content manipulation modules are replaced, the method can still further comprise executing the second application using the second set of plug-in modules (block 942).
Note that while the example focused more on replacing specific modules, in other embodiments, those modules may be generated by editing code within the corresponding modules within the first set for the first application.
After reading this specification, skilled artisans will appreciate that entirely different applications, using the same network protocol, can be developed by simply inserting new plug-in module(s) at the request manipulation location, the content request location, or both locations.
In other embodiments, the method and system may be used for nearly any other network communications. As an example, client computer 120 may make a request for information within a database located at server computer 160. The request may be handled in a manner similar to a request for a network page. If the user does not have proper authorization to all information within a request, the request manipulation module may request only that information for which the user has property access or the content manipulation module may add information stating that the user does not have proper access to some or all the information.
In another embodiment, the multiple-protocol software architecture and plug-in modules may be installed in client computer 120 or server computer 160. Not all modules in proxy computer 140 may be needed by client computer 120 or server computer 160. Authorization modules 3204, 3404, and 3604 may not be used or can be coded to allow authorization (always authorized) at client computer 120. The content manipulation modules 3210, 3410, and 3610 may not be used by the server computer 160. After reading this specification, skilled artisans are capable of determine which modules are needed and which ones can be eliminated or bypassed (module exists but passes information through without performing any other significant activity).
The software components can be designed to maximize their ability use shared resources while minimizing the amount of code used for application-specific operations. Therefore, relatively smaller plug-in modules (compared to the shared resources) may be used to access the shared resources illustrated in the planes below the modules. In this manner, less code needs to be written for a new protocol compared to the prior-art method of writing or copying and modifying an entire program for a specific protocol. For applications in the same protocol, the specific coding requirements may be much less. Furthermore, protocols are more likely to be supported because the coding requirements are less, and therefore, may be generated for protocols that have relatively fewer users compared to other protocols. The method and system are significantly more efficient in both time and cost compared to existing prior-art methods dealing with the problem of many different applications in the same or different protocols.
Benefits, other advantages, and solutions to problems have been described above with regard to specific embodiments. However, the benefits, advantages, solutions to problems, and any element(s) that may cause any benefit, advantage, or solution to occur or become more pronounced are not to be construed as a critical, required, or essential feature or element of any or all the claims.
Figure imgf000035_0001
FIG.1
Figure imgf000036_0001
FIG. 2
Figure imgf000037_0001
FIG 3
Figure imgf000037_0002
Figure imgf000038_0001
FIG. 5
Figure imgf000039_0001
FIG. 6
Figure imgf000040_0001
FIG. 7
Figure imgf000041_0001
FIG. 8
Figure imgf000042_0001
FIG. 9

Claims

CLAIMS 1. A software program product embodied in a computer-readable medium, comprising: an application programming interface (API); wherein the API defines a series of interfaces to corresponding plug-in processing modules; wherein each interface corresponds to a stage of processing of a transaction; and wherein the API conveys transaction information from an interface to a plug-in module for a current stage of processing to an interface to a plug-in module for a subsequent stage of processing.
2. The software program product of claim 1 , wherein the series of interfaces correspond to stages of processing of a network transaction.
3. The software program product of claim 2, wherein the stages of processing comprise: initializing a transaction; getting a request; logging in and obtaining authorization; generating a response; sending the response; and terminating the transaction.
4. The software program product of claim 3, wherein the stages of processing further comprise sending an opening statement.
5. The software program product of claim 1 , further comprising a plurality of plug-in modules, wherein each of the plurality of plug-in modules corresponds to a unique one of the stages of processing.
6. The software program product of claim 5, wherein one of the plug-in modules is configured to initialize a transaction, one of the plug-in modules is configured to get a request, one of the plug-in modules is configured to log in and obtain authorization, one of the plug-in modules is configured to generate a response, one of the plug-in modules is configured to send the response and one of the plug-in modules is configured to terminate the transaction.
7. The software program product of claim 1 , wherein the API is a component of a network transaction processing application.
8. The software program product of claim 7, wherein the network transaction processing application is configured to dynamically establish communication pathways.
9. The software program product of claim 8, wherein the network transaction processing application is configured to establish a plurality of communication pathways, wherein the communication pathways comprise at least a first pathway configured to process transactions according to a first protocol and a second pathway configured to process transactions according to a second protocol which is different from the first protocol.
10. The software program product of claim 9, wherein the different protocols are embodied in different plug-in modules.
11. The software program product of claim 8, wherein the network transaction processing application is configured to establish a plurality of communication pathways, wherein the communication pathways comprise at least a first pathway configured to provide a first functionality and a second pathway configured to provide a second functionality which is different from the first functionality.
12. The software program product of claim 11, wherein the different functionalities are embodied in different plug-in modules.
13. The software program product of claim 1, wherein the API further defines an interface to a plug-in module for initiating a session.
14. The software program product of claim 1, wherein the API further defines an interface to a plug-in module for terminating a session.
15. The software program product of claim 1 , wherein the API further defines an interface to a plug-in module for initiating a pathway.
16. The software program product of claim 1 , wherein the API further defines an interface to a plug-in module for terminating a pathway.
17. A method comprising: defining a plurality of interfaces, wherein each interface corresponds to a stage of processing of a network transaction; providing a plurality of plug-in processing modules corresponding to the interfaces; and passing transaction information from a plug-in processing module corresponding to a current stage of processing to a plug-in processing module corresponding to a subsequent stage of processing via the corresponding interfaces.
18. The method of claim 17, wherein the series of interfaces correspond to stages of processing of a network transaction.
19. The method of claim 18, wherein the stages of processing comprise: initializing a transaction; getting a request; logging in and obtaining authorization; generating a response; sending the response; and terminating the transaction.
20. The method of claim 19, wherein the stages of processing further comprise sending an opening statement.
21. The method of claim 17, further comprising replacing one or more current plug-in processing modules with corresponding replacement plug-in processing modules.
22. The method of claim 21 , wherein the current plug-in processing modules use a first protocol and the replacement plug-in processing modules use a different protocol.
23. The method of claim 21 , wherein the current plug-in processing modules provide a first functionality, and the replacement plug-in processing modules provide a different functionality.
24. The method of claim 21 , wherein replacing the one or more current plug-in processing modules with the corresponding replacement plug-in processing modules is performed dynamically.
PCT/US2003/003611 2002-02-07 2003-02-07 A plug-in api for modular network transaction processing WO2003069475A2 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
AU2003209028A AU2003209028A1 (en) 2002-02-07 2003-02-07 A plug-in api for modular network transaction processing

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US35497602P 2002-02-07 2002-02-07
US60/354,976 2002-02-07
US10/342,113 US7073178B2 (en) 2002-01-18 2003-01-14 Method and system of performing transactions using shared resources and different applications
US10/342,113 2003-01-14

Publications (2)

Publication Number Publication Date
WO2003069475A2 true WO2003069475A2 (en) 2003-08-21
WO2003069475A3 WO2003069475A3 (en) 2004-08-19

Family

ID=27737371

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/US2003/003611 WO2003069475A2 (en) 2002-02-07 2003-02-07 A plug-in api for modular network transaction processing

Country Status (2)

Country Link
AU (1) AU2003209028A1 (en)
WO (1) WO2003069475A2 (en)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2006113107A1 (en) * 2005-04-18 2006-10-26 Hewlett-Packard Development Company, L.P. Configurable functionality chaining
EP3451586A4 (en) * 2016-06-22 2019-06-12 Bai, Yang Service-oriented modular system architecture
US20220058179A1 (en) * 2020-08-24 2022-02-24 International Business Machines Corporation Executing database transactions

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0807883A2 (en) * 1996-05-06 1997-11-19 Philips Patentverwaltung GmbH Communications system with means for exchanging software processes

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0807883A2 (en) * 1996-05-06 1997-11-19 Philips Patentverwaltung GmbH Communications system with means for exchanging software processes

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
"MAPPING PROTOCOL REQUESTS TO UNIFORM RESOURCE LOCATORS" IBM TECHNICAL DISCLOSURE BULLETIN, IBM CORP. NEW YORK, US, vol. 39, no. 5, 1 May 1996 (1996-05-01), pages 149-150, XP000584088 ISSN: 0018-8689 *
"Struts User's Guide" ONLINE, 25 July 2001 (2001-07-25), XP002265497 *
DRAGOI ET AL: "The Conceptual Architecture of the Apache Web Server" ONLINE, 26 January 1999 (1999-01-26), XP002274564 *
THAU R: "Design considerations for the Apache Server API" COMPUTER NETWORKS AND ISDN SYSTEMS, NORTH HOLLAND PUBLISHING. AMSTERDAM, NL, vol. 28, no. 11, 1 May 1996 (1996-05-01), pages 1113-1122, XP004018213 ISSN: 0169-7552 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2006113107A1 (en) * 2005-04-18 2006-10-26 Hewlett-Packard Development Company, L.P. Configurable functionality chaining
EP3451586A4 (en) * 2016-06-22 2019-06-12 Bai, Yang Service-oriented modular system architecture
US20220058179A1 (en) * 2020-08-24 2022-02-24 International Business Machines Corporation Executing database transactions

Also Published As

Publication number Publication date
AU2003209028A1 (en) 2003-09-04
WO2003069475A3 (en) 2004-08-19

Similar Documents

Publication Publication Date Title
US7073178B2 (en) Method and system of performing transactions using shared resources and different applications
US7945698B2 (en) System and method for partial data compression and data transfer
US7801944B2 (en) Distributed computing using agent embedded in content unrelated to agents processing function
US6782003B1 (en) Data management system and method
US20060021026A1 (en) System and method for modular network transaction processing with plug-in processing modules and interfaces
US6766298B1 (en) Application server configured for dynamically generating web pages for voice enabled web applications
US6438600B1 (en) Securely sharing log-in credentials among trusted browser-based applications
US7650390B2 (en) System and method for playing rich internet applications in remote computing devices
US20060277096A1 (en) Method and system for providing technical services
US20060253535A1 (en) System and method for collaborative processing of distributed applications
US20020046262A1 (en) Data access system and method with proxy and remote processing
CN101379785A (en) Contact list display system and method
CA2366570A1 (en) Method for listing a user in a directory server of an internet-type network and/or locating a user in this network, and smart card for performing the method
US20030135587A1 (en) Method and system of state management for data communications
US20070192772A1 (en) System, method and apparatus for modularized transformation processing in a network environment
US20060218228A1 (en) Client platform architecture
EP1696627B1 (en) Apparatus and system to retrieve information in a network
US20050086307A1 (en) Method, system and storage medium for providing autonomic identification of an important message
US20030055965A1 (en) User-defined units of context in a distributed computer environment
US8332515B2 (en) System and method for serving web pages
WO2003069475A2 (en) A plug-in api for modular network transaction processing
WO2003067852A2 (en) An application programming interface (api) for plug-in modules performing protocol and payload transformation
CN115495065A (en) Page component arrangement and combination method and device based on business flow control
US20070168519A1 (en) System and method for implementing personalized alerts utilizing a user registry in instant messenger
US8499023B1 (en) Servlet-based grid computing environment using grid engines and switches to manage resources

Legal Events

Date Code Title Description
AK Designated states

Kind code of ref document: A2

Designated state(s): AE AG AL AM AT AU AZ BA BB BG BR BY BZ CA CH CN CO CR CU CZ DE DK DM DZ EC EE ES FI GB GD GE GH GM HR HU ID IL IN IS JP KE KG KP KR KZ LC LK LR LS LT LU LV MA MD MG MK MN MW MX MZ NO NZ OM PH PL PT RO RU SC SD SE SG SK SL TJ TM TN TR TT TZ UA UG US UZ VC VN YU ZA ZM ZW

AL Designated countries for regional patents

Kind code of ref document: A2

Designated state(s): GH GM KE LS MW MZ SD SL SZ TZ UG ZM ZW AM AZ BY KG KZ MD RU TJ TM AT BE BG CH CY CZ DE DK EE ES FI FR GB GR HU IE IT LU MC NL PT SE SI SK TR BF BJ CF CG CI CM GA GN GQ GW ML MR NE SN TD TG

121 Ep: the epo has been informed by wipo that ep was designated in this application
122 Ep: pct application non-entry in european phase
NENP Non-entry into the national phase

Ref country code: JP

WWW Wipo information: withdrawn in national office

Country of ref document: JP