[Gd-chatter] r11190 - trunk/libraries/network/koala/sources/koala
turbo24prg at gwydiondylan.org
turbo24prg at gwydiondylan.org
Sun Feb 18 23:27:32 CET 2007
Author: turbo24prg
Date: Sun Feb 18 23:27:29 2007
New Revision: 11190
Modified:
trunk/libraries/network/koala/sources/koala/dsp.dylan
trunk/libraries/network/koala/sources/koala/server.dylan
Log:
Job: koala
* convenience methods for new respond-to method, enables respondse to all methods
Modified: trunk/libraries/network/koala/sources/koala/dsp.dylan
==============================================================================
--- trunk/libraries/network/koala/sources/koala/dsp.dylan (original)
+++ trunk/libraries/network/koala/sources/koala/dsp.dylan Sun Feb 18 23:27:29 2007
@@ -97,15 +97,26 @@
response :: <response>)
let pc = make(<page-context>);
dynamic-bind (*page-context* = pc)
- select (request.request-method)
- #"POST" => respond-to-post(page, request, response);
- #"GET" => respond-to-get (page, request, response);
- #"HEAD" => respond-to-head(page, request, response);
- otherwise => unsupported-request-method-error();
- end;
+ respond-to(request.request-method, page, request, response);
end;
end process-page;
+define method respond-to (request :: <symbol>, page :: <page>, request :: <request>, response :: <response>)
+ unsupported-request-method-error()
+end;
+
+define method respond-to (request == #"GET", page :: <page>, request :: <request>, response :: <response>)
+ respond-to-get(page, request, response);
+end;
+
+define method respond-to (request == #"POST", page :: <page>, request :: <request>, response :: <response>)
+ respond-to-post(page, request, response);
+end;
+
+define method respond-to (request == #"HEAD", page :: <page>, request :: <request>, response :: <response>)
+ respond-to-head(page, request, response);
+end;
+
// Applications should call this to register a page for a particular URL.
define function register-page
(url :: <string>, page :: <page>, #key replace?, prefix?)
Modified: trunk/libraries/network/koala/sources/koala/server.dylan
==============================================================================
--- trunk/libraries/network/koala/sources/koala/server.dylan (original)
+++ trunk/libraries/network/koala/sources/koala/server.dylan Sun Feb 18 23:27:29 2007
@@ -49,7 +49,6 @@
//---TODO: response for unsupported-request-method-error MUST include
// Allow: field... Need an API for making sure that happens.
// RFC 2616, 5.1.1
- constant slot allowed-methods :: <sequence> = #(#"GET", #"POST", #"HEAD");
// Map from URL string to a response function. The leading slash is removed
// from URLs because it's easier to use merge-locators that way.
@@ -616,7 +615,7 @@
pset (buffer, len) read-request-line(socket) end;
end;
log-info("%s", substring(buffer, 0, len));
- read-request-first-line(request, buffer, len, server.allowed-methods);
+ read-request-first-line(request, buffer, len);
unless (request.request-version == #"http/0.9")
request.request-headers
:= read-message-headers(socket,
@@ -638,14 +637,14 @@
// ---TODO: this code would be a lot clearer if it used regular expressions.
//
define function read-request-first-line
- (request :: <request>, buffer :: <string>, eol :: <integer>, allowed-methods)
+ (request :: <request>, buffer :: <string>, eol :: <integer>)
=> ()
let method-end = whitespace-position(buffer, 0, eol) | eol;
if (zero?(method-end))
invalid-request-line-error();
else
request.request-method
- := extract-request-method(buffer, 0, method-end, allowed-methods);
+ := as(<symbol>, copy-sequence(buffer, start: 0, end: method-end));
let bpos = skip-whitespace(buffer, method-end, eol);
let epos = whitespace-position(buffer, bpos, eol) | eol;
when (epos > bpos)
@@ -992,17 +991,6 @@
len == 1 & buffer[0] == $cr
end;
-define function extract-request-method (buffer :: <string>,
- bpos :: <integer>,
- epos :: <integer>,
- allowed-methods :: <sequence>)
- any?(method (key :: <symbol>)
- key-match(key, buffer, bpos, epos) & key
- end,
- allowed-methods)
- | unsupported-request-method-error();
-end;
-
define function extract-request-version (buffer :: <string>,
bpos :: <integer>,
epos :: <integer>)
More information about the chatter
mailing list