The present disclosure relates to the field of data transmission particularly data transmission using Type-Length-Value (TLV) message formats.
In networked systems, various hardware and/or software elements can communicate by exchanging data messages. The messages are often sent in a predefined format known to both the sending and receiving elements, such that the receiving element can process and understand the message sent by the sending element. By way of non-limiting examples, TCP/IP protocols use predefined static fields to organize and format messages.
However, the rigid structure of predefined message formats can create incompatibilities when message structures are updated, unless both the sending and receiving elements are made aware of the updated message structure. By way of non-limiting examples, a receiving element that is coded to receive messages according to TCP/IP protocols with predefined static fields would not be able to understand a message that does not use those predefined static fields, includes the fields in a different order, and/or includes extra fields. All elements on the network would need to be updated to send and/or receive messages in a new or updated format. In many cases this can require code to be rewritten and installed on each element on the network before updated message formats can be exchanged, which can be costly and time-consuming.
An alternative to the rigid and inflexible message formats of some traditional systems are Type-Length-Value (TLV) messages. TLV messages have a flexible format because they comprise a plurality of individual TLV elements, each of which can appear in any order within the TLV message. In some embodiments, TLV elements can be nested within one another, such that one TLV element can include one or more other TLV elements.
In some situations, the flexible nature of TLV messages allows them to be backwards compatible. By way of a non-limiting example, if a receiving application receives a TLV message in a newer format that includes one or more TLV elements it does not recognize, the receiving application can skip or ignore the unrecognized TLV elements, but continue to read the other recognized TLV elements. However, applications generally must be updated with new code to generate and/or understand messages in a new or updated TLV format.
Additionally, in some situations different network components on a network use different message protocols for communication, and in order to communicate with all the other components on a network, a server needs to understand all these different message protocols. In some of these situations, traditionally the server needs to have software to understand each message protocols and/or be loaded with multiple engines that each process different message formats used in the different protocols. Again, updating the server or its engines to process new or revised protocol message formats can be costly and time consuming.
What is needed is a message engine that allows the flexible nature of TLV messages to be used with any network element and with any type of TLV-based message protocol. A TLV-based message protocol is a protocol in which each message is defined in TLV format. For such protocols, the message engine can alleviate the need for the network elements to be updated with rewritten code in order to generate and/or process new or updated protocols. Each network element can run a local instance of the message engine, such that its local message engine can act as an interpreter to process incoming and outgoing TLV messages in any protocol. Each message engine can be loaded with configuration files, such as Type Definition Files and Layout Definition Files, associated with a particular protocol that allow the message engine to generate and/or parse TLV message in that protocol, such that the engine can process new or revised protocols by loading new configuration files rather than updating the application itself. By way of non-limiting example, a Type Definition File can be used by a message engine to parse a received TLV message, while a Type Definition Files and a Layout Definition File can be used by a message engine to generate a new TLV message.
In one embodiment, the present disclosure provides for a method of generating a TLV message, the method comprising receiving output from a sender at a message engine, loading one or more configuration files associated with a TLV-based protocol onto the message engine, wherein the one or more configuration files describes information about one or more message elements, generating a TLV message at the message engine by creating and ordering the one or more message elements into a TLV message according to the one or more configurations files, and transmitting the TLV message over a network from the message engine.
In another embodiment, the present disclosure provides for a method of parsing a TLV message, the method comprising receiving a TLV message comprising a plurality of message elements at a message engine linked to a receiver, wherein the TLV message was generated according to a protocol, loading a type definition file associated with the protocol onto the message engine, the type definition file describing information about the plurality of message elements, using the type definition file to parse the message elements of the TLV message into parsed data in another format that is compatible with the receiver, and transmitting the parsed data to the receiver.
In still another embodiment, the present disclosure provides for a message engine, the message engine comprising a Message Generator and Parser configured to load one or more configuration files associated with a protocol that describe information about a plurality of TLV Elements within a TLV Message, and a Message Data Container configured to process the TLV Message according to the protocol.
Further details of the present invention are explained with the help of the attached drawings in which:
As shown in
In general, the concept of TLV Messages 100 allows a flexible framework because the individual TLV Elements 102 can be arranged in any order within the message. However, due to this flexibility different kinds of TLV Messages 100 might not have the same types of TLV Elements 102, the same number of TLV Elements 102, or have the TLV Elements 102 arranged or nested in the same order. The particular types, order, and/or nesting of TLV Elements 102 that are used for a particular TLV Message 100 can be defined by or be described by a protocol 110. The protocol 110 can indicate the layout of TLV Elements 102 within a TLV Message 100, and therefore allow a device or application to read and/or generate TLV Messages in that particular protocol 110.
A TLV Engine 304 can be used to allow a device or application to send and/or receive TLV Messages 100 in protocols 110 that it does not natively understand or has not been updated to use. A TLV Engine 304 can be a generic module that uses configuration files 306 to process TLV Messages 100 in any protocol 110. Configuration files 306 can be files associated with a particular protocol 110 that describe the types of TLV Elements 102 and/or the layout of the arrangement of TLV Elements 102 within the TLV Message 100 of that protocol 110. Configuration files 306 associated with a protocol 110, such as existing, new, or revised protocols 110 can be loaded onto and used by a TLV Engine 304 to allow the TLV Engine 304 to process TLV Messages 100 in that existing, new, or revised protocol 110, even if the device or application linked to the TLV Engine 304 does not natively understand TLV Messages 100 in that protocol 110.
In some embodiments, the sender 300 and receiver 302 can each be linked to its own TLV Engine 304. A TLV Engine 304 linked to a sender 300 or receiver 302 can allow the sender 300 or receiver 302 to process TLV Messages 100 in any protocol 110 by loading the configuration files 306 associated with the protocol 110. By way of non-limiting examples, a TLV Engine 304 linked to a sender 300 can use configuration files 306 to generate a new TLV Message 100 in a particular protocol 110, and a TLV Engine 304 linked to a receiver 302 can use configuration files 306 to parse or convert a received TLV Message 100 in the protocol 110 described by the configuration files into a different format usable by the receiver 302. In some embodiments, the protocol 110 used by the respective TLV Engines 304 can be pre-determined, while in other embodiments the TLV Message 100 can include an indicator of which protocol 110 was used during its generation.
Each TLV Engine 304 can access and load the configuration files 306 associated with any of a plurality of protocols 110 to process TLV Messages 100 of that protocol 110. In some embodiments, each TLV Engine 304 can maintain its own database of configuration files 306. In other embodiments, each TLV Engine 304 can access a separate repository of configuration files 306. A TLV Engine 304, and by extension the sender 300 or receiver 302 linked to the TLV Engine 304, can be made compatible with new or revised protocols 110 by loading new or revised configuration files 306 rather than updating existing software or firmware on the sender 300, receiver 302, or TLV Engine 304.
As shown in
In some embodiments, hardware and/or software elements that communicate via TLV Engines 304 can alternate between acting as the sender 300 and the receiver 302 during a back and forth exchange of information. By way of a non-limiting example,
In this example, a client-side application 400 can initially act as the sender 300, and can output a request message to the client-side TLV Engine 304. The client-side TLV Engine 304 can load and use configuration files 306 to convert the client-side application's request message into a TLV Request Message in a particular protocol 110. The TLV Request Message can then be sent from the client-side TLV Engine 304 to the server-side TLV Engine 304. The server-side TLV Engine 304 can load and use configurations files 306 for the protocol 110 associated with the received TLV Request Message to parse the received TLV Request Message into a Parsed Request Message that can be passed to and be understood by the server-side application 402, which acts as a receiver 302. The server-side application 402 can process the Parsed Request Message and output a response message to the server-side TLV Engine 304, thereby becoming a sender 300. The server-side TLV Engine 304 can load and use configuration files 306 to convert the server-side application's response message into a TLV Response Message in a particular protocol 110. The TLV Request Message can then be sent from the server-side TLV Engine 304 to the client-side TLV Engine 304. The client-side TLV Engine can load and use configurations files 306 for the protocol 110 associated with the received TLV Response Message to parse the TLV Response Message into a Parsed Response Message that can be passed to and be understood by the client-side application 400, which now acts as a receiver 302.
The TLV Message Data Container 502 can be a class that describes properties of a TLV Element 102, such as its type 104, length 106, and/or characteristics of its value 108. The TLV Message Data Container 502 can also describe or reference methods for creating a TLV Element 102, creating or adding sub-TLV Elements 102 into a parent TLV Element's value 108, and/or finding TLV Elements 102 within a TLV Message 100 or a parent TLV Element 102. By way of a non-limiting example, the properties and methods of the TLV Message Data Container 502 can be used by a sender 300 to construct TLV Elements 102 from data it desires to send to a receiver 302.
By way of a non-limiting example, in some embodiments a TLVElement class 600 can be used as the TLV Message Data Container 502, as shown in
ByteArray 602 can indicate a combination of a particular TLV Element's type 104, length 106, and value 108 in a byte array format. Type 604 can indicate the type 104 of a particular TLV Element 102. Value 606 can indicate the value 108 of a particular TLV Element 102. In some embodiments, the length of Value 606 can indicate the length 106 of a particular TLV Element 102.
DataType 608 can indicate the data type of a particular TLV Element 102, such as the data type of the TLV Element's value 108. DataType 608 can indicate that the TLV Element's value 108 is: an unsigned byte; an unsigned short integer (2 bytes); an unsigned integer (4 bytes); an unsigned long integer (8 bytes); a signed byte; a signed short integer (2 bytes); a signed integer (4 bytes); a signed long integer (8 bytes); a Float (4 bytes float); a Double (8 bytes float); a variable length ASCII string or binary array; a Compound; and/or any other data type. A Compound data type can indicate that the TLV Element 102 includes one or more nested sub-TLV Elements 102 as children within its value 108.
Tags 610 can be a string array that can indicate a particular TLV Element's tag 802 and, if the TLV Element 102 is a sub-TLV Element 102 and therefore has a parent TLV Element 102, a list of the tags 802 of a sub-TLV Element's parent, grandparent, or other ancestor TLV Element 102. As will be discussed below, a tag 802 can be a shorthand identifier of a TLV Element's type 104.
TLVList 612 can be a list that indicates child sub-TLV Elements 102 that are associated with a particular TLV Element 102. By way of a non-limiting example, if a TLV Element 102 has one or more child sub-TLV Elements 102, TLVList 612 can identify the child sub-TLV Elements 102, such that TLVList 612 can be used to generate a nested structural layout of TLV Elements 102.
ParentElement 614 can indicate tags 802 of a sub-TLV Element's parent TLV Element 102, if a particular TLV Element 102 has a parent TLV Element 102.
TLVDictionary 616 can be a copy of configuration files 306 stored in memory, such that the configuration files 306 can be looked up for information on the type or layout of a TLV Element 102 within a TLV Message 100.
The TLVElement Class 600 can also include one or more methods, including FindByType 618, and/or FindChildrenByType 622. FindByType 618 can be a method of finding TLV Elements 102 by their type 104. FindChildrenByType 620 can be a method of finding sub-TLV Elements 102 by their type 104.
As another non-limiting example, in other embodiments a TLVDataCollection class 700 can be used as the TLV Message Data Container 502, as shown in
The Message Generator and Parser 504 can be a module that constructs and/or interprets TLV Messages 100 based on configuration files 306. The Message Generator and Parser 504 can process any TLV Message 100 in any protocol 110 by loading and using the configuration files 306 associated with the protocol 110, such that it can generate a new TLV Message 100 in that protocol 110 or parse a received TLV Message 100 in that protocol 110 into a different format. By way of a non-limiting example, the Message Generator and Parser 504 can have a message generator that takes TLV Elements 102 as input, combines them into a TLV Message 100 according to configuration files 306 such as Type Definition Files 800 and/or Layout Definition Files 900, and outputs a complete TLV Message 100. The Message Generator and Parser 504 can also have a message parser that takes a complete TLV Message 100 as input, parses it into its individual component TLV Elements 102 according to Type Definition Files 800, and then outputs the component TLV Elements 102.
In some embodiments, configuration files 306 for a particular protocol 110 can comprise Type Definition Files 800 and/or Layout Definition Files 900. The Type Definition Files 800 can be used both in the generating and parsing of TLV Messages 100, while the Layout Definition Files 900 can be used during the generation of TLV Messages 100.
A Type Definition File 800 can describe attributes and/or details of a TLV Element 102 of a particular type 104. A Layout Definition File 900 can describe the structural location of a TLV Element 102 of a particular type 104 within an overall TLV Message 100. By way of a non-limiting example, a TLV Message 100 can comprise multiple TLV Elements 102 each of a different type 104. The Type Definition File 800 and Layout Definition File 900 associated with a particular type 104 can describe the details of a TLV Element 102 having that type 104, such as the type of data it contains, and the position of a TLV Element 102 having that type 104 within the overall TLV Message 100, such as the identities of its parents and/or children.
In some embodiments, a protocol 110 can be associated with a plurality of Type Definition Files 800 and a plurality of Layout Definition Files 900, with one Type Definition File 800 and one Layout Definition File 900 for each type 104 of TLV Element 102 used by the protocol 110. In alternate embodiments, the attributes and/or locations of multiple types 104 of TLV Elements 102 can be combined into a single Type Definition File 800 and/or Layout Definition File 900 associated with a protocol 110. In some embodiments, configuration files 306 can be stored and accessed as Extensible Markup Language (XML) files. Non-limiting exemplary embodiments of a Type Definition File 800 and a Layout Definition File 900 are shown in
A Type Definition File 800 can define the attributes of a type 104 of TLV Element 102 used by particular protocol 110. The Message Generator and Parser 504 can load a Type Definition File 800 that contains information about a type 104 of TLV Element 102 to create and/or parse a TLV Element 102 of that type 104 within a larger TLV Message 100. In some embodiments, a Type Definition File can comprise one or more of the following fields: Tag 802, TypeName 804, Type 806, and/or DataType 808.
Tag 802 can be a short name for the type 104 of the TLV Element 102. In some embodiments, Tag 802 can be an abbreviated or shorter version of TypeName 804, described below. By way of a non-limiting example, in
TypeName 804 can be a name and/or description of the type 104 of the TLV Element 102. By way of a non-limiting example, in
Type 806 can be an identifier of the type 104 of the TLV Element 102. In some embodiments, Type 806 can be a predefined hexadecimal value assigned to a particular type 104. By way of a non-limiting example, in
DataType 808 can be a representation of a data type associated with the type 104 of the TLV Element 102. As discussed above with respect to
A Layout Definition File 900 associated with a protocol 110 can define the structural relationships between particular TLV Elements 102 within a TLV Message 100 generated according to that protocol 110. By way of a non-limiting example, a Layout Definition File 900 can indicate nesting relationships of TLV Elements 102 and/or collections of TLV Elements 102 within a parent TLV Element 102. In some embodiments, a Layout Definition File 900 can comprise one or more of the following fields: Tag 802, ParentTags 902, Requirement 904, IsCollection 906, Subltem 908, and/or ItemsInCollection 910.
Tag 802 within a Layout Definition File 900 can indicate a tag 802 associated with a type 104 of TLV Element 102. As discussed above, the tag 802 can be used as a common identifier of different types of configuration files 306 associated with a particular type 104 of TLV Element 102, and/or as a shorthand to refer to TLV Elements 102 having that type 104. By way of a non-limiting example, in
ParentTags 902 can be string of tags 802 that denote the tags 802 of a sub-TLV Element's parent TLV Elements 102, grandparent TLV Elements 102, or other ancestor TLV Elements 102 within which the sub-TLV Element 102 is nested. ParentTags 902, by denoting the tags of a TLV Element's ancestors, thereby indicates a TLV Element's nested structural position within an overall TLV Message 100. In some embodiments, the tags 802 of each ancestor TLV Element 102 for the nested sub-TLV Element described by the Layout Definition File 900 can be separated by a dot within the ParentTags 902 field, with higher-level TLV Elements 102 appearing first in the string. By way of a non-limiting example, ParentTags 902 in
Requirement 904 can indicate whether the existence of a TLV Element 102 corresponding to the tag 802 is mandatory, conditional, or optional within a TLV Message 100. By way of a non-limiting example, Requirement 904 in
IsCollection 906 can be a boolean flag indicating whether there can be multiple TLV Elements 102 of the same type 104 nested as children within the same parent TLV Element 102. If IsCollection 906 for a particular tag 802 is set to “false” within a Layout Definition File 900, then there is only one child TLV Element 102 of that particular tag 802 nested within its parent TLV Element 102. However, if IsCollection 906 is set to “true” for a particular tag 802 within a Layout Definition File 900, then there can be, but do not have to be, additional TLV Elements 102 of the same type 104 nested as children within in the same parent TLV Element 102. By way of a non-limiting example, IsCollection 906 can be set to “true” even if there is only one child TLV Element 102 matching the tag 802 within a parent TLV Element 102, but the “true” flag allows additional TLV Elements 102 of the same tag 802 to be added later as children into the same TLV Element 102.
SubItem 908 can be a boolean flag indicating whether a particular TLV Element 102 must have a parent TLV Element 102 within the overall layout of the TLV Message 100, and that the value 108 of the TLV Element 102 can be found within that parent TLV Element 102. By way of a non-limiting example, in some instances there can be multiple TLV Elements 102 of the same type 104 within a TLV Message 100, with each one nested as a child within different parent TLV Element 102. Setting SubItem 908 to “true” can indicate that the child TLV Element's parent TLV Element 102 holds the value of the child TLV Element 102. Setting SubItem 908 to “false” can indicate that the TLV Element 102 does not necessary have a parent, or that the value 108 of the TLV Element 102 can be found within the TLV Element 102 itself.
ItemsInCollection 910 can be included within a Layout Definition File 900 if IsCollection 906 is set to “true” and the data type of the TLV Element 102 is “Compound,” indicating that a TLV Element 102 has a collection of sub-TLV Elements 102 nested within it. ItemsInCollection 910 can include references to, and/or complete Layout Definition Files 900 of sub-TLV Elements 102 that are nested within the TLV Element 102 described by the Layout Definition File 900 and its associated Type Definition File 800.
By way of another non-limiting example,
In some embodiments, a configuration file editor 1200 can be an application with a graphic user interface that allows configuration files 306 such as Type Definition Files 800 and Layout Definition Files 900 to be created and/or edited, as shown in
At step 1402, configuration files 306 associated with a protocol 110 can be created and/or updated. By way of a non-limiting example, configuration files 306 for a new or revised protocol 110 can be created and/or edited with a configuration file editor 1200.
At step 1404, the new or revised configuration files 306 can be distributed to TLV Engines 304 linked to network elements such as senders 300 and receivers 302. As discussed above with respect to
At step 1406, a local TLV Engine 304 can load configuration files 306 associated with a protocol 110 to process a TLV Message 100 in that protocol. By way of a non-limiting example, the local TLV Engine 304 can follow the steps of
At step 1504, the local TLV Engine 304 can load configuration files 306 associated with a particular protocol 110 for use by its Message Generator and Parser 504. In some embodiments, the particular protocol 110 to be used can be pre-agreed upon between the sender 300 and receiver 302, or agreed upon or determined by a network operator or other user who has control over the sender 300 and/or receiver 302. In alternate embodiments, the particular protocol 110 can be any desired protocol 110, and the resulting TLV Message 100 can include an indicator of what protocol 110 was used during generation of the TLV Message 100. The configuration files 306 loaded by the local TLV Engine 304 can be one or more Type Definition Files 800 and one or more Layout Definition Files 900 associated with the protocol 110 that is to be used.
At step 1506, the local TLV Engine 304 can use the Layout Definition Files 900 to determine which TLV Elements 102 are to be used in a TLV Message 100 of the chosen protocol 110, and in the nesting parent-child relationships of the TLV Elements 102. By way of a non-limiting example,
At step 1508, the Message Generator and Parser 504 can assemble the TLV Elements 102 received from the sender 300 into a TLV Message 100 according to the Type Definition Files 800 and Layout Definition Files 900, including nesting TLV Elements 102 within other TLV Elements 102 as children, grandchildren or other relationships as described by the Layout Definition Files 900.
At step 1510, the TLV Message 100 generated during step 1508 can be transmitted to a separate TLV Engine 304 linked to a receiver 302. By way of a non-limiting example, in
At step 1604, one or more Type Definition Files 800 associated with the received TLV Message's protocol 110 can be loaded for use by the Message Generator and Parser 504. As mentioned with respect to step 1504, in some embodiments the protocol 110 used for TLV Messages 100 sent between a sender 300 and receiver 302 can have been pre-determined. In alternate embodiments, the received TLV Message 100 can comprise an indicator of which protocol 110 was used during generation of the TLV Message 100.
At step 1606, the received TLV Message 100 can be parsed into Input 310 that is understandable by the receiver 302. As the received TLV Message 100 already has a structural layout and is received as a binary array, in some embodiments the Layout Definition Files 900 associated with the protocol 110 are not loaded or used, and the received TLV Message 100 can be parsed by looking for the tags 802 of each successive TLV Element 102 in the binary array of the received TLV Message 100 and loading and using the Type Definition File 800 for each respective tag 802 to understand the data in each TLV Element 102 and parse the received TLV Message 100 into data understandable by the receiver 302. By way of a non-limiting example, the Message Generator and Parser 504 can use the Type Definition Files 800 to find and break the TLV Message 100 into its individual TLV Elements 102, and the individual TLV Elements 102 can be understandable by the receiver 302 as Input 310. In these embodiments Layout Definition Files 900 are not used during parsing of the received TLV Message 100, however in alternate embodiments the Layout Definition Files 900 can be loaded and used to assist in parsing the received TLV Message 100 into Input 310. In some embodiments, the local TLV Engine 304 can use the properties and methods of the TLV Message Data Container 502 to understand or find individual TLV Elements 102 in a TLV Message 100.
At step 1608, the Input 310 created during step 1606 by parsing the received TLV Message 100 according to configuration files 306 can be transmitted to the receiver 302. By way of a non-limiting example, in some embodiments, the Input 310 can be the discrete TLV Elements 102 parsed by the TLV Engine 304 and the receiver can extract data from the value 108 of each TLV Element 102. In other embodiments, the Input 310 can be formatted as a generic data structure, and the receiver 302 can convert the generic data structure of the Input 310 into a data object that the receiver 302 can use and understand.
The execution of the sequences of instructions required to practice the embodiments may be performed by a computer system 1700 as shown in
A computer system 1700 according to an embodiment will now be described with reference to
The computer system 1700 may include a communication interface 1714 coupled to the bus 1706. The communication interface 1714 provides two-way communication between computer systems 1700. The communication interface 1714 of a respective computer system 1700 transmits and receives electrical, electromagnetic or optical signals, that include data streams representing various types of signal information, e.g., instructions, messages and data. A communication link 1715 links one computer system 1700 with another computer system 1700. For example, the communication link 1715 may be a LAN, an integrated services digital network (ISDN) card, a modem, or the Internet.
A computer system 1700 may transmit and receive messages, data, and instructions, including programs, i.e., application, code, through its respective communication link 1715 and communication interface 1714. Received program code may be executed by the respective processor(s) 1707 as it is received, and/or stored in the storage device 1710, or other associated non-volatile media, for later execution.
In an embodiment, the computer system 1700 operates in conjunction with a data storage system 1731, e.g., a data storage system 1731 that contains a database 1732 that is readily accessible by the computer system 1700. The computer system 1700 communicates with the data storage system 1731 through a data interface 1733.
Computer system 1700 can include a bus 1706 or other communication mechanism for communicating the instructions, messages and data, collectively, information, and one or more processors 1707 coupled with the bus 1706 for processing information. Computer system 1700 also includes a main memory 1708, such as a random access memory (RAM) or other dynamic storage device, coupled to the bus 1706 for storing dynamic data and instructions to be executed by the processor(s) 1707. The computer system 1700 may further include a read only memory (ROM) 1709 or other static storage device coupled to the bus 1706 for storing static data and instructions for the processor(s) 1707. A storage device 1710, such as a magnetic disk or optical disk, may also be provided and coupled to the bus 1706 for storing data and instructions for the processor(s) 1707.
A computer system 1700 may be coupled via the bus 1706 to a display device 1711, such as an LCD screen. An input device 1712, e.g., alphanumeric and other keys, is coupled to the bus 1706 for communicating information and command selections to the processor(s) 1707.
According to one embodiment, an individual computer system 1700 performs specific operations by their respective processor(s) 1707 executing one or more sequences of one or more instructions contained in the main memory 1708. Such instructions may be read into the main memory 1708 from another computer-usable medium, such as the ROM 1709 or the storage device 1710. Execution of the sequences of instructions contained in the main memory 1708 causes the processor(s) 1707 to perform the processes described herein. In alternative embodiments, hard-wired circuitry may be used in place of or in combination with software instructions. Thus, embodiments are not limited to any specific combination of hardware circuitry and/or software.
Although the invention has been described in conjunction with specific embodiments thereof, it is evident that many alternatives, modifications and variations will be apparent to those skilled in the art. Accordingly, the invention as described and hereinafter claimed is intended to embrace all such alternatives, modifications and variations that fall within the spirit and broad scope of the appended claims.
This application claims priority under 35 U.S.C. §119(e) from earlier filed U.S. Provisional Application Ser. No. 61/756,987, filed Jan. 25, 2013, which is hereby incorporated by reference.
Number | Date | Country | |
---|---|---|---|
61756987 | Jan 2013 | US |