Beispiel #1
0
NEOERR* inbox_multi_add(HDF *datanode, HASH *evth, char *inboxtype)
{
    mevent_t *evt;
    int mid;
    HDF *child;
    NEOERR *err;
    
    MCS_NOT_NULLB(datanode, evth);

    evt = hash_lookup(evth, "aux");
    MCS_NOT_NULLA(evt);

    child = hdf_obj_child(datanode);
    while (child) {
        mid = hdf_get_int_value(child, "mid", 0);
        if (mid > 0) {
            hdf_set_valuef(evt->hdfsnd, "mmid.%d=%d", mid, mid);
        }

        child = hdf_obj_next(child);
    }

    if (!hdf_get_obj(evt->hdfsnd, "mmid"))
        return nerr_raise(NERR_ASSERT, "请设置收信用户号码");

    err = mtpl_InConfigRend_get(evt->hdfsnd, datanode, "inbox", inboxtype, g_datah);
	if (err != STATUS_OK) return nerr_pass(err);
    
    MEVENT_TRIGGER(evt, NULL, REQ_CMD_AUX_INBOX_ADD, FLAGS_NONE);

    return STATUS_OK;
}
Beispiel #2
0
NEOERR* base_msg_send(unsigned char *buf, size_t size, int fd)
{
    MCS_NOT_NULLA(buf);
    if (fd <= 0) return nerr_raise(NERR_ASSERT, "fd 非法");

    /*
     * copy from tcp.c rep_send()
     */
    size_t rv, c;

    MSG_DUMP("send: ",  buf, size);
    
    c = 0;
    while (c < size) {
        rv = send(fd, buf + c, size - c, 0);

        if (rv == size) return STATUS_OK;
        else if (rv == 0) return STATUS_OK;
        else if (rv < 0) {
            if (errno == EAGAIN || errno == EWOULDBLOCK) continue;
            return nerr_raise(NERR_IO, "send return %ld", rv);
        }

        c += rv;
    }

    return STATUS_OK;
}
Beispiel #3
0
NEOERR* member_home_data_get(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses)
{
    mevent_t *evt = hash_lookup(evth, "member");
    char *mname = NULL;
    int mid;
    NEOERR *err;

    MCS_NOT_NULLB(cgi->hdf, evt);

    HDF_FETCH_INT(cgi->hdf, PRE_QUERY".mid", mid);

    if (mid == 0) {
        MEMBER_CHECK_LOGIN();
    } else {
        hdf_set_int_value(evt->hdfsnd, "mid", mid);
        MEVENT_TRIGGER(evt, NULL, REQ_CMD_MEMBER_GET, FLAGS_SYNC);
        hdf_copy(cgi->hdf, PRE_OUTPUT".member", evt->hdfrcv);
    }

    evt = hash_lookup(evth, "plan");
    MCS_NOT_NULLA(evt);

    if (mname) hdf_set_value(evt->hdfsnd, "mname", mname);
    hdf_copy(evt->hdfsnd, NULL, hdf_get_obj(cgi->hdf, PRE_QUERY));
    hdf_set_value(evt->hdfsnd, "_npp", "5");
    hdf_set_value(evt->hdfsnd, "_guest", "1");
    MEVENT_TRIGGER(evt, NULL, REQ_CMD_PLAN_MINE, FLAGS_SYNC);
    hdf_copy(cgi->hdf, PRE_OUTPUT, evt->hdfrcv);

    return STATUS_OK;
}
Beispiel #4
0
NEOERR* bore_preview_data_get(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses)
{

    MCS_NOT_NULLA(cgi->hdf);

    hdf_set_copy(cgi->hdf, PRE_OUTPUT".s", PRE_QUERY".s");
    
    return STATUS_OK;
}
Beispiel #5
0
NEOERR* mimg_accept(CGI *cgi, char *form_name, char *imgroot,
                    char result[LEN_MD5], int *ftype)
{
    unsigned char data[IMAGE_MD5_SIZE];
    unsigned int bytes;
    char tok[3] = {0};
    NEOERR *err;
    FILE *fp, *fpout;
    char *s;

    MCS_NOT_NULLC(cgi->hdf, imgroot, ftype);

    /* TODO memory leak */
    fp = mfile_get_safe_from_std(cgi_filehandle(cgi, form_name));
    MCS_NOT_NULLA(fp);

    s = mfile_get_type(cgi, form_name);
    if (!s || strncmp(s, "image/", 6)) {
        return nerr_raise(NERR_ASSERT, "file %s not image type", s);
    }
    s = s + 6;
    *ftype = mimg_type_str2int(s);

    memset(data, 0x0, sizeof(data));
    fseek(fp, 0, SEEK_SET);
    bytes = fread(data, 1, sizeof(data), fp);

    if (bytes <= 0) return nerr_raise(NERR_IO, "read image file error %d ", bytes);
    mstr_md5_buf(data, bytes, result);

    strncpy(tok, result, 2);
    err = mfile_openf(&fpout, "w+", "%s/%s/%s.%s",
                      imgroot, tok, result, mimg_type_int2str(*ftype));
    if (err != STATUS_OK) return nerr_pass(err);

    s = hdf_get_value(cgi->hdf, PRE_QUERY"._upfile_data_type", NULL);
    if (s && !strcmp(s, "dataurl")) {
        err = mb64_decode(fp, fpout);
        if (err != STATUS_OK) return nerr_pass(err);
    } else {
        if (bytes < IMAGE_MD5_SIZE-10) {
            fwrite(data, 1, bytes, fpout);
        } else {
            mfile_copy(fpout, fp);
        }
    }
    fclose(fpout);

    return STATUS_OK;
}
Beispiel #6
0
/*
 * we don't pass tplh parameter to it,
 * because walker don't have it. so, tplh stored in the g_datah
 */
NEOERR* ltpl_render2file(CGI *cgi, char *render, char *fname)
{
    STRING str; string_init(&str);
    HASH *tplh;
    CSPARSE *cs;
    HDF *dhdf;
    NEOERR *err;

    MCS_NOT_NULLC(cgi->hdf, render, fname);
    
    tplh = hash_lookup(g_datah, "runtime_templates");
    MCS_NOT_NULLA(tplh);

    cs = hash_lookup(tplh, render);
    MCS_NOT_NULLA(cs);

    dhdf = hash_lookupf(tplh, "%s_hdf", render);
    if (dhdf) hdf_copy(cgi->hdf, NULL, dhdf);

    ltpl_prepare_rend(cgi->hdf, hdf_get_value(cgi->hdf,
                                              PRE_RESERVE"."PRE_CFG_LAYOUT,
                                              "layout.html"));
    cs->hdf = cgi->hdf;

    err = cs_render(cs, &str, mcs_strcb);
    if (err != STATUS_OK) return nerr_pass(err);

    err = mfile_makesure_dir(fname);
    if (err != STATUS_OK) return nerr_pass(err);
    
    err = mcs_str2file(str, fname);
    if (err != STATUS_OK) return nerr_pass(err);

    string_clear(&str);

    return STATUS_OK;
}
Beispiel #7
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;
}
Beispiel #8
0
NEOERR* base_info_init(struct base_info **binfo)
{
    NEOERR *err;

    MCS_NOT_NULLA(binfo);

    if (!*binfo) {
        struct base_info *linfo = calloc(1, sizeof(struct base_info));
        if (!linfo) return nerr_raise(NERR_NOMEM, "alloc base failure");
        linfo->usernum = 0;
        err = hash_init(&linfo->userh, hash_str_hash, hash_str_comp, NULL);
        if (err != STATUS_OK) return nerr_pass(err);

        *binfo = linfo;
    }

    return STATUS_OK;
}
Beispiel #9
0
NEOERR* ldml_render(char *filename, char *keyname, HDF *datanode, HDF *outnode)
{
    HASH *datah;
    HDF *confignode;

    MCS_NOT_NULLC(filename, keyname, outnode);

    datah = hash_lookup(g_datah, "runtime_dml");
    MCS_NOT_NULLA(datah);

    confignode = hash_lookupf(datah, "%s.hdf", filename);
    if (!confignode) return nerr_raise(NERR_ASSERT, "data file %s nexist", filename);

    confignode = hdf_get_obj(confignode, keyname);
    if (!confignode) return nerr_raise(NERR_ASSERT, "%s.hdf %s nexist",
                                       filename, keyname);

    return nerr_pass(mcs_data_rend(confignode, datanode, outnode));
}
Beispiel #10
0
NEOERR* email_add(HDF *datanode, HASH *evth, char *emailtype, char *mname)
{
    mevent_t *evt;
    NEOERR *err;
    
    MCS_NOT_NULLC(datanode, evth, mname);

    evt = hash_lookup(evth, "aux");
    MCS_NOT_NULLA(evt);

    err = mtpl_InConfigRend_get(evt->hdfsnd, datanode, "email", emailtype, g_datah);
	if (err != STATUS_OK) return nerr_pass(err);

    hdf_set_value(evt->hdfsnd, "to", mname);

    MEVENT_TRIGGER(evt, NULL, REQ_CMD_AUX_EMAIL_ADD, FLAGS_NONE);

    return STATUS_OK;
}
Beispiel #11
0
NEOERR* mimg_output(void *pic)
{
    NEOERR *err;
    
    MCS_NOT_NULLA(pic);

    gdImagePtr im = (gdImagePtr)pic;
    char *temps; int tempi;
    
    err = cgiwrap_writef("Content-Type: image/jpeg\r\n\r\n");
    if (err != STATUS_OK) return nerr_pass(err);
    
    /*
     * gdImageJpegCtx(data, gdoutctx, -1) core dump on fastcgi mode
     */
    temps = (char*) gdImageJpegPtr(im, &tempi, -1);
    cgiwrap_write(temps, tempi);
    gdImageDestroy(im);
    gdFree(temps);

    return STATUS_OK;
}
Beispiel #12
0
NEOERR* email_multi_add(HDF *datanode, HASH *evth, char *emailtype)
{
    mevent_t *evt;
    char *mname;
    HDF *child;
    int cnt = 0;
    NEOERR *err;
    
    MCS_NOT_NULLB(datanode, evth);

    evt = hash_lookup(evth, "aux");
    MCS_NOT_NULLA(evt);

    child = hdf_obj_child(datanode);
    while (child) {
        mname = hdf_get_value(child, "mname", NULL);
        if (mname) {
            /*
             * use cnt instead of mname as hdf key because mname contain '.'
             */
            hdf_set_valuef(evt->hdfsnd, "mto.%d=%s", cnt++, mname);
        }

        child = hdf_obj_next(child);
    }

    if (!hdf_get_obj(evt->hdfsnd, "mto"))
        return nerr_raise(NERR_ASSERT, "请设置收信用户名");

    err = mtpl_InConfigRend_get(evt->hdfsnd, datanode, "email", emailtype, g_datah);
	if (err != STATUS_OK) return nerr_pass(err);

    MEVENT_TRIGGER(evt, NULL, REQ_CMD_AUX_EMAIL_ADD, FLAGS_NONE);

    return STATUS_OK;
}