Navigation


Changeset 409:c2fb5b26bfcb in freeDiameter for extensions/test_sip/test_sip.c


Ignore:
Timestamp:
Jul 8, 2010, 4:19:28 PM (14 years ago)
Author:
Alexandre Westfahl <awestfahl@freediameter.net>
Branch:
default
Phase:
public
Message:

Fix for ticket 8

File:
1 edited

Legend:

Unmodified
Added
Removed
  • extensions/test_sip/test_sip.c

    r392 r409  
    4040
    4141
     42struct disp_hdl * test_sip_MAA_hdl=NULL;
     43struct disp_hdl * test_sip_LIA_hdl=NULL;
     44struct disp_hdl * test_sip_UAA_hdl=NULL;
     45struct disp_hdl * test_sip_SAA_hdl=NULL;
     46struct disp_hdl * test_sip_PPR_hdl=NULL;
     47struct disp_hdl * test_sip_RTR_hdl=NULL;
    4248
     49
     50struct disp_hdl * test_sip_default_hdl=NULL;
     51struct session_handler * ts_sess_hdl;
     52
     53//configuration stucture
     54struct ts_conf * ts_conf=NULL;
     55static struct ts_conf app_sip_conf;
     56
     57//dictionary of SIP
     58struct test_sip_dict sip_dict;
     59
     60int test_sip_default_cb( struct msg ** msg, struct avp * avp, struct session * sess, enum disp_action * act)
     61{
     62        TRACE_ENTRY("%p %p %p %p", msg, avp, sess, act);
     63       
     64        return 0;
     65}
     66
     67username = "awestfahl"
     68password = "test"
     69sip_aor = "sip:awestfahl@tera.ics.keio.ac.jp"
     70
     71#Destination information
     72destination_realm = "freediameter.net"
     73destination_sip = "sip:awestfahl@freediameter.net"
     74
     75void dump_config()
     76{
     77        TRACE_DEBUG(FULL,"***Configuration of TEST Diameter-SIP extension***");
     78        TRACE_DEBUG(FULL,"# username: *%s*",ts_conf->username);
     79        TRACE_DEBUG(FULL,"# password: *%s*",ts_conf->password);
     80        TRACE_DEBUG(FULL,"# sip_aor: *%s*",ts_conf->sip_aor);
     81        TRACE_DEBUG(FULL,"# destination_realm: *%s*",ts_conf->destination_realm);
     82        TRACE_DEBUG(FULL,"# destination_sip: *%s*",ts_conf->destination_sip);
     83        TRACE_DEBUG(FULL,"***End of TEST Diameter-SIP configuration extension***");
     84}
     85
     86static int ts_conf_init(void)
     87{
     88        ts_conf=&test_sip_conf;
     89        //memset(app_sip_conf, 0, sizeof(struct ts_conf));
     90       
     91
     92        return 0;
     93}
     94
     95/* entry point */
     96int as_entry(char * conffile)
     97{
     98        TRACE_ENTRY("%p", conffile);
     99       
     100        struct dict_object * app=NULL;
     101        struct disp_when data;
     102       
     103        /* Initialize configuration */
     104        CHECK_FCT( ts_conf_init() );
     105       
     106       
     107        //We parse the configuration file
     108        if (conffile != NULL) {
     109                CHECK_FCT( ts_conf_handle(conffile) );
     110        }
     111        else
     112        {
     113                TRACE_DEBUG(INFO, "We need a configuration file for Diameter-SIP extension. See doc/ for an example.");
     114        }
     115       
     116        //We can dump the configuration extracted from app_sip.conf
     117        dump_config();
     118       
     119        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_APPLICATION, APPLICATION_BY_NAME, "Diameter Session Initiation Protocol (SIP) Application", &app, ENOENT) );
     120        CHECK_FCT( fd_disp_app_support ( app, NULL, 1, 0 ) );
     121       
     122       
     123       
     124        //We set usefull AVPs
     125        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        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Auth-Application-Id", &sip_dict.Auth_Application_Id, ENOENT) );
     127        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        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-Authorization", &sip_dict.SIP_Authorization, ENOENT) );
     129        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-Authenticate", &sip_dict.SIP_Authenticate, ENOENT) );
     130        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-Number-Auth-Items", &sip_dict.SIP_Number_Auth_Items, ENOENT) );
     131        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-Authentication-Scheme", &sip_dict.SIP_Authentication_Scheme, ENOENT) );
     132        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-Authentication-Info", &sip_dict.SIP_Authentication_Info, ENOENT) );
     133        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-Server-URI", &sip_dict.SIP_Server_URI, ENOENT) );
     134        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-Method", &sip_dict.SIP_Method, ENOENT) );
     135        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-AOR", &sip_dict.SIP_AOR, ENOENT) );
     136        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-Realm", &sip_dict.Digest_Realm, ENOENT) );
     137        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-URI", &sip_dict.Digest_URI, ENOENT) );
     138        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-Nonce", &sip_dict.Digest_Nonce, ENOENT) );
     139        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-CNonce", &sip_dict.Digest_CNonce, ENOENT) );
     140        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-Method", &sip_dict.Digest_Method, ENOENT) );
     141        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-Nonce-Count", &sip_dict.Digest_Nonce_Count, ENOENT) );
     142        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-Realm", &sip_dict.Digest_Realm, ENOENT) );
     143        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-Response", &sip_dict.Digest_Response, ENOENT) );
     144        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-Response-Auth", &sip_dict.Digest_Response_Auth, ENOENT) );
     145        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-Username", &sip_dict.Digest_Username, ENOENT) );
     146        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-Algorithm", &sip_dict.Digest_Algorithm, ENOENT) );
     147        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-QoP", &sip_dict.Digest_QOP, ENOENT) );
     148        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "User-Name", &sip_dict.User_Name, ENOENT) );
     149       
     150        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-HA1", &sip_dict.Digest_HA1, ENOENT) );
     151       
     152       
     153        //Register Application
     154        memset(&data, 0, sizeof(data));
     155        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_APPLICATION, APPLICATION_BY_NAME, "Diameter Session Initiation Protocol (SIP) Application", &data.app, ENOENT) );
     156       
     157       
     158        //**Command Codes
     159        //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 ) );
     162        //RTR
     163        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 ) );
     165       
     166       
     167        //Callback for unexpected messages
     168        CHECK_FCT( fd_disp_register( test_sip_default_cb, DISP_HOW_APPID, &data, &test_sip_default_hdl ) );
     169       
     170       
     171        //We start database connection
     172        if(start_mysql_connection())
     173                return 1;
     174       
     175        CHECK_FCT(fd_sess_handler_create(&ds_sess_hdl, free));
     176       
     177        return 0;
     178}
     179
     180//Cleanup callback
     181void fd_ext_fini(void)
     182{
     183       
     184        if (test_sip_MAR_cb) {
     185                (void) fd_disp_unregister(&test_sip_MAR_hdl);
     186                CHECK_FCT_DO( fd_sess_handler_destroy(&ds_sess_hdl),return);
     187        }
     188       
     189        //We close database connection
     190        close_mysql_connection();
     191       
     192
     193       
     194        TRACE_ENTRY();
     195        return ;
     196}
     197
     198EXTENSION_ENTRY("test_sip", ts_entry);
     199
Note: See TracChangeset for help on using the changeset viewer.