xmlrpc.h
上传用户:gzpyjq
上传日期:2013-01-31
资源大小:1852k
文件大小:6k
源码类别:

手机WAP编程

开发平台:

WINDOWS

  1. /*
  2.  * xmlrpc.h - XML-RPC functions
  3.  *
  4.  * Functions to handle XML-RPC structure - building and parsing
  5.  *
  6.  * XML-RPC is HTTP-based XML defination to handle remote procedure calls,
  7.  * and is defined in http://www.xml-rpc.org
  8.  *
  9.  * The current implementation is not yet ready (it does not, for example,
  10.  *  do any parsing nor building the tree), and is not used for any real use,
  11.  * yet, but probably future interfaces might be able to use this, too
  12.  *
  13.  *
  14.  * Kalle Marjola 2001 for project Kannel
  15.  */
  16. #ifndef __XMLRPC_H
  17. #define __XMLRPC_H
  18. #include "gwlib/gwlib.h"
  19. /*
  20.  * types and structures defined by www.xml-rpc.com
  21.  */
  22. typedef struct xmlrpc_methodresponse XMLRPCMethodResponse;
  23. typedef struct xmlrpc_member XMLRPCMember;
  24. typedef struct xmlrpc_scalar XMLRPCScalar;
  25. typedef struct xmlrpc_methodcall XMLRPCMethodCall;
  26. typedef struct xmlrpc_value XMLRPCValue;
  27. typedef struct xmlrpc_table_t xmlrpc_table_t;
  28. typedef struct xmlrpc_2table_t xmlrpc_2table_t;
  29. #define create_octstr_from_node(node) (octstr_create(node->content))
  30. enum { 
  31.     xr_undefined, xr_scalar, xr_array, xr_struct, 
  32.     xr_string, xr_int, xr_bool, xr_double, xr_date, xr_base64 
  33. };
  34. /*
  35.  * status codes while parsing
  36.  */
  37. enum {
  38.     XMLRPC_COMPILE_OK,
  39.     XMLRPC_XMLPARSE_FAILED,
  40.     XMLRPC_PARSING_FAILED
  41. };
  42. /*** METHOD CALLS ***/
  43. /* Create new MethodCall object with given name and no params */
  44. XMLRPCMethodCall *xmlrpc_call_create(Octstr *method);
  45. /* Create new MethodCall object from given body of text/xml */
  46. /* PARTIALLY IMPLEMENTED */
  47. XMLRPCMethodCall *xmlrpc_call_parse(Octstr *post_body);
  48. /* Destroy MethodCall object */
  49. void xmlrpc_call_destroy(XMLRPCMethodCall *call);
  50. /* Add a scalar param to MethodCall object. Always return 0 */
  51. int xmlrpc_call_add_scalar(XMLRPCMethodCall *method, int type, void *arg);
  52. /* Add given <value> param to MethodCall object. Always return 0.
  53.  * Note that value is NOT duplicated */
  54. /* NOTE: As currently only string and int4 is supported, this function
  55.  * has no real use, just use above functions */
  56. int xmlrpc_call_add_value(XMLRPCMethodCall *method, XMLRPCValue *value);
  57. /* Create Octstr (text/xml string) out of given MethodCall. Caller
  58.  * must free returned Octstr */
  59. /* PARTIALLY IMPLEMENTED */
  60. Octstr *xmlrpc_call_octstr(XMLRPCMethodCall *call);
  61. /* Send MethodCall to given URL with given Headers. Note: adds XML-RPC
  62.  *  specified headers into given list. 'headers' are always destroyed, and
  63.  * if NULL when this function called, automatically generated
  64.  *
  65.  * Return 0 if all went fine, -1 if failure. As user reference, uses *void
  66.  */
  67. /* PARTIALLY IMPLEMENTED, as is based on above function, for example */
  68. int xmlrpc_call_send(XMLRPCMethodCall *call, HTTPCaller *http_ref,
  69.      Octstr *url, List *headers, void *ref);
  70. /*** METHOD RESPONSES ***/
  71. /* Create a new MethodResponse object with given <value> */
  72. XMLRPCMethodResponse *xmlrpc_response_create(XMLRPCValue *value);
  73. /* As above, but with <fault> part with filled-up structs */
  74. /* NOT YET IMPLEMENTED */
  75. XMLRPCMethodResponse *xmlrpc_response_fault_create(long faultcode,
  76.    Octstr *faultstring);
  77. /* Create a new MethodResponse object from given text/xml string */
  78. /* NOT YET IMPLEMENTED */
  79. XMLRPCMethodResponse *xmlrpc_response_parse(Octstr *post_body);
  80. /* Destroy MethodResponse object */
  81. void xmlrpc_response_destroy(XMLRPCMethodResponse *response);
  82. /*** STRUCT HANDLING ***/
  83. /* Create a new <value> object of undefined type */ 
  84. XMLRPCValue *xmlrpc_value_create(void);
  85. /* Destroy given <value> object */
  86. void xmlrpc_value_destroy(XMLRPCValue *val);
  87. /* Wrapper for destroy */
  88. void xmlrpc_value_destroy_item(void *val);
  89. /* append output of value to given octstr */
  90. /* THIS SHOULD GO AWAY LATER */
  91. void xmlrpc_value_print(XMLRPCValue *val, Octstr *os);
  92. /* Create a new <member> for xs_struct with undefined <value> */
  93. XMLRPCMember *xmlrpc_member_create(Octstr *name);
  94. /* Destroy struct member along with value */
  95. void xmlrpc_member_destroy(XMLRPCMember *member);
  96. /* Wrapper for destroy */
  97. void xmlrpc_member_destroy_item(void *member);
  98. /* Create a new scalar of given type and value
  99.  * (which must be in right format) */
  100. XMLRPCScalar *xmlrpc_scalar_create(int type, void *arg);
  101. XMLRPCScalar *xmlrpc_scalar_create_double(int type, double val);
  102. /* Create a new sturct of given type and value
  103.  * (which must be in right format) */
  104. XMLRPCValue *xmlrpc_create_struct_value(int type, void *arg);
  105. /* Destroy scalar */
  106. void xmlrpc_scalar_destroy(XMLRPCScalar *scalar);
  107. /* append output of scalar to given octstr */
  108. /* THIS SHOULD GO AWAY LATER */
  109. void xmlrpc_scalar_print(XMLRPCScalar *scalar, Octstr *os);
  110. /* Create <value> of <scalar> type with given type and value */
  111. XMLRPCValue *xmlrpc_create_scalar_value(int type, void *arg);
  112. XMLRPCValue *xmlrpc_create_scalar_value_double(int type, double val);
  113. /* 
  114.  * Check if parsing had any errors, return status code of parsing by
  115.  * returning one of the following: 
  116.  *   XMLRPC_COMPILE_OK,
  117.  *   XMLRPC_XMLPARSE_FAILED,
  118.  *   XMLRPC_PARSING_FAILED
  119.  *   -1 if call has been NULL
  120.  */
  121. int xmlrpc_parse_status(XMLRPCMethodCall *call);
  122. /* Return parser error string if parse_status != XMLRPC_COMPILE_OK */
  123. /* return NULL if no error occured or no error string was available */
  124. Octstr *xmlrpc_parse_error(XMLRPCMethodCall *call);
  125. /* Return the name of the method requested */
  126. Octstr *xmlrpc_get_method_name(XMLRPCMethodCall *call);
  127. /* Return number of parameters within the params list */
  128. int xmlrpc_call_len(XMLRPCMethodCall *call);
  129. /* Return type of variable at position 'pos' within the param list */
  130. /* return -1 if there is no item in the list */
  131. int xmlrpc_get_type(XMLRPCMethodCall *call, int pos);
  132. #endif