Internet Draft B. Booth Motorola Mobility Creation Date: 2011-01-20 Category: Experimental Expires July 2011 January 2011 Common Logic Interface Protocol (CLIP) Framework Status of this Memo Distribution of this memo is unlimited. This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet- Drafts. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt. The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html. This Internet-Draft will expire on July 24, 2011. Copyright Notice Copyright (c) 2011 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Booth Expires July 2011 [Page 1] Internet Draft CLIP January 20, 2011 Abstract This document defines the Common Logic Interface Protocol (CLIP) framework. CLIP provides a programming language independent interface between system components. An overview of CLIP is provided as well as a description of logical systems. In addition, the CLIP syntax is defined. Example pseudo-code for common clip utility functions are provided. Finally, some additional notes and recommended practices are included in the document. Table of Contents 1. Introduction ....................................................3 1.1. Overview ...................................................3 1.2. Requirements ...............................................3 2. Logical Systems .................................................4 3. CLIP ............................................................8 3.1. Syntax .....................................................8 3.2. Pseudo Code ................................................9 3.3. Example Message Definition ................................10 3.4. Additional Notes and Recommended Practices ...............12 4. Security Considerations ........................................12 5. IANA Considerations ............................................12 6. Acknowledgements ...............................................13 7. References .....................................................13 1. Introduction 1.1. Overview The Common Logic Interface Protocol (CLIP) framework provides independent logical systems a simple means of connecting and inter- operating. CLIP provides a platform and programming language- independent interface between system components. CLIP's roots are primarily derived from data flow design methodology and the fundamental common gateway interface (CGI) [RFC3875] concept of name/value pair queries typically found on web server URI [RFC3986] implementations. CLIP is designed to be scaleable. Specifically, CLIP is intended to be a practical solution that is applicable from small embedded devices to large scale server environments. In practice, a CLIP system may be implemented in a multitude of environments. For example, a script running on a web server, code running on a client side browser, a native application running on a personal computer, or firmware within an embedded device. Additionally, systems that utilize CLIP can interconnect via any data communication method (e.g. TCP/IP sockets, HTTP, data queues, device memory interface, software programming interfaces, etc.). It should be noted that CLIP messages are intended to be REST compatible. Booth Expires July 2011 [Page 2] Internet Draft CLIP January 20, 2011 1.2. Requirements The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [RFC2119]. An implementation is not compliant if it fails to satisfy one or more of the 'must' requirements for the protocols it implements. An implementation that satisfies all of the 'must' and all of the 'should' requirements for its features is said to be 'unconditionally compliant'; one that satisfies all of the 'must' requirements but not all of the 'should' requirements for its features is said to be 'conditionally compliant'. 2. Logical Systems A logical system is one or more expressions or sub-systems that operate on a set of input parameters and MAY generate one or more output parameters. The input and output to and from logical systems are name/value pairs as specified in the CLIP Syntax [section 3.1]. Figure 1 shows a high level overview of a simple logical system. ------------------- | | Input 1 ---> | Simple System |---> Output 1 | | ------------------- Figure 1 - Simple CLIP Logical System Booth Expires July 2011 [Page 3] Internet Draft CLIP January 20, 2011 In practice, a logical system will contain five fundamental elements: a data input receiver (data_recv), an input handler (clip_in), a logical system (system), an output generator (clip_out), and a data output sender (data_send). Figure 1.1 shows these internal elements using the Simple System from Figure 1 as a model. ------------------------------------------- | | | Basic CLIP System | | | | -------------- | Input 1 -------------> | data_recv | | | -------------- | | | | | ------------ | | | | | V | | ----------- ---------- ------------ | | | clip_in |-->| system |-->| clip_out | | | ----------- ---------- ------------ | | | | | --------------- | | | | | V | | --------------- | | | data_send | ---------------> Output 1 | --------------- | | | | | ------------------------------------------- Figure 1.1 - CLIP Logical System Internal Elements The input receiver (data_recv) is responsible for capturing input data from an input source. The input handler (clip_in) parses input name/ value strings into a system dependent native format. The system operates on the native input name/value pairs. The output generator (clip_out) builds output name/value strings from the system's native format. The output sender (data_send) distributes the output data to its intended destination. Booth Expires July 2011 [Page 4] Internet Draft CLIP January 20, 2011 Figure 2 shows a complex logical system that includes multiple input and output parameters. ----------------- | | Input 1 ---> | | ---> Output 1 . | | . . | Complex | . . | System | . Input N-1 ---> | | ---> Output M-1 Input N ---> | | ---> Output M | | ----------------- Figure 2 - Complex CLIP Logical System CLIP can be utilized in both simple and complex logical systems. Systems can be inter-"clipped", intra-"clipped", or any combination thereof. Figure 3 shows two systems that are inter-clipped. In this case, Output 1 from System A is utilized as Input 2 into System B. Correspondingly, Output 2 from System B is channeled to System A as Input 1. ----------- | | ---> Input 1 ---> | SYS A |--> Output 1 ---| | | | | | ----------- | | | | | | ----------- | |--- Output 2 <-- | |<--- Input 2 <--| | SYS B | | | ----------- Figure 3 - Inter-clipped Logical Systems Booth Expires July 2011 [Page 5] Internet Draft CLIP January 20, 2011 Figure 4 shows two logical systems that are intra-clipped. In this case, Input A1 of System A is utilized as Input B1 into System B. Correspondingly, Output B2 from System B is redirected as the Output A2 from System A. In this example, System A also has an additional Output A1. --------------------------------- | | Input A1 --> | ---- |---> Output A1 | | SYS A | | Input B1 | | | | | | ----------- | | | | | | | -->| SYS B |-- Output -->|---> Output A2 | | | B2 | | ----------- | | | --------------------------------- Figure 4 - Intra-clipped Logical Systems Booth Expires July 2011 [Page 6] Internet Draft CLIP January 20, 2011 3. CLIP 3.1 Syntax The CLIP Interface provides a common format for input and output to and from logical systems and is specified as a set of name value pairs delimited by the ampersand ("&") character. Each name/value pair in a set is delimited by the equals ("=") character. This specification uses the Augmented Backus-Naur Form (ABNF) notation of [RFC5234]. uchar = any unicode character except for "&", "=", or "%" nv_char = uchar / "%25" / "%26" / "%3D" name = *( nv_char ) value = *( nv_char ) nv_pair = *( [ name "=" ] value ) clip_input = *( nv_pair *( "&" nv_pair ) ) clip_output = *( nv_pair *( "&" nv_pair ) ) Booth Expires July 2011 [Page 7] Internet Draft CLIP January 20, 2011 3.2 Pseudo Code The code examples (written in Javascript below) outline the functions that a CLIP system MUST implement for a given programming language. // CLIP in function function clip_in(str,limit) { var in_array = new Array(); var i = 0; var start = 0; var next = 0; if (typeof limit != "undefined") { for (i=0;i | Echo | --> "Response=Hello World!" +------+ Booth Expires July 2011 [Page 10] Internet Draft CLIP January 20, 2011 1. Greeting SYNTAX Greeting=& GREETING TYPES +-------------------------------------------------------------+ | Valid Values | Description | +-------------------------------------------------------------+ | "Hello" | Salutation | +-------------------------------------------------------------+ RETURNS +-------------------------------------------------------------+ | Name | Values | +-------------------------------------------------------------+ | "Error" | "Invalid Input" | +-------------------------------------------------------------+ 1.1 Hello SYNTAX Greeting=Hello& SUBPARAMS +-------------------------------------------------------------+ | Name | Valid Values | +-------------------------------------------------------------+ | "Who" | | +-------------------------------------------------------------+ RETURNS Upon Success return: +-------------------------------------------------------------+ | Name | Values | +-------------------------------------------------------------+ | "Response" | | +-------------------------------------------------------------+ Upon error return: +-------------------------------------------------------------+ | Name | Values | +-------------------------------------------------------------+ | Error | "Invalid Input" | +-------------------------------------------------------------+ Booth Expires July 2011 [Page 11] Internet Draft CLIP January 20, 2011 3.4 Additional Notes and Recommended Practices 3.4.1 Case Sensitivity CLIP names and values are case sensitive. 3.4.2 Duplicate Names Only the first name in a set of duplicate names within a CLIP message SHOULD be processed. For example, if a CLIP message contains "price=1.00&price=5.00", the logical system parsing the name value pairs would only act upon "price=1.00" and discard "price=5.00". 3.4.1 Ordering Constraints There are no specific ordering constraints on CLIP inputs or outputs unless specifically defined within a system's protocol definition. It is preferred that input and output sets be defined in a manner such that any such ordering constraints are avoided. 4. Security Considerations There are no security considerations relevant to this document. 5. IANA Considerations No actions are required from IANA as result of the publication of this document. Booth Expires July 2011 [Page 12] Internet Draft CLIP January 20, 2011 6. Acknowledgements This document has benefited greatly from the comments of Terry Brogan, Pat Leary, Bill Franks and Dinkar Bhat. 7. References 7.1. Normative References [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax Specifications: ABNF", RFC 5234, January 2008. [RFC3875] Robinson, D. and K. Coar, "The Common Gateway Interface (CGI) Version 1.1", RFC 3875, October 2004. [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform Resource Identifier (URI): Generic Syntax", STD 66, RFC 3986, January 2005. Authors' Addresses Bob Booth Motorola Mobility 101 Tournament Drive Horsham, PA 19040 EMail: bob.booth@motorola.com Booth Expires July 2011 [Page 13]