Thu, 31 Jul 2025 20:53:08 +0200
improve error handling/logging in nsapi_start_request
| 1 | 1 | /* |
| 2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. | |
| 3 | * | |
|
44
3da1f7b6847f
added some error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
37
diff
changeset
|
4 | * Copyright 2013 Olaf Wintermann. All rights reserved. |
| 1 | 5 | * |
| 6 | * Redistribution and use in source and binary forms, with or without | |
| 7 | * modification, are permitted provided that the following conditions are met: | |
| 8 | * | |
| 9 | * 1. Redistributions of source code must retain the above copyright | |
| 10 | * notice, this list of conditions and the following disclaimer. | |
| 11 | * | |
| 12 | * 2. Redistributions in binary form must reproduce the above copyright | |
| 13 | * notice, this list of conditions and the following disclaimer in the | |
| 14 | * documentation and/or other materials provided with the distribution. | |
| 15 | * | |
| 16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
| 17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
| 18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
| 19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | |
| 20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
| 21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
| 22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
| 23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
| 24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
| 25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
| 26 | * POSSIBILITY OF SUCH DAMAGE. | |
| 27 | */ | |
| 28 | ||
| 29 | #ifndef HTTPREQUEST_H | |
| 30 | #define HTTPREQUEST_H | |
| 31 | ||
|
415
d938228c382e
switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
272
diff
changeset
|
32 | #include <cx/string.h> |
|
92
382bff43c6eb
fixed some includes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
78
diff
changeset
|
33 | |
| 1 | 34 | #include "sessionhandler.h" |
|
14
b8bf95b39952
New source folder layout
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
10
diff
changeset
|
35 | #include "../public/nsapi.h" |
|
b8bf95b39952
New source folder layout
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
10
diff
changeset
|
36 | #include "../util/pool.h" |
| 1 | 37 | #include "session.h" |
| 38 | #include "request.h" | |
| 39 | ||
| 40 | #ifdef __cplusplus | |
| 41 | extern "C" { | |
| 42 | #endif | |
| 43 | ||
| 44 | typedef struct _http_request HTTPRequest; | |
| 45 | typedef struct _header Header; | |
| 46 | typedef struct _header_array HeaderArray; | |
| 47 | ||
| 48 | struct _http_request { | |
| 49 | Connection *connection; | |
|
614
eb1c4d464ecd
improve error handling/logging in nsapi_start_request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
50 | cxmutstr request_line; |
|
eb1c4d464ecd
improve error handling/logging in nsapi_start_request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
51 | cxmutstr method; |
|
eb1c4d464ecd
improve error handling/logging in nsapi_start_request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
52 | cxmutstr uri; |
|
eb1c4d464ecd
improve error handling/logging in nsapi_start_request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
53 | cxmutstr httpv; |
| 1 | 54 | HeaderArray *headers; |
| 55 | netbuf *netbuf; | |
|
102
136a76e293b5
added etag and conditional request implementation from Open Web Server
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
101
diff
changeset
|
56 | time_t req_start; |
|
614
eb1c4d464ecd
improve error handling/logging in nsapi_start_request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
57 | short status; |
| 1 | 58 | }; |
| 59 | ||
| 60 | struct _header { | |
|
415
d938228c382e
switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
272
diff
changeset
|
61 | cxmutstr name; |
|
d938228c382e
switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
272
diff
changeset
|
62 | cxmutstr value; |
| 1 | 63 | }; |
| 64 | ||
| 65 | struct _header_array { | |
| 66 | HeaderArray *next; | |
| 67 | Header *headers; | |
| 68 | int len; | |
| 69 | int alloc; | |
| 70 | }; | |
| 71 | ||
|
46
636e05eb48f6
cleaning up resources after requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
45
diff
changeset
|
72 | void http_request_init(HTTPRequest *req); |
|
636e05eb48f6
cleaning up resources after requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
45
diff
changeset
|
73 | void http_request_cleanup(HTTPRequest *req); |
| 1 | 74 | |
|
415
d938228c382e
switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
272
diff
changeset
|
75 | cxmutstr http_request_get_abspath(HTTPRequest *req); |
|
101
7fbcdbad0baa
added support for absolute URIs and improved keep alive
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
95
diff
changeset
|
76 | |
|
211
2160585200ac
add propfind/proppatch parser and first iteration of the new webdav api
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
172
diff
changeset
|
77 | |
|
2160585200ac
add propfind/proppatch parser and first iteration of the new webdav api
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
172
diff
changeset
|
78 | NSAPISession* nsapisession_create(pool_handle_t *pool); |
|
2160585200ac
add propfind/proppatch parser and first iteration of the new webdav api
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
172
diff
changeset
|
79 | int nsapisession_setconnection(NSAPISession *sn, Connection *conn, netbuf *inbuf, IOStream **io); |
|
2160585200ac
add propfind/proppatch parser and first iteration of the new webdav api
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
172
diff
changeset
|
80 | |
|
37
360b9aabe17e
added support for asynchronous safs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
81 | /* |
|
360b9aabe17e
added support for asynchronous safs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
82 | * starts request processing after reading the request header |
|
360b9aabe17e
added support for asynchronous safs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
83 | * |
|
360b9aabe17e
added support for asynchronous safs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
84 | * request: request object |
|
544
27684460629f
fix memory leak in case handle_request fails (some illegal requests)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
531
diff
changeset
|
85 | * thrpool: current thread pool or NULL |
|
37
360b9aabe17e
added support for asynchronous safs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
86 | */ |
|
544
27684460629f
fix memory leak in case handle_request fails (some illegal requests)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
531
diff
changeset
|
87 | int handle_request(HTTPRequest *request, threadpool_t *thrpool, EventHandler *ev); |
| 1 | 88 | |
|
544
27684460629f
fix memory leak in case handle_request fails (some illegal requests)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
531
diff
changeset
|
89 | /* |
|
27684460629f
fix memory leak in case handle_request fails (some illegal requests)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
531
diff
changeset
|
90 | * called by handle_request |
|
27684460629f
fix memory leak in case handle_request fails (some illegal requests)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
531
diff
changeset
|
91 | */ |
|
27684460629f
fix memory leak in case handle_request fails (some illegal requests)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
531
diff
changeset
|
92 | int nsapi_start_request( |
|
27684460629f
fix memory leak in case handle_request fails (some illegal requests)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
531
diff
changeset
|
93 | HTTPRequest *request, |
|
27684460629f
fix memory leak in case handle_request fails (some illegal requests)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
531
diff
changeset
|
94 | threadpool_t *thrpool, |
|
27684460629f
fix memory leak in case handle_request fails (some illegal requests)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
531
diff
changeset
|
95 | EventHandler *ev, |
|
27684460629f
fix memory leak in case handle_request fails (some illegal requests)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
531
diff
changeset
|
96 | pool_handle_t *pool); |
| 1 | 97 | |
| 98 | ||
|
415
d938228c382e
switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
272
diff
changeset
|
99 | void header_add(HeaderArray *hd, cxmutstr name, cxmutstr value); |
|
46
636e05eb48f6
cleaning up resources after requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
45
diff
changeset
|
100 | void header_array_free(HeaderArray *hd); |
| 1 | 101 | |
|
3
137197831306
minimal request handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1
diff
changeset
|
102 | int nsapi_handle_request(NSAPISession *sn, NSAPIRequest *rq); |
|
137197831306
minimal request handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1
diff
changeset
|
103 | int nsapi_finish_request(NSAPISession *sn, NSAPIRequest *rq); |
|
22
adb0bda54e6b
Server can run as daemon
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
104 | |
|
531
9b15b1f72bef
change nsapi_function_return behavior: move saf return to the end of the event cycle
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
415
diff
changeset
|
105 | void nsapi_saf_return(Session *sn, Request *rq, int ret);; |
|
9b15b1f72bef
change nsapi_function_return behavior: move saf return to the end of the event cycle
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
415
diff
changeset
|
106 | |
|
272
f210681d9dd0
add minimal working implementation for resourcepool_lookup()
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
211
diff
changeset
|
107 | void request_free_resources(NSAPISession *sn, NSAPIRequest *rq); |
|
f210681d9dd0
add minimal working implementation for resourcepool_lookup()
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
211
diff
changeset
|
108 | |
|
22
adb0bda54e6b
Server can run as daemon
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
109 | int nsapi_authtrans(NSAPISession *sn, NSAPIRequest *rq); |
|
3
137197831306
minimal request handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1
diff
changeset
|
110 | int nsapi_nametrans(NSAPISession *sn, NSAPIRequest *rq); |
|
22
adb0bda54e6b
Server can run as daemon
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
111 | int nsapi_pathcheck(NSAPISession *sn, NSAPIRequest *rq); |
| 10 | 112 | int nsapi_objecttype(NSAPISession *sn, NSAPIRequest *rq); |
|
3
137197831306
minimal request handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1
diff
changeset
|
113 | int nsapi_service(NSAPISession *sn, NSAPIRequest *rq); |
|
95
74a81d9e19d0
added error directive for custom error pages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
92
diff
changeset
|
114 | int nsapi_error(NSAPISession *sn, NSAPIRequest *rq); |
|
45
a24aa388f02f
added access log
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
44
diff
changeset
|
115 | int nsapi_addlog(NSAPISession *sn, NSAPIRequest *rq); |
|
3
137197831306
minimal request handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1
diff
changeset
|
116 | |
|
37
360b9aabe17e
added support for asynchronous safs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
117 | int nsapi_exec(directive *d, NSAPISession *sn, NSAPIRequest *rq); |
|
360b9aabe17e
added support for asynchronous safs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
118 | |
|
360b9aabe17e
added support for asynchronous safs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
119 | int nsapi_exec_tp( |
|
360b9aabe17e
added support for asynchronous safs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
120 | directive *d, |
|
360b9aabe17e
added support for asynchronous safs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
121 | NSAPISession *sn, |
|
360b9aabe17e
added support for asynchronous safs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
122 | NSAPIRequest *rq, |
|
360b9aabe17e
added support for asynchronous safs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
123 | threadpool_t *pool); |
|
360b9aabe17e
added support for asynchronous safs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
124 | |
|
172
5580517faafc
adds public aio and poll api and asynchronous send_range function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
159
diff
changeset
|
125 | //void nsapi_function_return(Session *sn, Request *rq, int ret); |
|
37
360b9aabe17e
added support for asynchronous safs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
126 | |
|
360b9aabe17e
added support for asynchronous safs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
127 | void nsapi_change_threadpool( |
|
360b9aabe17e
added support for asynchronous safs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
128 | NSAPISession *sn, |
|
360b9aabe17e
added support for asynchronous safs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
129 | NSAPIRequest *rq, |
|
360b9aabe17e
added support for asynchronous safs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
130 | threadpool_t *thrpool); |
|
360b9aabe17e
added support for asynchronous safs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
131 | |
|
360b9aabe17e
added support for asynchronous safs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
132 | void* thrpool_exec(void *d); |
|
360b9aabe17e
added support for asynchronous safs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
133 | |
|
360b9aabe17e
added support for asynchronous safs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
134 | void* thrpool_change(void *data); |
|
360b9aabe17e
added support for asynchronous safs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
35
diff
changeset
|
135 | |
| 1 | 136 | |
|
6
ce8fecc9847d
improved request processing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
3
diff
changeset
|
137 | int add_objects( |
|
ce8fecc9847d
improved request processing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
3
diff
changeset
|
138 | HTTPObjectConfig *objs, |
|
ce8fecc9847d
improved request processing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
3
diff
changeset
|
139 | httpd_objset *os, |
|
ce8fecc9847d
improved request processing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
3
diff
changeset
|
140 | NSAPISession *sn, |
|
ce8fecc9847d
improved request processing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
3
diff
changeset
|
141 | NSAPIRequest *rq, |
|
ce8fecc9847d
improved request processing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
3
diff
changeset
|
142 | char *name, |
|
ce8fecc9847d
improved request processing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
3
diff
changeset
|
143 | char *path); |
|
ce8fecc9847d
improved request processing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
3
diff
changeset
|
144 | |
|
20
7b235fa88008
Some fixes for mod_jk
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
145 | int method_match(char *cmp, char *method); |
|
415
d938228c382e
switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
272
diff
changeset
|
146 | int contenttype_match(cxstring cmp, cxstring ctype); |
|
20
7b235fa88008
Some fixes for mod_jk
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
147 | |
| 1 | 148 | /* request.h functions */ |
| 149 | int request_initialize( | |
| 150 | pool_handle_t *pool, | |
| 151 | HTTPRequest *hrq, | |
| 152 | NSAPIRequest *nrq); | |
| 153 | ||
| 154 | #ifdef __cplusplus | |
| 155 | } | |
| 156 | #endif | |
| 157 | ||
| 158 | #endif /* HTTPREQUEST_H */ | |
| 159 |