Exemple #1
0
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;
}
Exemple #2
0
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;
}