author | Tero Marttila <terom@fixme.fi> |
Sun, 01 Jun 2008 05:03:53 +0300 | |
changeset 4 | 49edbdf9ebe7 |
parent 3 | 675be0a45157 |
child 6 | 4252c27f2b72 |
permissions | -rw-r--r-- |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
1 |
#include <sys/types.h> |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
2 |
#include <sys/queue.h> |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
3 |
#include <sys/socket.h> |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
4 |
#include <stdlib.h> |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
5 |
#include <stdio.h> |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
6 |
#include <string.h> |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
7 |
#include <netinet/ip.h> |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
8 |
#include <arpa/inet.h> |
3
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
9 |
#include <signal.h> |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
10 |
|
4
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
11 |
#include <event2/event.h> |
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
12 |
#include <event2/event_compat.h> |
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
13 |
#include <event2/http.h> |
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
14 |
#include <event2/event_struct.h> |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
15 |
|
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
16 |
#include "render.h" |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
17 |
#include "render_remote.h" |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
18 |
#include "common.h" |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
19 |
|
3
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
20 |
#define CHUNK_SIZE 4096 |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
21 |
#define OVERFLOW_BUFFER 4096 |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
22 |
|
4
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
23 |
|
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
24 |
// what event_base we're using |
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
25 |
static struct event_base *ev_base; |
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
26 |
|
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
27 |
// what render node to use |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
28 |
static struct sockaddr_storage render_node; |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
29 |
|
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
30 |
// info on a render request |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
31 |
struct render_request { |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
32 |
struct evhttp_request *http_request; |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
33 |
|
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
34 |
int headers_sent; |
3
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
35 |
|
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
36 |
struct remote_render_ctx *remote_ctx; |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
37 |
|
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
38 |
size_t bytes_sent; |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
39 |
}; |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
40 |
|
3
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
41 |
void _render_cleanup (struct render_request *ctx) { |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
42 |
// clean up |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
43 |
free(ctx); |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
44 |
} |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
45 |
|
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
46 |
void _render_sent (void *arg) { |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
47 |
struct render_request *ctx = arg; |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
48 |
|
3
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
49 |
// set chunk size |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
50 |
render_remote_set_chunk_size(ctx->remote_ctx, CHUNK_SIZE, OVERFLOW_BUFFER); |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
51 |
|
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
52 |
// send headers |
4
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
53 |
evhttp_add_header(evhttp_request_get_output_headers(ctx->http_request), "Content-Type", "image/png"); |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
54 |
evhttp_send_reply_start(ctx->http_request, HTTP_OK, "OK"); |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
55 |
|
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
56 |
ctx->headers_sent = 1; |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
57 |
|
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
58 |
printf("render [%p]: sent headers\n", ctx); |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
59 |
} |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
60 |
|
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
61 |
void _render_data (struct evbuffer *buf, void *arg) { |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
62 |
struct render_request *ctx = arg; |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
63 |
|
3
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
64 |
size_t buf_size = EVBUFFER_LENGTH(buf); |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
65 |
|
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
66 |
// send chunk |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
67 |
evhttp_send_reply_chunk(ctx->http_request, buf); |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
68 |
|
3
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
69 |
printf("render [%p]: enqueued chunk: %zu/%zu bytes\n", ctx, buf_size, ctx->bytes_sent); |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
70 |
|
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
71 |
ctx->bytes_sent += buf_size; |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
72 |
} |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
73 |
|
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
74 |
void _render_done (void *arg) { |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
75 |
struct render_request *ctx = arg; |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
76 |
|
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
77 |
// send end |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
78 |
evhttp_send_reply_end(ctx->http_request); |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
79 |
|
3
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
80 |
printf("render [%p]: done: %zu bytes\n", ctx, ctx->bytes_sent); |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
81 |
|
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
82 |
_render_cleanup(ctx); |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
83 |
} |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
84 |
|
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
85 |
void _render_fail (void *arg) { |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
86 |
struct render_request *ctx = arg; |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
87 |
|
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
88 |
if (ctx->headers_sent) { |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
89 |
// just terminate the PNG stream where it is |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
90 |
evhttp_send_reply_end(ctx->http_request); |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
91 |
} else { |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
92 |
evhttp_send_error(ctx->http_request, 500, "Internal Server Error"); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
93 |
} |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
94 |
|
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
95 |
printf("render [%p]: failed\n", ctx); |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
96 |
|
3
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
97 |
_render_cleanup(ctx); |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
98 |
} |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
99 |
|
4
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
100 |
void _render_http_lost (struct evhttp_request *req, void *arg) { |
3
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
101 |
struct render_request *ctx = arg; |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
102 |
|
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
103 |
printf("render [%p]: lost http connection\n", ctx); |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
104 |
|
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
105 |
// cancel |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
106 |
render_remote_cancel(ctx->remote_ctx); |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
107 |
|
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
108 |
_render_cleanup(ctx); |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
109 |
} |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
110 |
|
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
111 |
void _http_render_execute (struct evhttp_request *request, u_int32_t img_w, u_int32_t img_h) { |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
112 |
// render request context |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
113 |
struct render_request *req_ctx = calloc(1, sizeof(struct render_request)); |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
114 |
|
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
115 |
req_ctx->http_request = request; |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
116 |
req_ctx->headers_sent = 0; |
3
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
117 |
req_ctx->bytes_sent = 0; |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
118 |
|
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
119 |
// render context |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
120 |
render_t rend_ctx; |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
121 |
render_init(&rend_ctx, RENDER_PNG); |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
122 |
render_set_size(&rend_ctx, img_w, img_h); |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
123 |
render_region_full(&rend_ctx); |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
124 |
|
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
125 |
// initiate the remote render operation |
3
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
126 |
if ((req_ctx->remote_ctx = render_remote(&rend_ctx, &render_node, |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
127 |
&_render_sent, |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
128 |
&_render_data, |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
129 |
&_render_done, |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
130 |
&_render_fail, |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
131 |
req_ctx |
3
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
132 |
)) == NULL) { |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
133 |
free(req_ctx); |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
134 |
fprintf(stderr, "ERR: render_remote\n"); |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
135 |
return; |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
136 |
} |
3
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
137 |
|
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
138 |
// set close cb |
4
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
139 |
evhttp_set_reply_abortcb(request, &_render_http_lost, req_ctx); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
140 |
|
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
141 |
printf("render [%p]: started\n", req_ctx); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
142 |
} |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
143 |
|
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
144 |
/* |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
145 |
* HTTP request handler |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
146 |
*/ |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
147 |
void http_render (struct evhttp_request *request, void *arg) { |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
148 |
// gather some info about the request |
4
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
149 |
const char *uri = evhttp_request_get_uri(request); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
150 |
char *peer_address; |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
151 |
u_short peer_port; |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
152 |
|
4
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
153 |
evhttp_request_get_peer(request, &peer_address, &peer_port); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
154 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
155 |
// request arguments |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
156 |
u_int32_t img_w = 256, img_h = 256; |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
157 |
struct evkeyval *qarg; |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
158 |
struct evkeyvalq qargs; |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
159 |
|
4
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
160 |
/* |
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
161 |
enum query_arg_type { |
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
162 |
QARG_END, |
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
163 |
QARG_INT, |
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
164 |
}; |
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
165 |
|
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
166 |
struct query_arg { |
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
167 |
const char *qa_key; |
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
168 |
enum query_arg_type qa_type; |
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
169 |
void *qa_addr; |
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
170 |
} arg_def[] = { |
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
171 |
{ "w", QARG_INT, &img_w }, |
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
172 |
{ "h", QARG_INT, &img_h }, |
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
173 |
{ NULL, QARG_END, NULL } |
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
174 |
}; |
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
175 |
*/ |
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
176 |
|
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
177 |
evhttp_parse_query(uri, &qargs); |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
178 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
179 |
TAILQ_FOREACH(qarg, &qargs, next) { |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
180 |
if (strcmp(qarg->key, "w") == 0) |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
181 |
img_w = strtol(qarg->value, NULL, 10); |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
182 |
else if (strcmp(qarg->key, "h") == 0) |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
183 |
img_h = strtol(qarg->value, NULL, 10); |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
184 |
} |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
185 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
186 |
// clean up the qargs (badly named functions :< ) |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
187 |
evhttp_clear_headers(&qargs); |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
188 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
189 |
// request log |
4
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
190 |
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); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
191 |
|
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
192 |
// do it |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
193 |
_http_render_execute(request, img_w, img_h); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
194 |
} |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
195 |
|
3
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
196 |
struct event ev_sigint; |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
197 |
|
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
198 |
void sigint_handler (int signal, short event, void *arg) { |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
199 |
printf("SIGINT: shutting down\n"); |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
200 |
|
4
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
201 |
if (event_base_loopexit(ev_base, NULL)) |
3
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
202 |
err_exit("event_loopexit"); |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
203 |
} |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
204 |
|
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
205 |
void signals_init () { |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
206 |
signal_set(&ev_sigint, SIGINT, &sigint_handler, NULL); |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
207 |
signal_add(&ev_sigint, NULL); |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
208 |
} |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
209 |
|
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
210 |
void signals_deinit () { |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
211 |
signal_del(&ev_sigint); |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
212 |
} |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
213 |
|
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
214 |
int main (void) { |
3
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
215 |
// libevent init |
4
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
216 |
ev_base = event_init(); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
217 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
218 |
if (!ev_base) |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
219 |
die("event_init"); |
3
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
220 |
|
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
221 |
// handle signals |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
222 |
signals_init(); |
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
223 |
|
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
224 |
// evhttp init |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
225 |
struct evhttp *http_server = evhttp_new(ev_base); |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
226 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
227 |
if (!http_server) |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
228 |
die("evhttp_new"); |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
229 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
230 |
// bind to the correct interface/port |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
231 |
if (evhttp_bind_socket(http_server, "0.0.0.0", 8117)) |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
232 |
die("evhttp_bind_socket"); |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
233 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
234 |
// add our http request handler |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
235 |
evhttp_set_cb(http_server, "/render", &http_render, NULL); |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
236 |
|
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
237 |
// hack in our render node |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
238 |
struct sockaddr_in *render_node_addr = (struct sockaddr_in *) &render_node; |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
239 |
|
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
240 |
render_node_addr->sin_family = AF_INET; |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
241 |
render_node_addr->sin_port = htons(RENDER_PORT); |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
242 |
inet_aton("127.0.0.1", &render_node_addr->sin_addr); |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
243 |
|
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
244 |
// we shall now run |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
245 |
printf("RUN 0.0.0.0:8117\n"); |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
246 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
247 |
// run the libevent mainloop |
4
49edbdf9ebe7
updated code to use libevent svn (with custom modifications, need to create a git repo for that)
Tero Marttila <terom@fixme.fi>
parents:
3
diff
changeset
|
248 |
if (event_base_dispatch(ev_base)) |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
249 |
die("event_dispatch"); |
3
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
250 |
|
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
251 |
printf("SHUTDOWN\n"); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
252 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
253 |
// clean up |
3
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
254 |
signals_deinit(); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
255 |
evhttp_free(http_server); |
3
675be0a45157
working chunked-streaming of remote-rendered mandelbrots in web_main, next step will be flow control. Remote rendering doesn't compile in render_node.
Tero Marttila <terom@fixme.fi>
parents:
2
diff
changeset
|
256 |
event_base_free(ev_base); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
257 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
258 |
// successfull exit |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
259 |
return 0; |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
260 |
} |