예제 #1
0
파일: zfl_config.c 프로젝트: dell-esdk/zfl
//  --------------------------------------------------------------------------
//  Creates a named 0MQ socket within a named device, and configures the
//  socket as specified in the configuration data.  Returns NULL if the
//  device or socket do not exist, or if there was an error configuring the
//  socket.
//
void *
zfl_config_socket (zfl_config_t *self, char *device, char *name, int type)
{
    assert (self);
    assert (device);
    assert (strneq (device, "context"));

    zfl_tree_t *tree = zfl_tree_locate (self->tree, device);
    if (!tree)
        return NULL;            //  No such device

    void *socket = zmq_socket (self->context, type);
    if (!socket)
        return NULL;            //  Can't create socket

    if (zfl_config_verbose (self))
        printf ("I: Configuring '%s' socket in '%s' device...\n", name, device);

    //  Find socket in device
    int rc = 0;
    tree = zfl_tree_locate (tree, name);
    if (tree) {
        tree = zfl_tree_child (tree);
        while (tree && rc == 0) {
            char *name = zfl_tree_name (tree);
            if (streq (name, "bind"))
                rc = zmq_bind (socket, zfl_tree_string (tree));
            else
            if (streq (name, "connect"))
                rc = zmq_connect (socket, zfl_tree_string (tree));
            else
            if (streq (name, "option"))
                rc = s_setsockopt (self, socket, tree);
            else
            if (self->verbose)
                printf ("W: ignoring socket setting '%s'\n", name);

            tree = zfl_tree_next (tree);
        }
    }
    else
    if (self->verbose)
        printf ("W: No configuration found for '%s'\n", name);

    if (rc) {
        printf ("E: configuration failed - %s\n", zmq_strerror (errno));
        zmq_close (socket);
        socket = NULL;
    }
    return socket;
}
예제 #2
0
파일: zfl_tree.c 프로젝트: thijsterlouw/zfl
//  --------------------------------------------------------------------------
//  Finds a node specified by path, consisting of name/name/...  If the node
//  exists, returns its value as a string, else returns default_value.
//
char *
zfl_tree_resolve (zfl_tree_t *self, char *path, char *default_value)
{
    zfl_tree_t *tree = zfl_tree_locate (self, path);
    if (tree)
        return zfl_tree_string (tree);
    else
        return default_value;
}
예제 #3
0
파일: zfl_config.c 프로젝트: dell-esdk/zfl
//  Process options settings
//
int
s_setsockopt (zfl_config_t *self, void *socket, zfl_tree_t *tree)
{
    int rc = 0;
    tree = zfl_tree_child (tree);
    while (tree && rc == 0) {
        char *name = zfl_tree_name (tree);
        char *value = zfl_tree_string (tree);
        if (streq (name, "hwm")) {
            uint64_t optvalue = atoi (value);
            rc = zmq_setsockopt (socket, ZMQ_HWM, &optvalue, sizeof (optvalue));
        }
        else
        if (streq (name, "swap")) {
            int64_t optvalue = atoi (value);
            rc = zmq_setsockopt (socket, ZMQ_SWAP, &optvalue, sizeof (optvalue));
        }
        else
        if (streq (name, "affinity")) {
            uint64_t optvalue = atoi (value);
            rc = zmq_setsockopt (socket, ZMQ_AFFINITY, &optvalue, sizeof (optvalue));
        }
        else
        if (streq (name, "identity"))
            rc = zmq_setsockopt (socket, ZMQ_IDENTITY, value, strlen (value));
        else
        if (streq (name, "subscribe"))
            rc = zmq_setsockopt (socket, ZMQ_SUBSCRIBE, value, strlen (value));
        else
        if (streq (name, "rate")) {
            int64_t optvalue = atoi (value);
            rc = zmq_setsockopt (socket, ZMQ_RATE, &optvalue, sizeof (optvalue));
        }
        else
        if (streq (name, "recovery_ivl")) {
            int64_t optvalue = atoi (value);
            rc = zmq_setsockopt (socket, ZMQ_RECOVERY_IVL, &optvalue, sizeof (optvalue));
        }
        else
        if (streq (name, "mcast_loop")) {
            int64_t optvalue = atoi (value);
            rc = zmq_setsockopt (socket, ZMQ_MCAST_LOOP, &optvalue, sizeof (optvalue));
        }
        else
        if (streq (name, "sndbuf")) {
            uint64_t optvalue = atoi (value);
            rc = zmq_setsockopt (socket, ZMQ_SNDBUF, &optvalue, sizeof (optvalue));
        }
        else
        if (streq (name, "rcvbuf")) {
            uint64_t optvalue = atoi (value);
            rc = zmq_setsockopt (socket, ZMQ_RCVBUF, &optvalue, sizeof (optvalue));
        }
        else
        if (self->verbose)
            printf ("W: ignoring socket option '%s'\n", name);

        tree = zfl_tree_next (tree);
    }
    return rc;
}