2 WebDAV 207 multi-status response handling
3 Copyright (C) 1999-2004, Joe Orton <joe@manyfish.co.uk>
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version.
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
15 You should have received a copy of the GNU Library General Public
16 License along with this library; if not, write to the Free
17 Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
26 #include "ne_request.h" /* for ne_request */
30 /* The defined state integer for the '{DAV:}prop' element. */
31 #define NE_207_STATE_PROP (50)
32 /* This interface reserves the state integers 'x' where 0 < x < 100 */
33 #define NE_207_STATE_TOP (100)
35 /* Handling of 207 multistatus XML documents. A "multistatus"
36 * document is made up of a set of responses, each concerned with a
37 * particular resource. Each response may have an associated result
38 * status and failure description. A response is made up of a set of
39 * propstats, each of which again may have an associated result status
40 * and failure description. */
42 /* Start and end response callbacks trigger at the start and end of
43 * each "response" within the multistatus body. 'href' gives the URI
44 * of the resource which is subject of this response. The return
45 * value of a 'start_response' callback is passed as the 'response'
46 * parameter to the corresponding 'end_response' parameter. */
47 typedef void *ne_207_start_response(void *userdata
, const char *href
);
48 typedef void ne_207_end_response(void *userdata
, void *response
,
49 const ne_status
*status
,
50 const char *description
);
52 /* Similarly, start and end callbacks for each propstat within the
53 * response. The return value of the 'start_response' callback for
54 * the response in which this propstat is contains is passed as the
55 * 'response' parameter. The return value of each 'start_propstat' is
56 * passed as the 'propstat' parameter' to the corresponding
57 * 'end_propstat' callback. If the start_propstat callback returns
58 * NULL, parsing is aborted (the XML parser error must be set by the
60 typedef void *ne_207_start_propstat(void *userdata
, void *response
);
61 typedef void ne_207_end_propstat(void *userdata
, void *propstat
,
62 const ne_status
*status
,
63 const char *description
);
65 typedef struct ne_207_parser_s ne_207_parser
;
67 /* Create 207 parser an add the handlers the the given parser's
69 ne_207_parser
*ne_207_create(ne_xml_parser
*parser
, void *userdata
);
71 /* Register response handling callbacks. */
72 void ne_207_set_response_handlers(ne_207_parser
*p
,
73 ne_207_start_response
*start
,
74 ne_207_end_response
*end
);
76 /* Register propstat handling callbacks. */
77 void ne_207_set_propstat_handlers(ne_207_parser
*p
,
78 ne_207_start_propstat
*start
,
79 ne_207_end_propstat
*end
);
81 /* Destroy the parser */
82 void ne_207_destroy(ne_207_parser
*p
);
84 /* An acceptance function which only accepts 207 responses */
85 int ne_accept_207(void *userdata
, ne_request
*req
, const ne_status
*status
);
87 void *ne_207_get_current_propstat(ne_207_parser
*p
);
88 void *ne_207_get_current_response(ne_207_parser
*p
);
90 /* Dispatch request 'req', returning:
91 * NE_ERROR: for a dispatch error, or a non-2xx response, or a
92 * 207 response which contained a non-2xx propstat
93 * NE_OK: for a 2xx response or a 207 response which contained
94 * only 2xx-class propstats.
95 * The request object is destroyed in both cases. */
96 int ne_simple_request(ne_session
*sess
, ne_request
*req
);
100 #endif /* DAV207_H */