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