⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mm.c

📁 这是一个完全开放的
💻 C
📖 第 1 页 / 共 2 页
字号:
                list = &mm->user_delete;                nlist = &mm->nuser_delete;                break;        }        for(j = 0; j < *nlist; j++) {            mi = (*list)[j];            if(mi->arg != NULL)                free(mi->arg);            free(mi);        }    }    /* free lists */    free(mm->sess_start);    free(mm->sess_end);    free(mm->in_sess);    free(mm->in_router);    free(mm->out_sess);    free(mm->out_router);    free(mm->pkt_sm);    free(mm->pkt_user);    free(mm->pkt_router);    free(mm->user_load);    free(mm->user_create);    free(mm->user_delete);    xhash_free(mm->modules);    free(mm);}/** session starting */int mm_sess_start(mm_t mm, sess_t sess) {    int n, ret = 0;    mod_instance_t mi;    log_debug(ZONE, "dispatching sess-start chain");    ret = 0;    for(n = 0; n < mm->nsess_start; n++) {        mi = mm->sess_start[n];        if(mi == NULL || mi->mod->sess_start == NULL) {            log_debug(ZONE, "module %s has no handler for this chain", mi->mod->name);            continue;        }        log_debug(ZONE, "calling module %s", mi->mod->name);        ret = (mi->mod->sess_start)(mi, sess);        if(ret != 0)            break;    }    log_debug(ZONE, "sess-start chain returning %d", ret);    return ret;}/** session ending */void mm_sess_end(mm_t mm, sess_t sess) {    int n;    mod_instance_t mi;    log_debug(ZONE, "dispatching sess-end chain");    for(n = 0; n < mm->nsess_end; n++) {        mi = mm->sess_end[n];        if(mi == NULL || mi->mod->sess_end == NULL) {            log_debug(ZONE, "module %s has no handler for this chain", mi->mod->name);            continue;        }        log_debug(ZONE, "calling module %s", mi->mod->name);        (mi->mod->sess_end)(mi, sess);    }    log_debug(ZONE, "sess-end chain returning");}/** packets from active session */mod_ret_t mm_in_sess(mm_t mm, sess_t sess, pkt_t pkt) {    int n;    mod_instance_t mi;    mod_ret_t ret = mod_PASS;    log_debug(ZONE, "dispatching in-sess chain");    ret = mod_PASS;    for(n = 0; n < mm->nin_sess; n++) {        mi = mm->in_sess[n];        if(mi == NULL || mi->mod->in_sess == NULL) {            log_debug(ZONE, "module %s has no handler for this chain", mi->mod->name);            continue;        }        log_debug(ZONE, "calling module %s", mi->mod->name);        ret = (mi->mod->in_sess)(mi, sess, pkt);        if(ret != mod_PASS)            break;    }    log_debug(ZONE, "in-sess chain returning %d", ret);    return ret;}/** packets from router */mod_ret_t mm_in_router(mm_t mm, pkt_t pkt) {    int n;    mod_instance_t mi;    mod_ret_t ret = mod_PASS;    log_debug(ZONE, "dispatching in-router chain");    for(n = 0; n < mm->nin_router; n++) {        mi = mm->in_router[n];        if(mi == NULL || mi->mod->in_router == NULL) {            log_debug(ZONE, "module %s has no handler for this chain", mi->mod->name);            continue;        }        log_debug(ZONE, "calling module %s", mi->mod->name);        ret = (mi->mod->in_router)(mi, pkt);        if(ret != mod_PASS)            break;    }    log_debug(ZONE, "in-router chain returning %d", ret);    return ret;}/** packets to active session */mod_ret_t mm_out_sess(mm_t mm, sess_t sess, pkt_t pkt) {    int n;    mod_instance_t mi;    mod_ret_t ret = mod_PASS;    log_debug(ZONE, "dispatching out-sess chain");    for(n = 0; n < mm->nout_sess; n++) {        mi = mm->out_sess[n];        if(mi == NULL || mi->mod->out_sess == NULL) {            log_debug(ZONE, "module %s has no handler for this chain", mi->mod->name);            continue;        }        log_debug(ZONE, "calling module %s", mi->mod->name);        ret = (mi->mod->out_sess)(mi, sess, pkt);        if(ret != mod_PASS)            break;    }    log_debug(ZONE, "out-sess chain returning %d", ret);    return ret;}/** packets to router */mod_ret_t mm_out_router(mm_t mm, pkt_t pkt) {    int n;    mod_instance_t mi;    mod_ret_t ret = mod_PASS;    log_debug(ZONE, "dispatching out-router chain");    for(n = 0; n < mm->nout_router; n++) {        mi = mm->out_router[n];        if(mi == NULL || mi->mod->out_router == NULL) {            log_debug(ZONE, "module %s has no handler for this chain", mi->mod->name);            continue;        }        log_debug(ZONE, "calling module %s", mi->mod->name);        ret = (mi->mod->out_router)(mi, pkt);        if(ret != mod_PASS)            break;    }    log_debug(ZONE, "out-router chain returning %d", ret);    return ret;}/** packets for sm */mod_ret_t mm_pkt_sm(mm_t mm, pkt_t pkt) {    int n, ret = 0;    mod_instance_t mi;    log_debug(ZONE, "dispatching pkt-sm chain");    for(n = 0; n < mm->npkt_sm; n++) {        mi = mm->pkt_sm[n];        if(mi == NULL || mi->mod->pkt_sm == NULL) {            log_debug(ZONE, "module %s has no handler for this chain", mi->mod->name);            continue;        }        log_debug(ZONE, "calling module %s", mi->mod->name);        ret = (mi->mod->pkt_sm)(mi, pkt);        if(ret != mod_PASS)            break;    }    log_debug(ZONE, "pkt-sm chain returning %d", ret);    return ret;}/** packets for user */mod_ret_t mm_pkt_user(mm_t mm, user_t user, pkt_t pkt) {    int n;    mod_instance_t mi;    mod_ret_t ret = mod_PASS;    log_debug(ZONE, "dispatching pkt-user chain");    for(n = 0; n < mm->npkt_user; n++) {        mi = mm->pkt_user[n];        if(mi == NULL || mi->mod->pkt_user == NULL) {            log_debug(ZONE, "module %s has no handler for this chain", mi->mod->name);            continue;        }        log_debug(ZONE, "calling module %s", mi->mod->name);        ret = (mi->mod->pkt_user)(mi, user, pkt);        if(ret != mod_PASS)            break;    }    log_debug(ZONE, "pkt-user chain returning %d", ret);    return ret;}/** packets from the router */mod_ret_t mm_pkt_router(mm_t mm, pkt_t pkt) {    int n;    mod_instance_t mi;    mod_ret_t ret = mod_PASS;    log_debug(ZONE, "dispatching pkt-router chain");    for(n = 0; n < mm->npkt_router; n++) {        mi = mm->pkt_router[n];        if(mi == NULL || mi->mod->pkt_router == NULL) {            log_debug(ZONE, "module %s has no handler for this chain", mi->mod->name);            continue;        }        log_debug(ZONE, "calling module %s", mi->mod->name);        ret = (mi->mod->pkt_router)(mi, pkt);        if(ret != mod_PASS)            break;    }    log_debug(ZONE, "pkt-router chain returning %d", ret);    return ret;}/** load user data */int mm_user_load(mm_t mm, user_t user) {    int n;    mod_instance_t mi;    int ret = 0;    log_debug(ZONE, "dispatching user-load chain");    for(n = 0; n < mm->nuser_load; n++) {        mi = mm->user_load[n];        if(mi == NULL || mi->mod->user_load == NULL) {            log_debug(ZONE, "module %s has no handler for this chain", mi->mod->name);            continue;        }        log_debug(ZONE, "calling module %s", mi->mod->name);        ret = (mi->mod->user_load)(mi, user);        if(ret != 0)            break;    }    log_debug(ZONE, "user-load chain returning %d", ret);    return ret;}/** create user */int mm_user_create(mm_t mm, jid_t jid) {    int n;    mod_instance_t mi;    int ret = 0;    log_debug(ZONE, "dispatching user-create chain");    for(n = 0; n < mm->nuser_create; n++) {        mi = mm->user_create[n];        if(mi == NULL || mi->mod->user_create == NULL) {            log_debug(ZONE, "module %s has no handler for this chain", mi->mod->name);            continue;        }        log_debug(ZONE, "calling module %s", mi->mod->name);        ret = (mi->mod->user_create)(mi, jid);        if(ret != 0)            break;    }    log_debug(ZONE, "user-create chain returning %d", ret);    return ret;}/** delete user */void mm_user_delete(mm_t mm, jid_t jid) {    int n;    mod_instance_t mi;    log_debug(ZONE, "dispatching user-delete chain");    for(n = 0; n < mm->nuser_delete; n++) {        mi = mm->user_delete[n];        if(mi == NULL || mi->mod->user_delete == NULL) {            log_debug(ZONE, "module %s has no handler for this chain", mi->mod->name);            continue;        }        log_debug(ZONE, "calling module %s", mi->mod->name);        (mi->mod->user_delete)(mi, jid);    }    log_debug(ZONE, "user-delete chain returning");}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -