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); }
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; }
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; }