Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00029 #include "../../mem/mem.h"
00030 #include "rr_cb.h"
00031
00032
00034 struct rr_callback* rrcb_hl = 0;
00035
00036
00040 void destroy_rrcb_lists(void)
00041 {
00042 struct rr_callback *cbp, *cbp_tmp;
00043
00044 for( cbp=rrcb_hl; cbp ; ) {
00045 cbp_tmp = cbp;
00046 cbp = cbp->next;
00047 pkg_free( cbp_tmp );
00048 }
00049 }
00050
00051
00058 int register_rrcb( rr_cb_t f, void *param )
00059 {
00060 struct rr_callback *cbp;
00061
00062
00063 if (!(cbp=pkg_malloc( sizeof( struct rr_callback)))) {
00064 LM_ERR("no more pkg mem\n");
00065 return -1;
00066 }
00067
00068
00069 cbp->callback = f;
00070 cbp->param = param;
00071
00072 cbp->next = rrcb_hl;
00073 rrcb_hl = cbp;
00074
00075 if (cbp->next)
00076 cbp->id = cbp->next->id+1;
00077 else
00078 cbp->id = 0;
00079
00080 return 0;
00081 }
00082
00083
00089 void run_rr_callbacks( struct sip_msg *req, str *rr_param )
00090 {
00091 str l_param;
00092 struct rr_callback *cbp;
00093
00094 for ( cbp=rrcb_hl ; cbp ; cbp=cbp->next ) {
00095 l_param = *rr_param;
00096 LM_DBG("callback id %d entered with <%.*s>\n",
00097 cbp->id , l_param.len,l_param.s);
00098 cbp->callback( req, &l_param, cbp->param );
00099 }
00100 }