1 /* 2 WebDAV 207 multi-status response handling 3 Copyright (C) 1999-2003, Joe Orton <joe@manyfish.co.uk> 4 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. 9 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. 14 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 19 20 */ 21 22 #ifndef DAV207_H 23 #define DAV207_H 24 25 #include "ne_xml.h" 26 #include "ne_request.h" /* for ne_request */ 27 28 BEGIN_NEON_DECLS 29 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) 34 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. */ 41 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); 51 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. */ 58 typedef void *ne_207_start_propstat(void *userdata, void *response); 59 typedef void ne_207_end_propstat(void *userdata, void *propstat, 60 const ne_status *status, 61 const char *description); 62 63 typedef struct ne_207_parser_s ne_207_parser; 64 65 /* Create 207 parser an add the handlers the the given parser's 66 * handler stack. */ 67 ne_207_parser *ne_207_create(ne_xml_parser *parser, void *userdata); 68 69 /* Register response handling callbacks. */ 70 void ne_207_set_response_handlers(ne_207_parser *p, 71 ne_207_start_response *start, 72 ne_207_end_response *end); 73 74 /* Register propstat handling callbacks. */ 75 void ne_207_set_propstat_handlers(ne_207_parser *p, 76 ne_207_start_propstat *start, 77 ne_207_end_propstat *end); 78 79 /* Destroy the parser */ 80 void ne_207_destroy(ne_207_parser *p); 81 82 /* An acceptance function which only accepts 207 responses */ 83 int ne_accept_207(void *userdata, ne_request *req, const ne_status *status); 84 85 void *ne_207_get_current_propstat(ne_207_parser *p); 86 void *ne_207_get_current_response(ne_207_parser *p); 87 88 /* Dispatch request 'req', returning: 89 * NE_ERROR: for a dispatch error, or a non-2xx response, or a 90 * 207 response which contained a non-2xx propstat 91 * NE_OK: for a 2xx response or a 207 response which contained 92 * only 2xx-class propstats. 93 * The request object is destroyed in both cases. */ 94 int ne_simple_request(ne_session *sess, ne_request *req); 95 96 END_NEON_DECLS 97 98 #endif /* DAV207_H */ 99