Navigation


Changeset 420:c8a61dabea55 in freeDiameter for extensions/app_sip/diamsip.c


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

app_sip:Added LIR/LIA for SL

File:
1 edited

Legend:

Unmodified
Added
Removed
  • extensions/app_sip/diamsip.c

    r419 r420  
    3636#include "diamsip.h"
    3737
     38//Diameter-SIP server
    3839struct disp_hdl * diamsip_MAR_hdl=NULL;
    3940struct disp_hdl * diamsip_LIR_hdl=NULL;
     
    4243struct disp_hdl * diamsip_PPA_hdl=NULL;
    4344struct disp_hdl * diamsip_RTA_hdl=NULL;
     45
     46//Suscriber Locator
     47struct disp_hdl * diamsipSL_LIR_hdl=NULL;
     48
    4449
    4550
     
    7176        TRACE_DEBUG(FULL,"# mysql_server: *%s*",as_conf->mysql_server);
    7277        TRACE_DEBUG(FULL,"# mysql_port: *%d*",as_conf->mysql_port);
     78        TRACE_DEBUG(FULL,"# mysql_port: *%d*",as_conf->mysql_prefix);
    7379        TRACE_DEBUG(FULL,"***End of Diameter-SIP configuration extension***");
    7480}
     
    9096        struct dict_object * app=NULL;
    9197        struct disp_when data;
    92         pthread_t rtr_thread;
     98        pthread_t rtr_thread, ppr_thread;
    9399       
    94100        /* Initialize configuration */
     
    104110                TRACE_DEBUG(INFO, "We need a configuration file for Diameter-SIP extension. See doc/ for an example.");
    105111        }
     112       
     113        //TODO: replace by configuration file!!
     114        strcpy(as_conf->mysql_prefix,"as_");
    106115       
    107116        //We can dump the configuration extracted from app_sip.conf
     
    118127        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Destination-Host", &sip_dict.Destination_Host, ENOENT) );
    119128        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) );
    120131        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) );
    121132        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "SIP-Authorization", &sip_dict.SIP_Authorization, ENOENT) );
     
    143154        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-QoP", &sip_dict.Digest_QOP, ENOENT) );
    144155        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "User-Name", &sip_dict.User_Name, ENOENT) );
    145        
    146156        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_AVP, AVP_BY_NAME, "Digest-HA1", &sip_dict.Digest_HA1, ENOENT) );
    147157       
     
    151161        CHECK_FCT( fd_dict_search( fd_g_config->cnf_dict, DICT_APPLICATION, APPLICATION_BY_NAME, "Diameter Session Initiation Protocol (SIP) Application", &data.app, ENOENT) );
    152162       
    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        }
    162185        //Callback for unexpected messages
    163186        CHECK_FCT( fd_disp_register( diamsip_default_cb, DISP_HOW_APPID, &data, &diamsip_default_hdl ) );
     
    166189        //We start database connection
    167190        if(start_mysql_connection())
    168                 return 1;
     191                return EINVAL;
    169192       
    170193        CHECK_FCT(fd_sess_handler_create(&ds_sess_hdl, free));
     
    174197        {
    175198                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;
    177206        }
    178207               
     
    188217void fd_ext_fini(void)
    189218{
    190        
     219        //TODO:unregister other callbacks
    191220       
    192221        (void) fd_disp_unregister(&diamsip_MAR_hdl);
Note: See TracChangeset for help on using the changeset viewer.