remote_node.c
author Tero Marttila <terom@fixme.fi>
Thu, 26 Jun 2008 01:32:56 +0300
changeset 23 31307efd7e78
parent 9 fb6632e6c1bb
child 26 6d615203d963
permissions -rw-r--r--
new render_threads module, make node_main use it, compiles, not yet tested

committer: Tero Marttila <terom@fixme.fi>
9
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
#include <string.h>
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
#include <sys/types.h>
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
#include <sys/socket.h>
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
#include <netdb.h>
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
#include <assert.h>
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
#include "common.h"
23
31307efd7e78 new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents: 9
diff changeset
     8
#include "render_net.h"
9
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
#include "remote_node.h"
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
int remote_node_init (struct remote_node *node_info, const char *hostname, const char *portname) {
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
    // zero out the struct
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
    memset(node_info, 0, sizeof(*node_info));
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
    // XXX: currently, this is hardcoded to one, but should be automagically discovered
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
    node_info->parallel_renders = 1;
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
    // lookup the host:port
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
    portname = portname ? portname : RENDER_PORT_NAME;
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
    
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
    // XXX: stat it and look for a PF_UNIX socket!
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
    
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
    // PF_INET
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
    
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
    struct addrinfo hints, *results, *result;
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
    memset(&hints, 0, sizeof(hints));
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
    hints.ai_socktype = SOCK_STREAM;
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
    hints.ai_flags = AI_ADDRCONFIG;     // attempt to get a working address as the first result
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
    int err = getaddrinfo(hostname, portname, &hints, &results);
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
    
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
    if (err != 0) {
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
        error("getaddrinfo: [%s].%s: %s", hostname, portname, gai_strerror(err));
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
        return -1;
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
    }
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
    
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
    assert(results != NULL); // we expect at least one result
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
    // XXX: only use the first result, discard the rest.
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
    result = results;
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
    memcpy(&node_info->addr, result->ai_addr, result->ai_addrlen);
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
    freeaddrinfo(results);
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
    
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
    // success!
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
    node_info->valid = 1;
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
    return 0;
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
}
fb6632e6c1bb two new modules, remote_node and remote_pool
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51