Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Newer
Older
100644 627 lines (473 sloc) 16.862 kB
108bbc9 @klacke ""
authored
1 .TH YAWS_API "5" "" "" "User API"
abc3a43 @klacke documented yaws_api
authored
2 .SH NAME
3 yaws_api \- api available to yaws web server programmers
4 .SH SYNOPSIS
5 .B yaws_api:Function(...)
6
7 .SH DESCRIPTION
e2f272a @klacke explicit support for content_length
authored
8
abc3a43 @klacke documented yaws_api
authored
9 .PP
e263363 @klacke speling
authored
10 This is the api available to yaws web server programmers. The Erlang
abc3a43 @klacke documented yaws_api
authored
11 module yaws_api contains a wide variety of functions that can
12 be used inside yaws pages.
13
14 .PP
15 Each chunk of yaws code is executed while the yaws page is
16 being delivered from the server. We give a very simple example here
e263363 @klacke speling
authored
17 to show the basic idea. Imagine the following HTML code:
abc3a43 @klacke documented yaws_api
authored
18
19 \fI
20 .nf
21 <html>
22 <body>
23
24 <h1> Header 1</h1>
25
26 <erl>
27 out(Arg) ->
28 {html, "<p> Insert this text into the document"}.
29 </erl>
30
31 </body>
32 </html>
33
34 .fi
35 \fR
36
37
38 .PP
39 The \fBout(Arg)\fR function is supplied one argument, an #arg{} structure.
40 We have the following relevant record definitions:
41
42 \fI
43 .nf
44
45 -record(arg, {
0be3c7e @klacke untabified all of yaws
authored
46 clisock, %% the socket leading to the peer client
47 headers, %% headers
48 req, %% request
49 clidata, %% The client data (as a binary in POST requests)
50 server_path, %% The normalized server path
51 querydata, %% Was the URL on the form of ...?query (GET reqs)
52 appmoddata, %% the remainder of the path up to the query
53 docroot, %% where's the data
54 fullpath, %% full path to yaws file
55 cont, %% Continuation for chunked multipart uploads
56 state, %% State for use by users of the out/1 callback
57 pid, %% pid of the yaws worker process
58 opaque, %% useful to pass static data
59 appmod_prepath, %% path in front of: <appmod><appmoddata>
60 pathinfo %% Set to 'd/e' when calling c.yaws for the request
0d99c12 @carsten3347 Changes to arg record, {page, {Options, Page}}, comment on returning a
carsten3347 authored
61 %% http://some.host/a/b/c.yaws/d/e
0be3c7e @klacke untabified all of yaws
authored
62 }).
abc3a43 @klacke documented yaws_api
authored
63 .fi
64 \fR
65
66 The headers argument is also a record:
67 \fI
68 .nf
8d5aa60 @klacke ""
authored
69
abc3a43 @klacke documented yaws_api
authored
70 -record(headers, {
8d5aa60 @klacke ""
authored
71 connection,
72 accept,
73 host,
74 if_modified_since,
75 if_match,
76 if_none_match,
77 if_range,
78 if_unmodified_since,
79 range,
80 referer,
81 user_agent,
82 accept_ranges,
83 cookie = [],
84 keep_alive,
85 content_length,
86 authorization,
87 other = [] %% misc other headers
88 }).
abc3a43 @klacke documented yaws_api
authored
89
90 .fi
91 \fR
92
93 .PP The \fBout/1\fR function can use the Arg to generate any content
94 it likes. We have the following functions to aid that generation.
95
96
97 .SH API
98
99 .TP
100 \fBssi(DocRoot, ListOfFiles)\fR
101 Server side include. Just include the files as is in the document. The files
102 will \fBnot\fR be parsed and searched for <erl> tags.
103
104
105 .TP
106 \fBpre_ssi_files(DocRoot, ListOfFiles) ->
107 Server side include of pre indented code. The data in Files
108 will be included but contained in a <pre> tag. The data will be
109 htmlized.
110
111 .TP
112 \fBpre_ssi_string(String)\fR
113 Include htmlized content from String.
114
115
116 .TP
117 \fBf(Fmt, Args)\fR
118 The equivalent of io_lib:format/2. This function is automatically
119 -included in all erlang code which is a part of a yaws page.
120
121 .TP
c5ebd38 @klacke added pam support + prepare for 1.58
authored
122 \fBhtmlize(Binary | List | Char)\fR
123 Htmlize an IO list object.
abc3a43 @klacke documented yaws_api
authored
124
125 .TP
126 \fBsetcookie(Name, Value, [Path, [ Expire, [Domain , [Secure]]]])\fR
127 Sets a cookie to the browser.
128
129 .TP
130 \fBfind_cookie_val(Cookie, Header)\fR
131 This function can be used to search for a cookie that was previously
132 set by \fBsetcookie/2-6\fR. For example if we set a cookie
133 as \fByaws_api:setcookie("sid",SomeRandomSid) \fR, then on subsequent requests
134 from the browser we can call:
135 \fBfind_cookie("sid",(Arg#arg.headers)#headers.cookie)\fR
136
137 The function returns [] if no cookie was found, otherwise the actual cookie
138 is returned as a string.
139
140
141 .TP
142 \fBredirect(Url\fR
143 This function generates a redirect to the browser.
144 It will clear any previously set headers. So to generate
145 a redirect \fBand\fR set a cookie, we need to set the cookie after
146 the redirect as in:
147 \fI
148 .nf
149 out(Arg) ->
150 ... do some stuff
151
152 Ret = [{redirect, "http://www.somewhere.com"},
153 setcookie("sid", Random)
154 ].
155
156 .fi
157 \fR
158
159
160 .TP
883fa5a @klacke added redirect_self to yaws_api
authored
161 \fBredirect_self(Arg)\fR
162 If we want to issue a redirect to ourselves, this function
163 is useful. It returns a record \fI#redir_self{}\fR defined in
164 \fIyaws_api.hrl\fR. The record contains fields to construct
165 a URL to ourselves.
166 \fI
167 .nf
168
169 -record(redir_self, {
170 host, %% string() - our own host
171 scheme, %% http | https
172 scheme_str, %% "https://" | "http://"
173 port, %% integer() - our own port
174 port_str %% "" | ":<int>" - the optional port part
175 %% to append to the url
176 }).
177 .nf
178
179
180 .TP
abc3a43 @klacke documented yaws_api
authored
181 \fBget_line(String)\fR
d02b965 @klacke qnx port + docs overhaul by cschatz@networkadvantage.biz
authored
182 This function is convenient when getting \\r\\n terminated lines
abc3a43 @klacke documented yaws_api
authored
183 from a stream of data. It returns:
184
185 \fB{line, Line, Tail}\fR or \fB{lastline, Line, Tail}\fR
186
187 The function handles multilines as defined in e.g. SMTP or HTTP
188
189 .TP
190 \fBmime_type(FileName)\fR
191 Returns the mime type as defined by the extension of FileName
192
193 .TP
194 \fBstream_chunk_deliver(YawsPid, Data)\fR
195 When a yaws function needs to deliver chunks of data which it gets
196 from a process. The other process can call this function to deliver
197 these chunks. It requires the \fBout/1\fR function to return the
198 value \fB{streamcontent, MimeType, FirstChunk}\fR to work.
a39fab8 @klacke added example docs on how to stream data
authored
199 YawsPid is the process identifier of the yaws process delivering the original
ebb94d8 @klacke 1.54
authored
200 .yaws file. That is self() in the yaws code.
201 The Pid must typically be passed (somehow) to the producer of the stream.
abc3a43 @klacke documented yaws_api
authored
202
a39fab8 @klacke added example docs on how to stream data
authored
203 .TP
204 \fBstream_chunk_deliver_blocking(YawsPid, Data)\fR
e263363 @klacke speling
authored
205 A synchronous version of the above function. This syncronous version must always
ebb94d8 @klacke 1.54
authored
206 be used when the producer of the stream is faster than the consumer.
207 This is usually the case since the client is the WWW browser.
abc3a43 @klacke documented yaws_api
authored
208
209 .TP
210 \fBstream_chunk_end(YawsPid)\fR
211 When the process discussed above is done delivering data, it must call
212 this function to let the yaws content delivering process finish up
213 the HTTP transaction.
214
215 .TP
216 \fBparse_query(Arg)\fR
b2d5a00 @klacke postvar(), queryvar(), ssi docs
authored
217 This function will parse the query part of the URL.
abc3a43 @klacke documented yaws_api
authored
218 It will return a {Key, Value} list of the items supplied in the query
b2d5a00 @klacke postvar(), queryvar(), ssi docs
authored
219 part of the URL.
220
221 .TP
222 \fBqueryvar(Arg, VarName)\fR
223 This function is automatically included from yaws_api in all
224 .yaws pages. It is used to search for a variable in the
225 querypart of the url. Returns {ok, Val} or undefined.
54eff96 @klacke git-svn-id: https://erlyaws.svn.sourceforge.net/svnroot/erlyaws/trunk…
authored
226 If a variable is defined multiple times, the function may also
227 return \fI[{ok, Val1}, ....]\fR.
abc3a43 @klacke documented yaws_api
authored
228
229
230 .TP
c4523b3 @klacke ""
authored
231 \fBparse_post(Arg)\fR
abc3a43 @klacke documented yaws_api
authored
232 This function will parse the POST data as supplied from the browser.
233 It will return a {Key, Value} list of the items set by the browser.
234
b2d5a00 @klacke postvar(), queryvar(), ssi docs
authored
235 .TP
236 \fBpostvar(Arg, VarName)\fR
237 This function is automatically included from yaws_api in all
238 .yaws pages. It is used to search for a variable in the
239 POSTed data from the client. Returns {ok, Val} or undefined.
54eff96 @klacke git-svn-id: https://erlyaws.svn.sourceforge.net/svnroot/erlyaws/trunk…
authored
240 If a variable is defined multiple times, the function may also
241 return \fI[{ok, Val1}, ....]\fR.
b2d5a00 @klacke postvar(), queryvar(), ssi docs
authored
242
c9778e0 @klacke added support for 2 additional configure
authored
243 .TP
244 \fBgetvar(Arg, VarName)\fR
245 This function looks at the HTTP request method from the
246 client and invokes postvar/2 if it is a POST from the client
247 and queryvar/2 if it is a GET request from the client.
248
c4523b3 @klacke ""
authored
249
250 .TP
251 \fBparse_multipart_post(Arg)\fR
252
abc3a43 @klacke documented yaws_api
authored
253 If the browser has set the Content-Type header to the value
254 "multipart/form-data", which is the case when the browser
255 wants to upload a file to the server the following happens:
256
257
258 If the function returns \fB{result, Res}\fR no more data
259 will come from the browser.
260
261 If the function returns \fB{cont, Cont, Res}\fR the browser
262 will supply more data. (The file was to big to come in one read)
263
264 This indicates that there is more data to come and the out/1 function
265 should return {get_more, Cont, User_state} where User_state might
266 usefully be a File Descriptor.
267
268
269 The Res value is a list of either:
270 \fB{header, Header}\fR | \fB{part_body, Binary}\fR | \fB{body, Binary}\fR
271
272
273 Example usage could be:
274 \fI
275 .nf
276 <erl>
277
278 out(A) ->
c4523b3 @klacke ""
authored
279 case yaws_api:parse_multipart_post(A) of
abc3a43 @klacke documented yaws_api
authored
280 {cont, Cont, Res} ->
281 St = handle_res(A, Res),
282 {get_more, Cont, St};
283 {result, Res} ->
284 handle_res(A, Res),
285 {html, f("<pre>Done </pre>",[])}
286 end.
287
288 handle_res(A, [{head, Name}|T]) ->
289 io:format("head:~p~n",[Name]),
290 handle_res(A, T);
291 handle_res(A, [{part_body, Data}|T]) ->
292 io:format("part_body:~p~n",[Data]),
293 handle_res(A, T);
294 handle_res(A, [{body, Data}|T]) ->
295 io:format("body:~p~n",[Data]),
296 handle_res(A, T);
297 handle_res(A, []) ->
298 io:format("End_res~n").
299
300 </erl>
301 .fi
302 \fR
303
304
305
306 .TP
87b1456 @klacke wrote the shopppingcart example
authored
307 \fBnew_cookie_session(Opaque)\fR
abc3a43 @klacke documented yaws_api
authored
308 Create a new cookie based session, the yaws system will set the
e263363 @klacke speling
authored
309 cookie. The new random generated cookie is returned from this
87b1456 @klacke wrote the shopppingcart example
authored
310 function. The Opaque argument will typically contain user data
e263363 @klacke speling
authored
311 such as user name and password
abc3a43 @klacke documented yaws_api
authored
312
13b21a9 @klacke yaws_session_server ttl patch from Rob.Schmersel
authored
313 .TP
314 \fBnew_cookie_session(Opaque, TTL)\fR
315 As above, but allows to set a session specific time-out value,
6964fff @klacke modified patch by Robert David to add a hook to yaws session server w…
authored
316 overriding the system specified time-out value.
317
318 .TP
319 \fBnew_cookie_session(Opaque, TTL, CleanupPid)\fR
e263363 @klacke speling
authored
320 As above, but also sends a message
6964fff @klacke modified patch by Robert David to add a hook to yaws session server w…
authored
321 \fI{yaws_session_end, Reason, Cookie, Opaque}\fR to the provided CleanuPid where
322 Reason can be either of \fItimeout\fR or \fInormal\fR. The \fICookie\fR
323 is the HTTP cookie as returned by \fInew_session()\fR and the Opaque
324 is the user provided Opaque parameter to \fInew_session()\fR.
325 The purpose of the feature is to cleanup resources assigned to the session.
326
13b21a9 @klacke yaws_session_server ttl patch from Rob.Schmersel
authored
327
abc3a43 @klacke documented yaws_api
authored
328 .TP
87b1456 @klacke wrote the shopppingcart example
authored
329 \fBcookieval_to_opaque(CookieVal)\fR
abc3a43 @klacke documented yaws_api
authored
330
331 .TP
332 \fBprint_cookie_sessions() \fR
333
87b1456 @klacke wrote the shopppingcart example
authored
334
335 .TP
336 \fBreplace_cookie_session(Cookie, NewOpaque)\fR
337
abc3a43 @klacke documented yaws_api
authored
338 .TP
87b1456 @klacke wrote the shopppingcart example
authored
339 \fBdelete_cookie_session(Cookie)\fR
abc3a43 @klacke documented yaws_api
authored
340
341
50a7ab2 @klacke added support/docs for embedded mode
authored
342 .TP
343 \fBsetconf(Gconf, Groups)\fR
344 This function is intended for embedded mode in yaws. It makes it possible
345 to load a yaws configuration from another data source than /etc/yaws.conf, such
346 as a database.
347 If yaws is started with the environment \fI{embedded, true}\fR, yaws will
348 start with an empty default configuration, and wait for some other
349 program to execute a \fIsetconf/2\fR
350 The Gconf is a \fI#gconf{}\fR record and the Group variable is
351 a list of lists of \fI#sconf{}\fR records. Each sublist must
352 contain \fI#sconf{}\fR records with the same IP/Port listen address.
e263363 @klacke speling
authored
353 To create a suitable initial #gconf{} record see the code in
354 yaws_config:make_default_gconf/2. Especially the \fIyaws_dir\fR parameter
355 is important to get right.
abc3a43 @klacke documented yaws_api
authored
356
2b9f008 @klacke ""
authored
357
358 .TP
359 \fBurl_decode(Str)\fR
e263363 @klacke speling
authored
360 Decode url-encoded string. A URL encoded string is a string where
2b9f008 @klacke ""
authored
361 all alfa numeric characters and the the character _ are preserved
362 and all other characters are encode as "%XY" where X and Y are the
e263363 @klacke speling
authored
363 hex values of the least respective most significant 4 bits in the 8 bit
2b9f008 @klacke ""
authored
364 character.
365
366 .TP
367 \fBurl_encode(Str)\fR
368 Url-encodes a string. All URLs in HTML documents must be URL encoded.
369
370
814eb04 @klacke ""
authored
371 .TP
8d5aa60 @klacke ""
authored
372 \fBreformat_header(H)\fR
e263363 @klacke speling
authored
373 Returns a list of reformatted header values from a #header{}
814eb04 @klacke ""
authored
374 record. The return list is suitable for retransmit.
375
dc00e52 @klacke postvar bug by hal snyder, added yaws_api:query_url/1 added the id su…
authored
376 .TP
377 \fBrequest_url(ARG)\fR
378 Return the url as requested by the client. Return value
379 is a #url{} record as defined in yaws_api.hrl
380
2b9f008 @klacke ""
authored
381
8da2b3a @klacke parse_url
authored
382 .TP
383 \fBparse_url(Str)\fR
384 Parse URL in a string, returns a #url record
385
386 .TP
42ab990 @carsten3347 Make call_cgi available in yaws_api.
carsten3347 authored
387 \fBformat_url(UrlRecord)\fR
8da2b3a @klacke parse_url
authored
388 Takes a #url record a formats the Url as a string
389
42ab990 @carsten3347 Make call_cgi available in yaws_api.
carsten3347 authored
390 .TP
391 \fBcall_cgi(Arg, Scriptfilename)\fR
392 Calls an executable CGI script,
393 given by its full path. Used to make `.yaws' wrappers for CGI
394 programs. This function usually returns \fIstreamcontent\fR.
395
396 .TP
397 \fBcall_cgi(Arg, Exefilename, Scriptfilename)\fR
398 Like before, but
399 calls \fIExefilename\fR to handle the script. The file name of the
400 script is handed to the executable via a CGI meta variable.
8da2b3a @klacke parse_url
authored
401
f3deff2 @klacke added a dir_listing function in yaws_api
authored
402 .TP
403 \fBdir_listing(Arg)\fR
404 Perform a directory listing. Can be used in special directories
405 when we don't want to turn on dir listings for the entire server.
406 Always returns ok.
8da2b3a @klacke parse_url
authored
407
abc3a43 @klacke documented yaws_api
authored
408 .SH RETURN VALUES from out/1
409 .PP
410 The out/1 function can return different values to control the behavior
411 of the server.
412
413 .TP
414 \fB{html, DeepList}\fB
415 This assumes that DeepList is formatted HTML code.
416 The code will be inserted in the page.
417
418 .TP
419 \fB{ehtml, Term}\fR
420 This will transform the erlang term Term into a
421 stream of HTML content. The basic syntax of Term
422 is
423
424 \fI
425 .nf
426 EHTML = [EHTML] | {Tag, Attrs, Body} | {Tag, Attrs} | {Tag} |
427 binary() | character()
8d5aa60 @klacke ""
authored
428 Tag = atom()
abc3a43 @klacke documented yaws_api
authored
429 Attrs = [{Key, Value}] or {EventTag, {jscall, FunName, [Args]}}
8d5aa60 @klacke ""
authored
430 Key = atom()
abc3a43 @klacke documented yaws_api
authored
431 Value = string()
432 Body = EHTML
433 .fi
434 \fR
435
436
ebb94d8 @klacke 1.54
authored
437 For example, \fI{p, [], "Howdy"}\fR expands into
abc3a43 @klacke documented yaws_api
authored
438 "<p>Howdy</p> and
439
440 \fI
441 .nf
442 {form, [{action, "a.yaws"}],
443 {input, [{type,text}]}}
444
445 .fi
446 \fR
447
448 expands into
449
450 \fI
451 .nf
452 <form action="a.yaws"
df99ebe @klacke *** empty log message ***
authored
453 <input type="text">
454 </form>
abc3a43 @klacke documented yaws_api
authored
455 .fi
456 \fR
457
458 It may be more convenient to generate erlang tuples
459 than plain html code.
460
461 .TP
462 \fB{content, MimeType, Content}\fR
463 This function will make the web server generate
464 different content than HTML. This return value is only allowed
465 in a yaws file which has only one <erl> </erl> part and no
466 html parts at all.
467
468
469 .TP
470 \fB{streamcontent, MimeType, FirstChunk}\fR
471 This return value plays the same role as the \fIcontent\fR return
472 value above.
e2f272a @klacke explicit support for content_length
authored
473
abc3a43 @klacke documented yaws_api
authored
474 However it makes it possible to stream data to the client
475 if the yaws code doesn't have access to all the data in one go. (Typically
476 if a file is very large or if data arrives from back end servers on the network.
477
478 .TP
479 \fB{header, H}\fR
e2f272a @klacke explicit support for content_length
authored
480 Accumulates a HTTP header. The trailing CRNL which is supposed
ebb94d8 @klacke 1.54
authored
481 to end all HTTP headers must NOT be added. It is added by the server.
e2f272a @klacke explicit support for content_length
authored
482 The following list of headers are given special treatment.
483
484 \fI{connection, What}\fR
485
486 This sets the connection header. If \fIWhat\fR is the special value
487 \fI"close"\fR, the connection will be closed once the yaws page is delivered
488 to the client.
489
490 \fI{location, Url}\fR
491
492 Sets the Location: header. This header is typically combined with
493 the \fI{status, 302}\fR return value.
494
495 \fI{cache_control, What}\fR
496
497 Sets the Cache-Control: header.
498
499 \fI{set_cookie, Cookie}\fR
500
e263363 @klacke speling
authored
501 Prepends a a Set-Cookie: header to the list of previously
e2f272a @klacke explicit support for content_length
authored
502 set Set-Cookie: headers.
503
504 \fI{content_type, MimeType}\fR
505
506 Sets the Content-Type header.
507
508 \fI{content_length, Len}\fR
509
510 Normally yaws will ship Yaws pages using Transfer-Encoding: chunked. This
511 is because we generally can't know how long a yaws page will be. If we for
512 some reason want to force a Content-Length: header (and we actually do
513 know the length of the content, we can force yaws to not ship the
514 page chunked.
515
516
517 All other headers must be added using the normal HTTP syntax.
518 Example:
519
520 {header, "My-X-Header: gadong"}
521
522
523
abc3a43 @klacke documented yaws_api
authored
524
525 .TP
526 \fB{allheaders, HeaderList}\fB
527 Will clear all previously accumulated headers and replace them.
528
529
530 .TP
531 \fB{status, Code}\fR
532 Will set another HTTP status code than 200.
533
534
535 .TP
536 \fBbreak\fR
537 Will stop processing of any consecutive chunks of erl or html code
538 in the yaws file.
539
540 .TP
541 \fBok\fR
542 Do nothing.
543
544
545 .TP
546 \fB{redirect, Url}\fR
547 Erase all previous headers and accumulate a single
548 Location header. Set the status code.
549
550 .TP
551 \fB{redirect_local, Path}\fR
552 Does a redirect to the same Scheme://Host:Port/Path as we
553 currently are executing in.
554
555 .TP
556 \fB{get_more, Cont, State}\fR
557 When we are receiving large POSTs we can return this value
558 and be invoked again when more Data arrives.
559
560
561 .TP
c837288 @klacke page retval
authored
562 \fB{page, Page}\fR
563 Make Yaws return a different page than the one being
564 requested.
565
566
0d99c12 @carsten3347 Changes to arg record, {page, {Options, Page}}, comment on returning a
carsten3347 authored
567 .TP
568 \fB{page, {Options, Page}}\fR
569 Like the above, but supplying an additional deep list of options. For
570 now, the only type of option is \fI{header, H}\fR with the effect of
571 accumulating the HTTP header \fIH\fR for page \fIPage\fR.
572
c837288 @klacke page retval
authored
573
574 .TP
b2d5a00 @klacke postvar(), queryvar(), ssi docs
authored
575 \fB{ssi, File, Delimiter, Bindings}\fR
576 Server side include File and macro expansion in File.
e263363 @klacke speling
authored
577 Each occurrence of a string, say "xyz", inside File which
578 is inside Delimiters is replaced with the corresponding
b2d5a00 @klacke postvar(), queryvar(), ssi docs
authored
579 value in Bindings.
580
581 Example:
582 Delimiter = %%
583
584 File contains the string .... %%xyz%% .....
585
586 Bindings contain the tuple {"xyz", "Dingbat"}
587
e263363 @klacke speling
authored
588 The occurrence of %%xyz%% in File will be replaced with "Dingbat"
b2d5a00 @klacke postvar(), queryvar(), ssi docs
authored
589 in the Server side included output.
590
591 The {ssi, File, Delimiter, Bindings} statement can also
592 occur inside a deep ehtml structure.
593
594
595 .TP
379666b @klacke documented jockes new bindings feature
authored
596 \fB{bindings, [{Key1, Value2}, {Key2, Value2} .....]}\fR
597 Establish variable bindings that can be used in the page.
598
599 All bindings can then be used in the rest of yaws code
600 (in HTML source and within erl tags).
601 In HTML source %%Key%% is expanded to Value and within erl
ab5edc6 @klacke *** empty log message ***
authored
602 tags \fIyaws_api:binding(Key)\fR can be used to extract Value
603 and \fIyaws_api:binding_exists(Key)\fR can be used to check for
e263363 @klacke speling
authored
604 the existence of a binding.
df96b15 @klacke New feature yssi, yaws include
authored
605
606 .TP
607 \fB{yssi, YawsFile}\fR
608 Include a yaws file. Compile it and expand as if it had
609 occured inline.
610
379666b @klacke documented jockes new bindings feature
authored
611 .TP
abc3a43 @klacke documented yaws_api
authored
612 \fB[ListOfValues]\fR
0d99c12 @carsten3347 Changes to arg record, {page, {Options, Page}}, comment on returning a
carsten3347 authored
613 It is possible to return a deep list of the above defined
614 return values. Any occurrence of \fIstream_content\fR, \fIget_more\fR
615 or \fIpage\fR in this list is legal only if it is the last position of
616 the list.
abc3a43 @klacke documented yaws_api
authored
617
618
619
620
621 .SH AUTHOR
622 Written by Claes Wikstrom
623 .SH "SEE ALSO"
624 .BR yaws.conf (5)
625 .BR erl (1)
626
Something went wrong with that request. Please try again.