Exemplo n.º 1
0
bool msgpack_unpacker_init(msgpack_unpacker* mpac, size_t initial_buffer_size)
{
    char* buffer;
    void* ctx;
    msgpack_zone* z;

    if(initial_buffer_size < COUNTER_SIZE) {
        initial_buffer_size = COUNTER_SIZE;
    }

    buffer = (char*)malloc(initial_buffer_size);
    if(buffer == NULL) {
        return false;
    }

    ctx = malloc(sizeof(template_context));
    if(ctx == NULL) {
        free(buffer);
        return false;
    }

    z = msgpack_zone_new(MSGPACK_ZONE_CHUNK_SIZE);
    if(z == NULL) {
        free(ctx);
        free(buffer);
        return false;
    }

    mpac->buffer = buffer;
    mpac->used = COUNTER_SIZE;
    mpac->free = initial_buffer_size - mpac->used;
    mpac->off = COUNTER_SIZE;
    mpac->parsed = 0;
    mpac->last_parsed = 0;
    mpac->initial_buffer_size = initial_buffer_size;
    mpac->z = z;
    mpac->ctx = ctx;

    init_count(mpac->buffer);

    template_init(CTX_CAST(mpac->ctx));
    CTX_CAST(mpac->ctx)->user.z = mpac->z;
    CTX_CAST(mpac->ctx)->user.referenced = false;

    return true;
}
Exemplo n.º 2
0
void mod_destroy(void *ctx){
    CTX_CAST(syshc, ctx);
    if ( ctx ){
        if ( syshc->initd_dir ) 
            free(syshc->initd_dir);
        free(syshc);
    }
    return;
}
Exemplo n.º 3
0
int msgpack_unpacker_execute(msgpack_unpacker* mpac)
{
    size_t off = mpac->off;
    int ret = template_execute(CTX_CAST(mpac->ctx),
                               mpac->buffer, mpac->used, &mpac->off);
    if(mpac->off > off) {
        mpac->parsed += mpac->off - off;
    }
    return ret;
}
Exemplo n.º 4
0
void msgpack_unpacker_reset(msgpack_unpacker* mpac)
{
    template_init(CTX_CAST(mpac->ctx));

    /* Fluent Bit: refer to unpack.h for more details about this field */
    mpac->last_parsed = mpac->parsed;

    // don't reset referenced flag
    mpac->parsed = 0;
}
Exemplo n.º 5
0
msgpack_zone* msgpack_unpacker_release_zone(msgpack_unpacker* mpac)
{
    if(!msgpack_unpacker_flush_zone(mpac)) {
        return NULL;
    }

    msgpack_zone* r = msgpack_zone_new(MSGPACK_ZONE_CHUNK_SIZE);
    if(r == NULL) {
        return NULL;
    }

    msgpack_zone* old = mpac->z;
    mpac->z = r;
    CTX_CAST(mpac->ctx)->user.z = mpac->z;

    return old;
}
Exemplo n.º 6
0
int mod_handler(void *ctx, net_cmd_t cmd, packet_t *outp){
    int rc = MOD_OK;
    CTX_CAST(syshc, ctx);
    uint16_t out_rc;
    char *out_str = NULL;

    info("sys-cmds_handler in: cmd=%u, args='%s'\n",
        cmd->id, cmd->value ? cmd->value : "(null)");

    switch ( cmd->id ){
        case SYS_CMD_INITD:
            rc = sys_cmd_initd(syshc, cmd->value, &out_rc, &out_str);
            break;
        case SYS_CMD_ROUTE_INFO:
            rc = sys_cmd_route_info(syshc, cmd->value, &out_rc, &out_str);
            break;
        case SYS_CMD_IP_INFO:
            rc = sys_cmd_ip_info(syshc, cmd->value, &out_rc, &out_str);
            break;
        case SYS_CMD_DNS_INFO:
            rc = sys_cmd_dns_info(syshc, cmd->value, &out_rc, &out_str);
            break;
        default:
            err("sys-cmds_handler:  Unknown command '%u'\n", cmd->id);
            out_rc = NET_ERR_INVAL;
            if ( asprintf(&out_str, "Unknown command") == -1 ){
                err("asprintf: %s\n", strerror(errno));
                out_str = NULL;
            }
            break;
    }
    rc = create_net_cmd_packet(outp, out_rc, SYS_CMDS_MAGIC, out_str);
    if ( out_rc != NET_OK )
        err("sys-cmds_handler returned %u, %s\n",
            out_rc, out_str ? out_str : "-" );
    if ( out_str )
        free(out_str);
    return rc;
}
Exemplo n.º 7
0
void msgpack_unpacker_reset(msgpack_unpacker* mpac)
{
    template_init(CTX_CAST(mpac->ctx));
    // don't reset referenced flag
    mpac->parsed = 0;
}
Exemplo n.º 8
0
msgpack_object msgpack_unpacker_data(msgpack_unpacker* mpac)
{
    return template_data(CTX_CAST(mpac->ctx));
}