web_main.c
changeset 12 43297144f196
parent 10 9daa832ab9c4
child 13 ee426f453cf5
--- a/web_main.c	Fri Jun 06 18:35:46 2008 +0300
+++ b/web_main.c	Fri Jun 06 23:37:45 2008 +0300
@@ -1,18 +1,25 @@
+#include <sys/types.h>
+#include <sys/queue.h>
+#include <sys/socket.h>
 #include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <netinet/ip.h>
+#include <arpa/inet.h>
 #include <signal.h>
-#include <string.h>
 #include <unistd.h>
 
 #include <event2/event.h>
 #include <event2/event_compat.h>
+#include <event2/http.h>
 #include <event2/event_struct.h>
 
+#include "common.h"
+#include "http.h"
 #include "render.h"
 #include "render_remote.h"
 #include "remote_node.h"
 #include "remote_pool.h"
-#include "http.h"
-#include "common.h"
 
 #define MIN_CHUNK_SIZE 4096
 #define OVERFLOW_BUFFER 4096
@@ -156,11 +163,6 @@
 }
 
 void _http_render_execute (struct evhttp_request *request, u_int32_t img_w, u_int32_t img_h) {
-    // error message
-    const char *errmsg = NULL;
-
-#define ERROR(msg) do { errmsg = msg; goto error; } while (0)
-
     // render request context
     struct render_request *req_ctx = calloc(1, sizeof(struct render_request));
 
@@ -172,14 +174,18 @@
     req_ctx->bytes_sent = 0;
     
     // render context
-    render_t rend_ctx;
-    if (render_init(&rend_ctx, RENDER_PNG))
-        ERROR("render_init");
+    struct render *render;
+    
+    if (!(render = render_alloc()))
+        ERROR("render_alloc");
 
-    if (render_set_size(&rend_ctx, img_w, img_h))
+    if (render_set_mode(render, RENDER_PNG))
+        ERROR("render_set_mode");
+
+    if (render_set_size(render, img_w, img_h))
         ERROR("render_set_size");
 
-    if (render_region_full(&rend_ctx))
+    if (render_region_full(render))
         ERROR("render_region_full");
 
     // pick a render_node
@@ -189,7 +195,7 @@
         ERROR("remote_pool_get");
 
     // initiate the remote render operation
-    if ((req_ctx->remote_ctx = render_remote(&rend_ctx, node_info,
+    if ((req_ctx->remote_ctx = render_remote(render, node_info,
         &_render_sent,
         &_render_data,
         &_render_done,
@@ -198,8 +204,6 @@
     )) == NULL)
         ERROR("render_remote");
 
-#undef ERROR    /* can't be used after request has been sent */
-
     // set close cb
     evhttp_set_reply_abortcb(request, &_render_http_lost, req_ctx);
     
@@ -208,7 +212,6 @@
     return;
 
 error:
-    error("ERR: %s", errmsg);
     evhttp_send_error(request, 500, "Internal Server Error");
 
     free(req_ctx);
@@ -226,20 +229,19 @@
 
     evhttp_request_get_peer(request, &peer_address, &peer_port);
     
-    // request arguments
-    unsigned long int img_w = 256, img_h = 256;
-    
+    u_int32_t img_w = 256, img_h = 256;
+
+    // parse request arguments
     struct http_qarg qarg_spec[] = {
         { "w",      QARG_UINT,  &img_w  },
         { "h",      QARG_UINT,  &img_h  },
         { NULL,     QARG_END,   NULL    }
     };
 
-    // parse them
     http_qarg_parse(request, qarg_spec);
 
     // request log
-    printf("REQ: [%s:%d] method=%d, uri=%s, img_w=%lu, img_h=%lu\n", peer_address, peer_port, evhttp_request_get_type(request), uri, img_w, img_h);
+    printf("REQ: [%s:%d] method=%d, uri=%s, img_w=%d, img_h=%d\n", peer_address, peer_port, evhttp_request_get_type(request), uri, img_w, img_h);
     
     // do it
     _http_render_execute(request, img_w, img_h);
@@ -281,7 +283,7 @@
     ev_base = event_init();
 
     if (!ev_base)
-        die("event_init");
+        FATAL("event_init");
     
     // set up our render node pool
     remote_pool_init(&remote_pool);
@@ -323,9 +325,9 @@
 
     int pool_size = remote_pool_size(&remote_pool);
 
-    if (!pool_size) {
-        err_exit("No remote render nodes given");
-    }
+    if (!pool_size)
+        FATAL("No remote render nodes given");
+    
 
     printf("Registered %d render nodes in our pool\n", pool_size);
     
@@ -340,11 +342,11 @@
     struct evhttp *http_server = evhttp_new(ev_base);
 
     if (!http_server)
-        die("evhttp_new");
+        FATAL("evhttp_new");
     
     // bind to the correct interface/port
     if (evhttp_bind_socket(http_server, "0.0.0.0", 8117))
-        die("evhttp_bind_socket");
+        FATAL("evhttp_bind_socket");
     
     // add our http request handler
     evhttp_set_cb(http_server, "/render", &http_render, NULL);
@@ -354,7 +356,7 @@
     
     // run the libevent mainloop
     if (event_base_dispatch(ev_base))
-        die("event_dispatch");
+        WARNING("event_dispatch");
 
     printf("SHUTDOWN\n");