--- 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");