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>