NEOERR* base_msg_new(char *cmd, HDF *datanode, unsigned char **buf, size_t *size) { NEOERR *err; MCS_NOT_NULLC(cmd, datanode, buf); MCS_NOT_NULLA(size); size_t bsize, vsize; unsigned char *rbuf; uint32_t t; memset(static_buf, 0x0, MAX_PACKET_LEN); hdf_set_value(datanode, "_Reserve", "moc"); err = hdf_set_attr(datanode, "_Reserve", "cmd", cmd); if (err != STATUS_OK) return nerr_pass(err); TRACE_HDF(datanode); vsize = pack_hdf(datanode, static_buf, MAX_PACKET_LEN); if(vsize <= 0) return nerr_raise(NERR_ASSERT, "packet error"); /* * copy from tcp.c tcp_reply_long() */ bsize = 4 + 4 + 4 + 4 + vsize; rbuf = calloc(1, bsize); if (!rbuf) return nerr_raise(NERR_NOMEM, "alloc msg buffer"); t = htonl(bsize); memcpy(rbuf, &t, 4); /* * server 主动发给 client 的包,reqid == 0, && reply == 10000 */ t = 0; memcpy(rbuf + 4, &t, 4); t = htonl(10000); memcpy(rbuf + 8, &t, 4); t = htonl(vsize); memcpy(rbuf + 12, &t, 4); memcpy(rbuf + 16, static_buf, vsize); *buf = rbuf; *size = bsize; return STATUS_OK; }
int main(int argc, char **argv, char **envp) { unsigned char buf[2048]; int blen = 2048, len; char *s; HDF *hdf; //mconfig_parse_file("/tpl/oms.hdf", &g_cfg); mtimer_start(); for (int i = 0; i < 100000; i++) { memset(buf, 2048, 0x0); len = pack_hdf(g_cfg, buf, blen); unpack_hdf(buf, len, &hdf); s = hdf_get_value(hdf, "manual.Layout", NULL); hdf_destroy(&hdf); } mtimer_stop(NULL); return 0; }