Annotation of embedaddon/libpdel/http/servlet/http_servlet_xml.3, revision 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_servlet_xml.3,v 1.14 2004/06/02 17:24:37 archie Exp $
! 39: .\"
! 40: .Dd April 22, 2002
! 41: .Dt HTTP_SERVLET_XML 3
! 42: .Os
! 43: .Sh NAME
! 44: .Nm http_servlet_xml
! 45: .Nd HTTP servlet for XML requests
! 46: .Sh LIBRARY
! 47: PDEL Library (libpdel, \-lpdel)
! 48: .Sh SYNOPSIS
! 49: .In sys/types.h
! 50: .In stdio.h
! 51: .In netinet/in.h
! 52: .In openssl/ssl.h
! 53: .In pdel/http/http_defs.h
! 54: .In pdel/http/http_server.h
! 55: .In pdel/http/servlet/xml.h
! 56: .Ft "struct http_servlet *"
! 57: .Fn http_servlet_xml_create "const struct http_servlet_xml_info *info" "void *arg" "void (*destroy)(void *)"
! 58: .Sh DESCRIPTION
! 59: .Fn http_servlet_xml_create
! 60: creates a servlet that receives HTTP requests optionally containing XML
! 61: and sends back XML responses.
! 62: The request and response data are automatically converted to and
! 63: from native binary format using the
! 64: .Xr structs 3
! 65: library.
! 66: .Pp
! 67: This servlet is basically acts as glue between the
! 68: .Xr http_servlet 3
! 69: API and the
! 70: .Xr structs_xml_input 3
! 71: and
! 72: .Xr structs_xml_output 3
! 73: library routines.
! 74: The net result is the ability to send and receive arbitrary data
! 75: structures between two machines using XML over HTTP.
! 76: .Pp
! 77: The incoming HTTP request is expected to either be a
! 78: .Dq GET
! 79: or
! 80: .Dq POST ,
! 81: in the latter case with a request body containing XML.
! 82: The incoming content type is ignored.
! 83: The response has content type
! 84: .Dq text/xml
! 85: and contains XML.
! 86: .Pp
! 87: The
! 88: .Fa arg
! 89: is an opaque user cookie.
! 90: When the servlet is destroyed, if
! 91: .Fa destroy
! 92: is not
! 93: .Dv NULL ,
! 94: it will be invoked with
! 95: .Fa arg
! 96: as its parameter.
! 97: .Pp
! 98: .Fa info
! 99: is a pointer to a
! 100: .Li "struct http_servlet_xml_info" :
! 101: .Pp
! 102: .Bd -literal -compact -offset 3n
! 103: typedef void *http_servlet_xml_handler_t(void *arg,
! 104: struct http_request *req, const void *payload,
! 105: const char *pattrs, char **rattrsp, const char *mtype);
! 106:
! 107: struct http_servlet_xml_info {
! 108: http_servlet_xml_handler_t *handler; /* user handler */
! 109: const char *ptag; /* payload doc elem */
! 110: const struct structs_type *ptype; /* payload type */
! 111: const char *rtag; /* reply doc elem */
! 112: const struct structs_type *rtype; /* reply type */
! 113: u_char allow_post; /* allow POST */
! 114: u_char allow_get; /* allow GET */
! 115: http_logger_t *logger; /* loggging function */
! 116: int flags; /* output flags */
! 117: };
! 118: .Ed
! 119: .Pp
! 120: The
! 121: .Fa handler
! 122: is the user routine invoked for each HTTP request (see below).
! 123: .Fa ptag
! 124: is the XML document tag for incoming requests.
! 125: .Fa ptype
! 126: is the
! 127: .Xr structs 3
! 128: type for the payload data.
! 129: Incoming requests that don't match
! 130: .Fa ptag
! 131: and
! 132: .Fa ptype
! 133: are rejected.
! 134: .Pp
! 135: Similarly,
! 136: .Fa rtag
! 137: is the XML document tag for responses and
! 138: .Fa rtype
! 139: is the
! 140: .Xr structs 3
! 141: type for the data returned by
! 142: .Fn handler .
! 143: .Pp
! 144: The
! 145: .Fa allow_post
! 146: and
! 147: .Fa allow_get
! 148: flags select which of
! 149: .Dq GET
! 150: and/or
! 151: .Dq POST
! 152: queries are allowed.
! 153: If
! 154: .Fa allow_post
! 155: is zero, then
! 156: .Fa ptag
! 157: and
! 158: .Fa ptype
! 159: are ignored.
! 160: .Pp
! 161: The
! 162: .Fa logger
! 163: is a logging function whose type is defined in
! 164: .Xr http_server 3 .
! 165: .Pp
! 166: .Fa flags
! 167: controls how XML responses are generated; this value is passed unaltered to
! 168: .Xr structs_xml_output 3 .
! 169: .Pp
! 170: When
! 171: .Fn handler
! 172: is invoked,
! 173: .Fa arg
! 174: is the opqaue cookie supplied to
! 175: .Fn http_servlet_xml_create ,
! 176: and
! 177: .Fa req
! 178: is the
! 179: .Xr http_request 3
! 180: object.
! 181: .Fa payload
! 182: and
! 183: .Fa pattrs
! 184: will be
! 185: .Dv NULL
! 186: for a
! 187: .Dq GET
! 188: request, otherwise
! 189: .Fa payload
! 190: will point to the received data in native binary format.
! 191: .Fn handler
! 192: should not free this data.
! 193: .Pp
! 194: .Fa pattrs ,
! 195: if not
! 196: .Dv NULL ,
! 197: points to the top level XML attributes in the request.
! 198: The attributes are stored as a single sequence of concatenated pairs:
! 199: name, '\\0', value, '\\0', name, '\\0', value, etc., terminated with a
! 200: final (extra) '\\0'.
! 201: .Pp
! 202: If top level XML attributes are desired in the response,
! 203: .Fa "*rattrsp"
! 204: should be set to a similarly concatenated list of name, value pairs
! 205: allocated with
! 206: .Xr typed_mem 3
! 207: type
! 208: .Fa mtype .
! 209: .Pp
! 210: .Fn handler
! 211: should return a pointer to the reply data in native binary format,
! 212: in a region of memory allocated with
! 213: .Xr typed_mem 3
! 214: type
! 215: .Fa mtype .
! 216: If there was an error,
! 217: .Fn handler
! 218: should return
! 219: .Dv NULL
! 220: and set
! 221: .Va errno
! 222: appropriately.
! 223: .Pp
! 224: Since it's running as a servlet, the thread executing
! 225: .Fn handler
! 226: may be canceled at any cancellation point.
! 227: .Fn handler
! 228: should be written so as to not leak resources if this happens.
! 229: .Sh RETURN VALUES
! 230: On failure,
! 231: .Fn http_servlet_xml_create
! 232: returns
! 233: .Dv NULL
! 234: and sets
! 235: .Va errno
! 236: to an appropriate value.
! 237: .Sh SEE ALSO
! 238: .Xr http_request 3 ,
! 239: .Xr http_response 3 ,
! 240: .Xr http_server 3 ,
! 241: .Xr http_servlet 3 ,
! 242: .Xr http_servlet_xmlrpc 3 ,
! 243: .Xr http_xml 3 ,
! 244: .Xr libpdel 3 ,
! 245: .Xr structs 3 ,
! 246: .Xr typed_mem 3
! 247: .Sh HISTORY
! 248: The PDEL library was developed at Packet Design, LLC.
! 249: .Dv "http://www.packetdesign.com/"
! 250: .Sh AUTHORS
! 251: .An Archie Cobbs Aq archie@freebsd.org
! 252: .Sh BUGS
! 253: .Fn http_servlet_xml_create
! 254: copies all information in
! 255: .Fa info
! 256: except the
! 257: .Xr structs 3
! 258: types pointed to by
! 259: .Fa ptype
! 260: and
! 261: .Fa rtype ,
! 262: so these must remain valid for the lifetime of the servlet.
! 263: Typically
! 264: .Xr structs 3
! 265: types are stored in static variables, so this is not usually a problem.
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>