Exemplo n.º 1
0
NEOERR* fill_trackarea(HASH *evth, HASH *dbh)
{
    mdb_conn *conn = (mdb_conn*)hash_lookup(dbh, "dyn");
    mevent_t *evt = (mevent_t*)hash_lookup(evth, "place");
    HDF *node; hdf_init(&node);
    char *ip, *aid, *uid, *city, *area;
    NEOERR *err;

    LPRE_ALLOP(node, conn, evt);

    MDB_QUERY_RAW(conn, "track", COL_TRACK, "intime > current_date AND "
                  " area='' GROUP BY aid, uid", NULL);
    err = mdb_set_rows(node, conn, COL_TRACK, NULL, NULL);
    if (err != STATUS_OK) return nerr_pass(err);

    node = hdf_obj_child(node);
    while (node) {
        ip = hdf_get_value(node, "ip", NULL);
        aid = hdf_get_value(node, "aid", "0");
        uid = hdf_get_value(node, "uid", "0");
        if (ip) {
            hdf_set_value(evt->hdfsnd, "ip", ip);
            MEVENT_TRIGGER_NRET(evt, ip, REQ_CMD_PLACEGET, FLAGS_SYNC);
            city = hdf_get_value(evt->hdfrcv, "0.c", "Mars");
            area = city2area(city);
            MDB_EXEC(conn, NULL, "UPDATE track SET area=$1 WHERE aid=$2 AND uid=$3",
                     "sss", area, aid, uid);
        }

        node = hdf_obj_next(node);
    }

    return STATUS_OK;
}
Exemplo n.º 2
0
static void member_after_login(CGI *cgi, HASH *evth,
                               char *mname, char *mnick, char *mid)
{
    char tm[LEN_TM_GMT], *p, mmsn[LEN_CK];
    mevent_t *evt = (mevent_t*)hash_lookup(evth, "member");
    if (!evt) return;

    memset(mmsn, 0x0, sizeof(mmsn));
    mstr_rand_string(mmsn, sizeof(mmsn));
    mutil_getdatetime_gmt(tm, sizeof(tm), "%A, %d-%b-%Y %T GMT", ONE_WEEK);

    /*
     * set cookie
     */
    cgi_cookie_set(cgi, "mname", mname, NULL, SITE_DOMAIN, tm, 1, 0);
    cgi_cookie_set(cgi, "mnick", mnick, NULL, SITE_DOMAIN, tm, 1, 0);
    neos_url_escape(mnick, &p, NULL);
    cgi_cookie_set(cgi, "mnick_esc", p, NULL, SITE_DOMAIN, tm, 1, 0);
    free(p);

    //cgi_url_escape(mmsn, &p);
    cgi_cookie_set(cgi, "mmsn", mmsn, NULL, SITE_DOMAIN, tm, 1, 0);
    cgi_cookie_set(cgi, "mid",  mid,  NULL, SITE_DOMAIN, tm, 1, 0);

    hdf_set_value(evt->hdfsnd, "mname", mname);
    hdf_set_value(evt->hdfsnd, "mmsn", mmsn);
    MEVENT_TRIGGER_NRET(evt, mname, REQ_CMD_MEMBER_UP, FLAGS_NONE);

    hdf_set_copy(cgi->hdf, PRE_OUTPUT".mnick", PRE_QUERY".mnick");
    hdf_set_copy(cgi->hdf, PRE_OUTPUT".mname", PRE_QUERY".mname");
    hdf_set_value(cgi->hdf, PRE_OUTPUT".mmsn", mmsn);
    hdf_set_value(cgi->hdf, PRE_OUTPUT".mid", mid);
}
Exemplo n.º 3
0
Arquivo: ooms.c Projeto: kingiol/cmoon
static void ips2places(HDF *hdf, HASH *evth)
{
    if (!hdf || !evth) return;

    mevent_t *evt = (mevent_t*)hash_lookup(evth, "place");
    mevent_t *evta = (mevent_t*)hash_lookup(evth, "aic");
    if (!evt || !evta) {
        mtc_err("can't find event");
        return;
    }

    char *p, *q;
    HDF *node, *rnode;
    STRING ip;

    string_init(&ip);
    node = hdf_obj_child(hdf);
    while (node) {
        p = hdf_get_value(node, "ip", NULL);
        q = hdf_get_value(node, "addr", NULL);
        if (p && (!q || !*q)) string_appendf(&ip, "%s,", p);

        node = hdf_obj_next(node);
    }

    if (ip.len <= 0) return;

    hdf_set_value(evt->hdfsnd, "ip", ip.buf);
    MEVENT_TRIGGER_VOID(evt, ip.buf, REQ_CMD_PLACEGET, FLAGS_SYNC);

    if (evt->hdfrcv) {
        node = hdf_obj_child(hdf);
        while (node) {
            rnode = hdf_obj_child(evt->hdfrcv);
            p = hdf_get_value(node, "ip", NULL);
            q = hdf_get_value(node, "addr", NULL);
            if (p && (!q || !*q)) {
                while (rnode) {
                    q = hdf_get_value(rnode, "ip", NULL);
                    if (q && !strcmp(p, q)) break;
                    else q = NULL;

                    rnode = hdf_obj_next(rnode);
                }

                if (q) {
                    hdf_set_value(node, "addr", hdf_get_value(rnode, "c", NULL));
                    hdf_set_value(node, "area", hdf_get_value(rnode, "a", NULL));

                    hdf_set_value(evta->hdfsnd, "uid", hdf_get_value(node, "uid", 0));
                    hdf_set_value(evta->hdfsnd, "aid", hdf_get_value(node, "aid", 0));
                    hdf_set_value(evta->hdfsnd, "addr", hdf_get_value(rnode, "c", "Mars"));
                    MEVENT_TRIGGER_NRET(evta, NULL, REQ_CMD_APPUSERUP, FLAGS_NONE);
                } else {
                    mtc_warn("can't find addr for %s", p);
                }
            }

            node = hdf_obj_next(node);
        }
    }

    string_clear(&ip);
}