/*********************************************************************** * Registered as a callback with our SIP data blocks when * they are added to the underlying stream session. Called * by the stream preprocessor when a session is about to be * destroyed. * * PARAMETERS: * * idatap: Pointer to the moribund data. * * RETURNS: Nothing. ***********************************************************************/ static void FreeSIPData( void* idatap ) { SIPData *ssn = (SIPData *)idatap; SIPConfig *config = NULL; if (ssn == NULL) return; if (numSessions > 0) numSessions--; /*Free all the dialog data*/ sip_freeDialogs(ssn->dialogs); /*Clean the configuration data*/ if (ssn->config != NULL) { config = (SIPConfig *)sfPolicyUserDataGet(ssn->config, ssn->policy_id); } if (config == NULL) { free(ssn); return; } config->ref_count--; if ((config->ref_count == 0) && (ssn->config != sip_config)) { sfPolicyUserDataClear (ssn->config, ssn->policy_id); free(config); if (sfPolicyUserPolicyGetActive(ssn->config) == 0) { /* No more outstanding configs - free the config array */ SIPFreeConfig(ssn->config); } } free(ssn); }
static int SIPReloadVerify(void) { SIPConfig * pPolicyConfig = NULL; SIPConfig * pCurrentConfig = NULL; if (sip_swap_config == NULL) return 0; pPolicyConfig = (SIPConfig *)sfPolicyUserDataGet(sip_swap_config, _dpd.getDefaultPolicy()); if (!pPolicyConfig) return 0; if ( pPolicyConfig->disabled ) return 0; if (!_dpd.isPreprocEnabled(PP_STREAM5)) { DynamicPreprocessorFatalMessage("SetupSIP(): The Stream preprocessor must be enabled.\n"); } if (sip_config != NULL) { pCurrentConfig = (SIPConfig *)sfPolicyUserDataGet(sip_config, _dpd.getDefaultPolicy()); } if (!pCurrentConfig) return 0; if (pPolicyConfig->maxNumSessions != pCurrentConfig->maxNumSessions) { _dpd.errMsg("SIP reload: Changing the max_sessions requires a restart.\n"); SIPFreeConfig(sip_swap_config); sip_swap_config = NULL; return -1; } return 0; }