Annotation of embedaddon/libpdel/http/servlet/http_servlet_xmlrpc.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_servlet_xmlrpc.3,v 1.17 2004/06/02 17:24:37 archie Exp $
39: .\"
40: .Dd April 22, 2002
41: .Dt HTTP_SERVLET_XMLRPC 3
42: .Os
43: .Sh NAME
44: .Nm http_servlet_xmlrpc
45: .Nd HTTP servlet for XML-RPC 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/xmlrpc.h
56: .Ft "struct http_servlet *"
57: .Fn http_servlet_xmlrpc_create "const struct http_servlet_xmlrpc_info *info" "void *arg" "void (*destroy)(void *)"
58: .Sh DESCRIPTION
59: .Fn http_servlet_xmlrpc_create
60: creates a new servlet that handles XML-RPC HTTP requests.
61: The request and response data are automatically converted to and
62: from native binary format using the
63: .Xr structs 3
64: library.
65: .Pp
66: The
67: .Fa arg
68: is an opaque user cookie.
69: When the servlet is destroyed, if
70: .Fa destroy
71: is not
72: .Dv NULL ,
73: it will be invoked with
74: .Fa arg
75: as its parameter.
76: .Fa info
77: is a pointer to a
78: .Li "struct http_servlet_xmlrpc_info" ,
79: which contains a pointer to an array of
80: .Li "http_servlet_xmlrpc_method"
81: structures:
82: .Pp
83: .Bd -literal -compact -offset 3n
84: struct http_servlet_xmlrpc_method {
85: const char *name; /* method name */
86: http_servlet_xmlrpc_handler_t *handler; /* method handler */
87: const struct structs_type **ptypes; /* parameter types */
88: u_int min_params; /* min # params */
89: u_int max_params; /* max # params */
90: };
91:
92: struct http_servlet_xmlrpc_info {
93: const struct http_servlet_xmlrpc_method
94: *methods; /* methods */
95: http_logger_t *logger; /* loggging function */
96: };
97: .Ed
98: .Pp
99: The
100: .Fa methods
101: field points to the method descriptor array, which is terminated
102: with an entry having a
103: .Dv NULL
104: .Fa name .
105: .Pp
106: The
107: .Fa logger
108: is a logging function whose type is defined in
109: .Xr http_server 3 .
110: .Pp
111: Each element in the
112: .Fa methods
113: array describes one supported XML-RPC method:
114: .Fa name
115: is the method name;
116: .Fa min_params
117: and
118: .Fa max_params
119: specify the minimum and maximum number of parameters allowed for the method
120: (the servlet itself enforces these limits); and
121: .Fa ptypes
122: points to an array of
123: .Xr structs 3
124: types that has length
125: .Fa max_params ,
126: one for each possible parameter.
127: .Pp
128: The
129: .Fa handler
130: is a pointer to the user function that implements the XML-RPC method.
131: The function must be of this type:
132: .Pp
133: .Bd -literal -compact -offset 3n
134: typedef void *http_servlet_xmlrpc_handler_t(void *arg,
135: const char *method, struct http_request *req,
136: u_int nparams, const void **params, const char *mtype,
137: const struct structs_type **rtypep, int *faulted)
138: .Ed
139: .Pp
140: The
141: .Fa arg
142: is the opqaue cookie supplied to
143: .Fn http_servlet_xmlrpc_create ;
144: .Fa method
145: is the XML-RPC method name;
146: .Fa req
147: is the HTTP request object; and
148: .Fa params
149: points to an array of
150: .Fa nparams
151: pointers to the XML-RPC request parameters in native binary format.
152: .Fn handler
153: should not free the parameters.
154: .Pp
155: If successful,
156: .Fn handler
157: should allocate a region of memory with
158: .Xr typed_mem 3
159: type
160: .Fa mtype ,
161: initialize it with the response value in native binary format, and
162: return a pointer to it.
163: The
164: .Xr structs 3
165: type of the returned memory region must be stored in
166: .Fa "*rtypep".
167: .Pp
168: Since it's running as a servlet, the thread executing
169: .Fn handler
170: may be canceled at any cancellation point.
171: .Fn handler
172: should be written so as to not leak resources if this happens.
173: .\"
174: .Ss Returning Faults
175: .\"
176: If
177: .Fn handler
178: wishes to return an XML-RPC fault, it should set
179: .Fa "*faulted"
180: to one, return a pointer to a
181: .Li "struct structs_xmlrpc_fault"
182: structure, and set
183: .Fa "*rtypep"
184: to
185: .Va "&structs_type_xmlrpc_fault" .
186: .Pp
187: .Fn handler
188: may also return
189: .Dv NULL
190: and set
191: .Va errno ,
192: in which case an XML-RPC fault will be created using
193: .Va errno
194: as the fault code and
195: .Fn strerror errno
196: as the fault string.
197: .\"
198: .Ss Working With Raw XML-RPC
199: .\"
200: In some cases, the types of the XML-RPC parameters are not known
201: ahead of time, or it may be inconvenient to have to provide a
202: .Xr structs 3
203: type for the returned value.
204: In these situations,
205: .Fn handler
206: can operate with the XML-RPC parameters and/or response values in their raw,
207: .Dq exploded
208: forms.
209: .Pp
210: If
211: .Fa ptypes
212: is
213: .Dv NULL ,
214: then all of the parameters passed to
215: .Fn handler
216: via
217: .Fa params
218: are instances of the
219: .Xr structs 3
220: type
221: .Va structs_type_xmlrpc_value ,
222: i.e., every parameter is a
223: .Li "struct xmlrpc_value_union" ,
224: defined in
225: .Pa "<pdel/structs/xmlrpc.h>" .
226: .Pp
227: If
228: .Fn handler
229: returns a non-NULL result but sets
230: .Fa "*rtypep"
231: to
232: .Dv NULL ,
233: then the returned result is assumed to be an instance of the
234: .Xr structs 3
235: type
236: .Va structs_type_xmlrpc_value ,
237: i.e., a
238: .Li "struct xmlrpc_value_union" .
239: .Pp
240: Finally, if the method names themselves are not known ahead of time, a
241: .Fa name
242: equal to the empty string will match all method names.
243: Such an entry acts as a
244: .Dq "catch all"
245: and must be last in the
246: .Fa methods
247: list.
248: .Sh RETURN VALUES
249: On failure,
250: .Fn http_servlet_xmlrpc_create
251: returns
252: .Dv NULL
253: and sets
254: .Va errno
255: to an appropriate value.
256: .Sh SEE ALSO
257: .Xr http_request 3 ,
258: .Xr http_response 3 ,
259: .Xr http_server 3 ,
260: .Xr http_servlet 3 ,
261: .Xr http_servlet_xml 3 ,
262: .Xr http_xml 3 ,
263: .Xr libpdel 3 ,
264: .Xr structs 3 ,
265: .Xr structs_xmlrpc 3 ,
266: .Xr typed_mem 3
267: .Rs
268: .%T "XML-RPC Home Page"
269: .%O "http://www.xmlrpc.org/"
270: .Re
271: .Sh HISTORY
272: The PDEL library was developed at Packet Design, LLC.
273: .Dv "http://www.packetdesign.com/"
274: .Sh AUTHORS
275: .An Archie Cobbs Aq archie@freebsd.org
276: .Sh BUGS
277: .Fn http_servlet_xmlrpc_create
278: copies all information in
279: .Fa info
280: except each method's parameter
281: .Xr structs 3
282: types (pointed to by the elements of the
283: .Fa ptypes
284: array), so these must remain valid for the lifetime of the servlet.
285: Typically
286: .Xr structs 3
287: types are stored in static variables, so this is not usually a problem.
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>