因此,我已经注册了回调以接收直径请求(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”变量时,我收到了分段错误。
有人可以帮助我吗? 谢谢