在存储和检索会话状态时出现问题

时间:2020-07-28 08:58:39

标签: c free-diameter

因此,我已经注册了回调以接收直径请求(fd_disp_register),现在我想将某些内容存储在会话对象(struct sess_state)中,并在以后的其他地方恢复它。

所以,基本上我的代码段是这样的:

struct sess_state {
    char orig_1[128];
    char orig_2[128];
};

static struct session_handler * ta_cli_reg = NULL;
fd_sess_handler_create ( &ta_cli_reg, state_delete, NULL, NULL ) ;
int req_cb( struct msg ** msg, struct avp * avp, struct session * sess, void * opaque, enum disp_action * act) {

        struct sess_state *s = (struct sess_state *) malloc(sizeof(struct sess_state) ) ;
        strcpy( s->orig_1, "text 1" );
        strcpy( s->orig_2, "text 2" );

        int ret = fd_sess_state_store ( ta_cli_reg, sess,  &s );

}

然后在应用程序的其他部分,我用:

进行检索
static void got_sig() {

    // sid string points to same Session-Id received in req_cb function

    struct session * sess = NULL;
    CHECK_FCT_DO( fd_sess_fromsid ( (os0_t) sid.c_str(), sid.length(), &sess, NULL ), return );

    struct sess_state *p = NULL;
    int ret = fd_sess_state_retrieve( ta_cli_reg, sess, &p );

}

注意:我检查了fd_sess_state_store和fd_sess_state_retrieve的返回值,两者均为0,这似乎很好。但是当我想访问“ p”变量时,我收到了分段错误。

有人可以帮助我吗? 谢谢

0 个答案:

没有答案