Annotation of embedaddon/libpdel/http/http_xml.3, revision 1.1.1.1

1.1       misho       1: .\" Copyright (c) 2001-2002 Packet Design, LLC.
                      2: .\" All rights reserved.
                      3: .\" 
                      4: .\" Subject to the following obligations and disclaimer of warranty,
                      5: .\" use and redistribution of this software, in source or object code
                      6: .\" forms, with or without modifications are expressly permitted by
                      7: .\" Packet Design; provided, however, that:
                      8: .\" 
                      9: .\"    (i)  Any and all reproductions of the source or object code
                     10: .\"         must include the copyright notice above and the following
                     11: .\"         disclaimer of warranties; and
                     12: .\"    (ii) No rights are granted, in any manner or form, to use
                     13: .\"         Packet Design trademarks, including the mark "PACKET DESIGN"
                     14: .\"         on advertising, endorsements, or otherwise except as such
                     15: .\"         appears in the above copyright notice or in the software.
                     16: .\" 
                     17: .\" THIS SOFTWARE IS BEING PROVIDED BY PACKET DESIGN "AS IS", AND
                     18: .\" TO THE MAXIMUM EXTENT PERMITTED BY LAW, PACKET DESIGN MAKES NO
                     19: .\" REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING
                     20: .\" THIS SOFTWARE, INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED
                     21: .\" WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
                     22: .\" OR NON-INFRINGEMENT.  PACKET DESIGN DOES NOT WARRANT, GUARANTEE,
                     23: .\" OR MAKE ANY REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS
                     24: .\" OF THE USE OF THIS SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY,
                     25: .\" RELIABILITY OR OTHERWISE.  IN NO EVENT SHALL PACKET DESIGN BE
                     26: .\" LIABLE FOR ANY DAMAGES RESULTING FROM OR ARISING OUT OF ANY USE
                     27: .\" OF THIS SOFTWARE, INCLUDING WITHOUT LIMITATION, ANY DIRECT,
                     28: .\" INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, PUNITIVE, OR CONSEQUENTIAL
                     29: .\" DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF
                     30: .\" USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY THEORY OF
                     31: .\" LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                     32: .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
                     33: .\" THE USE OF THIS SOFTWARE, EVEN IF PACKET DESIGN IS ADVISED OF
                     34: .\" THE POSSIBILITY OF SUCH DAMAGE.
                     35: .\"
                     36: .\" Author: Archie Cobbs <archie@freebsd.org>
                     37: .\"
                     38: .\" $Id: http_xml.3,v 1.7 2004/06/02 17:24:37 archie Exp $
                     39: .\"
                     40: .Dd April 22, 2002
                     41: .Dt HTTP_XML 3
                     42: .Os
                     43: .Sh NAME
                     44: .Nm http_xml_send ,
                     45: .Nm http_xml_send_xmlrpc ,
                     46: .Nd XML and XML-RPC requests over HTTP
                     47: .Sh LIBRARY
                     48: PDEL Library (libpdel, \-lpdel)
                     49: .Sh SYNOPSIS
                     50: .In sys/types.h
                     51: .In netinet/in.h
                     52: .In pdel/http/xml.h
                     53: .Ft int
                     54: .Fn http_xml_send "struct http_client *client" "struct in_addr ip" "u_int16_t port" "int https" "const char *urlpath" "const char *username" "const char *password" "const char *ptag" "const char *pattrs" "const struct structs_type *ptype" "const void *payload" "int pflags" "const char *rtag" "char **rattrsp" "const char *rattrs_mtype" "const struct structs_type *rtype" "void *reply" "int rflags" "structs_xmllog_t *rlogger"
                     55: .Ft int
                     56: .Fn http_xml_send_xmlrpc "struct http_client *client" "struct in_addr ip" "u_int16_t port" "int https" "const char *username" "const char *password" "const char *methodName" "u_int nparams" "const struct structs_type **ptypes" "const void **pdatas" "const struct structs_type *rtype" "void *reply" "struct xmlrpc_compact_fault *fault" "structs_xmllog_t *rlogger"
                     57: .Sh DESCRIPTION
                     58: These functions send and receive XML and XML-RPC over HTTP and HTTPS.
                     59: They are convenience wrappers around the
                     60: .Xr http_request 3 ,
                     61: .Xr http_response 3 ,
                     62: .Xr structx_xml_input 3 ,
                     63: .Xr structs_xml_output 3 ,
                     64: and
                     65: .Xr structs_xmlrpc 3
                     66: routines.
                     67: .Pp
                     68: .Fn http_xml_send
                     69: uses
                     70: .Fa client
                     71: to send an HTTP request for the URL path
                     72: .Fa urlpath
                     73: (which must being with a '/') to IP address
                     74: .Fa ip
                     75: and port
                     76: .Fa port .
                     77: If
                     78: .Fa https
                     79: is non-zero, an SSL (HTTPS) request is made.
                     80: The
                     81: .Fa username
                     82: and
                     83: .Fa password
                     84: may be non-
                     85: .Dv NULL
                     86: for "Basic" HTTP authentication.
                     87: .Pp
                     88: The remaining arguments to
                     89: .Fn http_xml_send
                     90: describe the optional XML request payload and the expected XML reply payload.
                     91: .Pp
                     92: To include a payload in the request,
                     93: .Fa payload
                     94: should be non-
                     95: .Dv NULL .
                     96: If so,
                     97: .Fa ptag ,
                     98: .Fa pattrs ,
                     99: .Fa ptype ,
                    100: .Fa payload ,
                    101: and
                    102: .Fa pflags
                    103: are handled exactly like the
                    104: .Fa elem_tag ,
                    105: .Fa attrs ,
                    106: .Fa type ,
                    107: .Fa data ,
                    108: and
                    109: .Fa flags
                    110: parameters (respectively) to the function
                    111: .Xr structs_xml_output 3 .
                    112: The request payload will be sent using an HTTP POST with MIME type "text/xml".
                    113: If
                    114: .Fa payload
                    115: is
                    116: .Dv NULL ,
                    117: an HTTP GET request is sent instead.
                    118: .Pp
                    119: The HTTP response must contain an XML document, which is parsed and
                    120: converted into native binary format.
                    121: The
                    122: .Fa rtag ,
                    123: .Fa rattrsp ,
                    124: .Fa rattrs_mtype ,
                    125: .Fa rtype ,
                    126: .Fa reply ,
                    127: .Fa rflags ,
                    128: and
                    129: .Fa rlogger
                    130: are handled exactly like the
                    131: .Fa elem_tag ,
                    132: .Fa attrp ,
                    133: .Fa attr_type ,
                    134: .Fa type ,
                    135: .Fa data ,
                    136: .Fa flags ,
                    137: and
                    138: .Fa logger
                    139: parameters (respectively) to the function
                    140: .Xr structs_xml_input 3 .
                    141: .Pp
                    142: .Fn http_xml_send_xmlrpc
                    143: sends an XML-RPC request.
                    144: The
                    145: .Fa client ,
                    146: .Fa ip ,
                    147: .Fa port ,
                    148: .Fa https ,
                    149: .Fa username ,
                    150: .Fa password ,
                    151: and
                    152: .Fa rlogger
                    153: parameters are as with
                    154: .Fn http_xml_send .
                    155: The XML-RPC method name is pointed to by
                    156: .Fa methodName .
                    157: .Fa nparams
                    158: XML-RPC request parameters are sent;
                    159: .Fa ptypes
                    160: must point to an array of 
                    161: .Fa nparams
                    162: parameter types and
                    163: .Fa pdatas
                    164: to an array of 
                    165: .Fa nparams
                    166: parameter values having the corresponding types.
                    167: These are
                    168: .Dq compact
                    169: .Xr structs 3
                    170: types that will be automatically expanded into
                    171: .Dq exploded
                    172: XML-RPC types when the actual request is sent (see
                    173: .Xr structs_xmlrpc 3) .
                    174: .Pp
                    175: To send exploded XML-RPC values directly, set
                    176: .Fa ptypes
                    177: to
                    178: .Dv NULL .
                    179: Then it will be assumed that each element in the
                    180: .Fa pdatas
                    181: array is an instance of
                    182: .Xr structs_type_xmlrpc_value 3 ,
                    183: i.e., a
                    184: .Li "struct xmlrpc_value_union" .
                    185: .Pp
                    186: If
                    187: .Fa reply
                    188: is
                    189: .Dv NULL ,
                    190: the reply is ignored.
                    191: Otherwise, the XML-RPC return value must have
                    192: .Dq compact
                    193: type matching
                    194: .Fa rtype
                    195: and
                    196: .Fa reply
                    197: must point to an uninitialized region of memory large enough
                    198: to hold an instance of
                    199: .Fa rtype .
                    200: If the request is successful and no fault is returned,
                    201: .Fn http_send_xmlrpc
                    202: returns zero and
                    203: .Fa reply
                    204: will be initialized with the
                    205: .Dq compacted
                    206: XML-RPC return value.
                    207: If the returned value does not match
                    208: .Fa rtype ,
                    209: then -1 is returned with
                    210: .Va errno
                    211: set appropriately.
                    212: .Pp
                    213: To have the exploded XML-RPC value returned directly, set
                    214: .Fa rtype
                    215: to
                    216: .Dv NULL .
                    217: Then it will be assumed that
                    218: .Fa reply
                    219: points to an uninitialized instance of
                    220: .Xr structs_type_xmlrpc_value 3 ,
                    221: i.e., a
                    222: .Li "struct xmlrpc_value_union" ,
                    223: and the reply will be returned unmodified.
                    224: .Pp
                    225: If an XML-RPC fault is returned, then
                    226: .Fa "*reply"
                    227: remains unmodified and
                    228: .Fn http_xml_send_xmlrpc
                    229: returns -2.
                    230: In addition, if
                    231: .Fa "fault"
                    232: is not
                    233: .Dv NULL ,
                    234: then it is assumed to point to an uninitialized instance of
                    235: .Fa structs_type_xmlrpc_compact_fault ,
                    236: i.e., a
                    237: .Li "struct xmlrpc_compact_fault" .
                    238: The instance will be initialized with the received XML-RPC fault.
                    239: The calling function is responsible for eventually uninitializing it.
                    240: .Sh RETURN VALUES
                    241: Upon error,
                    242: .Fn http_xml_send
                    243: and
                    244: .Fn http_xml_send_xmlrpc
                    245: return -1 and set
                    246: .Va errno
                    247: to an appropriate value.
                    248: .Pp
                    249: If
                    250: .Fn http_xml_send_xmlrpc
                    251: receives an XML-RPC fault from the server,
                    252: -2 is returned.
                    253: .Sh SEE ALSO
                    254: .Xr http_client 3 ,
                    255: .Xr http_request 3 ,
                    256: .Xr http_response 3 ,
                    257: .Xr http_servlet_xml 3 ,
                    258: .Xr http_servlet_xmlrpc 3 ,
                    259: .Xr libpdel 3 ,
                    260: .Xr structs_xml_input 3 ,
                    261: .Xr structs_xmlrpc 3
                    262: .Rs
                    263: .%T "XML-RPC Home Page"
                    264: .%O "http://www.xmlrpc.org/"
                    265: .Re
                    266: .Sh HISTORY
                    267: The PDEL library was developed at Packet Design, LLC.
                    268: .Dv "http://www.packetdesign.com/"
                    269: .Sh AUTHORS
                    270: .An Archie Cobbs Aq archie@freebsd.org
                    271: .Sh BUGS
                    272: HTTP redirects are not followed; instead they generate an error.

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