author | Tero Marttila <terom@fixme.fi> |
Fri, 06 Jun 2008 18:35:46 +0300 | |
changeset 11 | 082bfaf38cf0 |
parent 8 | 4d38ccbeb93e |
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 <stdio.h> |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
2 |
#include <sys/types.h> |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
3 |
#include <arpa/inet.h> |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
4 |
#include <sys/socket.h> |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
5 |
#include <stdlib.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
|
6 |
#include <signal.h> |
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
|
7 |
#include <string.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
|
8 |
#include <unistd.h> |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
9 |
|
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
10 |
#include "common.h" |
2
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
1
diff
changeset
|
11 |
#include "render.h" |
69f8c0acaac7
working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
1
diff
changeset
|
12 |
#include "render_remote.h" |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
13 |
#include "render_local.h" |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
14 |
#include "mandelbrot.h" |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
15 |
|
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
|
16 |
void sigpipe_handler (int signal) { |
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
|
17 |
/* ignore */ |
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
|
18 |
fprintf(stderr, "SIGPIPE\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
|
19 |
} |
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 |
|
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 |
void sigpipe_ignore () { |
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 |
struct sigaction sigpipe_action; |
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
|
23 |
|
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
|
24 |
memset(&sigpipe_action, 0, sizeof(sigpipe_action)); |
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
|
25 |
sigpipe_action.sa_handler = SIG_IGN; |
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
|
26 |
|
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
|
27 |
if (sigaction(SIGPIPE, &sigpipe_action, 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
|
28 |
perr_exit("sigaction"); |
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
|
29 |
} |
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 |
|
1
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
31 |
int my_fread(FILE *fh, void *ptr, size_t size) { |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
32 |
int ret = fread(ptr, size, 1, fh); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
33 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
34 |
if (ret == 0) { |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
35 |
error("EOF"); |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
36 |
return 0; |
1
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
37 |
|
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
38 |
} else if (ret != 1) { |
1
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
39 |
perror("fread"); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
40 |
return 0; |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
41 |
} |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
42 |
|
1
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
43 |
return 1; |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
44 |
} |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
45 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
46 |
int read_byte (FILE *fh, u_int8_t *byte) { |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
47 |
return my_fread(fh, byte, sizeof(*byte)); |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
48 |
} |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
49 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
50 |
int read_int (FILE *fh, u_int32_t *i) { |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
51 |
if (!my_fread(fh, i, sizeof(*i))) |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
52 |
return 0; |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
53 |
|
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
54 |
*i = ntohl(*i); |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
55 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
56 |
return 1; |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
57 |
} |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
58 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
59 |
int read_double (FILE *fh, double *dbl) { |
1
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
60 |
if (!my_fread(fh, dbl, sizeof(*dbl))) |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
61 |
return 0; |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
62 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
63 |
return 1; |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
64 |
} |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
65 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
66 |
void handle_client (int sock) { |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
67 |
double duration; |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
68 |
struct render *ctx; |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
69 |
FILE *fh; |
1
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
70 |
u_int8_t mode; |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
71 |
u_int32_t img_w, img_h; |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
72 |
double x1, y1, x2, y2; |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
73 |
|
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
74 |
|
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
75 |
// open it as a FILE* |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
76 |
if (!(fh = fdopen(sock, "r+"))) |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
77 |
ERROR("fdopen"); |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
78 |
|
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
79 |
// read the parameters |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
80 |
if ( |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
81 |
!read_byte(fh, &mode) |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
82 |
|| !read_int(fh, &img_w) |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
83 |
|| !read_int(fh, &img_h) |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
84 |
|| !read_double(fh, &x1) |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
85 |
|| !read_double(fh, &y1) |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
86 |
|| !read_double(fh, &x2) |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
87 |
|| !read_double(fh, &y2) |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
88 |
) |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
89 |
ERROR("read_{byte,int,double}"); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
90 |
|
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
91 |
printf("RENDER: [%ux%u] (%f, %f) -> (%f, %f): ... ", img_w, img_h, x1, y1, x2, y2); |
6 | 92 |
fflush(stdout); |
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 |
// set up the render_ctx |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
95 |
if (!(ctx = render_alloc())) |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
96 |
ERROR("render_alloc"); |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
97 |
|
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
98 |
if (render_set_mode(ctx, mode)) |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
99 |
ERROR("render_set_mode"); |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
100 |
|
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
101 |
if (render_set_size(ctx, img_w, img_h)) |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
102 |
ERROR("render_set_size"); |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
103 |
|
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
104 |
if (render_region_raw(ctx, x1, y1, x2, y2)) |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
105 |
ERROR("render_region_raw"); |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
106 |
|
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
107 |
if (render_io_stream(ctx, fh)) |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
108 |
ERROR("render_io_stream"); |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
109 |
|
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
|
110 |
|
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
111 |
// render! |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
112 |
if (render_local(ctx, &duration)) |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
113 |
ERROR("render_local"); |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
114 |
|
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
115 |
printf("time=%fs\n", duration); |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
116 |
|
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
117 |
error: |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
118 |
// close the FILE* and socket |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
119 |
fclose(fh); |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
120 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
121 |
return; |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
122 |
} |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
123 |
|
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
|
124 |
|
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
125 |
int main (int argc, char** argv) { |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
126 |
int ssock, sock; |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
127 |
struct sockaddr_in addr; |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
128 |
socklen_t addr_len; |
8
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
129 |
|
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
130 |
// parse arguments |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
131 |
int opt; |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
132 |
const char *port_name = NULL; |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
133 |
unsigned short port; |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
134 |
|
8
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
135 |
while ((opt = getopt(argc, argv, "l:")) != -1) { |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
136 |
switch (opt) { |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
137 |
case 'l': |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
138 |
if (port_name) |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
139 |
ERROR("only specify -l once"); |
8
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
140 |
|
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
141 |
port_name = optarg; |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
142 |
break; |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
143 |
|
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
144 |
default: |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
145 |
err_exit("Usage: %s [-l port]", argv[0]); |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
146 |
} |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
147 |
} |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
148 |
|
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
149 |
// post-process arguments |
8
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
150 |
if (!port_name) |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
151 |
port_name = RENDER_PORT_NAME; |
4d38ccbeb93e
* fix Makefile to build in a (more) sensible way (still not really perfect)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
152 |
|
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
153 |
if (!(port = atoi(port_name))) |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
154 |
ERROR_FMT("invalid port: %s", port_name); |
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
|
155 |
|
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
156 |
// create the socket |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
157 |
if ((ssock = socket(PF_INET, SOCK_STREAM, 0)) == -1) |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
158 |
PERROR("socket"); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
159 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
160 |
addr.sin_family = AF_INET; |
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 |
addr.sin_port = htons(port); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
162 |
addr.sin_addr.s_addr = INADDR_ANY; |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
163 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
164 |
if (bind(ssock, (struct sockaddr *) &addr, sizeof(struct sockaddr_in)) == -1) |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
165 |
PERROR("bind"); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
166 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
167 |
if (listen(ssock, 1) == -1) |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
168 |
PERROR("listen"); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
169 |
|
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
170 |
// ignore sigpipe |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
171 |
sigpipe_ignore(); |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
172 |
|
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
173 |
// main accept loop |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
174 |
printf("RUN: %s:%hu\n", inet_ntoa(addr.sin_addr), ntohs(addr.sin_port)); |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
175 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
176 |
while (1) { |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
177 |
addr_len = sizeof(struct sockaddr_in); |
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 |
// accept a new client |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
180 |
if ((sock = accept(ssock, (struct sockaddr *) &addr, &addr_len)) == -1) |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
181 |
PERROR("accept"); |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
182 |
|
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
183 |
printf("ACCEPT: %s:%hu\n", inet_ntoa(addr.sin_addr), addr.sin_port); |
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 |
// handle their resquest |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
186 |
handle_client(sock); |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
187 |
} |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
188 |
|
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
189 |
error: |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
190 |
return 1; |
0
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
191 |
} |
5b010627d7ed
initial code, render_file(local+remote), render_node, web_main(local)
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
192 |