HTTP_XML(3)

NAME
http_xml_send, http_xml_send_xmlrpc, - XML and XML-RPC requests over HTTP

LIBRARY
PDEL Library (libpdel, -lpdel)

SYNOPSIS
#include <sys/types.h>
#include <netinet/in.h>
#include <pdel/http/xml.h>
int
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);
int
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);

DESCRIPTION
These functions send and receive XML and XML-RPC over HTTP and HTTPS. They are convenience wrappers around the http_request(3), http_response(3), structx_xml_input(3), structs_xml_output(3), and structs_xmlrpc(3) routines.

http_xml_send() uses client to send an HTTP request for the URL path urlpath (which must being with a '/') to IP address ip and port port. If https is non-zero, an SSL (HTTPS) request is made. The username and password may be non- NULL for "Basic" HTTP authentication.

The remaining arguments to http_xml_send() describe the optional XML request payload and the expected XML reply payload.

To include a payload in the request, payload should be non- NULL. If so, ptag, pattrs, ptype, payload, and pflags are handled exactly like the elem_tag, attrs, type, data, and flags parameters (respectively) to the function structs_xml_output(3). The request payload will be sent using an HTTP POST with MIME type "text/xml". If payload is NULL, an HTTP GET request is sent instead.

The HTTP response must contain an XML document, which is parsed and converted into native binary format. The rtag, rattrsp, rattrs_mtype, rtype, reply, rflags, and rlogger are handled exactly like the elem_tag, attrp, attr_type, type, data, flags, and logger parameters (respectively) to the function structs_xml_input(3).

http_xml_send_xmlrpc() sends an XML-RPC request. The client, ip, port, https, username, password, and rlogger parameters are as with http_xml_send(). The XML-RPC method name is pointed to by methodName. nparams XML-RPC request parameters are sent; ptypes must point to an array of nparams parameter types and pdatas to an array of nparams parameter values having the corresponding types. These are “compact” structs(3) types that will be automatically expanded into “exploded” XML-RPC types when the actual request is sent (see structs_xmlrpc(3)).

To send exploded XML-RPC values directly, set ptypes to NULL. Then it will be assumed that each element in the pdatas array is an instance of structs_type_xmlrpc_value(3), i.e., a struct xmlrpc_value_union.

If reply is NULL, the reply is ignored. Otherwise, the XML-RPC return value must have “compact” type matching rtype and reply must point to an uninitialized region of memory large enough to hold an instance of rtype. If the request is successful and no fault is returned, http_send_xmlrpc() returns zero and reply will be initialized with the “compacted” XML-RPC return value. If the returned value does not match rtype, then -1 is returned with errno set appropriately.

To have the exploded XML-RPC value returned directly, set rtype to NULL. Then it will be assumed that reply points to an uninitialized instance of structs_type_xmlrpc_value(3), i.e., a struct xmlrpc_value_union, and the reply will be returned unmodified.

If an XML-RPC fault is returned, then *reply remains unmodified and http_xml_send_xmlrpc() returns -2. In addition, if fault is not NULL, then it is assumed to point to an uninitialized instance of structs_type_xmlrpc_compact_fault, i.e., a struct xmlrpc_compact_fault. The instance will be initialized with the received XML-RPC fault. The calling function is responsible for eventually uninitializing it.

RETURN VALUES
Upon error, http_xml_send() and http_xml_send_xmlrpc() return -1 and set errno to an appropriate value.

If http_xml_send_xmlrpc() receives an XML-RPC fault from the server, -2 is returned.

SEE ALSO
http_client(3), http_request(3), http_response(3), http_servlet_xml(3), http_servlet_xmlrpc(3), libpdel(3), structs_xml_input(3), structs_xmlrpc(3) XML-RPC Home Page, http://www.xmlrpc.org/.

HISTORY
The PDEL library was developed at Packet Design, LLC. http://www.packetdesign.com/

AUTHORS
Archie Cobbs <archie@freebsd.org>

BUGS
HTTP redirects are not followed; instead they generate an error.