web_main.c
author Tero Marttila <terom@fixme.fi>
Sun, 01 Jun 2008 05:03:53 +0300
changeset 4 49edbdf9ebe7
parent 3 675be0a45157
child 6 4252c27f2b72
permissions -rw-r--r--
updated code to use libevent svn (with custom modifications, need to create a git repo for that)

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