示例#1
0
void prepare(msgpack_sbuffer* sbuf) {
    msgpack_packer pk;

    msgpack_packer_init(&pk, sbuf, msgpack_sbuffer_write);
    /* 1st object */
    msgpack_pack_array(&pk, 3);
    msgpack_pack_int(&pk, 1);
    msgpack_pack_true(&pk);
    msgpack_pack_str(&pk, 7);
    msgpack_pack_str_body(&pk, "example", 7);
    /* 2nd object */
    msgpack_pack_str(&pk, 6);
    msgpack_pack_str_body(&pk, "second", 6);
    /* 3rd object */
    msgpack_pack_array(&pk, 2);
    msgpack_pack_int(&pk, 42);
    msgpack_pack_false(&pk);
}
示例#2
0
int UserInfo_to_msgpack(msgpack_packer *pk, UserInfo *arg) {
    msgpack_pack_array(pk, 3);
    msgpack_pack_int(pk, arg->uid);
    if (!arg->name) {
        msgpack_pack_nil(pk);
    } else {
        if (arg->name) {
            size_t _l = strlen(arg->name);
            msgpack_pack_raw(pk, _l);
            msgpack_pack_raw_body(pk, arg->name, _l);
        } else {
            msgpack_pack_nil(pk);
        }
    }
    msgpack_pack_int(pk, arg->flags);

    return 0;
}
示例#3
0
文件: client.c 项目: HVF/Maneater
int master_finder(zloop_t *loop, zmq_pollitem_t *item, void *arg) {
    maneater_client *cli = (maneater_client *)arg;
    zframe_t *out;

    MSG_DOPACK(
        msgpack_pack_int(pk, MID_WANT_MASTER);
        MSG_PACK_STR(pk, cli->sessid);
        MSG_PACK_STR(pk, cli->myhostid);
        out = zframe_new(buf->data, buf->size);
    );
示例#4
0
void
paxos_header_pack(struct yakyak *yy, struct paxos_header *hdr)
{
  msgpack_pack_array(yy->pk, 5);
  paxos_uuid_pack(yy, &hdr->ph_session);
  msgpack_pack_paxid(yy->pk, hdr->ph_ballot.id);
  msgpack_pack_paxid(yy->pk, hdr->ph_ballot.gen);
  msgpack_pack_int(yy->pk, hdr->ph_opcode);
  msgpack_pack_paxid(yy->pk, hdr->ph_inum);
}
示例#5
0
TEST(pack, num)
{
    msgpack_sbuffer* sbuf = msgpack_sbuffer_new();
    msgpack_packer* pk = msgpack_packer_new(sbuf, msgpack_sbuffer_write);

    EXPECT_EQ(0, msgpack_pack_int(pk, 1));

    msgpack_sbuffer_free(sbuf);
    msgpack_packer_free(pk);
}
示例#6
0
void send_trigger(mdcli_t * client, char * target_worker, char * rule_id,  int ival, char * user_id) {
  zclock_log("activating trigger\ntarget=%s\nvalue=%d\nuser=%s",
             target_worker, ival, user_id);
  struct timeval tval;
  gettimeofday(&tval, NULL);
  // make a messagepack hash
  msgpack_sbuffer * buffer =  msgpack_sbuffer_new();
  msgpack_packer* pk = msgpack_packer_new(buffer, msgpack_sbuffer_write);
  // value chunk
  msgpack_pack_map(pk, 3);
  // key
  msgpack_pack_raw(pk, 5);
  msgpack_pack_raw_body(pk, "value", 5);
  // value
  msgpack_pack_int(pk, ival);

  //time chunk

  // key
  msgpack_pack_raw(pk, 5);
  msgpack_pack_raw_body(pk, "epoch", 5);
  // time
  msgpack_pack_int(pk, tval.tv_sec);

  msgpack_pack_raw(pk, 6);
  msgpack_pack_raw_body(pk, "micros", 6);
  // time
  msgpack_pack_int(pk, tval.tv_usec);


  zmsg_t * msg = zmsg_new();
  // really, the user_id should be being added by a
  // gatekeeper, not the block itself, or it's a security
  // hole. will do for now FIX
  
  zmsg_pushstr(msg, user_id);
  // zmsg_pushmem(msg, &trigger.line_id, sizeof(int));

  zmsg_pushmem(msg, buffer->data, buffer->size);
  zmsg_pushstr(msg, rule_id);
  zmsg_pushstr(msg, "DoAction");
  mdcli_send(client, target_worker, &msg);
}
示例#7
0
void receiver_init(receiver *r) {
    msgpack_packer pk;

    msgpack_sbuffer_init(&r->sbuf);
    msgpack_packer_init(&pk, &r->sbuf, msgpack_sbuffer_write);
    /* 1st object */
    msgpack_pack_array(&pk, 3);
    msgpack_pack_int(&pk, 1);
    msgpack_pack_true(&pk);
    msgpack_pack_str(&pk, 7);
    msgpack_pack_str_body(&pk, "example", 7);
    /* 2nd object */
    msgpack_pack_str(&pk, 6);
    msgpack_pack_str_body(&pk, "second", 6);
    /* 3rd object */
    msgpack_pack_array(&pk, 2);
    msgpack_pack_int(&pk, 42);
    msgpack_pack_false(&pk);
    r->rest = r->sbuf.size;
}
示例#8
0
void report_cert(int err, struct pl*name, struct pl*uri, void*arg)
{
    msgpack_packer *pk = arg;
    msgpack_pack_array(pk, err ? 2 : 4);
    push_cstr("cert.ok");
    msgpack_pack_int(pk, err);
    if(err==0) {
        push_pl((*name));
        push_pl((*uri));
    }
}
示例#9
0
static void pack_hash_event(rbkit_hash_event *event, msgpack_packer *packer) {
  VALUE hash;
  int size;
  msgpack_pack_map(packer, 3);
  pack_event_header(packer, event->event_header.event_type);
  hash = event->hash;
  size = (int)RHASH_SIZE(hash);
  msgpack_pack_int(packer, rbkit_message_field_payload);
  msgpack_pack_map(packer, size);
  rb_hash_foreach(hash, hash_pack_iterator, (VALUE)packer);
}
示例#10
0
void monitor_pack_draw_queue(void)
{
  unsigned int i;

  if(!draw_pk) {
    draw_pk = monitor_method_new("DISPLAY_DRAW", draw_sbuf);
  }
  else {
    monitor_method_add("DISPLAY_DRAW", draw_pk);
  }

  msgpack_pack_array(draw_pk, draw_queue_n);
  for(i = 0; i < draw_queue_n; i++) {
    msgpack_pack_array(draw_pk, 3);
    msgpack_pack_int(draw_pk, draw_queue[i].x);
    msgpack_pack_int(draw_pk, draw_queue[i].y);
    msgpack_pack_int(draw_pk, draw_queue[i].color);
  }

  draw_queue_n = 0;
}
示例#11
0
/**
 * Send [type(2), method, params]
 * Returns false if the params could not be serialized
 */
bool MsgpackIODevice::sendNotification(const QByteArray& method, const QVariantList& params)
{
	if (!checkVariant(params)) {
		return false;
	}

	msgpack_pack_array(&m_pk, 3);
	msgpack_pack_int(&m_pk, 2);
	send(method);
	send(params);
	return true;
}
示例#12
0
static FilterReplyResult filter_apply(FilterReplyResultBase * const rb,
                                      const struct sockaddr_storage * const sa_local,
                                      const socklen_t sa_local_len,
                                      struct msghdr *msg, size_t * const nbyte,
                                      int * const flags)
{
    msgpack_packer * const msgpack_packer = rb->filter->msgpack_packer;
    if (rb->pre != false) {
        filter_before_apply(rb, 2U, "recvmsg",
                            sa_local, sa_local_len, NULL, (socklen_t) 0U);
    } else {
        filter_before_apply(rb, 2U, "recvmsg",
                            sa_local, sa_local_len,
                            msg->msg_name, msg->msg_namelen);
    }
    msgpack_pack_mstring(msgpack_packer, "flags");
    msgpack_pack_int(msgpack_packer, *flags);
    
    if (rb->pre != false) {
        msgpack_pack_mstring(msgpack_packer, "nbyte");
        msgpack_pack_unsigned_long(msgpack_packer, *nbyte);
    } else if (*rb->ret <= 0) {
        msgpack_pack_mstring(msgpack_packer, "data");
        msgpack_pack_nil(msgpack_packer);
    } else {
        assert((size_t) *rb->ret <= *nbyte);
        msgpack_pack_mstring(msgpack_packer, "data");
        msgpack_pack_raw(msgpack_packer, *nbyte);
        size_t data_remaining = *nbyte;
        size_t read_from_vec;
        struct iovec * const vecs = msg->msg_iov;
        size_t i_vecs = 0U;
        while (i_vecs < (size_t) msg->msg_iovlen &&
               data_remaining > (size_t) 0U) {
            if (data_remaining < vecs[i_vecs].iov_len) {
                read_from_vec = data_remaining;
            } else {
                read_from_vec = vecs[i_vecs].iov_len;
            }
            assert(data_remaining >= read_from_vec);
            assert(vecs[i_vecs].iov_len >= read_from_vec);
            msgpack_pack_raw_body(msgpack_packer, vecs[i_vecs].iov_base,
                                  read_from_vec);
            data_remaining -= read_from_vec;
            i_vecs++;
        }
    }
    if (filter_send_message(rb->filter) != 0) {
        return FILTER_REPLY_RESULT_ERROR;
    }
    return filter_parse_reply(rb, msg, flags);
}
示例#13
0
void report_lp(int err, struct pl*token, void*arg)
{
    msgpack_packer *pk = arg;
    if(err ==1 ) {
        msgpack_pack_array(pk, 3);
    } else {
        msgpack_pack_array(pk, 2);
    }
    push_cstr("api.login_phone");
    msgpack_pack_int(pk, err);
    if(err==1)
        push_pl((*token));
}
示例#14
0
void report_call(struct tcsipcall* call, void *arg) {
    int cdir, cstate, ts;
    struct sip_addr *remote;
    char *ckey = tcsipcall_ckey(call);

    msgpack_packer *pk = arg;
    msgpack_pack_array(pk, 7);
    push_cstr("sip.call.add");

    push_cstr_len(ckey);

    tcsipcall_dirs(call, &cdir, &cstate, NULL, &ts);

    msgpack_pack_int(pk, cdir);
    msgpack_pack_int(pk, cstate);
    msgpack_pack_int(pk, ts);

    tcop_lr((void*)call, NULL, &remote);
    push_pl(remote->dname);
    push_pl(remote->uri.user);

}
示例#15
0
TEST(unpack, sequence)
{
    msgpack_sbuffer* sbuf = msgpack_sbuffer_new();
    msgpack_packer* pk = msgpack_packer_new(sbuf, msgpack_sbuffer_write);

    EXPECT_EQ(0, msgpack_pack_int(pk, 1));
    EXPECT_EQ(0, msgpack_pack_int(pk, 2));
    EXPECT_EQ(0, msgpack_pack_int(pk, 3));

    msgpack_packer_free(pk);

    msgpack_unpack_return success;
    size_t offset = 0;

    msgpack_unpacked msg;
    msgpack_unpacked_init(&msg);

    success = msgpack_unpack_next(&msg, sbuf->data, sbuf->size, &offset);
    EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, success);
    EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, msg.data.type);
    EXPECT_EQ(1u, msg.data.via.u64);

    success = msgpack_unpack_next(&msg, sbuf->data, sbuf->size, &offset);
    EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, success);
    EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, msg.data.type);
    EXPECT_EQ(2u, msg.data.via.u64);

    success = msgpack_unpack_next(&msg, sbuf->data, sbuf->size, &offset);
    EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, success);
    EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, msg.data.type);
    EXPECT_EQ(3u, msg.data.via.u64);

    success = msgpack_unpack_next(&msg, sbuf->data, sbuf->size, &offset);
    EXPECT_EQ(MSGPACK_UNPACK_CONTINUE, success);

    msgpack_sbuffer_free(sbuf);
    msgpack_unpacked_destroy(&msg);
}
示例#16
0
void init_unpack_array(msgpack_object_type type)
{
  size_t off = 0;

  msgpack_sbuffer sbuf;
  msgpack_sbuffer_init(&sbuf);
  msgpack_packer pk;
  msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);

  msgpack_pack_array(&pk, 3);
  if (type == MSGPACK_OBJECT_NIL) {
    msgpack_pack_nil(&pk);
  } else if (type == MSGPACK_OBJECT_POSITIVE_INTEGER) {
    msgpack_pack_int(&pk, 1);
  } else if (type == MSGPACK_OBJECT_BOOLEAN) {
    msgpack_pack_true(&pk);
  } else if (type == MSGPACK_OBJECT_MAP) {
    msgpack_pack_map(&pk, 1);
  } else if (type == MSGPACK_OBJECT_ARRAY) {
    msgpack_pack_array(&pk, 3);
    msgpack_pack_int(&pk, 1);
    msgpack_pack_int(&pk, 1);
    msgpack_pack_int(&pk, 1);
  } else if (type == MSGPACK_OBJECT_FLOAT) {
    msgpack_pack_double(&pk, 1.2);
  }
  msgpack_pack_true(&pk);
  msgpack_pack_str(&pk, 7);
  msgpack_pack_str_body(&pk, "example", 7);

  msgpack_unpacked result;

  msgpack_unpacked_init(&result);
  msgpack_unpack_next(&result, sbuf.data, sbuf.size, &off);
  msgpack_sbuffer_destroy(&sbuf);
  deserialized = result.data;
}
示例#17
0
void report_ctlist(int err, struct list*ctlist, void*arg)
{
    int cnt;
    msgpack_packer *pk = arg;
    msgpack_pack_array(pk, err ? 2 : 3);
    push_cstr("contacts.res");
    msgpack_pack_int(pk, err);
    if(err) return;

    cnt = list_count(ctlist);
    msgpack_pack_array(pk, cnt);

    list_apply(ctlist, true, write_contact_el, arg);

}
示例#18
0
void report_hist(int err, char *idx, struct list*hlist, void*arg)
{
    int cnt;
    msgpack_packer *pk = arg;
    msgpack_pack_array(pk, err ? 2 : 4);
    push_cstr("hist.res");
    msgpack_pack_int(pk, err);
    if(err) return;

    push_cstr_len(idx);
    cnt = list_count(hlist);
    msgpack_pack_array(pk, cnt);

    list_apply(hlist, true, write_history_el, arg);
}
示例#19
0
void publish_output(process_t *process, struct proc_data *procdata,
                    const char *ioname, const char *data, ssize_t length) {
  /* TODO(sissel): move this to a separate file for 'event' streaming */
  zmq_msg_t event;
  int rc;
  size_t msgsize;
  program_t *program = pn_proc_program(process);
  procnanny_t *pn = program->data;

  fprintf(stdout, "%s[%d]: (%d bytes) %.*s\n", pn_proc_program(process)->name,
          pn_proc_instance(process), length, length, data);

  /* Fields:
   *  - data (the string read)
   *  - program name
   *  - process instance
   *  - stdout or stderr
   */

  msgpack_sbuffer *buffer = msgpack_sbuffer_new();
  msgpack_packer *output_msg = msgpack_packer_new(buffer, msgpack_sbuffer_write);

  msgpack_pack_map(output_msg, 5);

  /* "event" => "data" */
  msgpack_pack_string(output_msg, "event", -1);
  msgpack_pack_string(output_msg, "data", -1);

  msgpack_pack_string(output_msg, "program", -1);
  msgpack_pack_string(output_msg, program->name, program->name_len);

  msgpack_pack_string(output_msg, "instance", -1);
  msgpack_pack_int(output_msg, process->instance);

  msgpack_pack_string(output_msg, "source", -1);
  msgpack_pack_string(output_msg, ioname, -1);

  msgpack_pack_string(output_msg, "data", -1);
  msgpack_pack_string(output_msg, data, length);

  zmq_msg_init_data(&event, buffer->data, buffer->size, free_msgpack_buffer, buffer); 
  zmq_send(pn->eventsocket, &event, 0);
  zmq_msg_close(&event);

  msgpack_packer_free(output_msg);
} /* publish_output */
示例#20
0
void report_signup(int err, struct list*elist, void *arg)
{
    msgpack_packer *pk = arg;
    if(err == 1) {
        msgpack_pack_array(pk, 3);
    } else {
        msgpack_pack_array(pk, 2);
    }

    push_cstr("api.signup");
    msgpack_pack_int(pk, err);

    if(err==1) {
        msgpack_pack_array(pk, list_count(elist));
        list_apply(elist, true, write_field_err, arg);
    }
}
示例#21
0
static void pack_cpu_sample_event(rbkit_cpu_sample_event *event, msgpack_packer *packer) {
  rbkit_cpu_sample *sample;
  size_t count;

  msgpack_pack_map(packer, 3);
  sample = event->sample;

  // Keys 1 & 2 - event type and timestamp
  pack_event_header(packer, event->event_header.event_type);

  // Key 3 : Payload
  msgpack_pack_int(packer, rbkit_message_field_payload);
  // Value 3: Array of samples
  msgpack_pack_array(packer, sample->frame_count);

  for(count = 0; count != sample->frame_count; count++){
    msgpack_pack_map(packer, 6);

    // method_name
    msgpack_pack_int(packer, rbkit_message_field_method_name);
    pack_string(packer, sample->frames[count].method_name);

    // label
    msgpack_pack_int(packer, rbkit_message_field_label);
    pack_string(packer, sample->frames[count].label);

    // file
    msgpack_pack_int(packer, rbkit_message_field_file);
    pack_string(packer, sample->frames[count].file);

    // line
    msgpack_pack_int(packer, rbkit_message_field_line);
    msgpack_pack_unsigned_long(packer, sample->frames[count].line);

    // singleton_method
    msgpack_pack_int(packer, rbkit_message_field_singleton_method);
    msgpack_pack_int(packer, sample->frames[count].is_singleton_method);

    // thread_od
    msgpack_pack_int(packer, rbkit_message_field_thread_id);
    msgpack_pack_unsigned_long(packer, sample->frames[count].thread_id);
  }
}
示例#22
0
TEST(pack, insufficient)
{
    msgpack_sbuffer* sbuf = msgpack_sbuffer_new();
    msgpack_packer* pk = msgpack_packer_new(sbuf, msgpack_sbuffer_write);

    EXPECT_EQ(0, msgpack_pack_int(pk, 255)); // uint8 (2bytes)

    msgpack_unpack_return success;
    size_t offset = 0;

    msgpack_unpacked msg;
    msgpack_unpacked_init(&msg);

    success = msgpack_unpack_next(&msg, sbuf->data, 1, &offset);
    EXPECT_EQ(MSGPACK_UNPACK_CONTINUE, success);
    EXPECT_EQ(0u, offset);

    msgpack_unpacked_destroy(&msg);

    msgpack_sbuffer_free(sbuf);
    msgpack_packer_free(pk);
}
示例#23
0
static void pack_object_space_dump_event(rbkit_object_space_dump_event *event, msgpack_packer *packer) {
  size_t objects_in_batch;
  size_t objects_left;
  size_t count = 0;
  size_t i = 0;
  rbkit_object_dump_page *prev;
  rbkit_object_data *data;
  rbkit_object_dump_page * page;

  msgpack_pack_map(packer, 5);
  pack_event_header(packer, event->event_header.event_type);

  // Incrementing integer holding the correlation_id
  // indicating the event which the message belongs to
  msgpack_pack_int(packer, rbkit_message_field_correlation_id);
  msgpack_pack_int(packer, event->correlation_id);
  
  // dump total number of messages in batch
  msgpack_pack_int(packer, rbkit_message_field_complete_message_count);
  msgpack_pack_unsigned_long(packer, event->object_count);

  msgpack_pack_int(packer, rbkit_message_field_payload);

  // Find the batch size
  objects_in_batch = MAX_OBJECT_DUMPS_IN_MESSAGE ;
  objects_left = event->object_count - event->packed_objects;
  if(objects_left < MAX_OBJECT_DUMPS_IN_MESSAGE)
    objects_in_batch = objects_left;

  // Set size of array to hold all objects
  msgpack_pack_array(packer, objects_in_batch);

  // Iterate through all object data
  while(count < objects_in_batch) {
    if(event->current_page_index == RBKIT_OBJECT_DUMP_PAGE_SIZE) {
      event->current_page_index = 0;
      prev = event->current_page;
      event->current_page = event->current_page->next;
      free(prev);
    }
    page = event->current_page;
    i = event->current_page_index;
    data = &(page->data[i]);
    /* Object dump is a map that looks like this :
     * {
     *   object_id: <OBJECT_ID_IN_HEX>,
     *   class: <CLASS_NAME>,
     *   references: [<OBJECT_ID_IN_HEX>, <OBJECT_ID_IN_HEX>, ...],
     *   file: <FILE_PATH>,
     *   line: <LINE_NO>,
     *   size: <SIZE>
     * }
     */

    msgpack_pack_map(packer, 6);

    // Key1 : rbkit_message_field_object_id
    msgpack_pack_int(packer, rbkit_message_field_object_id);

    // Value1 : pointer address of object
    msgpack_pack_unsigned_long_long(packer, data->object_id);

    // Key2 : rbkit_message_field_class_name
    msgpack_pack_int(packer, rbkit_message_field_class_name);

    // Value2 : Class name of object
    pack_string(packer, data->class_name);

    // Key3 : rbkit_message_field_references
    msgpack_pack_int(packer, rbkit_message_field_references);

    // Value3 : References held by the object
    msgpack_pack_array(packer, data->reference_count);
    if(data->reference_count != 0) {
      size_t count = 0;
      for(; count < data->reference_count; count++ )
        msgpack_pack_unsigned_long_long(packer, data->references[count]);
      free(data->references);
    }

    // Key4 : rbkit_message_field_file
    msgpack_pack_int(packer, rbkit_message_field_file);

    // Value4 : File path where object is defined
    pack_string(packer, data->file);

    // Key5 : rbkit_message_field_line
    msgpack_pack_int(packer, rbkit_message_field_line);

    // Value5 : Line no where object is defined
    if(data->line == 0)
      msgpack_pack_nil(packer);
    else
      msgpack_pack_unsigned_long(packer, data->line);

    // Key6 : rbkit_message_field_size
    msgpack_pack_int(packer, rbkit_message_field_size);

    // Value6 : Size of the object in memory
    if(data->size == 0)
      msgpack_pack_nil(packer);
    else
      msgpack_pack_unsigned_long(packer, data->size);

    event->current_page_index++;
    event->packed_objects++;
    count++;
  }
}
示例#24
0
void publish_proc_event(process_t *process, const char *name) {
  /* TODO(sissel): move this to a separate file for 'event' streaming */
  zmq_msg_t event;
  int rc;
  size_t msgsize;
  program_t *program = pn_proc_program(process);
  procnanny_t *pn = program->data;

  /* Fields:
   *  - program name
   *  - process instance
   *  - exit status
   *  - duration ?
   */

  msgpack_sbuffer *buffer = msgpack_sbuffer_new();
  msgpack_packer *output_msg = msgpack_packer_new(buffer, msgpack_sbuffer_write);

  msgpack_pack_map(output_msg, 5);
  msgpack_pack_string(output_msg, "event", -1);
  msgpack_pack_string(output_msg, name, -1);

  msgpack_pack_string(output_msg, "program", -1);
  msgpack_pack_string(output_msg, program->name, program->name_len);

  msgpack_pack_string(output_msg, "instance", -1);
  msgpack_pack_int(output_msg, process->instance);

  msgpack_pack_string(output_msg, "state", -1);
  switch (process->state) {
    case PROCESS_STATE_STARTING: msgpack_pack_string(output_msg, "starting", -1); break;
    case PROCESS_STATE_RUNNING: msgpack_pack_string(output_msg, "running", -1); break;
    case PROCESS_STATE_STOPPING: msgpack_pack_string(output_msg, "stopping", -1); break;
    case PROCESS_STATE_EXITED: msgpack_pack_string(output_msg, "exited", -1); break;
    case PROCESS_STATE_BACKOFF: msgpack_pack_string(output_msg, "backoff", -1); break;
    case PROCESS_STATE_NEW: msgpack_pack_string(output_msg, "new", -1); break;
    default: msgpack_pack_string(output_msg, "unknown", -1); break;
  }

  if (process->state == PROCESS_STATE_EXITED
      || process->state == PROCESS_STATE_BACKOFF) {
    msgpack_pack_string(output_msg, "code", -1);
    msgpack_pack_nil(output_msg);
  } else if (process->exit_signal == 0) {
    msgpack_pack_string(output_msg, "code", -1);
    msgpack_pack_int(output_msg, process->exit_status);
  } else {
    msgpack_pack_string(output_msg, "signal", -1);

    /* lol. */
    switch (process->exit_signal) {
      case SIGHUP: msgpack_pack_string(output_msg, "HUP", 3); break;
      case SIGINT: msgpack_pack_string(output_msg, "INT", 3); break;
      case SIGQUIT: msgpack_pack_string(output_msg, "QUIT", 4); break;
      case SIGILL: msgpack_pack_string(output_msg, "ILL", 3); break;
      case SIGTRAP: msgpack_pack_string(output_msg, "TRAP", 4); break;
      case SIGABRT: msgpack_pack_string(output_msg, "ABRT", 4); break;
      case SIGBUS: msgpack_pack_string(output_msg, "BUS", 3); break;
      case SIGFPE: msgpack_pack_string(output_msg, "FPE", 3); break;
      case SIGKILL: msgpack_pack_string(output_msg, "KILL", 4); break;
      case SIGUSR1: msgpack_pack_string(output_msg, "USR1", 4); break;
      case SIGSEGV: msgpack_pack_string(output_msg, "SEGV", 4); break;
      case SIGUSR2: msgpack_pack_string(output_msg, "USR2", 4); break;
      case SIGPIPE: msgpack_pack_string(output_msg, "PIPE", 4); break;
      case SIGALRM: msgpack_pack_string(output_msg, "ALRM", 4); break;
      case SIGTERM: msgpack_pack_string(output_msg, "TERM", 4); break;
      case SIGSTKFLT: msgpack_pack_string(output_msg, "STKFLT", 6); break;
      case SIGCHLD: msgpack_pack_string(output_msg, "CHLD", 4); break;
      case SIGCONT: msgpack_pack_string(output_msg, "CONT", 4); break;
      case SIGSTOP: msgpack_pack_string(output_msg, "STOP", 4); break;
      case SIGTSTP: msgpack_pack_string(output_msg, "TSTP", 4); break;
      case SIGTTIN: msgpack_pack_string(output_msg, "TTIN", 4); break;
      case SIGTTOU: msgpack_pack_string(output_msg, "TTOU", 4); break;
      case SIGURG: msgpack_pack_string(output_msg, "URG", 3); break;
      case SIGXCPU: msgpack_pack_string(output_msg, "XCPU", 4); break;
      case SIGXFSZ: msgpack_pack_string(output_msg, "XFSZ", 4); break;
      case SIGVTALRM: msgpack_pack_string(output_msg, "VTALRM", 5); break;
      case SIGPROF: msgpack_pack_string(output_msg, "PROF", 4); break;
      case SIGWINCH: msgpack_pack_string(output_msg, "WINCH", 5); break;
      case SIGPOLL: msgpack_pack_string(output_msg, "POLL", 4); break;
      case SIGPWR: msgpack_pack_string(output_msg, "PWR", 3); break;
      case SIGSYS: msgpack_pack_string(output_msg, "SYS", 3); break;
      default: msgpack_pack_string(output_msg, "unknown", -1); break;
    } /* switch process->exit_signal */
  } /* if process was killed by a signal */

  zmq_msg_init_data(&event, buffer->data, buffer->size, free_msgpack_buffer, buffer); 
  zmq_send(pn->eventsocket, &event, 0);
  zmq_msg_close(&event);

  msgpack_packer_free(output_msg);
} /* publish_output */
示例#25
0
static char * packStructure(char *serviceName, char *dest, char *trans_id, char *payload, char *contentType, unsigned int payload_len)
{           
    msgpack_sbuffer sbuf;
    msgpack_packer pk;  
    char* b64buffer =  NULL;
    size_t encodeSize = 0;
    char source[MAX_PARAMETERNAME_LEN/2] = {'\0'}; 
    int msg_type = 4;

    CcspLMLiteConsoleTrace(("RDK_LOG_DEBUG, LMLite %s ENTER\n", __FUNCTION__ ));

    CcspLMLiteConsoleTrace(("RDK_LOG_DEBUG, deviceMAC *********:%s\n",deviceMAC));
    CcspLMLiteConsoleTrace(("RDK_LOG_DEBUG, serviceName :%s\n",serviceName));
    CcspLMLiteConsoleTrace(("RDK_LOG_DEBUG, dest :%s\n",dest));
    CcspLMLiteConsoleTrace(("RDK_LOG_DEBUG, transaction_id :%s\n",trans_id));
    CcspLMLiteConsoleTrace(("RDK_LOG_DEBUG, contentType :%s\n",contentType));
    CcspLMLiteConsoleTrace(("RDK_LOG_DEBUG, payload_len :%d\n",payload_len));

    snprintf(source, sizeof(source), "mac:%s/%s", deviceMAC, serviceName);

    CcspLMLiteConsoleTrace(("RDK_LOG_DEBUG, Received DeviceMac from Atom side: %s\n",deviceMAC));
    CcspLMLiteConsoleTrace(("RDK_LOG_DEBUG, Source derived is %s\n", source));
  
    CcspLMLiteConsoleTrace(("RDK_LOG_DEBUG, <======== Start of packStructure ======>\n"));
    
    // Start of msgpack encoding
    CcspLMLiteConsoleTrace(("RDK_LOG_DEBUG, -----------Start of msgpack encoding------------\n"));

    msgpack_sbuffer_init(&sbuf);
    msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
    msgpack_pack_map(&pk, WEBPA_MAP_SIZE);

    msgpack_pack_str(&pk, strlen(WEBPA_MSG_TYPE));
    msgpack_pack_str_body(&pk, WEBPA_MSG_TYPE,strlen(WEBPA_MSG_TYPE));
    msgpack_pack_int(&pk, msg_type);   
    
    msgpack_pack_str(&pk, strlen(WEBPA_SOURCE));
    msgpack_pack_str_body(&pk, WEBPA_SOURCE,strlen(WEBPA_SOURCE));
    msgpack_pack_str(&pk, strlen(source));
    msgpack_pack_str_body(&pk, source,strlen(source));
    
    msgpack_pack_str(&pk, strlen(WEBPA_DESTINATION));
    msgpack_pack_str_body(&pk, WEBPA_DESTINATION,strlen(WEBPA_DESTINATION));       
    msgpack_pack_str(&pk, strlen(dest));
    msgpack_pack_str_body(&pk, dest,strlen(dest));
    
    msgpack_pack_str(&pk, strlen(WEBPA_TRANSACTION_ID));
    msgpack_pack_str_body(&pk, WEBPA_TRANSACTION_ID,strlen(WEBPA_TRANSACTION_ID));
    msgpack_pack_str(&pk, strlen(trans_id));
    msgpack_pack_str_body(&pk, trans_id,strlen(trans_id));
     
    msgpack_pack_str(&pk, strlen(WEBPA_PAYLOAD));
    msgpack_pack_str_body(&pk, WEBPA_PAYLOAD,strlen(WEBPA_PAYLOAD));
       
    if(strcmp(contentType,"avro/binary") == 0)
    {
        CcspLMLiteConsoleTrace(("RDK_LOG_DEBUG, msg->payload binary\n"));
        msgpack_pack_bin(&pk, payload_len);
        msgpack_pack_bin_body(&pk, payload, payload_len);
    }
    else // string: "contentType :application/json"
    {
        CcspLMLiteConsoleTrace(("RDK_LOG_DEBUG, msg->payload string\n"));
        msgpack_pack_str(&pk, strlen(payload));
        msgpack_pack_str_body(&pk, payload,strlen(payload));
    }
  
    msgpack_pack_str(&pk, strlen(CONTENT_TYPE));
    msgpack_pack_str_body(&pk, CONTENT_TYPE,strlen(CONTENT_TYPE));
    msgpack_pack_str(&pk, strlen(contentType));
    msgpack_pack_str_body(&pk, contentType,strlen(contentType));
    
    /*if(consoleDebugEnable)
        fprintf(stderr, "RDK_LOG_DEBUG,msgpack encoded data contains %d bytes and data is : %s\n",(int)sbuf.size,sbuf.data);*/

    CcspLMLiteConsoleTrace(("RDK_LOG_DEBUG,-----------End of msgpack encoding------------\n"));
    // End of msgpack encoding
    
    // Start of Base64 Encode
    CcspLMLiteConsoleTrace(("RDK_LOG_DEBUG,-----------Start of Base64 Encode ------------\n"));
    encodeSize = b64_get_encoded_buffer_size( sbuf.size );
    CcspLMLiteConsoleTrace(("RDK_LOG_DEBUG,encodeSize is %d\n", (int)encodeSize));
    b64buffer = malloc(encodeSize + 1); // one byte extra for terminating NULL byte
    b64_encode((const uint8_t *)sbuf.data, sbuf.size, (uint8_t *)b64buffer);
    b64buffer[encodeSize] = '\0' ;    
 
    
    /*if(consoleDebugEnable)
    {
    int i;
    fprintf(stderr, "RDK_LOG_DEBUG,\n\n b64 encoded data is : ");
    for(i = 0; i < encodeSize; i++)
        fprintf(stderr,"%c", b64buffer[i]);      

    fprintf(stderr,"\n\n");       
    }*/

    //CcspLMLiteTrace(("RDK_LOG_DEBUG,\nb64 encoded data length is %d\n",i));
    CcspLMLiteConsoleTrace(("RDK_LOG_DEBUG,---------- End of Base64 Encode -------------\n"));
    // End of Base64 Encode
    
    CcspLMLiteConsoleTrace(("RDK_LOG_DEBUG,Destroying sbuf.....\n"));
    msgpack_sbuffer_destroy(&sbuf);
    
    //CcspLMLiteTrace(("RDK_LOG_DEBUG,Final Encoded data: %s\n",b64buffer));
    CcspLMLiteConsoleTrace(("RDK_LOG_DEBUG,Final Encoded data length: %d\n",(int)strlen(b64buffer)));
    CcspLMLiteConsoleTrace(("RDK_LOG_DEBUG,<======== End of packStructure ======>\n"));
    CcspLMLiteConsoleTrace(("RDK_LOG_DEBUG, LMLite %s EXIT\n", __FUNCTION__ ));

    return b64buffer;
}
示例#26
0
void report_reg(enum reg_state state, void*arg) {
    msgpack_packer *pk = arg;
    msgpack_pack_array(pk, 2);
    push_cstr("sip.reg");
    msgpack_pack_int(pk, state);
}
示例#27
0
文件: filter.c 项目: jedisct1/6Jack
int filter_before_apply(FilterReplyResultBase * const rb,
                        const unsigned int nongeneric_items,
                        const char * const function,
                        const struct sockaddr_storage * const sa_local,
                        const socklen_t sa_local_len,
                        const struct sockaddr_storage * const sa_remote,
                        const socklen_t sa_remote_len)
{
    Filter * const filter = filter_get();
    const AppContext * const context = sixjack_get_context();    
    assert(filter->msgpack_packer != NULL);
    msgpack_packer * const msgpack_packer = filter->msgpack_packer;
    msgpack_packer_init(msgpack_packer, filter->msgpack_sbuffer,
                        msgpack_sbuffer_write);
    unsigned int items_count = nongeneric_items + 5U;
    if (rb->pre == false) {
        items_count += 2U;
    }
    if (sa_local != NULL) {
        items_count += 2U;
    }
    if (sa_remote != NULL) {
        items_count += 2U;
    }
    msgpack_pack_map(msgpack_packer, items_count);
    
    msgpack_pack_mstring(msgpack_packer, "version");
    msgpack_pack_unsigned_short(msgpack_packer, VERSION_MAJOR);
    
    msgpack_pack_mstring(msgpack_packer, "filter_type");
    msgpack_pack_cstring(msgpack_packer, rb->pre ? "PRE" : "POST");
    
    msgpack_pack_mstring(msgpack_packer, "pid");
    msgpack_pack_unsigned_int(msgpack_packer, context->pid);

    msgpack_pack_mstring(msgpack_packer, "function");
    msgpack_pack_cstring(msgpack_packer, function);

    msgpack_pack_mstring(msgpack_packer, "fd");
    msgpack_pack_int(msgpack_packer, rb->fd);

    if (rb->pre == false) {
        msgpack_pack_mstring(msgpack_packer, "return_value");
        msgpack_pack_int(msgpack_packer, *rb->ret);
        
        msgpack_pack_mstring(msgpack_packer, "errno");
        msgpack_pack_int(msgpack_packer, *rb->ret_errno);
    }
    
    char host[NI_MAXHOST];
    in_port_t port;    
    if (sa_local != NULL) {
        get_name_info(sa_local, sa_local_len, host, &port);
        msgpack_pack_mstring(msgpack_packer, "local_host");
        msgpack_pack_cstring_or_nil(msgpack_packer, host);
        msgpack_pack_mstring(msgpack_packer, "local_port");
        msgpack_pack_unsigned_short(msgpack_packer, (unsigned short) port);
    }
    if (sa_remote != NULL) {
        get_name_info(sa_remote, sa_remote_len, host, &port);
        msgpack_pack_mstring(msgpack_packer, "remote_host");
        msgpack_pack_cstring_or_nil(msgpack_packer, host);
        msgpack_pack_mstring(msgpack_packer, "remote_port");
        msgpack_pack_unsigned_short(msgpack_packer, (unsigned short) port);
    }
    return 0;
}
void unit_message_deserialize_response(UNUSED(void **state))
{
  struct api_error error = ERROR_INIT;
  msgpack_sbuffer sbuf;
  msgpack_packer pk;
  msgpack_zone mempool;
  msgpack_object deserialized;
  struct message_response response;

  msgpack_sbuffer_init(&sbuf);
  msgpack_zone_init(&mempool, 2048);

  /* positiv test */
  msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
  msgpack_pack_array(&pk, 4);
  msgpack_pack_uint8(&pk, 1);
  msgpack_pack_uint32(&pk, 1234);
  msgpack_pack_nil(&pk);
  msgpack_pack_array(&pk, 1);
  msgpack_pack_uint8(&pk, 0);
  msgpack_unpack(sbuf.data, sbuf.size, NULL, &mempool, &deserialized);

  assert_int_equal(0, message_deserialize_response(&response, &deserialized,
      &error));

  msgpack_sbuffer_clear(&sbuf);

  free_params(response.params);

  /* wrong type type */
  msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
  msgpack_pack_array(&pk, 4);
  msgpack_pack_nil(&pk);
  msgpack_pack_uint32(&pk, 1234);
  msgpack_pack_nil(&pk);
  msgpack_pack_array(&pk, 1);
  msgpack_pack_uint8(&pk, 0);
  msgpack_unpack(sbuf.data, sbuf.size, NULL, &mempool, &deserialized);

  assert_int_not_equal(0, message_deserialize_response(&response, &deserialized,
      &error));

  msgpack_sbuffer_clear(&sbuf);

  /* wrong type */
  msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
  msgpack_pack_array(&pk, 4);
  msgpack_pack_uint8(&pk, 0);
  msgpack_pack_uint32(&pk, 1234);
  msgpack_pack_nil(&pk);
  msgpack_pack_array(&pk, 1);
  msgpack_pack_uint8(&pk, 0);
  msgpack_unpack(sbuf.data, sbuf.size, NULL, &mempool, &deserialized);

  assert_int_not_equal(0, message_deserialize_response(&response, &deserialized,
      &error));

  msgpack_sbuffer_clear(&sbuf);

  /* wrong msgid */
  msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
  msgpack_pack_array(&pk, 4);
  msgpack_pack_uint8(&pk, 1);
  msgpack_pack_int(&pk, -1234);
  msgpack_pack_nil(&pk);
  msgpack_pack_array(&pk, 1);
  msgpack_pack_uint8(&pk, 0);
  msgpack_unpack(sbuf.data, sbuf.size, NULL, &mempool, &deserialized);

  assert_int_not_equal(0, message_deserialize_response(&response, &deserialized,
      &error));

  msgpack_sbuffer_clear(&sbuf);

  /* wrong msgid value*/
  msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
  msgpack_pack_array(&pk, 4);
  msgpack_pack_uint8(&pk, 1);
  msgpack_pack_uint32(&pk, UINT32_MAX);
  msgpack_pack_nil(&pk);
  msgpack_pack_array(&pk, 1);
  msgpack_pack_uint8(&pk, 0);
  msgpack_unpack(sbuf.data, sbuf.size, NULL, &mempool, &deserialized);

  assert_int_not_equal(0, message_deserialize_response(&response, &deserialized,
      &error));

  msgpack_sbuffer_clear(&sbuf);

  /* wrong nil */
  msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
  msgpack_pack_array(&pk, 4);
  msgpack_pack_uint8(&pk, 1);
  msgpack_pack_uint32(&pk, 1234);
  msgpack_pack_uint8(&pk, 1);
  msgpack_pack_array(&pk, 1);
  msgpack_pack_uint8(&pk, 0);
  msgpack_unpack(sbuf.data, sbuf.size, NULL, &mempool, &deserialized);

  assert_int_not_equal(0, message_deserialize_response(&response, &deserialized,
      &error));

  msgpack_sbuffer_clear(&sbuf);

  /* wrong params */
  msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
  msgpack_pack_array(&pk, 4);
  msgpack_pack_uint8(&pk, 1);
  msgpack_pack_uint32(&pk, 1234);
  msgpack_pack_nil(&pk);
  msgpack_pack_nil(&pk);
  msgpack_unpack(sbuf.data, sbuf.size, NULL, &mempool, &deserialized);

  assert_int_not_equal(0, message_deserialize_response(&response, &deserialized,
      &error));

  msgpack_sbuffer_clear(&sbuf);

  /* null input params */
  assert_int_not_equal(0, message_deserialize_response(&response, &deserialized,
      NULL));
  assert_int_not_equal(0, message_deserialize_response(&response, NULL,
      &error));
  assert_int_not_equal(0, message_deserialize_response(NULL, &deserialized,
      &error));

  msgpack_zone_destroy(&mempool);
  msgpack_sbuffer_destroy(&sbuf);
}
示例#29
0
文件: msgpack.c 项目: 9612jhf/webdis
static void
msgpack_wrap_redis_reply(const struct cmd *cmd, struct msg_out *out, const redisReply *r) {

	unsigned int i;
	msgpack_packer* pk = msgpack_packer_new(out, on_msgpack_write);

	/* copy verb, as jansson only takes a char* but not its length. */
	char *verb = "";
	size_t verb_sz = 0;
	if(cmd->count) {
		verb_sz = cmd->argv_len[0];
		verb = cmd->argv[0];
	}

	/* Create map object */
	msgpack_pack_map(pk, 1);

	/* The single element is the verb */
	msgpack_pack_raw(pk, verb_sz);
	msgpack_pack_raw_body(pk, verb, verb_sz);

	switch(r->type) {
		case REDIS_REPLY_STATUS:
		case REDIS_REPLY_ERROR:
			msgpack_pack_array(pk, 2);

			/* first element: book */
			if(r->type == REDIS_REPLY_ERROR)
				msgpack_pack_false(pk);
			else
				msgpack_pack_true(pk);

			/* second element: message */
			msgpack_pack_raw(pk, r->len);
			msgpack_pack_raw_body(pk, r->str, r->len);
			break;

		case REDIS_REPLY_STRING:
			if(verb_sz ==4 && strncasecmp(verb, "INFO", 4) == 0) {
				msg_info_reply(pk, r->str, r->len);
			} else {
				msgpack_pack_raw(pk, r->len);
				msgpack_pack_raw_body(pk, r->str, r->len);
			}
			break;

		case REDIS_REPLY_INTEGER:
			msgpack_pack_int(pk, r->integer);
			break;

		case REDIS_REPLY_ARRAY:
			if(verb_sz == 7 && strncasecmp(verb, "HGETALL", 7) == 0) {
				msg_hgetall_reply(pk, r);
				break;
			}

			msgpack_pack_array(pk, r->elements);

			for(i = 0; i < r->elements; ++i) {
				redisReply *e = r->element[i];
				switch(e->type) {
					case REDIS_REPLY_STRING:
						msgpack_pack_raw(pk, e->len);
						msgpack_pack_raw_body(pk, e->str, e->len);
						break;
					case REDIS_REPLY_INTEGER:
						msgpack_pack_int(pk, e->integer);
						break;
					default:
						msgpack_pack_nil(pk);
						break;
				}
			}

			break;

		default:
			msgpack_pack_nil(pk);
			break;
	}

	msgpack_packer_free(pk);
}
示例#30
0
static inline void
rbtrace__send_event(int nargs, const char *name, ...)
{
  if (!rbtracer.attached_pid ||
      !rbtracer.sbuf ||
      !rbtracer.msgpacker ||
      rbtracer.mqo_fd == -1)
    return;

  int n;

  msgpack_sbuffer_clear(rbtracer.sbuf);
  msgpack_packer *pk = rbtracer.msgpacker;

  msgpack_pack_array(pk, nargs+1);

  msgpack_pack_raw(pk, strlen(name));
  msgpack_pack_raw_body(pk, name, strlen(name));

  if (nargs > 0) {
    int type;

    int sint;
    uint32_t uint;
    uint64_t uint64;
    unsigned long ulong;
    char *str;

    va_list ap;
    va_start(ap, name);

    for (n=0; n<nargs; n++) {
      type = va_arg(ap, int);
      switch (type) {
        case 'b': // boolean
          if (va_arg(ap, int))
            msgpack_pack_true(pk);
          else
            msgpack_pack_false(pk);
          break;

        case 'd': // signed int
          sint = va_arg(ap, int);
          msgpack_pack_int(pk, sint);
          break;

        case 'u': // unsigned int
          uint = va_arg(ap, uint32_t);
          msgpack_pack_uint32(pk, uint);
          break;

        case 'l': // unsigned long (VALUE/ID)
          ulong = va_arg(ap, unsigned long);
          msgpack_pack_unsigned_long(pk, ulong);
          break;

        case 't': // uint64 (timestamps)
          uint64 = va_arg(ap, uint64_t);
          msgpack_pack_uint64(pk, uint64);
          break;

        case 'n': // current timestamp
          msgpack_pack_uint64(pk, timeofday_usec());
          break;

        case 's': // string
          str = va_arg(ap, char *);
          if (!str)
            str = (char *)"";

          msgpack_pack_raw(pk, strlen(str));
          msgpack_pack_raw_body(pk, str, strlen(str));
          break;

        default:
          fprintf(stderr, "unknown type (%d) passed to rbtrace__send_event for %s\n", (int)type, name);
      }
    }