File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libpdel / structs / xmlrpc.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 23:25:53 2012 UTC (13 years, 1 month ago) by misho
Branches: libpdel, MAIN
CVS tags: v0_5_3, HEAD
libpdel

    1: 
    2: /*
    3:  * Copyright (c) 2001-2002 Packet Design, LLC.
    4:  * All rights reserved.
    5:  * 
    6:  * Subject to the following obligations and disclaimer of warranty,
    7:  * use and redistribution of this software, in source or object code
    8:  * forms, with or without modifications are expressly permitted by
    9:  * Packet Design; provided, however, that:
   10:  * 
   11:  *    (i)  Any and all reproductions of the source or object code
   12:  *         must include the copyright notice above and the following
   13:  *         disclaimer of warranties; and
   14:  *    (ii) No rights are granted, in any manner or form, to use
   15:  *         Packet Design trademarks, including the mark "PACKET DESIGN"
   16:  *         on advertising, endorsements, or otherwise except as such
   17:  *         appears in the above copyright notice or in the software.
   18:  * 
   19:  * THIS SOFTWARE IS BEING PROVIDED BY PACKET DESIGN "AS IS", AND
   20:  * TO THE MAXIMUM EXTENT PERMITTED BY LAW, PACKET DESIGN MAKES NO
   21:  * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING
   22:  * THIS SOFTWARE, INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED
   23:  * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
   24:  * OR NON-INFRINGEMENT.  PACKET DESIGN DOES NOT WARRANT, GUARANTEE,
   25:  * OR MAKE ANY REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS
   26:  * OF THE USE OF THIS SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY,
   27:  * RELIABILITY OR OTHERWISE.  IN NO EVENT SHALL PACKET DESIGN BE
   28:  * LIABLE FOR ANY DAMAGES RESULTING FROM OR ARISING OUT OF ANY USE
   29:  * OF THIS SOFTWARE, INCLUDING WITHOUT LIMITATION, ANY DIRECT,
   30:  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, PUNITIVE, OR CONSEQUENTIAL
   31:  * DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF
   32:  * USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY THEORY OF
   33:  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   34:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
   35:  * THE USE OF THIS SOFTWARE, EVEN IF PACKET DESIGN IS ADVISED OF
   36:  * THE POSSIBILITY OF SUCH DAMAGE.
   37:  *
   38:  * Author: Archie Cobbs <archie@freebsd.org>
   39:  */
   40: 
   41: #ifndef _PDEL_STRUCTS_XMLRPC_H_
   42: #define _PDEL_STRUCTS_XMLRPC_H_
   43: 
   44: #define XML_RPC_URL		"/RPC2"
   45: #define XML_RPC_REQUEST_TAG	"methodCall"
   46: #define XML_RPC_REPLY_TAG	"methodResponse"
   47: #define XML_RPC_METHOD_NAME_TAG	"methodName"
   48: 
   49: /* 
   50:  * XML-RPC structure definitions
   51:  */
   52: 
   53: DEFINE_STRUCTS_UNION(xmlrpc_value_union, xmlrpc_value);
   54: DEFINE_STRUCTS_UNION(xmlrpc_response_union, xmlrpc_response);
   55: DEFINE_STRUCTS_ARRAY(xmlrpc_value_array, struct xmlrpc_value_union);
   56: DEFINE_STRUCTS_ARRAY(xmlrpc_param_array, struct xmlrpc_param);
   57: DEFINE_STRUCTS_ARRAY(xmlrpc_struct, struct xmlrpc_member);
   58: 
   59: /* Member (of a structure) */
   60: struct xmlrpc_member {
   61: 	char				*name;
   62: 	struct xmlrpc_value_union	value;
   63: };
   64: 
   65: /* Array */
   66: struct xmlrpc_array {
   67: 	struct xmlrpc_value_array	data;
   68: };
   69: 
   70: /* Parameter (for either a request or a response) */
   71: struct xmlrpc_param {
   72: 	struct xmlrpc_value_union	value;
   73: };
   74: 
   75: /* Value */
   76: union xmlrpc_value {
   77: 	char				*string;
   78: 	int32_t				i4;
   79: 	int32_t				int_;
   80: 	u_char				boolean;
   81: 	double				double_;
   82: 	time_t				dateTime_iso8601;
   83: 	struct structs_data		base64;
   84: 	struct xmlrpc_value_array	array;
   85: 	struct xmlrpc_struct		struct_;
   86: };
   87: 
   88: /* Fault */
   89: struct xmlrpc_fault {
   90: 	struct xmlrpc_value_union	value;		/* see below */
   91: };
   92: 
   93: /* Fault in compact form */
   94: struct xmlrpc_compact_fault {
   95: 	int32_t		faultCode;
   96: 	char		*faultString;
   97: };
   98: 
   99: /* Request */
  100: struct xmlrpc_request {
  101: 	char				*methodName;
  102: 	struct xmlrpc_param_array	params;
  103: };
  104: 
  105: /* Response */
  106: union xmlrpc_response {
  107: 	struct xmlrpc_param_array	params;		/* params.length == 1 */
  108: 	struct xmlrpc_fault		fault;
  109: };
  110: 
  111: __BEGIN_DECLS
  112: 
  113: /*
  114:  * Type describing an XML-RPC value in XML-RPC exploded form.
  115:  * This type describes a 'struct xmlrpc_value_union'.
  116:  */
  117: extern const	struct structs_type structs_type_xmlrpc_value;
  118: 
  119: /*
  120:  * Type describing an XML-RPC array in XML-RPC exploded form.
  121:  * This type describes a 'struct xmlrpc_array'.
  122:  */
  123: extern const	struct structs_type structs_type_xmlrpc_array;
  124: 
  125: /*
  126:  * Type describing an XML-RPC member in XML-RPC exploded form.
  127:  * This type describes a 'struct xmlrpc_member'.
  128:  */
  129: extern const	struct structs_type structs_type_xmlrpc_member;
  130: 
  131: /*
  132:  * Type describing an XML-RPC struct in XML-RPC exploded form.
  133:  * This type describes a 'struct xmlrpc_struct'.
  134:  */
  135: extern const	struct structs_type structs_type_xmlrpc_struct;
  136: 
  137: /*
  138:  * Type describing an XML-RPC request in XML-RPC exploded form.
  139:  * This type describes a 'struct xmlrpc_request'.
  140:  */
  141: extern const	struct structs_type structs_type_xmlrpc_request;
  142: 
  143: /*
  144:  * Type describing an XML-RPC response in XML-RPC exploded form.
  145:  * This type describes a 'struct xmlrpc_response_union'.
  146:  */
  147: extern const	struct structs_type structs_type_xmlrpc_response;
  148: 
  149: /*
  150:  * Type describing an XML-RPC fault in XML-RPC exploded form.
  151:  * This type describes a 'struct xmlrpc_fault'.
  152:  */
  153: extern const	struct structs_type structs_type_xmlrpc_fault;
  154: 
  155: /*
  156:  * Type describing an XML-RPC fault in compact form.
  157:  * This type describes a 'struct xmlrpc_compact_fault'.
  158:  */
  159: extern const	struct structs_type structs_type_xmlrpc_compact_fault;
  160: 
  161: /*
  162:  * Create an XML-RPC methodCall structure with the given parameters.
  163:  * The returned structure will be allocated with type "mtype"
  164:  * and have type &structs_type_xmlrpc_request.
  165:  *
  166:  * The parameters should be specified as pairs: type, data.
  167:  */
  168: extern struct	xmlrpc_request *structs_xmlrpc_build_request(const char *mtype,
  169: 			const char *methodName, u_int nparams,
  170: 			const struct structs_type **types, const void **params);
  171: 
  172: /*
  173:  * Create an XML-RPC methodResponse structure with the given return value.
  174:  *
  175:  * The returned structure will be allocated with type "mtype"
  176:  * and have type &structs_type_xmlrpc_response.
  177:  */
  178: extern struct	xmlrpc_response_union *structs_xmlrpc_build_response(
  179: 			const char *mtype, const struct structs_type *type,
  180: 			const void *data);
  181: 
  182: /*
  183:  * Create an XML-RPC methodResponse structure with the given fault.
  184:  *
  185:  * The returned structure will be allocated with type "mtype"
  186:  * and have type &structs_type_xmlrpc_response.
  187:  */
  188: extern struct	xmlrpc_response_union *structs_xmlrpc_build_fault_response(
  189: 			const char *mtype,
  190: 			const struct xmlrpc_compact_fault *fault);
  191: 
  192: /*
  193:  * Convert a normal structure into an XML-RPC value.
  194:  */
  195: extern int	structs_struct2xmlrpc(const struct structs_type *type,
  196: 			const void *data, const char *sname,
  197: 			const struct structs_type *xtype,
  198: 			void *xdata, const char *xname);
  199: 
  200: /*
  201:  * Convert an XML-RPC value into a normal structure.
  202:  */
  203: extern int	structs_xmlrpc2struct(const struct structs_type *xtype,
  204: 			const void *xdata, const char *xname,
  205: 			const struct structs_type *type, void *data,
  206: 			const char *sname, char *ebuf, size_t emax);
  207: 
  208: __END_DECLS
  209: 
  210: #endif	/* _PDEL_STRUCTS_XMLRPC_H_ */
  211: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>