subversion/release.sh: avoid copying Makefile if not necessary
[msysgit.git] / include / neon / ne_207.h
blob1ce8b0642b7ca9190f4c341ae0ee8e18ee24d81e
1 /*
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,
18 MA 02111-1307, USA
22 #ifndef DAV207_H
23 #define DAV207_H
25 #include "ne_xml.h"
26 #include "ne_request.h" /* for ne_request */
28 BEGIN_NEON_DECLS
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
59 * callback). */
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
68 * handler stack. */
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);
98 END_NEON_DECLS
100 #endif /* DAV207_H */