web_main.c
author Tero Marttila <terom@fixme.fi>
Wed, 27 Aug 2008 21:30:32 +0300
changeset 41 540737bf6bac
parent 27 1e79b4cc8f1b
permissions -rw-r--r--
sending requests, and partial support for receiving -- incomplete, not tested
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
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    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
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    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
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    32
// do not do any userland socket output buffering
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    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
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    50
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    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
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    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
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    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
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    70
    
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    71
    // setup flow-control
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    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
a1e271de54c2 replace printf -> INFO
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    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
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    85
    
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    86
    // check if we are paused
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    87
    if (ctx->paused) {
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    88
        // we are waiting for the HTTP send buffer to clear, so keep the data in the render buffer
25
a1e271de54c2 replace printf -> INFO
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    89
        INFO("render [%p]: delaying data: %zu:%zu bytes", ctx, buf_size, ctx->bytes_sent);
6
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    90
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    91
        return;
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    92
    }
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    93
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    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
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    96
25
a1e271de54c2 replace printf -> INFO
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    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
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
    99
    // mark ourself as paused until httpd tells us to continue
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   100
    ctx->paused = 1;
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   101
    
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   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
a1e271de54c2 replace printf -> INFO
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   112
    INFO("render [%p]: done: %zu bytes", ctx, ctx->bytes_sent);
6
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   113
        
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   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
a1e271de54c2 replace printf -> INFO
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   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
a1e271de54c2 replace printf -> INFO
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   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
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   147
    struct render_request *ctx = arg;
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   148
    
25
a1e271de54c2 replace printf -> INFO
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   149
    INFO("render [%p]: http available for write", ctx);
6
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   150
    
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   151
    // unpause ourself
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   152
    ctx->paused = 0;
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   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
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   156
}
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   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
a1e271de54c2 replace printf -> INFO
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   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
a1e271de54c2 replace printf -> INFO
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   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
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   318
void log_null (int severity, const char *msg) {
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   319
    // ignore
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   320
}
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   321
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   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
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   333
    int opt;
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   334
    int enable_debug = 0;
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   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
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   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
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   352
            case 'd':
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   353
                // enable libevent debugging
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   354
                enable_debug = 1;
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   355
                break;
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   356
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   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
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   359
        
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   360
        }
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   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
a1e271de54c2 replace printf -> INFO
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   369
    INFO("Registered %d render nodes in our pool", pool_size);
6
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   370
    
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   371
    // per default it is enabled
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   372
    if (!enable_debug)
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   373
        event_set_log_callback(&log_null);
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   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
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   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
a1e271de54c2 replace printf -> INFO
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   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
a1e271de54c2 replace printf -> INFO
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   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
}