changeset 464:91914c15a85b

Cookie demo code; fix error message display
author Adam Chlipala <adamc@hcoop.net>
date Thu, 06 Nov 2008 12:22:50 -0500
parents bb27c7efcd90
children ddd363e856ff
files demo/cookie.ur demo/cookie.urp demo/cookie.urs src/c/driver.c src/c/urweb.c
diffstat 5 files changed, 43 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/demo/cookie.ur	Thu Nov 06 12:22:50 2008 -0500
@@ -0,0 +1,26 @@
+cookie c : {A : string, B : float, C : int}
+
+fun set r =
+    setCookie c {A = r.A, B = readError r.B, C = readError r.C};
+    return <xml>Cookie set.</xml>
+
+fun main () =
+    ro <- getCookie c;
+    let
+        val xml = case ro of
+                      None => <xml>No cookie set.</xml>
+                    | Some v => <xml>Cookie: A = {[v.A]}, B = {[v.B]}, C = {[v.C]}</xml>
+    in
+        return <xml><body>
+          {xml}<br/><br/>
+
+          <form>
+            A: <textbox{#A}/><br/>
+            B: <textbox{#B}/><br/>
+            C: <textbox{#C}/><br/>
+            <submit action={set}/>
+          </form>
+        </body></xml>
+    end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/demo/cookie.urp	Thu Nov 06 12:22:50 2008 -0500
@@ -0,0 +1,2 @@
+
+cookie
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/demo/cookie.urs	Thu Nov 06 12:22:50 2008 -0500
@@ -0,0 +1,1 @@
+val main : unit -> transaction page
--- a/src/c/driver.c	Thu Nov 06 12:08:41 2008 -0500
+++ b/src/c/driver.c	Thu Nov 06 12:22:50 2008 -0500
@@ -189,6 +189,7 @@
         printf("Serving URI %s....\n", path);
 
         uw_set_headers(ctx, headers);
+        uw_write(ctx, "<html>");
 
         while (1) {
           if (uw_db_begin(ctx)) {
@@ -198,8 +199,8 @@
             else {
               fk = FATAL;
               uw_reset(ctx);
-              uw_write(ctx, "HTTP/1.1 500 Internal Server Error\n\r");
-              uw_write(ctx, "Content-type: text/plain\r\n\r\n");
+              uw_write_header(ctx, "HTTP/1.1 500 Internal Server Error\n\r");
+              uw_write_header(ctx, "Content-type: text/plain\r\n\r\n");
               uw_write(ctx, "Error running SQL BEGIN\n");
 
               break;
@@ -212,13 +213,15 @@
           strcpy(path_copy, path);
           fk = uw_begin(ctx, path_copy);
           if (fk == SUCCESS) {
+            uw_write(ctx, "</html>");
+
             if (uw_db_commit(ctx)) {
               fk = FATAL;
 
               printf("Error running SQL COMMIT\n");
               uw_reset(ctx);
-              uw_write(ctx, "HTTP/1.1 500 Internal Server Error\n\r");
-              uw_write(ctx, "Content-type: text/plain\r\n\r\n");
+              uw_write_header(ctx, "HTTP/1.1 500 Internal Server Error\n\r");
+              uw_write_header(ctx, "Content-type: text/plain\r\n");
               uw_write(ctx, "Error running SQL COMMIT\n");
             }
 
@@ -232,8 +235,8 @@
               printf("Fatal error (out of retries): %s\n", uw_error_message(ctx));
 
               uw_reset_keep_error_message(ctx);
-              uw_write(ctx, "HTTP/1.1 500 Internal Server Error\n\r");
-              uw_write(ctx, "Content-type: text/plain\r\n\r\n");
+              uw_write_header(ctx, "HTTP/1.1 500 Internal Server Error\n\r");
+              uw_write_header(ctx, "Content-type: text/plain\r\n");
               uw_write(ctx, "Fatal error (out of retries): ");
               uw_write(ctx, uw_error_message(ctx));
               uw_write(ctx, "\n");
@@ -248,8 +251,8 @@
             printf("Fatal error: %s\n", uw_error_message(ctx));
 
             uw_reset_keep_error_message(ctx);
-            uw_write(ctx, "HTTP/1.1 500 Internal Server Error\n\r");
-            uw_write(ctx, "Content-type: text/plain\r\n\r\n");
+            uw_write_header(ctx, "HTTP/1.1 500 Internal Server Error\r\n");
+            uw_write_header(ctx, "Content-type: text/plain\r\n");
             uw_write(ctx, "Fatal error: ");
             uw_write(ctx, uw_error_message(ctx));
             uw_write(ctx, "\n");
@@ -261,8 +264,8 @@
             printf("Unknown uw_handle return code!\n");
 
             uw_reset_keep_request(ctx);
-            uw_write(ctx, "HTTP/1.1 500 Internal Server Error\n\r");
-            uw_write(ctx, "Content-type: text/plain\r\n\r\n");
+            uw_write_header(ctx, "HTTP/1.1 500 Internal Server Error\n\r");
+            uw_write_header(ctx, "Content-type: text/plain\r\n");
             uw_write(ctx, "Unknown uw_handle return code!\n");
 
             try_rollback(ctx);
--- a/src/c/urweb.c	Thu Nov 06 12:08:41 2008 -0500
+++ b/src/c/urweb.c	Thu Nov 06 12:22:50 2008 -0500
@@ -315,17 +315,7 @@
   if (n < 0)
     return n;
 
-  n = uw_really_send(sock, "<html>", 6);
-
-  if (n < 0)
-    return n;
-
-  n = uw_really_send(sock, ctx->page, ctx->page_front - ctx->page);
-
-  if (n < 0)
-    return n;
-
-  return uw_really_send(sock, "</html>", 7);
+  return uw_really_send(sock, ctx->page, ctx->page_front - ctx->page);
 }
 
 static void uw_check_headers(uw_context ctx, size_t extra) {