author | Tero Marttila <terom@fixme.fi> |
Thu, 28 Aug 2008 03:14:07 +0300 | |
changeset 47 | a5c09677ca6f |
parent 27 | 1e79b4cc8f1b |
permissions | -rw-r--r-- |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
1 |
#include <sys/types.h> |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
2 |
#include <sys/queue.h> |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
10
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> |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
5 |
#include <stdio.h> |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
6 |
#include <string.h> |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
7 |
#include <netinet/ip.h> |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
8 |
#include <arpa/inet.h> |
10
9daa832ab9c4
separate http query argument parsing into a new http module, and clean up unused headers from web_main.c
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
9 |
#include <signal.h> |
6 | 10 |
#include <unistd.h> |
15
e7f0697814dc
added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
11 |
#include <assert.h> |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
12 |
|
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
|
13 |
#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
|
14 |
#include <event2/event_compat.h> |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
15 |
#include <event2/http.h> |
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
|
16 |
#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
|
17 |
|
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
18 |
#include "common.h" |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
19 |
#include "http.h" |
18
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
20 |
#include "render_struct.h" |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
21 |
#include "render.h" |
8
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
22 |
#include "remote_node.h" |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
23 |
#include "remote_pool.h" |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
24 |
#include "render_remote.h" |
26
6d615203d963
support for PF_LOCAL, it works, but needs some more testing/cleanup old code
Tero Marttila <terom@fixme.fi>
parents:
25
diff
changeset
|
25 |
#include "config.h" |
27
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
26 |
#include "tile.h" |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
27 |
#include "static.h" |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
28 |
|
6 | 29 |
#define MIN_CHUNK_SIZE 4096 |
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
|
30 |
#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
|
31 |
|
6 | 32 |
// do not do any userland socket output buffering |
33 |
#define HTTP_BUFFER 0 |
|
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
|
34 |
|
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
|
35 |
// 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
|
36 |
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
|
37 |
|
8
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
38 |
// our render node pool |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
39 |
static struct remote_pool remote_pool; |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
40 |
|
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
41 |
// info on a render request |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
42 |
struct render_request { |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
43 |
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
|
44 |
|
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
45 |
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
|
46 |
|
19
d18606bb6f20
a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents:
18
diff
changeset
|
47 |
struct render_remote *render_info; |
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
|
48 |
|
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 |
size_t bytes_sent; |
6 | 50 |
|
51 |
int paused; |
|
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
52 |
}; |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
53 |
|
6 | 54 |
// cb func prototypes |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
55 |
static void _render_http_written (struct evhttp_request *request, void *arg); |
6 | 56 |
|
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
57 |
static void _render_cleanup (struct render_request *ctx) { |
15
e7f0697814dc
added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
58 |
if (ctx->render_info) |
19
d18606bb6f20
a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents:
18
diff
changeset
|
59 |
render_remote_free(ctx->render_info); |
15
e7f0697814dc
added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
60 |
|
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
|
61 |
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
|
62 |
} |
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
|
63 |
|
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
64 |
static void _render_sent (void *arg) { |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
65 |
struct render_request *ctx = arg; |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
66 |
|
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
67 |
// 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
|
68 |
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
|
69 |
evhttp_send_reply_start(ctx->http_request, HTTP_OK, "OK"); |
6 | 70 |
|
71 |
// setup flow-control |
|
72 |
evhttp_set_reply_notify(ctx->http_request, HTTP_BUFFER, &_render_http_written, ctx); |
|
2
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 |
ctx->headers_sent = 1; |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
75 |
|
25 | 76 |
INFO("render [%p]: sent headers", ctx); |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
77 |
} |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
78 |
|
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
79 |
static void _render_data (struct evbuffer *buf, void *arg) { |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
80 |
struct render_request *ctx = arg; |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
81 |
|
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
|
82 |
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
|
83 |
|
19
d18606bb6f20
a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents:
18
diff
changeset
|
84 |
assert(buf_size > 0); // shouldn't happen anymore with the new render_remote |
6 | 85 |
|
86 |
// check if we are paused |
|
87 |
if (ctx->paused) { |
|
88 |
// we are waiting for the HTTP send buffer to clear, so keep the data in the render buffer |
|
25 | 89 |
INFO("render [%p]: delaying data: %zu:%zu bytes", ctx, buf_size, ctx->bytes_sent); |
6 | 90 |
|
91 |
return; |
|
92 |
} |
|
93 |
||
94 |
// move chunk to http buffers |
|
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
95 |
evhttp_send_reply_chunk(ctx->http_request, buf); |
6 | 96 |
|
25 | 97 |
INFO("render [%p]: enqueued chunk: %zu/%zu bytes", ctx, buf_size, ctx->bytes_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
|
98 |
|
6 | 99 |
// mark ourself as paused until httpd tells us to continue |
100 |
ctx->paused = 1; |
|
101 |
||
102 |
// keep a tally of total sent bytes |
|
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
|
103 |
ctx->bytes_sent += buf_size; |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
104 |
} |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
105 |
|
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
106 |
static void _render_done (void *arg) { |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
107 |
struct render_request *ctx = arg; |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
108 |
|
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
109 |
// send end |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
110 |
evhttp_send_reply_end(ctx->http_request); |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
111 |
|
25 | 112 |
INFO("render [%p]: done: %zu bytes", ctx, ctx->bytes_sent); |
6 | 113 |
|
114 |
// the request is now done, 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
|
115 |
_render_cleanup(ctx); |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
116 |
} |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
117 |
|
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
118 |
static void _render_fail (void *arg) { |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
119 |
struct render_request *ctx = arg; |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
120 |
|
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
121 |
if (ctx->headers_sent) { |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
122 |
// 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
|
123 |
evhttp_send_reply_end(ctx->http_request); |
15
e7f0697814dc
added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
124 |
|
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
125 |
} else { |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
126 |
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
|
127 |
} |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
128 |
|
25 | 129 |
INFO("render [%p]: failed", ctx); |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
130 |
|
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
|
131 |
_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
|
132 |
} |
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
|
133 |
|
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
134 |
static 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
|
135 |
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
|
136 |
|
25 | 137 |
INFO("render [%p]: lost http connection", 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
|
138 |
|
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
|
139 |
// cancel |
19
d18606bb6f20
a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents:
18
diff
changeset
|
140 |
render_remote_cancel(ctx->render_info); |
15
e7f0697814dc
added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
141 |
ctx->render_info = 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
|
142 |
|
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
|
143 |
_render_cleanup(ctx); |
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 |
|
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
146 |
static void _render_http_written (struct evhttp_request *request, void *arg) { |
6 | 147 |
struct render_request *ctx = arg; |
148 |
||
25 | 149 |
INFO("render [%p]: http available for write", ctx); |
6 | 150 |
|
151 |
// unpause ourself |
|
152 |
ctx->paused = 0; |
|
153 |
||
15
e7f0697814dc
added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
154 |
// any data waiting in the buffer? |
19
d18606bb6f20
a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents:
18
diff
changeset
|
155 |
render_remote_flush(ctx->render_info); |
6 | 156 |
} |
157 |
||
27
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
158 |
static int _http_render_execute (struct evhttp_request *request, struct render *render) { |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
159 |
// render request context |
15
e7f0697814dc
added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
160 |
struct render_request *ctx = calloc(1, sizeof(struct render_request)); |
8
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
161 |
|
15
e7f0697814dc
added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
162 |
if (!ctx) |
8
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
163 |
ERROR("calloc"); |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
164 |
|
15
e7f0697814dc
added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
165 |
ctx->http_request = request; |
e7f0697814dc
added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
166 |
ctx->headers_sent = 0; |
e7f0697814dc
added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
167 |
ctx->bytes_sent = 0; |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
168 |
|
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
169 |
// initiate the remote render operation |
27
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
170 |
if ((ctx->render_info = render_remote(render, &remote_pool, |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
171 |
&_render_sent, |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
172 |
&_render_data, |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
173 |
&_render_done, |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
174 |
&_render_fail, |
15
e7f0697814dc
added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
175 |
ctx |
8
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
176 |
)) == NULL) |
19
d18606bb6f20
a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents:
18
diff
changeset
|
177 |
ERROR("render_remote"); |
15
e7f0697814dc
added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
178 |
|
e7f0697814dc
added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
179 |
// set chunk size |
19
d18606bb6f20
a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents:
18
diff
changeset
|
180 |
render_remote_set_recv(ctx->render_info, MIN_CHUNK_SIZE, OVERFLOW_BUFFER); |
8
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
181 |
|
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
|
182 |
// set close cb |
15
e7f0697814dc
added a rawio interface to render_remote, this broke render_multi.c but it needs a rewrite now anyways
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
183 |
evhttp_set_reply_abortcb(request, &_render_http_lost, ctx); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
184 |
|
25 | 185 |
INFO("render [%p]: started", ctx); |
8
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
186 |
|
27
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
187 |
return 0; |
8
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
188 |
|
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
189 |
error: |
27
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
190 |
_render_cleanup(ctx); |
8
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
191 |
|
27
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
192 |
return -1; |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
193 |
} |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
194 |
|
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
195 |
/* |
27
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
196 |
* HTTP request handlers |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
197 |
*/ |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
198 |
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
|
199 |
// 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
|
200 |
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
|
201 |
char *peer_address; |
27
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
202 |
unsigned short peer_port; |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
203 |
struct render render; |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
204 |
|
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
|
205 |
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
|
206 |
|
27
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
207 |
u_int32_t img_w = 256, img_h = 256; |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
208 |
|
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
209 |
// parse request arguments |
10
9daa832ab9c4
separate http query argument parsing into a new http module, and clean up unused headers from web_main.c
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
210 |
struct http_qarg qarg_spec[] = { |
27
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
211 |
{ "w", QARG_UINT32, &img_w, QARG_OPTIONAL }, |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
212 |
{ "h", QARG_UINT32, &img_h, QARG_OPTIONAL }, |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
213 |
{ NULL, QARG_END, NULL, 0 } |
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
|
214 |
}; |
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
|
215 |
|
27
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
216 |
if (http_qarg_parse(request, qarg_spec)) |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
217 |
goto error; |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
218 |
|
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
219 |
// build the render op |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
220 |
if ( |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
221 |
render_init(&render) |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
222 |
|| render_set_mode(&render, RENDER_PNG) |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
223 |
|| render_set_size(&render, img_w, img_h) |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
224 |
|| render_region_full(&render) |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
225 |
) |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
226 |
ERROR("render_*"); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
227 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
228 |
// request log |
27
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
229 |
INFO("REQ: [%s:%d] method=%d, uri=%s, img_w=%u, img_h=%u", 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
|
230 |
|
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
231 |
// do it |
27
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
232 |
if (_http_render_execute(request, &render)) |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
233 |
goto error; |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
234 |
|
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
235 |
return; |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
236 |
|
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
237 |
error: |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
238 |
evhttp_send_error(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
|
239 |
} |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
240 |
|
27
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
241 |
void http_tile (struct evhttp_request *request, void *arg) { |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
242 |
// gather some info about the request |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
243 |
const char *uri = evhttp_request_get_uri(request); |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
244 |
char *peer_address; |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
245 |
unsigned short peer_port; |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
246 |
struct render render; |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
247 |
|
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
248 |
evhttp_request_get_peer(request, &peer_address, &peer_port); |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
249 |
|
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
250 |
u_int32_t x, y, sw, sh; |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
251 |
u_int16_t z; |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
252 |
|
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
253 |
// parse request arguments |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
254 |
struct http_qarg qarg_spec[] = { |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
255 |
{ "x", QARG_UINT32, &x, QARG_REQUIRED }, |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
256 |
{ "y", QARG_UINT32, &y, QARG_REQUIRED }, |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
257 |
{ "z", QARG_UINT16, &z, QARG_REQUIRED }, |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
258 |
{ "sw", QARG_UINT32, &sw, QARG_REQUIRED }, |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
259 |
{ "sh", QARG_UINT32, &sh, QARG_REQUIRED }, |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
260 |
{ NULL, QARG_END, NULL, 0 } |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
261 |
}; |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
262 |
|
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
263 |
if (http_qarg_parse(request, qarg_spec)) |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
264 |
goto error; |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
265 |
|
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
266 |
// build the render op |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
267 |
if ( |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
268 |
render_init(&render) |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
269 |
|| render_set_mode(&render, RENDER_PNG) |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
270 |
|| render_set_tile(&render, sw, sh, x, y, z) |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
271 |
) |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
272 |
ERROR("render_*"); |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
273 |
|
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
274 |
// request log |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
275 |
INFO("REQ: [%s:%d] method=%d, uri=%s, pos=(%u, %u), zoom=%hu, screen=[%ux%u]", |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
276 |
peer_address, peer_port, evhttp_request_get_type(request), uri, x, y, z, sw, sh); |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
277 |
|
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
278 |
// do it |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
279 |
if (_http_render_execute(request, &render)) |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
280 |
goto error; |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
281 |
|
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
282 |
return; |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
283 |
|
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
284 |
error: |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
285 |
evhttp_send_error(request, 500, "Internal Server Error"); |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
286 |
} |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
287 |
|
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
288 |
/* |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
289 |
* Signal handling |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
290 |
*/ |
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
|
291 |
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
|
292 |
|
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
|
293 |
void sigint_handler (int signal, short event, void *arg) { |
25 | 294 |
INFO("SIGINT: shutting down"); |
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
|
295 |
|
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
|
296 |
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
|
297 |
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
|
298 |
} |
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
|
299 |
|
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
|
300 |
void signals_init () { |
8
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
301 |
// handle SIGINT |
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
|
302 |
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
|
303 |
signal_add(&ev_sigint, NULL); |
8
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
304 |
|
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
305 |
// ignore SIGPIPE |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
306 |
struct sigaction sigpipe; |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
307 |
memset(&sigpipe, 0, sizeof(sigpipe)); |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
308 |
|
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
309 |
sigpipe.sa_handler = SIG_IGN; |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
310 |
|
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
311 |
sigaction(SIGPIPE, &sigpipe, 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
|
312 |
} |
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
|
313 |
|
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
|
314 |
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
|
315 |
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
|
316 |
} |
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
|
317 |
|
6 | 318 |
void log_null (int severity, const char *msg) { |
319 |
// ignore |
|
320 |
} |
|
321 |
||
322 |
int main (int argc, char **argv) { |
|
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
|
323 |
// 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
|
324 |
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
|
325 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
326 |
if (!ev_base) |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
327 |
FATAL("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
|
328 |
|
8
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
329 |
// set up our render node pool |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
330 |
remote_pool_init(&remote_pool); |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
331 |
|
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
332 |
// process arguments |
6 | 333 |
int opt; |
334 |
int enable_debug = 0; |
|
335 |
||
8
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
336 |
while ((opt = getopt(argc, argv, "dp:r:")) != -1) { |
6 | 337 |
switch (opt) { |
8
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
338 |
case 'p': |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
339 |
// populate the pool from a file |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
340 |
if (remote_pool_load(&remote_pool, optarg)) |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
341 |
return 1; |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
342 |
|
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
343 |
break; |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
344 |
|
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
345 |
case 'r': |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
346 |
// add the given render node to the pool |
26
6d615203d963
support for PF_LOCAL, it works, but needs some more testing/cleanup old code
Tero Marttila <terom@fixme.fi>
parents:
25
diff
changeset
|
347 |
if (remote_pool_add(&remote_pool, optarg)) |
8
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
348 |
return 1; |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
349 |
|
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
350 |
break; |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
351 |
|
6 | 352 |
case 'd': |
353 |
// enable libevent debugging |
|
354 |
enable_debug = 1; |
|
355 |
break; |
|
356 |
||
357 |
default: |
|
8
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
358 |
err_exit("Usage: %s [-d] (-p pool_file | -r hostname[:port] | ...)", argv[0]); |
6 | 359 |
|
360 |
} |
|
361 |
} |
|
8
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
362 |
|
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
363 |
int pool_size = remote_pool_size(&remote_pool); |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
364 |
|
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
365 |
if (!pool_size) |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
366 |
FATAL("No remote render nodes given"); |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
367 |
|
8
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
368 |
|
25 | 369 |
INFO("Registered %d render nodes in our pool", pool_size); |
6 | 370 |
|
371 |
// per default it is enabled |
|
372 |
if (!enable_debug) |
|
373 |
event_set_log_callback(&log_null); |
|
374 |
||
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
|
375 |
// 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
|
376 |
signals_init(); |
6 | 377 |
|
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
|
378 |
// evhttp init |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
379 |
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
|
380 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
381 |
if (!http_server) |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
382 |
FATAL("evhttp_new"); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
383 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
384 |
// 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
|
385 |
if (evhttp_bind_socket(http_server, "0.0.0.0", 8117)) |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
386 |
FATAL("evhttp_bind_socket"); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
387 |
|
27
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
388 |
// add our http request handlers |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
389 |
evhttp_set_cb(http_server, "/render", &http_render, NULL); |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
390 |
evhttp_set_cb(http_server, "/tile", &http_tile, NULL); |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
391 |
|
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
392 |
// and then static files |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
393 |
struct static_file static_index; |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
394 |
struct static_dir static_files; |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
395 |
|
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
396 |
if (static_init(&static_index, http_server, "/", "static/index.html")) |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
397 |
FATAL("static_init: index.html"); |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
398 |
|
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
399 |
if (static_dir_init(&static_files, http_server, "/static", "static")) |
1e79b4cc8f1b
support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
400 |
FATAL("static_dir_init: static"); |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
401 |
|
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
402 |
// we shall now run |
25 | 403 |
INFO("RUN 0.0.0.0:8117"); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
404 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
405 |
// 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
|
406 |
if (event_base_dispatch(ev_base)) |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
407 |
WARNING("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
|
408 |
|
25 | 409 |
INFO("SHUTDOWN"); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
410 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
411 |
// 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
|
412 |
signals_deinit(); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
413 |
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
|
414 |
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
|
415 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
416 |
// successfull exit |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
417 |
return 0; |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
418 |
} |