Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
HTTP_XML(3)		     Library Functions Manual		     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);

     int
     http_xml_send_xmlrpc2(struct http_client *client, struct in_addr ip,
	 u_int16_t port, int https, const char *username, const char *password,
	 const char *urlpath, 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)  rou-
     tines.

     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  re-
     quest 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 re-
     quest is sent instead.

     The HTTP response must contain an XML document, which is  parsed  and  con-
     verted  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 val-
     ues 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 re-
     turn  value.   If	the  returned value does not match rtype, then -1 is re-
     turned 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.

     http_xml_send_xmlrpc2()  is  the  same as http_xml_send_xmlrpc() but allows
     the caller to specify an URL path other than the standard	"/RPC2".   sends
     an XML-RPC request.

RETURN VALUES
     Upon  error  the  above functions return -1 and set errno to an appropriate
     value.

     If http_xml_send_xmlrpc() or http_xml_send_xmlrpc2()  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.

FreeBSD ports 15.quarterly	 April 22, 2002 		     HTTP_XML(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=http_xml_send&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help