Пример #1
0
mq_stream_t *mq_stream_read_create(mq_context_t *mqc, mq_ongoing_t *on, char *host_id, int hid_len, mq_frame_t *fdata, mq_msg_t *remote_host, int to)
{
    mq_stream_t *mqs;
    int ptype;

    type_malloc_clear(mqs, mq_stream_t, 1);

    mqs->mqc = mqc;
    mqs->ongoing = on;
    mqs->type = MQS_READ;
    mqs->want_more = MQS_MORE;
    mqs->host_id = host_id;
    mqs->hid_len = hid_len;
    mqs->timeout = to;
    mqs->msid = atomic_global_counter();

    if (log_level() > 5) {
        char *str = mq_address_to_string(remote_host);
        log_printf(5, "remote_host=%s\n", str);
        if (str) free(str);
    }

    mq_get_frame(fdata, (void **)&(mqs->data), &(mqs->len));

    mqs->sid_len = mqs->data[MQS_HANDLE_SIZE_INDEX];
    type_malloc(mqs->stream_id, char, mqs->sid_len);
    memcpy(mqs->stream_id, &(mqs->data[MQS_HANDLE_INDEX]), mqs->sid_len);

    ptype = (mqs->data[MQS_PACK_INDEX] == MQS_PACK_COMPRESS) ? PACK_COMPRESS : PACK_NONE;
    log_printf(1, "msid=%d ptype=%d pack_type=%c\n", mqs->msid, ptype, mqs->data[MQS_PACK_INDEX]);
    mqs->pack = pack_create(ptype, PACK_READ, &(mqs->data[MQS_HEADER]), mqs->len - MQS_HEADER);

    log_printf(5, "data_len=%d more=%c MQS_HEADER=%d\n", mqs->len, mqs->data[MQS_STATE_INDEX], MQS_HEADER);

    unsigned char buffer[1024];
    int n = (50 > mqs->len) ? mqs->len : 50;
    log_printf(5, "printing 1st 50 bytes mqsbuf=%s\n", mq_id2str((char *)mqs->data, n, (char *)buffer, 1024));

    if (mqs->data[MQS_STATE_INDEX] == MQS_MORE) { //** More data coming so ask for it
        log_printf(5, "issuing read request\n");

        mqs->remote_host = mq_msg_new();
        mq_msg_append_msg(mqs->remote_host, remote_host, MQF_MSG_AUTO_FREE);

        if (log_level() >=15) {
            char *rhost = mq_address_to_string(mqs->remote_host);
            log_printf(15, "remote_host as string = %s\n", rhost);
            if (rhost) free(rhost);
        }

        log_printf(5, "before ongoing_inc\n");
        mq_ongoing_host_inc(mqs->ongoing, mqs->remote_host, mqs->host_id, mqs->hid_len, mqs->timeout);
        log_printf(5, "after ongoing_inc\n");
        mq_stream_read_request(mqs);
    }

    log_printf(5, "END\n");

    return(mqs);
}
Пример #2
0
void gop_reset(op_generic_t *gop)
{
    gop->base.id = atomic_global_counter();

    unlock_gop(gop);
    gop->base.cb = NULL;
    gop->base.state = 0;
    gop->base.status = op_failure_status;
    gop->base.started_execution = 0;
    gop->base.auto_destroy = 0;
}
Пример #3
0
void gop_init(op_generic_t *gop)
{
    pigeon_coop_hole_t pch;

    op_common_t *base = &(gop->base);

    type_memclear(gop, op_generic_t, 1);

    base->id = atomic_global_counter();

    log_printf(15, "gop ptr=%p gid=%d\n", gop, gop_id(gop));

    //** Get the control struct
    pch = reserve_pigeon_coop_hole(_gop_control);
    gop->base.ctl = (gop_control_t *)pigeon_coop_hole_data(&pch);
    gop->base.ctl->pch = pch;
}