Patent ID: 12231598

DETAILED DESCRIPTION

The methods and systems described herein may involve caller identification function in telecommunications systems that operate over general-purpose networks. A VOIP communications system may, for example, provide voice, facsimile, or video communications capabilities over an IP-based network. These capabilities may involve a number of VOIP-compatible telephones or other devices operating within a call center. Typically, the telephones may be in communication with an on-premises private branch exchange (“PBX”) and, through the PBX, with a gateway device provided by a telecommunications provider. When a call, or other communication session, is initiated by one of the telephones, it is routed through the PBX and gateway devices to a trunking service, and from there on to another telephonic device that receives the call. A communication session or call may refer to an active or pending state for various modes of communication, such as a voice call, facsimile call, audiovisual communication, and so on. The recipient device will typically display information, obtained through a process sometimes referred to as caller identification, which indicates the identity of the caller. However, it may be the case that a customized number, such as a toll-free number or a main office number, is preferred to the number associated with the initiating device. The operator of the call center may, for example, wish to provide recipients of calls originating from the call center with a “1-800” number rather than the particular phone number associated with the device used to initiate the call.

A telephone number associated with the initiating device may be referred to as an account phone number. The account phone number associated with the initiating device may be used by the telecommunications provider, the trunking service, or other aspects of the telecommunications system for purposes such as billing, call typing, call translation, and fraud protection. A non-account phone number, on the other hand, may be presented to the device that is the recipient of a call, even when the non-account number is not the actual phone number of the device used to initiate the call.

Telecommunications providers and trunking services, in some instances, do not allow for non-account phone numbers to be provided, or may disable functions that rely on the inclusion of the account phone number when its substitution with a non-account phone number is permitted. For example, telecom providers may disallow or disable functions such as automatic number identification, which assumes that an accurate account phone number has been provided, when they wish to allow account phone numbers to be substituted with non-account phone numbers. Disabling automatic number identification prevents a non-account phone number from being inaccurately presented as an account phone number during automatic number identification, but may also itself lead to call misrouting and fraud.

The operation of the telecommunications providers and trunking services involved in a call may not be controlled by a single provider. For example, the provider of telecommunications services to a call center may not be the same provider that completes initiation of the terminal end of a call. The various telecommunications providers involved in completing a call may operate according to various standard or protocols, such as session initiation protocol (“SIP”), in order to facilitate interoperation between telecommunications providers. The operation of automatic number identification and caller identification may be fixed according to standards such as SIP. A telecommunications provider may, however, in accordance with techniques disclosed herein, provide customized phone numbers for caller identification without interfering with the operation of telecommunications providers that adhere to a standard such as SIP.

A VOIP-based telecommunications service may include equipment such as a gateway device that is installed at a call center or other customer location. The gateway may sometimes be referred to as customer-premises equipment (“CPE”). The gateway or other CPE may, in some embodiments, be configured to perform operations that enable non-account phone numbers to be displayed by the recipient device while still allowing automatic number identification services to function.

When a telephone initiates a call, it may transmit an invitation message. At this juncture the invitation message may contain the account phone number associated with the initiating telephone. A PBX may then intercept the invitation message and replace the account phone number with a non-account phone number. By so doing, the PBX is effectively obscuring the source of the call, which, as noted above, may interfere with functions such as automatic number identification.

The gateway device may further process invitation messages received from the PBX. In particular, the gateway may be configured to use a set of mappings between account and non-account phone numbers in order to apply a call screening rule. The rule may involve determining that the non-account phone number placed in the invitation message by the PBX corresponds to an entry in the set of mappings. If so, the gateway device may then apply a header manipulation rule in which the account phone number is reinserted into the invitation message. The account phone number may be reinserted into a portion of the message that allows for the account phone number to be used with automatic number identification but does not interfere with the use of the non-account phone number for caller identification. For example, the system may leverage a discrepancy in the type and order of message headers that are inspected during caller identification as compared to automatic number identification. A message header sometimes referred to as a “diversion” field is normally used to support call forwarding. The “diversion” field is inspected first during automatic number identification, but is not typically inspected by caller identification services. Accordingly, reinsertion of the account phone number into the “diversion” field can support the use of the account phone number in automatic number identification without disrupting the use of the non-account phone number for caller identification.

A field may refer to some portion of the message that may be used to carry information pertinent to some aspect of initiating, continuing, or terminating a call or other communications session. A field may sometimes be referred to as a header of the message. A header, or field, may sometimes be described as metadata. A field, header, or metadata may be included in various portions of the messaged, or may be separate from the message.

FIG.1is a block diagram depicting caller identifier override using a “diversion” field. A VOIP telecommunications system may comprise a PBX104in communication with a telecommunications provider gateway112. The gateway112may be in communication with resources of an originating telecommunications provider120, which may include trunking and other services, and which may contact a terminating telecommunications provider121to complete initiation of the call to the recipient phone122.

A customer of the originating telecommunications provider120may maintain an internal network100, which may include various VOIP-based communications devices. These VOIP-based communications devices can include phones108and110, which may be in communication with the PBX104typically through IP-based networking protocols. The PBX104may route a request to initiate a call from one of the phones108or110to the telecommunications provider gateway112, which may then route the request to the originating telecommunications provider120over the external network118. The telecommunications provider may then route the call to a call recipient, such as another phone122that is outside of the internal network100.

The originating telecommunications provider120may maintain usage or billing information pertaining to calls originating from or otherwise involving the phones108and110that are part of the customer's internal network100. The maintenance of usage or billing information may involve tracking the usage pertaining to the individual phones108and110. An identifier such as a direct inward-dialing phone number may be associated with each of the phones108-110. A direct inward-dialing phone number may be an example of an account phone number.

The originating telecommunications provider120may use an account phone number to determine which of the phones108or110is involved in originating a call. Accordingly, the originating telecommunications provider120may examine call traffic to determine the account phone number of a device that is initiating or otherwise participating in a call.

Determining the account phone number associated with the originator of a call may comprise examination of metadata included in messages transmitted from a device, such as a phone108, that is initiating a call. The information may be included in one or more headers in the message. For example, in VOIP applications, the SIP protocol may involve transmission of various messages that may contain portions such as a “diversion” field, a “p-asserted-identity” field, or a “from” field.

A SIP feature, sometimes referred to as automatic number identification, may involve examination of the headers in order to locate the account phone number associated with the phone108initiating the call. Automatic number identification may is similar to typical caller-identification services, but is designed to function, for tracking purposes, even when caller-identification is blocked.

There may be circumstances, however, where the operator of internal network100does not desire to present an account phone number, such as a direct inward-dialing number, to the recipient of a call. For example, a customer (not shown) of the originating telecommunication provider120might wish to present the same toll-free number to a recipient of a call, regardless of which of the depicted phones108or110originates the call. One approach to this problem involves PBX104performing a replacement operation124to insert the toll-free number in place of the account phone number. However, replacing the account phone number might interfere with automatic number identification that may be used by the originating telecommunications provider120to associate the call with an account, or to perform other functions that require the account phone number.

A telecommunications provider gateway112may apply a call screening rule116to outbound calls. The call screening rule116may compare a phone number included in an outbound message to a number mapping106. The number mapping106may comprise a list or other structure maintained on a storage device in communication with the telecommunications provider gateway112. The number mapping106can include information that describes logical relationships between non-account phone numbers and account phone numbers. If the number mapping106includes an entry for a non-account phone number included in the outbound message, the telecommunications provider gateway112may apply a header rule114. The header rule114may add an additional field, such as a “diversion” field, that includes the account phone number. The outgoing message, upon transmission from the telecommunications provider gateway112, may then include both the account phone number and the non-account phone number in separate headers.

The originating telecommunications provider120and terminating telecommunications provider121, as well as other components that might process call-related messages, can apply caller identification and automatic number identification procedures according to header-inspection sequences associated with each technology. Typically, the originating telecommunications provider120performs automatic number identification and the terminating telecommunications provider121performs caller identification.

FIG.2is a block diagram depicting header-inspection sequences for caller identification and automatic number identification. In cases where SIP or some other call initiation procedure is used, the differences between a caller identification procedure200and an automatic phone number identification procedure210may enable functioning of both the caller identification procedure200and the automatic phone number identification procedure210.

The caller identification procedure200may involve inspection of header information included in portions of a SIP invite message, or other message traffic associated with establishing communication between two endpoints. The order of inspection may, as is the case with a SIP invite message, follow the order of first examining a “p-asserted-identity” field202that might be included in the message. If the “p-asserted-identity” field202is present in the SIP invite message and a phone number included within it, that number may be used for caller identification. If the “p-asserted-identity” field202is not present or does not include a phone number, the “from” field204may be examined. If the “from” field204contains a phone number, it may be used for caller identification.

The automatic phone number identification procedure210may involve inspecting headers according to the sequence depicted inFIG.2. The “diversion” field212may be inspected first, and if the “diversion” field212is present and contains a phone number, that number may be used for automatic number identification. If the number is not found in the “diversion” field212, then “p-asserted-identity” field202may be inspected. Next, if the number was found in neither the “diversion” field212nor the “p-asserted-identity” field202, the “from” field204may be inspected.

As depicted by the example ofFIG.2, a call initiation protocol such as SIP may perform caller identification procedures using a sequence of header inspection that overlaps the sequence used for phone number identification. For example, phone number identification may involve inspection of a first header, and second header, and a third header. Caller identification, in this example, may involve the inspection of the second header and the third header. Accordingly, the two sequences overlap. A non-overlapping portion of the sequence may be used to identify the phone number without disturbing caller identification. In the example depicted byFIG.2, the non-overlapping portion is the “diversion” field212.

FIG.3is a block diagram depicting a telecommunications provider gateway324processing SIP invite messages. The telecommunications provider gateway324may apply a call screening rule326and a header rule328to SIP messages originating from a phone300. Application of these rules may enable use of a non-account phone number for caller identification and an account phone number for automatic number identification.

The phone300may transmit an invite message302. The invite message302may be, for example, a SIP invite message providing instructions to initiate a call to a recipient device (not shown) through telecommunications provider332. The invite message302may contain one or more of a “p-asserted-identity” field308and a “from” field314. The phone300may include in either or both of these headers the phone number associated with phone300. This phone number may be an account phone number that could be used to associate the call originated by phone300with an account for purposes such as billing.

A PBX322may receive the invite message302and form a second version of the invite header304, in which instances of the account phone number in the “p-asserted-identity” field308and/or the “from” field314are replaced with a non-account phone number. The non-account phone number may, for example, be a toll-free number that the operator of the PBX322wishes to present to recipients of the call in lieu of an account phone number associated with the phone300. The “p-asserted-identity” field310and the “from” field316in the second version of the invite message304may be carried over or copied from the first version of the invite message302, without changing their respective values.

The PBX322may then forward the second version of the invite message304to a telecommunications provider gateway324. The telecommunications provider gateway324may act as an interface between a local IP network (not shown), to which the phone300and the PBX322may be connected, and a telecommunications provider322. The telecommunications provider324may include a module for applying a call screening rule326and a header rule328. The modules may apply the call screening rule326and the header rule328based on mappings between non-account phone numbers and account phone numbers stored in a number mapping330. As described herein, the call screening rule326may determine if the second version of the invite message304contains a number for which a mapping exists in the number mapping330. If so, the module may apply the header rule328by inserting an account phone number into the invite message. This may involve creating a third version of the invite message306, in which a “diversion” field320has been added. The “diversion” field320may include the account phone number originally included in the “p-asserted-identity” field308and/or the “from” field314of the original version of the invite message302. The “p-asserted-identity” field312and the “from” field318in the third version of the invite message306may be carried over or copied from the second version of the invite message304.

The telecommunications provider332may receive the third version of the invite message306and, in response, cause the message to be processed according to the session initiation protocol. This may comprise performing caller identification and automatic number identification as depicted inFIG.2, and may also comprise performing operations such as call authentication and routing using an account phone number identified in the “diversion” field320using automatic number identification.

FIG.4is a block diagram depicting aspects of a telecommunications provider gateway400. A telecommunications provider gateway may include, and is sometimes referred to as, an integrated access device, an enterprise SIP gateway, or a customer premise device. Typically, the telecommunications provider gateway400may be located at a site operated by a customer of a telecommunications provider, and may act to connect telecommunications devices, including a customer-operated PBX, to the telecommunications provider.

The telecommunications provider gateway400may comprise various modules. A module may comprise computer-executable instructions stored on a non-transitory computer-readable medium such as a random access memory, a solid-state storage device, and so on. The computer-executable instructions, when executed, may cause various operations associated with the module to be performed. A module may also, in some instances, comprise additional circuitry or various other hardware devices that are associated with performing various operations associated with the module. It will be appreciated that the term “module” is used to describe areas of related functionality, and that, in various aspects, operations described as being performed by a particular module may be combined with other modules, in various permutations. Accordingly, the use of the term “module” should not be viewed as limiting the scope of the present disclosure, unless explicitly indicated to the contrary.

The telecommunications provider gateway400may comprise an access module402. The access module402may act as a bridge between telecommunications traffic on the customer's network and an external network, such as the Internet, over which telecommunications traffic is directed to the telecommunications provider. The access module402may receive traffic, such as invite messages transmitted over an IP network, and may forward the traffic to the external network. The access module402may invoke a call screening module406in response to receiving a message, in order to determine if a header module404should be invoked to add a “diversion” field to the message. The messages processed in this manner may include invite messages, or other message types that may be used with caller identification or automatic number identification.

The call screening module406and the header module404may interact with a mapping module408. The mapping module408may include a list, database, table, file, or other structure stored on a memory device and instructions for storing and retrieving number mappings using the structure. In some instances, the mapping module408may include instructions for retrieving number mapping data maintained on a device external to the telecommunications provider gateway. The external location might be, for example, a database located at a site operated by the telecommunications provider.

The content of the structure containing the mapping may comprise information that maps from non-account phone numbers to account phone numbers. For example, a customer of the telecommunications provider might supply to the provider a list of non-account phone numbers that may be inserted, by the customer's PBX, into invite messages. The numbers in the list may then be stored in the structure along with an associated account phone number.

The call screening module406may determine that a number included in an invite message (for example, in a “p-asserted-identity” field or a “from” field) is the subject of a mapping contained in the structure. If so, it may then cause the header module404to be invoked. The header module404may then cause a “diversion” field to be added to the message, thereby forming a version of the message that contains both the non-account phone number supplied by the PBX and an account-number supplied by the telecommunications provider gateway400.

FIG.5is a flow diagram depicting a process of performing caller identification override. AlthoughFIG.5is depicted as a sequence of blocks, the depicted sequence should not be construed as limiting the scope of the present disclosure. In various cases, aspects, and embodiments, the blocks and depicted operations may be altered, omitted, reordered, or performed in parallel.

As depicted by block500, an aspect of an embodiment may maintain mappings between non-account phone numbers and account phone numbers. For example, referring toFIG.4, a telecommunications provider gateway400may include functionality for storing and retrieving mapping data. The mapping data may indicate, for a given non-account phone number, one or more account phone numbers that are associated with the non-account phone number. The mapping might include a direct mapping from a non-account phone number to an account phone number, or it might include information that allows an account phone number to be selected based on a non-account phone number and additional information that might be included in the invite message or supplied to the telecommunications provider gateway400through some other avenue.

The telecommunications provider gateway400may, as depicted by block502, receive an invite message from a phone on an internet network that has initiated a call. Although the phone may be associated with an account phone number, a PBX may have replaced that number with a non-account phone number.

The telecommunications provider gateway may, as depicted by block504, determine that the non-account phone number included in the invite message is mapped to an account phone number. The determination may be made responsive to the receipt of the invite message. The determination may be based on the mapping information referred to by the description of block500.

Block506depicts that the telecommunications provider gateway may add a “diversion” field to the invite message. The “diversion” field may include the account phone number it obtained based on the mapping between non-account and account phone numbers.

Block508depicts that the telecommunications provider gateway400may forward a version of the invite message to a VOIP provider. The version of the invite message may include the “diversion” field containing the account phone number. Upon receipt of the invite message from the telecommunications provider gateway400, the telecommunications provider may perform caller identification using the non-account phone number and automatic number identification using the account phone number.

FIG.6depicts a computing device that may be used in various aspects, such as the telecommunications provider gateway112depicted inFIG.1. The computer architecture shown inFIG.6may correspond to a gateway device, a set-top box, home automation system, desktop computer, laptop, tablet, network appliance, e-reader, smartphone, or other computing device, and may be utilized to execute any aspects of the computers described herein, such as to implement the operating procedures ofFIG.5.

A computing device600may include a baseboard, or “motherboard,” which is a printed circuit board to which a multitude of components or devices may be connected by way of a system bus or other electrical communication paths. One or more central processing units (“CPUs”)604may operate in conjunction with a chipset606. CPU(s)604may be standard programmable processors that perform arithmetic and logical operations necessary for the operation of computing device600.

The CPU(s)604may perform the necessary operations by transitioning from one discrete physical state to the next through the manipulation of switching elements that differentiate between and change these states. Switching elements may generally include electronic circuits that maintain one of two binary states, such as flip-flops, and electronic circuits that provide an output state based on the logical combination of the states of one or more other switching elements, such as logic gates. These basic switching elements may be combined to create more complex logic circuits including registers, adders-subtractors, arithmetic logic units, floating-point units, and the like.

The CPU(s)604may, in various embodiments, be augmented with or replaced by other processing units, such as GPU(s) (now shown). GPU(s) may comprise processing units specialized for but not necessarily limited to highly parallel computations, such as graphics and other visualization-related processing.

A chipset606may provide an interface between the CPU(s)604and the remainder of the components and devices on the baseboard. The chipset606may provide an interface to a random access memory (“RAM”)608used as the main memory in the computing device600. The chipset606may further provide an interface to a computer-readable storage medium, such as a read-only memory (“ROM”)620or non-volatile RAM (“NVRAM”) (not shown), for storing basic routines that may help to start up the computing device600and to transfer information between the various components and devices. ROM620or NVRAM may also store other software components necessary for the operation of the computing device600in accordance with the aspects described herein.

The computing device600may operate in a networked environment using logical connections to remote computing nodes and computer systems through a local area network (“LAN”)616. The chipset606may include functionality for providing network connectivity through a network interface controller (NIC)622, such as a gigabit Ethernet adapter. The NIC622may be capable of connecting the computing device600to other computing nodes over the network616. It should be appreciated that multiple NICs622may be present in the computing device600, connecting the computing device to other types of networks and remote computer systems.

The computing device600may be connected to a mass storage device610that provides non-volatile storage for the computing device600. The mass storage device610may store system programs, application programs, other program modules, and data, which have been described in greater detail herein. The mass storage device610may be connected to computing device600through a storage controller624connected to the chipset606. The mass storage device610may consist of one or more physical storage units. A storage controller624may interface with the physical storage units through a serial attached SCSI (“SAS”) interface, a serial advanced technology attachment (“SATA”) interface, a fiber channel (“FC”) interface, or other type of interface for physically connecting and transferring data between computers and physical storage units.

The computing device600may store data on the mass storage device610by transforming the physical state of the physical storage units to reflect the information being stored. The specific transformation of a physical state may depend on various factors and on different implementations of this description. Examples of such factors may include, but are not limited to, the technology used to implement the physical storage units and whether the mass storage device610is characterized as primary or secondary storage and the like.

For example, the computing device600may store information to the mass storage device610by issuing instructions through the storage controller624to alter the magnetic characteristics of a particular location within a magnetic disk drive unit, the reflective or refractive characteristics of a particular location in an optical storage unit, or the electrical characteristics of a particular capacitor, transistor, or other discrete component in a solid-state storage unit. Other transformations of physical media are possible without departing from the scope and spirit of the present description, with the foregoing examples provided only to facilitate this description. The computing device600may further read information from mass storage device610by detecting the physical states or characteristics of one or more particular locations within the physical storage units.

In addition to the mass storage device610described above, the computing device600may have access to other computer-readable storage media to store and retrieve information, such as program modules, data structures, or other data. It should be appreciated by those skilled in the art that computer-readable storage media may be any available media that provides for the storage of non-transitory data and that may be accessed by the computing device600.

By way of example and not limitation, computer-readable storage media may include volatile and non-volatile, transitory computer-readable storage media and non-transitory computer-readable storage media, and removable and non-removable media implemented in any method or technology. Computer-readable storage media includes, but is not limited to, RAM, ROM, erasable programmable ROM (“EPROM”), electrically erasable programmable ROM (“EEPROM”), flash memory or other solid-state memory technology, compact disc ROM (“CD-ROM”), digital versatile disk (“DVD”), high definition DVD (“HD-DVD”), BLU-RAY, or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage, other magnetic storage devices, or any other medium that can be used to store the desired information in a non-transitory fashion.

The mass storage device610may store an operating system utilized to control the operation of the computing device600. According to one embodiment, the operating system comprises a version of the LINUX operating system. According to another embodiment, the operating system comprises a version of the WINDOWS SERVER operating system from the MICROSOFT Corporation. According to further aspects, the operating system may comprise a version of the UNIX operating system. Various mobile phone operating systems, such as IOS and ANDROID, may also be utilized in some embodiments. It should be appreciated that other operating systems may also be utilized. The mass storage device610may store other system or application programs and data utilized by the computing device600.

The mass storage device610or other computer-readable storage media may also be encoded with computer-executable instructions, which, when loaded into the computing device600, transforms the computing device from a general-purpose computing system into a special-purpose computer capable of implementing the aspects described herein. These computer-executable instructions transform the computing device600by specifying how the CPU(s)604transition between states, as described above. The computing device600may have access to computer-readable storage media storing computer-executable instructions, which, when executed by the computing device600, may perform operating procedures depicted inFIG.5.

The computing device600may also include an input/output controller632for receiving and processing input from a number of input devices, such as a keyboard, a mouse, a touchpad, a touch screen, an electronic stylus, or other type of input device. Similarly, the input/output controller632may provide output to a display, such as a computer monitor, a flat-panel display, a digital projector, a printer, a plotter, or other type of output device. It will be appreciated that the computing device600may not include all of the components shown inFIG.6, may include other components that are not explicitly shown inFIG.6, or may utilize an architecture completely different than that shown inFIG.6.

As described herein, a computing node may be a physical computing device, such as the computing device600ofFIG.6. A computing node may also include a virtual machine host process and one or more virtual machine instances operating on a physical computing device, such as the computing device600. Computer-executable instructions may be executed by the physical hardware of a computing device indirectly through interpretation and/or execution of instructions stored and executed in the context of a virtual machine.

It is to be understood that the methods and systems are not limited to specific methods, specific components, or to particular implementations. It is also to be understood that the terminology used herein is for the purpose of describing particular embodiments only and is not intended to be limiting.

As used in the specification and the appended claims, the singular forms “a,” “an,” and “the” include plural referents unless the context clearly dictates otherwise. Ranges may be expressed herein as from “about” one particular value, and/or to “about” another particular value. When such a range is expressed, another embodiment includes¬ from the one particular value and/or to the other particular value. Similarly, when values are expressed as approximations, by use of the antecedent “about,” it will be understood that the particular value forms another embodiment. It will be further understood that the endpoints of each of the ranges are significant both in relation to the other endpoint, and independently of the other endpoint.

“Optional” or “optionally” means that the subsequently described event or circumstance may or may not occur, and that the description includes instances where said event or circumstance occurs and instances where it does not.

Throughout the description and claims of this specification, the word “comprise” and variations of the word, such as “comprising” and “comprises,” means “including but not limited to,” and is not intended to exclude, for example, other components, integers or steps. “Exemplary” means “an example of” and is not intended to convey an indication of a preferred or ideal embodiment. “Such as” is not used in a restrictive sense, but for explanatory purposes.

Disclosed are components that can be used to perform the disclosed methods and systems. These and other components are disclosed herein, and it is understood that when combinations, subsets, interactions, groups, etc., of these components are disclosed that while specific reference of each various individual and collective combinations and permutation of these may not be explicitly disclosed, each is specifically contemplated and described herein, for all methods and systems. This applies to all aspects of this application including, but not limited to, operations in disclosed methods. Thus, if there are a variety of additional operations that can be performed it is understood that each of these additional operations can be performed with any specific embodiment or combination of embodiments of the disclosed methods.

The present methods and systems may be understood more readily by reference to the following descriptions of various aspects and the examples included therein and to the figures and their descriptions.

As will be appreciated by one skilled in the art, the methods and systems may take the form of an entirely hardware embodiment, an entirely software embodiment, or an embodiment combining software and hardware aspects. Furthermore, the methods and systems may take the form of a computer program product on a computer-readable storage medium having computer-readable program instructions (e.g., computer software) embodied in the storage medium. More particularly, the present methods and systems may take the form of web-implemented computer software. Any suitable computer-readable storage medium may be utilized including hard disks, CD-ROMs, optical storage devices, or magnetic storage devices.

Embodiments of the methods and systems are described herein with reference to diagrams and flowchart illustrations of methods, systems, apparatuses and computer program products. It will be understood that each block of the diagrams and flowchart illustrations, and combinations of blocks in the diagrams and flowchart illustrations, respectively, can be implemented by computer program instructions. These computer program instructions may be loaded on a general-purpose computer, special-purpose computer, or other programmable data processing apparatus to produce a machine, such that the instructions which execute on the computer or other programmable data processing apparatus create a means for implementing the functions specified in the flowchart block or blocks.

These computer program instructions may also be stored in a computer-readable memory that can direct a computer or other programmable data processing apparatus to function in a particular manner, such that the instructions stored in the computer-readable memory produce an article of manufacture including computer-readable instructions for implementing the function specified in the flowchart block or blocks. The computer program instructions may also be loaded onto a computer or other programmable data processing apparatus to cause a series of operational steps to be performed on the computer or other programmable apparatus to produce a computer-implemented process such that the instructions that execute on the computer or other programmable apparatus provide steps for implementing the functions specified in the flowchart block or blocks.

The various features and processes described above may be used independently of one another, or may be combined in various ways. All possible combinations and sub-combinations are intended to fall within the scope of this disclosure. In addition, certain methods or process blocks may be omitted in some implementations. The methods and processes described herein are also not limited to any particular sequence, and the blocks or states relating thereto can be performed in other sequences that are appropriate. For example, described blocks or states may be performed in an order other than that specifically disclosed, or multiple blocks or states may be combined in a single block or state. The example blocks or states may be performed in serial, in parallel, or in some other manner. Blocks or states may be added to or removed from the disclosed example embodiments. The example systems and components described herein may be configured differently than described. For example, elements may be added to, removed from, or rearranged compared to the disclosed example embodiments.

It will also be appreciated that various items are illustrated as being stored in memory or on storage while being used, and that these items or portions thereof may be transferred between memory and other storage devices for purposes of memory management and data integrity. Alternatively, in other embodiments, some or all of the software modules and/or systems may execute in memory on another device and communicate with the illustrated computing systems via inter-computer communication. Furthermore, in some embodiments, some or all of the systems and/or modules may be implemented or provided in other ways, such as at least partially in firmware and/or hardware, including, but not limited to, one or more application-specific integrated circuits (“ASICs”), standard integrated circuits, controllers (e.g., by executing appropriate instructions, and including microcontrollers and/or embedded controllers), field-programmable gate arrays (“FPGAs”), complex programmable logic devices (“CPLDs”), etc. Some or all of the modules, systems, and data structures may also be stored (e.g., as software instructions or structured data) on a computer-readable medium, such as a hard disk, a memory, a network, or a portable media article to be read by an appropriate device or via an appropriate connection. The systems, modules, and data structures may also be transmitted as generated data signals (e.g., as part of a carrier wave or other analog or digital propagated signal) on a variety of computer-readable transmission media, including wireless-based and wired/cable-based media, and may take a variety of forms (e.g., as part of a single or multiplexed analog signal, or as multiple discrete digital packets or frames). Such computer program products may also take other forms in other embodiments. Accordingly, the present invention may be practiced with other computer system configurations.

While the methods and systems have been described in connection with preferred embodiments and specific examples, it is not intended that the scope be limited to the particular embodiments set forth, as the embodiments herein are intended in all respects to be illustrative rather than restrictive.

Unless otherwise expressly stated, it is in no way intended that any method set forth herein be construed as requiring that its operations be performed in a specific order. Accordingly, where a method claim does not actually recite an order to be followed by its operations or it is not otherwise specifically stated in the claims or descriptions that the operations are to be limited to a specific order, it is no way intended that an order be inferred, in any respect. This holds for any possible non-express basis for interpretation, including: matters of logic with respect to arrangement of steps or operational flow; plain meaning derived from grammatical organization or punctuation; and the number or type of embodiments described in the specification.

It will be apparent to those skilled in the art that various modifications and variations can be made without departing from the scope or spirit of the present disclosure. Other embodiments will be apparent to those skilled in the art from consideration of the specification and practices disclosed herein. It is intended that the specification and example figures be considered as exemplary only, with a true scope and spirit being indicated by the following claims.