Changeset 420:c8a61dabea55 in freeDiameter
- Timestamp:
- Jul 19, 2010, 4:46:33 PM (14 years ago)
- Branch:
- default
- Phase:
- public
- Location:
- extensions
- Files:
-
- 5 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
extensions/app_sip/CMakeLists.txt
r419 r420 21 21 multimediaauth.c 22 22 registrationtermination.c 23 pushprofile.c 24 locationinfo.c 25 locationinfosl.c 23 26 ) 24 27 -
extensions/app_sip/diamsip.c
r419 r420 36 36 #include "diamsip.h" 37 37 38 //Diameter-SIP server 38 39 struct disp_hdl * diamsip_MAR_hdl=NULL; 39 40 struct disp_hdl * diamsip_LIR_hdl=NULL; … … 42 43 struct disp_hdl * diamsip_PPA_hdl=NULL; 43 44 struct disp_hdl * diamsip_RTA_hdl=NULL; 45 46 //Suscriber Locator 47 struct disp_hdl * diamsipSL_LIR_hdl=NULL; 48 44 49 45 50 … … 71 76 TRACE_DEBUG(FULL,"# mysql_server: *%s*",as_conf->mysql_server); 72 77 TRACE_DEBUG(FULL,"# mysql_port: *%d*",as_conf->mysql_port); 78 TRACE_DEBUG(FULL,"# mysql_port: *%d*",as_conf->mysql_prefix); 73 79 TRACE_DEBUG(FULL,"***End of Diameter-SIP configuration extension***"); 74 80 } … … 90 96 struct dict_object * app=NULL; 91 97 struct disp_when data; 92 pthread_t rtr_thread ;98 pthread_t rtr_thread, ppr_thread; 93 99 94 100 /* Initialize configuration */ … … 104 110 TRACE_DEBUG(INFO, "We need a configuration file for Diameter-SIP extension. See doc/ for an example."); 105 111 } 112 113 //TODO: replace by configuration file!! 114 strcpy(as_conf->mysql_prefix,"as_"); 106 115 107 116 //We can dump the configuration extracted from app_sip.conf … … 118 127 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Destination-Host", &sip_dict.Destination_Host, ENOENT) ); 119 128 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Session-Id", &sip_dict.Session_Id, ENOENT) ); 129 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Redirect-Host", &sip_dict.Redirect_Host, ENOENT) ); 130 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Redirect-Host-Usage", &sip_dict.Redirect_Host_Usage, ENOENT) ); 120 131 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-Auth-Data-Item", &sip_dict.SIP_Auth_Data_Item, ENOENT) ); 121 132 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-Authorization", &sip_dict.SIP_Authorization, ENOENT) ); … … 143 154 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-QoP", &sip_dict.Digest_QOP, ENOENT) ); 144 155 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "User-Name", &sip_dict.User_Name, ENOENT) ); 145 146 156 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-HA1", &sip_dict.Digest_HA1, ENOENT) ); 147 157 … … 151 161 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_APPLICATION, APPLICATION_BY_NAME, "Diameter Session Initiation Protocol (SIP) Application", &data.app, ENOENT) ); 152 162 153 154 //**Command Codes 155 //MAR 156 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_COMMAND, CMD_BY_NAME, "Multimedia-Auth-Request", &data.command, ENOENT) ); 157 CHECK_FCT( fd_disp_register( diamsip_MAR_cb, DISP_HOW_CC, &data, &diamsip_MAR_hdl ) ); 158 //RTA 159 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_COMMAND, CMD_BY_NAME, "Registration-Termination-Answer", &data.command, ENOENT) ); 160 CHECK_FCT( fd_disp_register( diamsip_RTA_cb, DISP_HOW_CC, &data, &diamsip_RTA_hdl ) ); 161 163 if(as_conf->mode==1) 164 { 165 //**Command Codes 166 //MAR 167 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_COMMAND, CMD_BY_NAME, "Multimedia-Auth-Request", &data.command, ENOENT) ); 168 CHECK_FCT( fd_disp_register( diamsip_MAR_cb, DISP_HOW_CC, &data, &diamsip_MAR_hdl ) ); 169 //RTA 170 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_COMMAND, CMD_BY_NAME, "Registration-Termination-Answer", &data.command, ENOENT) ); 171 CHECK_FCT( fd_disp_register( diamsip_RTA_cb, DISP_HOW_CC, &data, &diamsip_RTA_hdl ) ); 172 //PPA 173 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_COMMAND, CMD_BY_NAME, "Push-Profile-Answer", &data.command, ENOENT) ); 174 CHECK_FCT( fd_disp_register( diamsip_PPA_cb, DISP_HOW_CC, &data, &diamsip_PPA_hdl ) ); 175 //LIR 176 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_COMMAND, CMD_BY_NAME, "Location-Info-Request", &data.command, ENOENT) ); 177 CHECK_FCT( fd_disp_register( diamsip_LIR_cb, DISP_HOW_CC, &data, &diamsip_LIR_hdl ) ); 178 } 179 if(as_conf->mode==2) 180 { 181 //LIR 182 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_COMMAND, CMD_BY_NAME, "Location-Info-Request", &data.command, ENOENT) ); 183 CHECK_FCT( fd_disp_register( diamsipSL_LIR_cb, DISP_HOW_CC, &data, &diamsipSL_LIR_hdl ) ); 184 } 162 185 //Callback for unexpected messages 163 186 CHECK_FCT( fd_disp_register( diamsip_default_cb, DISP_HOW_APPID, &data, &diamsip_default_hdl ) ); … … 166 189 //We start database connection 167 190 if(start_mysql_connection()) 168 return 1;191 return EINVAL; 169 192 170 193 CHECK_FCT(fd_sess_handler_create(&ds_sess_hdl, free)); … … 174 197 { 175 198 TRACE_DEBUG(INFO,"Creation of thread failed, abort!"); 176 return 1; 199 return EINVAL; 200 } 201 //Creation of thread for Push Profile 202 if(pthread_create(&ppr_thread, NULL,ppr_socket, NULL)) 203 { 204 TRACE_DEBUG(INFO,"Creation of thread failed, abort!"); 205 return EINVAL; 177 206 } 178 207 … … 188 217 void fd_ext_fini(void) 189 218 { 190 219 //TODO:unregister other callbacks 191 220 192 221 (void) fd_disp_unregister(&diamsip_MAR_hdl); -
extensions/app_sip/diamsip.h
r419 r420 53 53 #define MODE_SL 0x2 54 54 55 //Redirect_Host_Usage 56 #define ALL_USER 6 55 57 56 58 /* The module configuration */ … … 62 64 char * mysql_database; 63 65 char * mysql_server; 64 uint16_t mysql_port; 66 char mysql_prefix[10]; //default: as_ 67 uint16_t mysql_port; //if 0, default port will be used 65 68 66 69 }; … … 78 81 void clear_digest(uint8_t * digest, char * readable_digest, int digestlength); 79 82 struct avp_hdr * walk_digest(struct avp *avp, int avp_code); 83 84 85 //MySQL part 80 86 int start_mysql_connection(); 81 87 void request_mysql(char *query); 82 88 void close_mysql_connection(); 89 int get_diameter_uri(const unsigned char *sip_aor, const size_t sipaorlen, char ** diameter_uri, size_t *diameterurilen); 90 83 91 84 92 void DigestCalcHA1(char * pszAlg,char * pszUserName,char * pszRealm,char * pszPassword,char * pszNonce,char * pszCNonce,HASHHEX SessionKey); … … 90 98 //thread procedure 91 99 void *rtr_socket(void *); 100 void *ppr_socket(void *); 92 101 93 102 struct rtrsipaor … … 101 110 int reason; 102 111 }; 112 struct pprsipaor 113 { 114 char username[200]; 115 char label1[200]; 116 char value1[200]; 117 char label2[200]; 118 char value2[200]; 119 char desthost[200]; 120 }; 103 121 int diamsip_RTR_cb(struct rtrsipaor structure); 122 int diamsip_PPR_cb(struct pprsipaor structure); 104 123 #define PORT 666 //TODO:put in conf file 105 124 … … 109 128 int diamsip_MAR_cb( struct msg ** msg, struct avp * avp, struct session * sess, enum disp_action * act); 110 129 int diamsip_RTA_cb( struct msg ** msg, struct avp * avp, struct session * sess, enum disp_action * act); 130 int diamsip_PPA_cb( struct msg ** msg, struct avp * avp, struct session * sess, enum disp_action * act); 131 int diamsip_LIR_cb( struct msg ** msg, struct avp * avp, struct session * sess, enum disp_action * act); 132 133 //Suscriber Locator 134 int diamsipSL_LIR_cb( struct msg ** msg, struct avp * paramavp, struct session * sess, enum disp_action * act); 135 //int diamsipSL_SAR_cb( struct msg ** msg, struct avp * paramavp, struct session * sess, enum disp_action * act); 136 111 137 #define SQL_GETPASSWORD "SELECT `password` FROM ds_users WHERE `username` ='%s'" 112 138 #define SQL_GETPASSWORD_LEN 52 113 139 114 #define SQL_GETSIPURI "SELECT `sip_server_uri` FROM ds_users WHERE `username` ='%s'"140 #define SQL_GETSIPURI "SELECT `sip_server_uri` FROM ds_users WHERE `username` ='%s'" 115 141 #define SQL_GETSIPURI_LEN 60 142 143 #define SQL_GETDIAMURI "SELECT `diameter_uri` FROM sl_sip_aor_map WHERE `sip_aor` ='%s'" 144 #define SQL_GETDIAMURI_LEN 61 116 145 117 146 #define SQL_SETSIPURI "UPDATE ds_users SET `sip_server_uri`='%s', `flag`=1 WHERE `username` ='%s'" … … 140 169 struct dict_object * User_Name; 141 170 struct dict_object * Session_Id; 171 struct dict_object * Redirect_Host; 172 struct dict_object * Redirect_Host_Usage; 142 173 struct dict_object * SIP_Auth_Data_Item; 143 174 struct dict_object * SIP_Authorization; -
extensions/app_sip/libdiamsip.c
r409 r420 34 34 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * 35 35 *********************************************************************************************************/ 36 #include <mysql.h>36 //#include <mysql.h> 37 37 #include "diamsip.h" 38 38 … … 185 185 186 186 } 187 188 int get_diameter_uri(const unsigned char *sip_aor, const size_t sipaorlen, char ** diameter_uri, size_t *diameterurilen) 189 { 190 CHECK_PARAMS(sip_aor && sipaorlen); 191 192 size_t querylen, sipaorpurelen; 193 char *query, *sipaor_pure; 194 int not_found=1; 195 196 197 198 199 //a sip aor must begin by "sip:" or "sips:" so it must at least be longer than 4 chars 200 if(sipaorlen<5) 201 return 2; 202 203 //NOTE: each method has to purify sip_aor itself. You must remove quotes or special chars for security 204 205 switch(as_conf->datasource) 206 { 207 //MySQL 208 case ASMYSQL: 209 210 querylen=SQL_GETDIAMURI_LEN + sipaorlen; 211 212 213 //We allocate the double size of SIP-URI because at worst it can be all quotes 214 CHECK_MALLOC(sipaor_pure=malloc(sipaorlen*2+1)); 215 //We purify SIP-URI not to have forbidden characters 216 sipaorpurelen=mysql_real_escape_string(conn, sipaor_pure, (const char *)sip_aor, sipaorlen); 217 218 219 query = malloc(querylen+sipaorpurelen+ 2); 220 snprintf(query, querylen+1, SQL_GETDIAMURI, sipaor_pure); 221 222 MYSQL_RES *res; 223 MYSQL_ROW row; 224 225 226 //We make the query 227 request_mysql(query); 228 res=mysql_use_result(conn); 229 if(res==NULL) 230 { 231 //We couldn't make the request 232 diameter_uri=NULL; 233 return 2; 234 } 235 TRACE_DEBUG(INFO,"***********%d|%d****************\n%s\n*********************************",sipaorlen,sipaorpurelen,query); 236 while ((row = mysql_fetch_row(res)) != NULL) 237 { 238 *diameterurilen=strlen(row[0]); 239 if(*diameterurilen>0) 240 { 241 CHECK_MALLOC(*diameter_uri=malloc(*diameterurilen+1)); 242 strcpy(*diameter_uri,row[0]); 243 not_found=0; 244 break; 245 } 246 } 247 mysql_free_result(res); 248 free(query); 249 free(sipaor_pure); 250 break; 251 252 default: 253 254 //We must never go here, if so, we must stop diameter_sip 255 diameter_uri=NULL; 256 return 2; 257 258 break; 259 } 260 261 //0 if it was found 262 return not_found; 263 264 } 265 266 187 267 /* 188 268 void nonce_add_element(char * nonce) -
extensions/app_sip/multimediaauth.c
r409 r420 57 57 58 58 59 TRACE_ENTRY("%p %p %p %p", msg, avp, sess, act);59 TRACE_ENTRY("%p %p %p %p", msg, paramavp, sess, act); 60 60 61 61 if (msg == NULL) … … 223 223 224 224 //We allocate the double size of SIP-URI because at worst it can be all quotes 225 sipuri=malloc(avphdr->avp_value->os.len*2+1);225 CHECK_MALLOC(sipuri=malloc(avphdr->avp_value->os.len*2+1)); 226 226 //We purify SIP-URI not to have forbidden characters 227 227 sipurilen=mysql_real_escape_string(conn, sipuri, (const char *)avphdr->avp_value->os.data, avphdr->avp_value->os.len); … … 230 230 //We get the SIP-URI assignated to the user 231 231 querylen=SQL_GETSIPURI_LEN + usernamelen; 232 query = malloc(querylen+2);232 CHECK_MALLOC(query = malloc(querylen+2)); 233 233 snprintf(query, querylen+1, SQL_GETSIPURI, username); 234 234 -
extensions/app_sip/registrationtermination.c
r419 r420 48 48 { 49 49 SOCKET sock; 50 51 52 50 SOCKADDR_IN sin, csin; 51 struct rtrsipaor rtrsip; 52 int rcvbytes=0; 53 53 sock = socket(AF_INET, SOCK_STREAM, 0); 54 54 sin.sin_addr.s_addr = inet_addr("127.0.0.1"); 55 56 57 55 sin.sin_family = AF_INET; 56 sin.sin_port = htons(PORT); 57 socklen_t sinsize = sizeof(csin); 58 58 int accepted=0; 59 59 60 TRACE_DEBUG(INFO,"############********************THREAD OPEN \n********************\n********************\n");61 62 60 if(!bind(sock, (SOCKADDR*)&sin, sizeof(sin))) 63 61 { … … 73 71 { 74 72 rcvbytes=recv(accepted, &rtrsip, sizeof(struct rtrsipaor),0); 75 76 73 77 74 if(rcvbytes>-1) 78 75 { 76 //We received something, we can send an RTR 79 77 diamsip_RTR_cb(rtrsip); 80 81 82 78 } 83 79 } 84 80 } 85 86 87 81 } 88 82 else … … 90 84 91 85 92 93 94 95 TRACE_DEBUG(INFO,"############********************THREAD CLOSED \n********************\n********************\n");96 86 pthread_exit(NULL); 97 87 … … 130 120 131 121 132 TRACE_DEBUG( INFO,"We have %d SIP_AOR",num_aor);122 TRACE_DEBUG(FULL,"Request for %d SIP_AOR to be deregistred.",num_aor); 133 123 134 124 if((got_username + num_aor)==0) … … 167 157 } 168 158 159 //Add the Auth-Application-Id 160 { 161 CHECK_FCT( fd_msg_avp_new ( sip_dict.Auth_Application_Id, 0, &avp ) ); 162 value.i32 = 6; 163 CHECK_FCT( fd_msg_avp_setvalue ( avp, &value ) ); 164 CHECK_FCT( fd_msg_avp_add ( message, MSG_BRW_LAST_CHILD, avp) ); 165 } 169 166 170 167 //Auth_Session_State … … 253 250 } 254 251 252 //TODO:remove for debug 255 253 fd_msg_dump_walk(INFO,message); 256 254 CHECK_FCT( fd_msg_send( &message, NULL, NULL )); -
extensions/test_sip/CMakeLists.txt
r381 r420 9 9 test_sip.c 10 10 test_sip.h 11 multimediaauth.c 12 locationinfo.c 13 registrationtermination.c 11 14 ) 12 15 -
extensions/test_sip/test_sip.c
r409 r420 38 38 #include"test_sip.h" 39 39 40 40 struct disp_hdl * test_sip_MAR_hdl=NULL; 41 struct disp_hdl * test_sip_LIR_hdl=NULL; 42 struct disp_hdl * test_sip_UAR_hdl=NULL; 43 struct disp_hdl * test_sip_SAR_hdl=NULL; 44 struct disp_hdl * test_sip_PPA_hdl=NULL; 45 struct disp_hdl * test_sip_RTA_hdl=NULL; 41 46 42 47 struct disp_hdl * test_sip_MAA_hdl=NULL; … … 53 58 //configuration stucture 54 59 struct ts_conf * ts_conf=NULL; 55 static struct ts_conf app_sip_conf; 60 static struct ts_conf test_sip_conf; 61 56 62 57 63 //dictionary of SIP 58 struct test_sip_dict sip_dict;64 struct sip_dict sip_dict; 59 65 60 66 int test_sip_default_cb( struct msg ** msg, struct avp * avp, struct session * sess, enum disp_action * act) … … 65 71 } 66 72 67 username = "awestfahl" 68 password = "test" 69 sip_aor = "sip:awestfahl@tera.ics.keio.ac.jp" 70 71 #Destination information 72 destination_realm = "freediameter.net" 73 destination_sip = "sip:awestfahl@freediameter.net" 74 73 74 /* 75 75 void dump_config() 76 76 { … … 83 83 TRACE_DEBUG(FULL,"***End of TEST Diameter-SIP configuration extension***"); 84 84 } 85 85 */ 86 86 static int ts_conf_init(void) 87 87 { … … 94 94 95 95 /* entry point */ 96 int as_entry(char * conffile)96 int ts_entry(char * conffile) 97 97 { 98 98 TRACE_ENTRY("%p", conffile); … … 101 101 struct disp_when data; 102 102 103 /* Initialize configuration */104 CHECK_FCT( ts_conf_init() );103 /* Initialize configuration 104 //CHECK_FCT( ts_conf_init() ); 105 105 106 106 … … 116 116 //We can dump the configuration extracted from app_sip.conf 117 117 dump_config(); 118 */ 119 118 120 119 121 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_APPLICATION, APPLICATION_BY_NAME, "Diameter Session Initiation Protocol (SIP) Application", &app, ENOENT) ); … … 125 127 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Auth-Session-State", &sip_dict.Auth_Session_State, ENOENT) ); 126 128 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Auth-Application-Id", &sip_dict.Auth_Application_Id, ENOENT) ); 129 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Destination-Host", &sip_dict.Destination_Host, ENOENT) ); 130 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Destination-Realm", &sip_dict.Destination_Realm, ENOENT) ); 131 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Session-Id", &sip_dict.Session_Id, ENOENT) ); 127 132 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-Auth-Data-Item", &sip_dict.SIP_Auth_Data_Item, ENOENT) ); 128 133 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-Authorization", &sip_dict.SIP_Authorization, ENOENT) ); … … 134 139 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-Method", &sip_dict.SIP_Method, ENOENT) ); 135 140 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-AOR", &sip_dict.SIP_AOR, ENOENT) ); 141 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-Deregistration-Reason", &sip_dict.SIP_Deregistration_Reason, ENOENT) ); 142 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-Reason-Code", &sip_dict.SIP_Reason_Code, ENOENT) ); 143 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-Reason-Info", &sip_dict.SIP_Reason_Info, ENOENT) ); 136 144 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-Realm", &sip_dict.Digest_Realm, ENOENT) ); 137 145 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-URI", &sip_dict.Digest_URI, ENOENT) ); … … 157 165 158 166 //**Command Codes 167 /**/ 159 168 //MAR 160 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_COMMAND, CMD_BY_NAME, "Multimedia-Auth-Request", &data.command, ENOENT) ); 161 CHECK_FCT( fd_disp_register( test_sip_MAR_cb, DISP_HOW_CC, &data, &test_sip_MAR_hdl ) ); 169 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_COMMAND, CMD_BY_NAME, "Multimedia-Auth-Answer", &data.command, ENOENT) ); 170 CHECK_FCT( fd_disp_register( test_sip_MAA_cb, DISP_HOW_CC, &data, &test_sip_MAA_hdl ) ); 171 162 172 //RTR 163 173 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_COMMAND, CMD_BY_NAME, "Registration-Termination-Request", &data.command, ENOENT) ); 164 CHECK_FCT( fd_disp_register( test_sip_RTR_cb, DISP_HOW_CC, &data, &test_sip_RTA_hdl ) ); 174 CHECK_FCT( fd_disp_register( test_sip_RTR_cb, DISP_HOW_CC, &data, &test_sip_RTR_hdl ) ); 175 176 //LIA 177 CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_COMMAND, CMD_BY_NAME, "Location-Info-Answer", &data.command, ENOENT) ); 178 CHECK_FCT( fd_disp_register( test_sip_LIA_cb, DISP_HOW_CC, &data, &test_sip_LIA_hdl ) ); 165 179 166 180 … … 168 182 CHECK_FCT( fd_disp_register( test_sip_default_cb, DISP_HOW_APPID, &data, &test_sip_default_hdl ) ); 169 183 170 184 /* 171 185 //We start database connection 172 186 if(start_mysql_connection()) 173 187 return 1; 174 175 CHECK_FCT(fd_sess_handler_create(&ds_sess_hdl, free)); 188 */ 189 190 CHECK_FCT(fd_sess_handler_create(&ts_sess_hdl, free)); 191 CHECK_FCT( fd_sig_register(30, "test_sip", (void *)test_sip_LIR_cb ) ); 176 192 177 193 return 0; … … 181 197 void fd_ext_fini(void) 182 198 { 183 199 /* 184 200 if (test_sip_MAR_cb) { 185 201 (void) fd_disp_unregister(&test_sip_MAR_hdl); 186 202 CHECK_FCT_DO( fd_sess_handler_destroy(&ds_sess_hdl),return); 187 203 } 188 204 */ 189 205 //We close database connection 190 close_mysql_connection();206 //close_mysql_connection(); 191 207 192 208 -
extensions/test_sip/test_sip.h
r409 r420 34 34 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * 35 35 *********************************************************************************************************/ 36 36 #include <freeDiameter/extension.h> 37 #include <sys/time.h> 38 #include <stdint.h> 39 #include <stdlib.h> 40 #include <stdio.h> 41 #include <gcrypt.h> 42 #include <string.h> 43 #include <mysql.h> 37 44 38 45 /* The module configuration */ 39 struct t est_sip_conf {46 struct ts_conf { 40 47 char * destination_sip; 41 48 char * destination_realm; … … 44 51 char * sip_aor; 45 52 }; 46 extern struct test_sip_conf * test_sip_conf; 47 53 extern struct ts_conf * ts_conf; 48 54 49 55 //Storage for some usefull AVPs … … 51 57 struct dict_object * Auth_Session_State; 52 58 struct dict_object * Auth_Application_Id; 59 struct dict_object * Destination_Host; 60 struct dict_object * Destination_Realm; 53 61 struct dict_object * User_Name; 62 struct dict_object * Session_Id; 54 63 struct dict_object * SIP_Auth_Data_Item; 55 64 struct dict_object * SIP_Authorization; … … 61 70 struct dict_object * SIP_Method; 62 71 struct dict_object * SIP_AOR; 72 struct dict_object * SIP_Deregistration_Reason; 73 struct dict_object * SIP_Reason_Code; 74 struct dict_object * SIP_Reason_Info; 63 75 struct dict_object * Digest_URI; 64 76 struct dict_object * Digest_Nonce; … … 76 88 77 89 extern struct sip_dict sip_dict; 90 extern struct session_handler * ts_sess_hdl; 78 91 92 int ts_entry(); 93 void fd_ext_fini(void); 79 94 80 95 int test_sip_LIR_cb(); 81 96 82 97 int test_sip_default_cb( struct msg ** msg, struct avp * avp, struct session * sess, enum disp_action * act); 83 98 int test_sip_MAA_cb( struct msg ** msg, struct avp * avp, struct session * sess, enum disp_action * act); 84 99 int test_sip_RTR_cb( struct msg ** msg, struct avp * avp, struct session * sess, enum disp_action * act); 100 int test_sip_LIA_cb( struct msg ** msg, struct avp * avp, struct session * sess, enum disp_action * act); 85 101 86
Note: See TracChangeset
for help on using the changeset viewer.