comparison include/urweb/urweb.h @ 1739:c414850f206f

Add support for -boot flag, which allows in-tree execution of Ur/Web The boot flag rewrites most hardcoded paths to point to the build directory, and also forces static compilation. This is convenient for developing Ur/Web, or if you cannot 'sudo make install' Ur/Web. The following changes were made: * Header files were moved to include/urweb instead of include; this lets FFI users point their C_INCLUDE_PATH at this directory at write <urweb/urweb.h>. For internal Ur/Web executables, we simply pass -I$PATH/include/urweb as normal. * Differentiate between LIB and SRCLIB; SRCLIB is Ur and JavaScript source files, while LIB is compiled products from libtool. For in-tree compilation these live in different places. * No longer reference Config for paths; instead use Settings; these settings can be changed dynamically by Compiler.enableBoot () (TODO: add a disableBoot function.) * config.h is now generated directly in include/urweb/config.h, for consistency's sake (especially since it gets installed along with the rest of the headers!) * All of the autotools build products got updated. * The linkStatic field in protocols now only contains the name of the build product, and not the absolute path. Future users have to be careful not to reference the Settings files to early, lest they get an old version (this was the source of two bugs during development of this patch.)
author Edward Z. Yang <ezyang@mit.edu>
date Wed, 02 May 2012 17:17:57 -0400
parents
children e9587120831a
comparison
equal deleted inserted replaced
1738:1a35e75b6967 1739:c414850f206f
1 #ifndef URWEB_H
2 #define URWEB_H
3
4 #include <sys/types.h>
5
6 #include "types.h"
7
8 int uw_really_send(int sock, const void *buf, ssize_t len);
9 int uw_really_write(int fd, const void *buf, size_t len);
10
11 extern uw_unit uw_unit_v;
12
13 void uw_global_init(void);
14 void uw_app_init(uw_app*);
15
16 void uw_client_connect(unsigned id, int pass, int sock,
17 int (*send)(int sockfd, const void *buf, size_t len),
18 int (*close)(int fd),
19 void *logger_data, uw_logger log_error);
20 void uw_prune_clients(uw_context);
21 failure_kind uw_initialize(uw_context);
22
23 uw_context uw_init(int id, void *logger_data, uw_logger log_debug);
24 void uw_close(uw_context);
25 int uw_set_app(uw_context, uw_app*);
26 uw_app *uw_get_app(uw_context);
27 void uw_set_db(uw_context, void*);
28 void *uw_get_db(uw_context);
29 void uw_free(uw_context);
30 void uw_reset(uw_context);
31 void uw_reset_keep_request(uw_context);
32 void uw_reset_keep_error_message(uw_context);
33 char *uw_get_url_prefix(uw_context);
34
35 failure_kind uw_begin_init(uw_context);
36 void uw_set_on_success(char *);
37 void uw_set_headers(uw_context, char *(*get_header)(void *, const char *), void *get_header_data);
38 failure_kind uw_begin(uw_context, char *path);
39 failure_kind uw_begin_onError(uw_context, char *msg);
40 void uw_login(uw_context);
41 void uw_commit(uw_context);
42 int uw_rollback(uw_context, int will_retry);
43
44 __attribute__((noreturn)) void uw_error(uw_context, failure_kind, const char *fmt, ...);
45 char *uw_error_message(uw_context);
46 void uw_set_error_message(uw_context, const char *fmt, ...);
47 uw_Basis_string uw_dup_and_clear_error_message(uw_context);
48 int uw_has_error(uw_context);
49 void uw_push_cleanup(uw_context, void (*func)(void *), void *arg);
50 void uw_pop_cleanup(uw_context);
51
52 void *uw_malloc(uw_context, size_t);
53 void uw_begin_region(uw_context);
54 void uw_end_region(uw_context);
55 void uw_memstats(uw_context);
56
57 int uw_send(uw_context, int sock);
58 int uw_print(uw_context, int fd);
59 int uw_output(uw_context ctx, int (*output)(void *data, const char *buf, size_t len), void *data);
60
61 int uw_set_input(uw_context, const char *name, char *value);
62 int uw_set_file_input(uw_context, char *name, uw_Basis_file);
63
64 char *uw_get_input(uw_context, int name);
65 char *uw_get_optional_input(uw_context, int name);
66 uw_Basis_file uw_get_file_input(uw_context, int name);
67 void uw_enter_subform(uw_context, int name);
68 void uw_leave_subform(uw_context);
69 int uw_enter_subforms(uw_context, int name);
70 int uw_next_entry(uw_context);
71
72 void uw_write(uw_context, const char*);
73
74 uw_Basis_source uw_Basis_new_client_source(uw_context, uw_Basis_string);
75 uw_unit uw_Basis_set_client_source(uw_context, uw_Basis_source, uw_Basis_string);
76
77 void uw_set_script_header(uw_context, const char*);
78 char *uw_Basis_get_settings(uw_context, uw_unit);
79 char *uw_get_real_script(uw_context);
80
81 uw_Basis_string uw_Basis_maybe_onload(uw_context, uw_Basis_string);
82 uw_Basis_string uw_Basis_maybe_onunload(uw_context, uw_Basis_string);
83
84 void uw_set_needs_push(uw_context, int);
85 void uw_set_needs_sig(uw_context, int);
86
87 char *uw_Basis_htmlifyInt(uw_context, uw_Basis_int);
88 char *uw_Basis_htmlifyFloat(uw_context, uw_Basis_float);
89 char *uw_Basis_htmlifyString(uw_context, uw_Basis_string);
90 char *uw_Basis_htmlifyBool(uw_context, uw_Basis_bool);
91 char *uw_Basis_htmlifyTime(uw_context, uw_Basis_time);
92 char *uw_Basis_htmlifySpecialChar(uw_context, unsigned char);
93 char *uw_Basis_htmlifySource(uw_context, uw_Basis_source);
94
95 uw_unit uw_Basis_htmlifyInt_w(uw_context, uw_Basis_int);
96 uw_unit uw_Basis_htmlifyFloat_w(uw_context, uw_Basis_float);
97 uw_unit uw_Basis_htmlifyString_w(uw_context, uw_Basis_string);
98 uw_unit uw_Basis_htmlifyBool_w(uw_context, uw_Basis_bool);
99 uw_unit uw_Basis_htmlifyTime_w(uw_context, uw_Basis_time);
100 uw_unit uw_Basis_htmlifySpecialChar_w(uw_context, unsigned char);
101 uw_unit uw_Basis_htmlifySource_w(uw_context, uw_Basis_source);
102
103 char *uw_Basis_attrifyInt(uw_context, uw_Basis_int);
104 char *uw_Basis_attrifyFloat(uw_context, uw_Basis_float);
105 char *uw_Basis_attrifyString(uw_context, uw_Basis_string);
106 char *uw_Basis_attrifyChar(uw_context, uw_Basis_char);
107 char *uw_Basis_attrifyTime(uw_context, uw_Basis_time);
108 char *uw_Basis_attrifyChannel(uw_context, uw_Basis_channel);
109 char *uw_Basis_attrifyClient(uw_context, uw_Basis_client);
110 char *uw_Basis_attrifyCss_class(uw_context, uw_Basis_css_class);
111
112 uw_unit uw_Basis_attrifyInt_w(uw_context, uw_Basis_int);
113 uw_unit uw_Basis_attrifyFloat_w(uw_context, uw_Basis_float);
114 uw_unit uw_Basis_attrifyString_w(uw_context, uw_Basis_string);
115 uw_unit uw_Basis_attrifyChar_w(uw_context, uw_Basis_char);
116
117 char *uw_Basis_urlifyInt(uw_context, uw_Basis_int);
118 char *uw_Basis_urlifyFloat(uw_context, uw_Basis_float);
119 char *uw_Basis_urlifyString(uw_context, uw_Basis_string);
120 char *uw_Basis_urlifyBool(uw_context, uw_Basis_bool);
121 char *uw_Basis_urlifyTime(uw_context, uw_Basis_time);
122 char *uw_Basis_urlifyChannel(uw_context, uw_Basis_channel);
123 char *uw_Basis_urlifySource(uw_context, uw_Basis_source);
124
125 uw_unit uw_Basis_urlifyInt_w(uw_context, uw_Basis_int);
126 uw_unit uw_Basis_urlifyFloat_w(uw_context, uw_Basis_float);
127 uw_unit uw_Basis_urlifyString_w(uw_context, uw_Basis_string);
128 uw_unit uw_Basis_urlifyBool_w(uw_context, uw_Basis_bool);
129 uw_unit uw_Basis_urlifyTime_w(uw_context, uw_Basis_time);
130 uw_unit uw_Basis_urlifyChannel_w(uw_context, uw_Basis_channel);
131 uw_unit uw_Basis_urlifySource_w(uw_context, uw_Basis_source);
132
133 uw_Basis_unit uw_Basis_unurlifyUnit(uw_context ctx, char **s);
134 uw_Basis_int uw_Basis_unurlifyInt(uw_context, char **);
135 uw_Basis_float uw_Basis_unurlifyFloat(uw_context, char **);
136 uw_Basis_string uw_Basis_unurlifyString(uw_context, char **);
137 uw_Basis_string uw_Basis_unurlifyString_fromClient(uw_context, char **);
138 uw_Basis_bool uw_Basis_unurlifyBool(uw_context, char **);
139 uw_Basis_time uw_Basis_unurlifyTime(uw_context, char **);
140
141 uw_Basis_int uw_Basis_strlen(uw_context, const char *);
142 uw_Basis_bool uw_Basis_strlenGe(uw_context, uw_Basis_string, uw_Basis_int);
143 uw_Basis_char uw_Basis_strsub(uw_context, const char *, uw_Basis_int);
144 uw_Basis_string uw_Basis_strsuffix(uw_context, const char *, uw_Basis_int);
145 uw_Basis_string uw_Basis_strcat(uw_context, const char *, const char *);
146 uw_Basis_string uw_Basis_mstrcat(uw_context ctx, ...);
147 uw_Basis_int *uw_Basis_strindex(uw_context, const char *, uw_Basis_char);
148 uw_Basis_int *uw_Basis_strsindex(uw_context, const char *, const char *needle);
149 uw_Basis_string uw_Basis_strchr(uw_context, const char *, uw_Basis_char);
150 uw_Basis_int uw_Basis_strcspn(uw_context, const char *, const char *);
151 uw_Basis_string uw_Basis_substring(uw_context, const char *, uw_Basis_int, uw_Basis_int);
152 uw_Basis_string uw_Basis_str1(uw_context, uw_Basis_char);
153
154 uw_Basis_string uw_strdup(uw_context, const char *);
155 uw_Basis_string uw_maybe_strdup(uw_context, const char *);
156 char *uw_memdup(uw_context, const char *, size_t);
157
158 uw_Basis_string uw_Basis_sqlifyInt(uw_context, uw_Basis_int);
159 uw_Basis_string uw_Basis_sqlifyFloat(uw_context, uw_Basis_float);
160 uw_Basis_string uw_Basis_sqlifyString(uw_context, uw_Basis_string);
161 uw_Basis_string uw_Basis_sqlifyChar(uw_context, uw_Basis_char);
162 uw_Basis_string uw_Basis_sqlifyBool(uw_context, uw_Basis_bool);
163 uw_Basis_string uw_Basis_sqlifyTime(uw_context, uw_Basis_time);
164 uw_Basis_string uw_Basis_sqlifyBlob(uw_context, uw_Basis_blob);
165 uw_Basis_string uw_Basis_sqlifyChannel(uw_context, uw_Basis_channel);
166 uw_Basis_string uw_Basis_sqlifyClient(uw_context, uw_Basis_client);
167
168 uw_Basis_string uw_Basis_sqlifyIntN(uw_context, uw_Basis_int*);
169 uw_Basis_string uw_Basis_sqlifyFloatN(uw_context, uw_Basis_float*);
170 uw_Basis_string uw_Basis_sqlifyStringN(uw_context, uw_Basis_string);
171 uw_Basis_string uw_Basis_sqlifyBoolN(uw_context, uw_Basis_bool*);
172 uw_Basis_string uw_Basis_sqlifyTimeN(uw_context, uw_Basis_time*);
173
174 char *uw_Basis_ensqlBool(uw_Basis_bool);
175 char *uw_Basis_ensqlTime(uw_context ctx, uw_Basis_time);
176
177 char *uw_Basis_jsifyString(uw_context, uw_Basis_string);
178 char *uw_Basis_jsifyChar(uw_context, uw_Basis_char);
179 char *uw_Basis_jsifyChannel(uw_context, uw_Basis_channel);
180 char *uw_Basis_jsifyTime(uw_context, uw_Basis_time);
181
182 uw_Basis_string uw_Basis_intToString(uw_context, uw_Basis_int);
183 uw_Basis_string uw_Basis_floatToString(uw_context, uw_Basis_float);
184 uw_Basis_string uw_Basis_charToString(uw_context, uw_Basis_char);
185 uw_Basis_string uw_Basis_boolToString(uw_context, uw_Basis_bool);
186 uw_Basis_string uw_Basis_timeToString(uw_context, uw_Basis_time);
187
188 uw_Basis_int *uw_Basis_stringToInt(uw_context, uw_Basis_string);
189 uw_Basis_float *uw_Basis_stringToFloat(uw_context, uw_Basis_string);
190 uw_Basis_char *uw_Basis_stringToChar(uw_context, uw_Basis_string);
191 uw_Basis_bool *uw_Basis_stringToBool(uw_context, uw_Basis_string);
192 uw_Basis_time *uw_Basis_stringToTime(uw_context, const char *);
193
194 uw_Basis_int uw_Basis_stringToInt_error(uw_context, uw_Basis_string);
195 uw_Basis_float uw_Basis_stringToFloat_error(uw_context, uw_Basis_string);
196 uw_Basis_char uw_Basis_stringToChar_error(uw_context, uw_Basis_string);
197 uw_Basis_bool uw_Basis_stringToBool_error(uw_context, uw_Basis_string);
198 uw_Basis_time uw_Basis_stringToTime_error(uw_context, const char *);
199 uw_Basis_blob uw_Basis_stringToBlob_error(uw_context, uw_Basis_string, size_t);
200 uw_Basis_channel uw_Basis_stringToChannel_error(uw_context, uw_Basis_string);
201 uw_Basis_client uw_Basis_stringToClient_error(uw_context, uw_Basis_string);
202
203 uw_Basis_time uw_Basis_unsqlTime(uw_context, uw_Basis_string);
204
205 uw_Basis_string uw_Basis_requestHeader(uw_context, uw_Basis_string);
206
207 void uw_write_header(uw_context, uw_Basis_string);
208 void uw_clear_headers(uw_context);
209
210 uw_Basis_string uw_Basis_get_cookie(uw_context, uw_Basis_string c);
211 uw_unit uw_Basis_set_cookie(uw_context, uw_Basis_string prefix, uw_Basis_string c, uw_Basis_string v, uw_Basis_time *expires, uw_Basis_bool secure);
212 uw_unit uw_Basis_clear_cookie(uw_context, uw_Basis_string prefix, uw_Basis_string c);
213
214 uw_Basis_channel uw_Basis_new_channel(uw_context, uw_unit);
215 uw_unit uw_Basis_send(uw_context, uw_Basis_channel, uw_Basis_string);
216
217 uw_Basis_client uw_Basis_self(uw_context);
218
219 uw_Basis_string uw_Basis_bless(uw_context, uw_Basis_string);
220 uw_Basis_string uw_Basis_blessMime(uw_context, uw_Basis_string);
221 uw_Basis_string uw_Basis_blessRequestHeader(uw_context, uw_Basis_string);
222 uw_Basis_string uw_Basis_blessResponseHeader(uw_context, uw_Basis_string);
223
224 uw_Basis_string uw_Basis_checkUrl(uw_context, uw_Basis_string);
225 uw_Basis_string uw_Basis_checkMime(uw_context, uw_Basis_string);
226 uw_Basis_string uw_Basis_checkRequestHeader(uw_context, uw_Basis_string);
227 uw_Basis_string uw_Basis_checkResponseHeader(uw_context, uw_Basis_string);
228
229 uw_Basis_string uw_Basis_getHeader(uw_context, uw_Basis_string name);
230 uw_unit uw_Basis_setHeader(uw_context, uw_Basis_string name, uw_Basis_string value);
231
232 uw_Basis_string uw_unnull(uw_Basis_string);
233 uw_Basis_string uw_Basis_makeSigString(uw_context, uw_Basis_string);
234 int uw_streq(uw_Basis_string, uw_Basis_string);
235 uw_Basis_string uw_Basis_sigString(uw_context, uw_unit);
236
237 uw_Basis_string uw_Basis_fileName(uw_context, uw_Basis_file);
238 uw_Basis_string uw_Basis_fileMimeType(uw_context, uw_Basis_file);
239 uw_Basis_blob uw_Basis_fileData(uw_context, uw_Basis_file);
240 uw_Basis_int uw_Basis_blobSize(uw_context, uw_Basis_blob);
241 uw_Basis_blob uw_Basis_textBlob(uw_context, uw_Basis_string);
242
243 uw_Basis_string uw_Basis_postType(uw_context, uw_Basis_postBody);
244 uw_Basis_string uw_Basis_postData(uw_context, uw_Basis_postBody);
245 void uw_noPostBody(uw_context);
246 void uw_postBody(uw_context, uw_Basis_postBody);
247 int uw_hasPostBody(uw_context);
248 uw_Basis_postBody uw_getPostBody(uw_context);
249
250 void uw_mayReturnIndirectly(uw_context);
251 __attribute__((noreturn)) void uw_return_blob(uw_context, uw_Basis_blob, uw_Basis_string mimeType);
252 __attribute__((noreturn)) void uw_redirect(uw_context, uw_Basis_string url);
253
254 uw_Basis_time uw_Basis_now(uw_context);
255 uw_Basis_time uw_Basis_addSeconds(uw_context, uw_Basis_time, uw_Basis_int);
256 uw_Basis_int uw_Basis_diffInSeconds(uw_context, uw_Basis_time, uw_Basis_time);
257 uw_Basis_int uw_Basis_toSeconds(uw_context, uw_Basis_time);
258 uw_Basis_int uw_Basis_diffInMilliseconds(uw_context, uw_Basis_time, uw_Basis_time);
259 uw_Basis_int uw_Basis_toMilliseconds(uw_context, uw_Basis_time);
260 extern const uw_Basis_time uw_Basis_minTime;
261
262 void uw_register_transactional(uw_context, void *data, uw_callback commit, uw_callback rollback, uw_callback_with_retry free);
263
264 void uw_check_heap(uw_context, size_t extra);
265 char *uw_heap_front(uw_context);
266 void uw_set_heap_front(uw_context, char*);
267
268 uw_Basis_string uw_Basis_unAs(uw_context, uw_Basis_string);
269
270 extern char *uw_sqlfmtInt;
271 extern char *uw_sqlfmtFloat;
272 extern int uw_Estrings;
273 extern char *uw_sqlsuffixString;
274 extern char *uw_sqlsuffixChar;
275 extern char *uw_sqlsuffixBlob;
276 extern char *uw_sqlfmtUint4;
277
278 void *uw_get_global(uw_context, char *name);
279 void uw_set_global(uw_context, char *name, void *data, uw_callback free);
280
281 uw_Basis_bool uw_Basis_isalnum(uw_context, uw_Basis_char);
282 uw_Basis_bool uw_Basis_isalpha(uw_context, uw_Basis_char);
283 uw_Basis_bool uw_Basis_isblank(uw_context, uw_Basis_char);
284 uw_Basis_bool uw_Basis_iscntrl(uw_context, uw_Basis_char);
285 uw_Basis_bool uw_Basis_isdigit(uw_context, uw_Basis_char);
286 uw_Basis_bool uw_Basis_isgraph(uw_context, uw_Basis_char);
287 uw_Basis_bool uw_Basis_islower(uw_context, uw_Basis_char);
288 uw_Basis_bool uw_Basis_isprint(uw_context, uw_Basis_char);
289 uw_Basis_bool uw_Basis_ispunct(uw_context, uw_Basis_char);
290 uw_Basis_bool uw_Basis_isspace(uw_context, uw_Basis_char);
291 uw_Basis_bool uw_Basis_isupper(uw_context, uw_Basis_char);
292 uw_Basis_bool uw_Basis_isxdigit(uw_context, uw_Basis_char);
293 uw_Basis_char uw_Basis_tolower(uw_context, uw_Basis_char);
294 uw_Basis_char uw_Basis_toupper(uw_context, uw_Basis_char);
295
296 uw_Basis_int uw_Basis_ord(uw_context, uw_Basis_char);
297 uw_Basis_char uw_Basis_chr(uw_context, uw_Basis_int);
298
299 uw_Basis_string uw_Basis_currentUrl(uw_context);
300 void uw_set_currentUrl(uw_context, char *);
301
302 extern size_t uw_messages_max, uw_clients_max, uw_headers_max, uw_page_max, uw_heap_max, uw_script_max;
303 extern size_t uw_inputs_max, uw_cleanup_max, uw_subinputs_max, uw_deltas_max, uw_transactionals_max, uw_globals_max;
304
305 extern size_t uw_database_max;
306
307 extern int uw_time;
308
309 void uw_set_deadline(uw_context, int);
310 void uw_check_deadline(uw_context);
311
312 uw_Basis_unit uw_Basis_debug(uw_context, uw_Basis_string);
313 uw_Basis_int uw_Basis_naughtyDebug(uw_context, uw_Basis_string);
314
315 void uw_set_client_data(uw_context, void *);
316
317 uw_Basis_int uw_Basis_rand(uw_context);
318
319 extern int uw_time_max, uw_supports_direct_status, uw_min_heap;
320
321 failure_kind uw_runCallback(uw_context, void (*callback)(uw_context));
322
323 uw_Basis_string uw_Basis_timef(uw_context, const char *fmt, uw_Basis_time);
324 uw_Basis_time uw_Basis_stringToTimef(uw_context, const char *fmt, uw_Basis_string);
325 uw_Basis_time uw_Basis_stringToTimef_error(uw_context, const char *fmt, uw_Basis_string);
326
327 uw_Basis_string uw_Basis_crypt(uw_context, uw_Basis_string key, uw_Basis_string salt);
328
329 uw_Basis_bool uw_Basis_eq_time(uw_context, uw_Basis_time, uw_Basis_time);
330 uw_Basis_bool uw_Basis_lt_time(uw_context, uw_Basis_time, uw_Basis_time);
331 uw_Basis_bool uw_Basis_le_time(uw_context, uw_Basis_time, uw_Basis_time);
332
333 void uw_buffer_init(size_t max, uw_buffer *, size_t initial);
334 void uw_buffer_free(uw_buffer *);
335 void uw_buffer_reset(uw_buffer *);
336 int uw_buffer_check(uw_buffer *, size_t extra);
337 size_t uw_buffer_used(uw_buffer *);
338 size_t uw_buffer_avail(uw_buffer *);
339 int uw_buffer_append(uw_buffer *, const char *, size_t);
340
341 void uw_setQueryString(uw_context, uw_Basis_string);
342 uw_Basis_string uw_queryString(uw_context);
343
344 uw_Basis_time *uw_Basis_readUtc(uw_context, uw_Basis_string);
345
346 void uw_isPost(uw_context);
347 uw_Basis_bool uw_Basis_currentUrlHasPost(uw_context);
348 uw_Basis_bool uw_Basis_currentUrlHasQueryString(uw_context);
349
350 void uw_cutErrorLocation(char *);
351
352 uw_Basis_string uw_Basis_fresh(uw_context);
353
354 uw_Basis_float uw_Basis_floatFromInt(uw_context, uw_Basis_int);
355 uw_Basis_int uw_Basis_ceil(uw_context, uw_Basis_float);
356 uw_Basis_int uw_Basis_trunc(uw_context, uw_Basis_float);
357 uw_Basis_int uw_Basis_round(uw_context, uw_Basis_float);
358
359 #endif