render_remote.c
author Tero Marttila <terom@fixme.fi>
Sat, 30 Aug 2008 19:13:15 +0300
changeset 49 10c7dce1a043
parent 26 6d615203d963
permissions -rw-r--r--
autogenerate the memcache_test help output, and pipeline memcache requests
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
#include <stdlib.h>
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
#include <arpa/inet.h>
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
#include <unistd.h>
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
#include <fcntl.h>
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
#include <errno.h>
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
     6
#include <assert.h>
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
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
     8
#include <sys/un.h> /* XXX: for SUN_LEN */
6d615203d963 support for PF_LOCAL, it works, but needs some more testing/cleanup old code
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
     9
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
    10
#include <event2/event.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 <event2/event_struct.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
    12
#include <event2/bufferevent.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
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
#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
    15
#include "common.h"
6d615203d963 support for PF_LOCAL, it works, but needs some more testing/cleanup old code
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    16
#include "render_struct.h"
23
31307efd7e78 new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    17
#include "render_net.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
    18
#include "socket.h"
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
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
    20
struct render_remote {
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
    21
    // the socket fd
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
    22
    int sock;
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
    23
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
    24
    // the event/bufferevent
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
    25
    struct event ev_connect, ev_data;
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
    26
    struct bufferevent *bev_data;
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
23
31307efd7e78 new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    28
    // the command
31307efd7e78 new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    29
    struct render_cmd render_cmd;
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    30
    
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
    31
    // have we sent the command yet?
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
    32
    int cmd_sent;
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
    33
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
    34
    // have we received the EOF?
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
    35
    int have_eof;
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
    36
    
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
    37
    // has cb_done/cb_fail/cancel already been called?
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    38
    int alive;
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
    void (*cb_sent)(void *arg);
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
    void (*cb_data)(struct evbuffer *buf, void *arg);
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
    void (*cb_done)(void *arg);
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
    void (*cb_fail)(void *arg);
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
    void *cb_arg;
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
};
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
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
    48
// internal prototypes
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
    49
static void _render_remote_free (struct render_remote *ctx);
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
    50
static void _render_remote_do_data (struct render_remote *ctx);
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
    51
static void _render_remote_do_done (struct render_remote *ctx);
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
    52
static void _render_remote_do_fail (struct render_remote *ctx);
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
    53
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
    54
static void _render_remote_free (struct render_remote *ctx) {
16
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
    55
    assert(ctx && !ctx->alive);
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
    56
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
    57
    // free the bev_data
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->bev_data)
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
    59
        bufferevent_free(ctx->bev_data);
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    60
    
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
    61
    // and the events
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
    62
    if (event_pending(&ctx->ev_connect, EV_WRITE, NULL))
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
    63
        event_del(&ctx->ev_connect);
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
    64
    
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
    65
    if (event_pending(&ctx->ev_data, EV_READ, NULL))
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
    66
        event_del(&ctx->ev_data);
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
    67
        
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
    68
    // close the socket (ctx->ev_connect remains valid even after we're done with it...)
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
    69
    if (ctx->sock)
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
    70
        close(ctx->sock);
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
    
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
    // free the context structure
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    73
    free(ctx);
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
}
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
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
    76
static void _render_remote_do_data (struct render_remote *ctx) {
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
    77
    // if there's data in the buffer, call cb_data
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
    78
    if (evbuffer_get_length(bufferevent_get_input(ctx->bev_data))) {
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
    79
        ctx->cb_data(EVBUFFER_INPUT(ctx->bev_data), ctx->cb_arg);
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
    80
    }
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
    81
    
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
    82
    // if we got EOF on the connection and there's no data left in the buffer, call cb_done
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
    83
    if (ctx->have_eof && evbuffer_get_length(bufferevent_get_input(ctx->bev_data)) == 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
    84
        _render_remote_do_done(ctx);
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
    85
    }
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
    86
}
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
    87
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
    88
static void _render_remote_do_done (struct render_remote *ctx) {
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    89
    assert(ctx->alive);
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    90
    
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    91
    ctx->alive = 0;
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    92
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    93
    ctx->cb_done(ctx->cb_arg);
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    94
}
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    95
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
    96
static void _render_remote_do_fail (struct render_remote *ctx) {
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    97
    assert(ctx->alive);
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    98
    
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    99
    ctx->alive = 0;
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   100
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   101
    ctx->cb_fail(ctx->cb_arg);
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   102
}
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   103
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   104
static void _remote_write (struct bufferevent *bev, void *arg) {
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
   105
    struct render_remote *ctx = arg;
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   106
    
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
   107
    if (!ctx->cmd_sent) {
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
   108
        // write the render command
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
   109
        if (bufferevent_write(ctx->bev_data, &ctx->render_cmd, sizeof(ctx->render_cmd)))
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
   110
            ERROR("bufferevent_write");
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   111
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
   112
        // wait for it to be written out (we get called a second time)
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
   113
        ctx->cmd_sent = 1;
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
   114
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
   115
    } else {
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
   116
        // the write buffer was drained, so the render command was write():n
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
   117
        assert(ctx->cb_sent);
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
   118
        ctx->cb_sent(ctx->cb_arg);
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
   119
        ctx->cb_sent = NULL;
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
   120
        
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
   121
        // we don't care about EV_WRITE anymore
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
   122
        if (bufferevent_disable(ctx->bev_data, EV_WRITE))
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
   123
            ERROR("bufferevent_disable");
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
        
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
   125
        // are we buffered or raw?
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
   126
        if (ctx->cb_data) {
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
   127
            // start receiving data into our buffer
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
   128
            if (bufferevent_enable(ctx->bev_data, EV_READ))
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
   129
                ERROR("bufferevent_enable");
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
   130
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
   131
        } else {
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
   132
            assert(event_initialized(&ctx->ev_data));
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
   133
            
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
   134
            // enable the raw read event
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
   135
            if (event_add(&ctx->ev_data, NULL))
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
   136
                ERROR("event_add");
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
   137
        }
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
   138
    }
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
   139
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   140
    return;
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
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   142
error:
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
   143
    _render_remote_do_fail(ctx);
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   144
}
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   145
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   146
static void _remote_read (struct bufferevent *bev, void *arg) {
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
   147
    struct render_remote *ctx = arg;
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
   148
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
   149
    _render_remote_do_data(ctx);
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   150
}
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   151
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   152
static void _remote_error (struct bufferevent *bev, short what, void *arg) {
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
   153
    struct render_remote *ctx = arg;
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   154
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   155
    // OH NOES; WHAT DO WE DO!?
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   156
    
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   157
    if (what & EVBUFFER_EOF) {
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   158
        // great!
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
   159
        ctx->have_eof = 1;
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
   160
        
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
   161
        // flush any remaining data/call cb_send as needed
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
        _render_remote_do_data(ctx);
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   163
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   164
        return;
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   165
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   166
    } else if (what & EVBUFFER_ERROR) {
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   167
        // crap.
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   168
        PWARNING("EVBUFFER_ERROR");
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   169
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   170
    } else if (what & EVBUFFER_TIMEOUT) {
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   171
        // ah well
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   172
        WARNING("render_remote: timeout");
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   173
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   174
    } else {
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   175
        FATAL("weird bufferevent error code: 0x%02X", what);
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   176
    }
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   177
    
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   178
    // cb_fail + free
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
   179
    _render_remote_do_fail(ctx);
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   180
}
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   181
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
   182
/*
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
 * Do the initial IO-agnostic work to initialize the rendering process
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
   184
 */
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
   185
static struct render_remote *_render_remote_init (struct render *render, struct remote_pool *pool_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
   186
    struct render_remote *ctx;
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
   187
    struct remote_node *node_info;
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   188
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
   189
    // get a node from the pool
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
   190
    if (!(node_info = remote_pool_get(pool_info)))
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
   191
        ERROR("remote_pool_get");
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
   192
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
   193
    // alloc the remote render ctx
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
   194
    if (!(ctx = calloc(1, sizeof(*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
   195
        ERROR("calloc");
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
   196
        
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
   197
    // copy the relevant stuff from the render_ctx
11
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   198
    ctx->render_cmd.mode = render->mode;
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   199
    ctx->render_cmd.img_w = htonl(render->img_w);
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   200
    ctx->render_cmd.img_h = htonl(render->img_h);
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   201
    ctx->render_cmd.x1 = render->x1;
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   202
    ctx->render_cmd.y1 = render->y1;
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   203
    ctx->render_cmd.x2 = render->x2;
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   204
    ctx->render_cmd.y2 = render->y2;
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
   205
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
   206
    // create the socket
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
   207
    if ((ctx->sock = socket_connect_async(&node_info->endpoint, SOCK_STREAM)) == -1)
6d615203d963 support for PF_LOCAL, it works, but needs some more testing/cleanup old code
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
   208
        goto error;
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
   209
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
   210
    // return the raw ctx
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
   211
    return ctx;
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
   212
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
   213
error:
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
   214
    _render_remote_free(ctx);
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
   215
    return NULL;
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   216
}
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   217
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
   218
/*
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
   219
 * Raw unbuffered I/O mode
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
   220
 */
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
   221
struct render_remote *render_remote_rawio (
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
   222
        struct render *render,
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
   223
        struct remote_pool *pool_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
   224
        void (*cb_sent)(void *arg),
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
   225
        void (*cb_fail)(void *arg),
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
   226
        void (*cb_io_data)(evutil_socket_t, short, void*),
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
   227
        void *cb_arg
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
   228
) {
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
   229
    struct render_remote *ctx;
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
   230
    
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
   231
    // short-circuit error handling
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
   232
    if (!(ctx = _render_remote_init(render, pool_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
   233
        return NULL;
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
   234
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
   235
    // store the provided callback functions
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
   236
    ctx->cb_sent = cb_sent;
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
   237
    ctx->cb_fail = cb_fail;
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
   238
    ctx->cb_arg = cb_arg;
16
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   239
 
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   240
    // set up the custom EV_READ callback
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   241
    event_set(&ctx->ev_data, ctx->sock, EV_READ, cb_io_data, cb_arg);
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   242
   
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
   243
    // set up the write bufferevent
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
   244
    if ((ctx->bev_data = bufferevent_new(ctx->sock, NULL, &_remote_write, &_remote_error, ctx)) == NULL)
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
   245
        ERROR("bufferevent_new");
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
   246
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
   247
    // wait for it to connect
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
   248
    if (bufferevent_enable(ctx->bev_data, EV_WRITE))
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
   249
        ERROR("bufferevent_enable");
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
   250
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
   251
    // we are now alive
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
   252
    ctx->alive = 1;
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
   253
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
   254
    // success
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
   255
    return ctx;
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
   256
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
   257
error:
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
   258
    _render_remote_free(ctx);
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
   259
    return NULL;
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
   260
}   
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
   261
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
   262
/*
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
   263
 * Old buffered mode
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
   264
 */
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
   265
struct render_remote *render_remote (
11
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   266
        struct render *render,
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
   267
        struct remote_pool *pool_info,
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   268
        void (*cb_sent)(void *arg),
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   269
        void (*cb_data)(struct evbuffer *buf, void *arg),
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   270
        void (*cb_done)(void *arg),
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   271
        void (*cb_fail)(void *arg),
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   272
        void *cb_arg
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   273
) {    
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
   274
    struct render_remote *ctx;
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
   275
    
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
   276
    // short-circuit error handling
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
   277
    if (!(ctx = _render_remote_init(render, pool_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
   278
        return NULL;
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   279
    
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   280
    // store the provided callback functions
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   281
    ctx->cb_sent = cb_sent;
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   282
    ctx->cb_data = cb_data;
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   283
    ctx->cb_done = cb_done;
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   284
    ctx->cb_fail = cb_fail;
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   285
    ctx->cb_arg = cb_arg;
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   286
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
   287
    // set up the read/write bufferevent
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
   288
    if ((ctx->bev_data = bufferevent_new(ctx->sock, &_remote_read, &_remote_write, &_remote_error, ctx)) == NULL)
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
   289
        ERROR("bufferevent_new");
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   290
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
   291
    // wait for it to connect
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
   292
    if (bufferevent_enable(ctx->bev_data, EV_WRITE))
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
   293
        ERROR("bufferevent_enable");
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   294
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   295
    // we are now alive
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   296
    ctx->alive = 1;
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   297
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   298
    // success
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
   299
    return ctx;
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
   300
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
   301
error:
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
   302
    _render_remote_free(ctx);
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
   303
    return 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
   304
}
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
   305
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
   306
void render_remote_set_recv (struct render_remote *ctx, size_t recv_threshold, size_t unread_buffer) {
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
   307
    assert(ctx->bev_data);
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
   308
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
   309
    bufferevent_setwatermark(ctx->bev_data, EV_READ, recv_threshold, recv_threshold + unread_buffer);
6
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   310
}
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   311
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
   312
void render_remote_flush (struct render_remote *ctx) {
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
   313
    assert(ctx->bev_data);
6
4252c27f2b72 flow control for web_main.c
Tero Marttila <terom@fixme.fi>
parents: 4
diff changeset
   314
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
   315
    // call cb_data/cb_done as appropriate
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
   316
    _render_remote_do_data(ctx);
2
69f8c0acaac7 working web_main that uses render_remote
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   317
}
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
   318
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
   319
int render_remote_reschedule (struct render_remote *ctx) {
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
   320
    assert(event_initialized(&ctx->ev_data));
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
   321
    
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
   322
    // just reschedule it
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
   323
    if (event_add(&ctx->ev_data, NULL))
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
   324
        ERROR("event_add");
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
   325
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
   326
    // ok
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
   327
    return 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
   328
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
   329
error:
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
   330
    return -1;
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
   331
}
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
   332
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
   333
void render_remote_cancel (struct render_remote *ctx) {
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   334
    // we must be alive for this..
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   335
    assert(ctx->alive);
11
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   336
16
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   337
    ctx->alive = 0;
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   338
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   339
    _render_remote_free(ctx);
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   340
}
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   341
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   342
void render_remote_done (struct render_remote *ctx) {
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   343
    // we must be alive and non-buffered for this..
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   344
    assert(ctx->alive && event_initialized(&ctx->ev_data));
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   345
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   346
    ctx->alive = 0;
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   347
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
   348
    _render_remote_free(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
   349
}
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
   350
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
   351
void render_remote_free (struct render_remote *ctx) {
16
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   352
    // must be dead already
50995bbe442a render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
   353
    assert(!ctx->alive);
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
   354
    
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
   355
    _render_remote_free(ctx);
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
   356
}
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
   357