static int fixup_dbg_sip_msg(void** param, int param_no) { int facility; int level; struct action *dbg_sip_msg_action; switch(param_no) { case 2: facility = str2facility((char*)*(param)); if (facility == -1) { LM_ERR("invalid log facility configured"); return E_UNSPEC; } *param = (void*)(long)facility; break; case 1: switch(((char*)(*param))[2]) { /* add L_OFFSET because L_WARN is consdered null pointer */ case 'A': level = L_ALERT + L_OFFSET; break; case 'B': level = L_BUG + L_OFFSET; break; case 'C': level = L_CRIT2 + L_OFFSET; break; case 'E': level = L_ERR + L_OFFSET; break; case 'W': level = L_WARN + L_OFFSET; break; case 'N': level = L_NOTICE + L_OFFSET; break; case 'I': level = L_INFO + L_OFFSET; break; case 'D': level = L_DBG + L_OFFSET; break; default: LM_ERR("unknown log level\n"); return E_UNSPEC; } *param = (void*)(long)level; break; } /* save the config line where this config function was called */ dbg_sip_msg_action = dbg_fixup_get_action(param, param_no); _dbg_sip_msg_cline = dbg_sip_msg_action->cline; return 0; }
static struct mi_root* mi_set_dbg_mod_facility(struct mi_root *cmd_tree, void *param) { struct mi_node *node; str mod_str, facility_str; int fl; /* get first param */ node = cmd_tree->node.kids; if (node == NULL) { return init_mi_tree(400, MI_MISSING_PARM_S, MI_MISSING_PARM_LEN); } if (node->value.s == NULL || node->value.len == 0) { return init_mi_tree(400, MI_BAD_PARM_S, MI_BAD_PARM_LEN); } /* get module str */ mod_str = node->value; /* get second param */ node = node->next; if (node == NULL) { return init_mi_tree(400, MI_MISSING_PARM_S, MI_MISSING_PARM_LEN); } if (node->value.s == NULL || node->value.len == 0) { return init_mi_tree(400, MI_BAD_PARM_S, MI_BAD_PARM_LEN); } /* get facility str */ facility_str = node->value; /* no further params expected */ node = node->next; if (node != NULL) { return init_mi_tree(400, MI_MISSING_PARM_S, MI_MISSING_PARM_LEN); } /* get facility int */ facility_str.s[facility_str.len] = '\0'; if ((fl = str2facility(facility_str.s)) == -1) { LM_ERR("invalid parameter - facility value: %.*s\n", facility_str.len, facility_str.s); return init_mi_tree(400, MI_BAD_PARM_S, MI_BAD_PARM_LEN); } /* set facility int */ if (default_dbg_cfg.mod_hash_size <= 0 || default_dbg_cfg.mod_facility_mode <= 0) { LM_ERR("can't set facility for module=%.*s; enable mod_hash_size and mod_facility_mode config parameters!\n", mod_str.len, mod_str.s); return init_mi_tree(500, MI_INTERNAL_ERR_S, MI_INTERNAL_ERR_LEN); } else if (dbg_set_mod_debug_facility(mod_str.s, mod_str.len, &fl) < 0) { LM_ERR("failed set facility for module=%.*s\n", mod_str.len, mod_str.s); return init_mi_tree(500, MI_INTERNAL_ERR_S, MI_INTERNAL_ERR_LEN); } else { LM_DBG("module=%.*s facility_str=%.*s facility_int=%d\n", mod_str.len, mod_str.s, facility_str.len, facility_str.s, fl); } return init_mi_tree(200, MI_OK_S, MI_OK_LEN); }
/* * fixup log facility */ static int xlog3_fixup_helper(void** param, int param_no) { int *facility; str s; s.s = (char*)(*param); if(s.s==NULL) { LM_ERR("wrong log facility\n"); return E_UNSPEC; } facility = (int*)pkg_malloc(sizeof(int)); if(facility == NULL) { LM_ERR("no more memory\n"); return E_UNSPEC; } *facility = str2facility(s.s); if (*facility == -1) { LM_ERR("invalid syslog facility %s\n", s.s); pkg_free(facility); return E_UNSPEC; } pkg_free(*param); *param = (void*)facility; return 0; }
/** * init module function */ static int mod_init(void) { int lf; if(cfg_declare("xlog", xlog_cfg_def, &xlog_default_cfg, cfg_sizeof(xlog), &xlog_cfg)){ LM_ERR("Fail to declare the xlog cfg framework structure\n"); return -1; } if (xlog_facility_name!=NULL) { lf = str2facility(xlog_facility_name); if (lf != -1) { xlog_facility = lf; } else { LM_ERR("invalid syslog facility %s\n", xlog_facility_name); return -1; } } _xlog_buf = (char*)pkg_malloc((buf_size+1)*sizeof(char)); if(_xlog_buf==NULL) { LM_ERR("no pkg memory left\n"); return -1; } return 0; }
/** * init module function */ static int mod_init(void) { int fl; if (_dbg_cfgtrace_facility_str!=NULL) { fl = str2facility(_dbg_cfgtrace_facility_str); if (fl != -1) { _dbg_cfgtrace_facility = fl; } else { LM_ERR("invalid log facility configured"); return -1; } } if(dbg_init_rpc()!=0) { LM_ERR("failed to register RPC commands\n"); return -1; } if(cfg_declare("dbg", dbg_cfg_def, &default_dbg_cfg, cfg_sizeof(dbg), &dbg_cfg)) { LM_ERR("Fail to declare the configuration\n"); return -1; } LM_DBG("cfg level_mode:%d hash_size:%d\n", cfg_get(dbg, dbg_cfg, mod_level_mode), cfg_get(dbg, dbg_cfg, mod_hash_size)); if(dbg_init_mod_levels(cfg_get(dbg, dbg_cfg, mod_hash_size))<0) { LM_ERR("failed to init per module log level\n"); return -1; } if(_dbg_log_assign>0) { if(dbg_init_pvcache()!=0) { LM_ERR("failed to create pvcache\n"); return -1; } } if(_dbg_reset_msgid==1) { unsigned int ALL = REQUEST_CB+FAILURE_CB+ONREPLY_CB +BRANCH_CB+ONSEND_CB+ERROR_CB+LOCAL_CB+EVENT_CB+BRANCH_FAILURE_CB; if (register_script_cb(dbg_msgid_filter, PRE_SCRIPT_CB|ALL, 0) != 0) { LM_ERR("could not insert callback"); return -1; } } return dbg_init_bp_list(); }
/* fixup function for log_facility cfg parameter */ int log_facility_fixup(void *handle, str *gname, str *name, void **val) { int i; if ((i = str2facility((char *)*val)) == -1) { LM_ERR("invalid log facility: %s\n", (char *)*val); return -1; } *val = (void *)(long)i; return 0; }
static int dbg_mod_facility_param(modparam_t type, void *val) { char *p; str s; int fl; if(val==NULL) return -1; p = strchr((char*)val, '='); if(p==NULL) { LM_ERR("invalid parameter value: %s\n", (char*)val); return -1; } s.s = p + 1; s.len = strlen(s.s); if ((fl = str2facility(s.s)) == -1) { LM_ERR("invalid parameter - facility value: %s\n", (char*)val); return -1; } s.s = (char*)val; s.len = p - s.s; if (!dbg_cfg) { return -1; } LM_DBG("cfg facility_mode:%d hash_size:%d\n", cfg_get(dbg, dbg_cfg, mod_facility_mode), cfg_get(dbg, dbg_cfg, mod_hash_size)); if(dbg_init_mod_levels(cfg_get(dbg, dbg_cfg, mod_hash_size))<0) { LM_ERR("failed to init per module log level\n"); return -1; } if(dbg_set_mod_debug_facility(s.s, s.len, &fl)<0) { LM_ERR("cannot store parameter: %s\n", (char*)val); return -1; } return 0; }
/* convert the facility-name string into a id and store it */ int set_cdr_facility( char* cdr_facility_str) { int facility_id = -1; if( !cdr_facility_str) { LM_ERR( "facility is empty\n"); return -1; } facility_id = str2facility( cdr_facility_str); if( facility_id == -1) { LM_ERR("invalid cdr facility configured\n"); return -1; } cdr_facility = facility_id; return 0; }
/** * init module function */ static int mod_init(void) { int fl; if (_dbg_cfgtrace_facility_str!=NULL) { fl = str2facility(_dbg_cfgtrace_facility_str); if (fl != -1) { _dbg_cfgtrace_facility = fl; } else { LM_ERR("invalid log facility configured"); return -1; } } if(dbg_init_rpc()!=0) { LM_ERR("failed to register RPC commands\n"); return -1; } return dbg_init_bp_list(); }
static int mod_init( void ) { pv_spec_t avp_spec; LM_INFO("initializing...\n"); if (db_url.s) db_url.len = strlen(db_url.s); db_table_acc.len = strlen(db_table_acc.s); db_table_mc.len = strlen(db_table_mc.s); acc_method_col.len = strlen(acc_method_col.s); acc_fromtag_col.len = strlen(acc_fromtag_col.s); acc_totag_col.len = strlen(acc_totag_col.s); acc_callid_col.len = strlen(acc_callid_col.s); acc_sipcode_col.len = strlen(acc_sipcode_col.s); acc_sipreason_col.len = strlen(acc_sipreason_col.s); acc_time_col.len = strlen(acc_time_col.s); if (log_facility_str) { int tmp = str2facility(log_facility_str); if (tmp != -1) acc_log_facility = tmp; else { LM_ERR("invalid log facility configured"); return -1; } } /* ----------- GENERIC INIT SECTION ----------- */ fix_flag_name(failed_transaction_string, failed_transaction_flag); failed_transaction_flag = get_flag_id_by_name(FLAG_TYPE_MSG, failed_transaction_string); if (flag_idx2mask(&failed_transaction_flag)<0) return -1; fix_flag_name(cdr_string, cdr_flag); cdr_flag = get_flag_id_by_name(FLAG_TYPE_MSG, cdr_string); if (flag_idx2mask(&cdr_flag)<0) return -1; /* load the TM API */ if (load_tm_api(&tmb)!=0) { LM_ERR("can't load TM API\n"); return -1; } if (load_dlg_api(&dlg_api)!=0) LM_DBG("failed to find dialog API - is dialog module loaded?\n"); if (cdr_flag && !dlg_api.get_dlg) { LM_WARN("error loading dialog module - cdrs cannot be generated\n"); cdr_flag = 0; } /* if detect_direction is enabled, load rr also */ if (detect_direction) { if (load_rr_api(&rrb)!=0) { LM_ERR("can't load RR API\n"); return -1; } /* we need the append_fromtag on in RR */ if (!rrb.append_fromtag) { LM_ERR("'append_fromtag' RR param is not enabled!" " - required by 'detect_direction'\n"); return -1; } } /* listen for all incoming requests */ if ( tmb.register_tmcb( 0, 0, TMCB_REQUEST_IN, acc_onreq, 0, 0 ) <=0 ) { LM_ERR("cannot register TMCB_REQUEST_IN callback\n"); return -1; } /* init the extra engine */ init_acc_extra(); /* configure multi-leg accounting */ if (leg_info_str && (leg_info=parse_acc_leg(leg_info_str))==0 ) { LM_ERR("failed to parse multi_leg_info param\n"); return -1; } if (leg_bye_info_str && (leg_bye_info=parse_acc_leg(leg_bye_info_str))==0 ) { LM_ERR("failed to parse multi_leg_bye_info param\n"); return -1; } /* ----------- SYSLOG INIT SECTION ----------- */ /* parse the extra string, if any */ if (log_extra_str && (log_extra=parse_acc_extra(log_extra_str, 1))==0 ) { LM_ERR("failed to parse log_extra param\n"); return -1; } if (log_extra_bye_str && (log_extra_bye=parse_acc_extra(log_extra_bye_str, 0))==0 ) { LM_ERR("failed to parse log_extra_bye param\n"); return -1; } fix_flag_name(log_string, log_flag); log_flag = get_flag_id_by_name(FLAG_TYPE_MSG, log_string); if (flag_idx2mask(&log_flag)<0) return -1; fix_flag_name(log_missed_string, log_missed_flag); log_missed_flag = get_flag_id_by_name(FLAG_TYPE_MSG, log_missed_string); if (flag_idx2mask(&log_missed_flag)<0) return -1; acc_log_init(); /* ------------ SQL INIT SECTION ----------- */ if (db_url.s && db_url.len > 0) { /* parse the extra string, if any */ if (db_extra_str && (db_extra=parse_acc_extra(db_extra_str, 1))==0 ) { LM_ERR("failed to parse db_extra param\n"); return -1; } if (db_extra_bye_str && (db_extra_bye=parse_acc_extra(db_extra_bye_str, 0))==0 ) { LM_ERR("failed to parse db_extra_bye param\n"); return -1; } if (acc_db_init(&db_url)<0){ LM_ERR("failed...did you load a database module?\n"); return -1; } /* fix the flags */ fix_flag_name(db_string, db_flag); db_flag = get_flag_id_by_name(FLAG_TYPE_MSG, db_string); if (flag_idx2mask(&db_flag)<0) return -1; fix_flag_name(db_missed_string, db_missed_flag); db_missed_flag = get_flag_id_by_name(FLAG_TYPE_MSG, db_missed_string); if (flag_idx2mask(&db_missed_flag)<0) return -1; if (db_table_avp.s) { db_table_avp.len = strlen(db_table_avp.s); if (pv_parse_spec(&db_table_avp, &avp_spec) == 0 || avp_spec.type != PVT_AVP) { LM_ERR("malformed or non AVP %s\n", db_table_avp.s); return -1; } if (pv_get_avp_name(0, &avp_spec.pvp, &db_table_name, &db_table_name_type)) { LM_ERR("invalid definition of AVP %s\n", db_table_avp.s); return -1; } } } else { db_flag = 0; db_missed_flag = 0; } /* ------------ AAA PROTOCOL INIT SECTION ----------- */ if (aaa_proto_url && aaa_proto_url[0]) { /* parse the extra string, if any */ if (aaa_extra_str && (aaa_extra = parse_acc_extra(aaa_extra_str, 1))==0) { LM_ERR("failed to parse aaa_extra param\n"); return -1; } if (aaa_extra_bye_str && (aaa_extra_bye = parse_acc_extra(aaa_extra_bye_str, 0))==0) { LM_ERR("failed to parse aaa_extra_bye param\n"); return -1; } /* fix the flags */ fix_flag_name(aaa_string, aaa_flag); aaa_flag = get_flag_id_by_name(FLAG_TYPE_MSG, aaa_string); if (flag_idx2mask(&aaa_flag)<0) return -1; fix_flag_name(aaa_missed_string, aaa_missed_flag); aaa_missed_flag = get_flag_id_by_name(FLAG_TYPE_MSG, aaa_missed_string); if (flag_idx2mask(&aaa_missed_flag)<0) return -1; if (init_acc_aaa(aaa_proto_url, service_type)!=0 ) { LM_ERR("failed to init radius\n"); return -1; } } else { aaa_proto_url = NULL; aaa_flag = 0; aaa_missed_flag = 0; } /* ------------ DIAMETER INIT SECTION ----------- */ #ifdef DIAM_ACC /* fix the flags */ fix_flag_name(diameter_string, diameter_flag); diameter_flag = get_flag_id_by_name(FLAG_TYPE_MSG, diameter_string); if (flag_idx2mask(&diameter_flag)<0) return -1; fix_flag_name(diameter_missed_string, diameter_missed_flag); diameter_missed_flag=get_flag_id_by_name(FLAG_TYPE_MSG, diameter_missed_string); if (flag_idx2mask(&diameter_missed_flag)<0) return -1; /* parse the extra string, if any */ if (dia_extra_str && (dia_extra=parse_acc_extra(dia_extra_str))==0 ) { LM_ERR("failed to parse dia_extra param\n"); return -1; } if (acc_diam_init()!=0) { LM_ERR("failed to init diameter engine\n"); return -1; } #endif /* ------------ EVENTS INIT SECTION ----------- */ if (evi_extra_str && (evi_extra = parse_acc_extra(evi_extra_str, 1))==0) { LM_ERR("failed to parse evi_extra param\n"); return -1; } if (evi_extra_bye_str && (evi_extra_bye = parse_acc_extra(evi_extra_bye_str, 0))==0) { LM_ERR("failed to parse evi_extra_bye param\n"); return -1; } /* fix the flags */ fix_flag_name(evi_string, evi_flag); evi_flag = get_flag_id_by_name(FLAG_TYPE_MSG, evi_string); if (flag_idx2mask(&evi_flag)<0) return -1; fix_flag_name(evi_missed_string, evi_missed_flag); evi_missed_flag = get_flag_id_by_name(FLAG_TYPE_MSG, evi_missed_string); if (flag_idx2mask(&evi_missed_flag)<0) return -1; if (init_acc_evi() < 0) { LM_ERR("cannot init acc events\n"); return -1; } /* load callbacks */ if (cdr_flag && dlg_api.get_dlg && dlg_api.register_dlgcb(NULL, DLGCB_LOADED,acc_loaded_callback, NULL, NULL) < 0) LM_ERR("cannot register callback for dialog loaded - accounting " "for ongoing calls will be lost after restart\n"); return 0; }
static int mod_init( void ) { #ifdef SQL_ACC if (db_url.s) { if(db_url.len<=0) { db_url.s = NULL; db_url.len = 0; } } if(db_table_acc.len!=3 || strncmp(db_table_acc.s, "acc", 3)!=0) { db_table_acc_data = db_table_acc.s; if(fixup_var_pve_str_12(&db_table_acc_data, 1)<0) { LM_ERR("unable to parse acc table name [%.*s]\n", db_table_acc.len, db_table_acc.s); return -1; } } if(db_table_mc.len!=12 || strncmp(db_table_mc.s, "missed_calls", 12)!=0) { db_table_mc_data = db_table_mc.s; if(fixup_var_pve_str_12(&db_table_mc_data, 1)<0) { LM_ERR("unable to parse mc table name [%.*s]\n", db_table_mc.len, db_table_mc.s); return -1; } } #endif if (log_facility_str) { int tmp = str2facility(log_facility_str); if (tmp != -1) log_facility = tmp; else { LM_ERR("invalid log facility configured"); return -1; } } /* ----------- GENERIC INIT SECTION ----------- */ /* failed transaction handling */ if ((failed_transaction_flag != -1) && !flag_in_range(failed_transaction_flag)) { LM_ERR("failed_transaction_flag set to invalid value\n"); return -1; } if (failed_filter_str) { if (parse_failed_filter(failed_filter_str, failed_filter) == 0) { LM_ERR("failed to parse failed_filter param\n"); return -1; } } else { failed_filter[0] = 0; } /* load the TM API */ if (load_tm_api(&tmb)!=0) { LM_ERR("can't load TM API\n"); return -1; } /* if detect_direction is enabled, load rr also */ if (detect_direction) { if (load_rr_api(&rrb)!=0) { LM_ERR("can't load RR API\n"); return -1; } /* we need the append_fromtag on in RR */ if (!rrb.append_fromtag) { LM_ERR("'append_fromtag' RR param is not enabled!" " - required by 'detect_direction'\n"); return -1; } } /* listen for all incoming requests */ if ( tmb.register_tmcb( 0, 0, TMCB_REQUEST_IN, acc_onreq, 0, 0 ) <=0 ) { LM_ERR("cannot register TMCB_REQUEST_IN callback\n"); return -1; } /* configure multi-leg accounting */ if (leg_info_str && (leg_info=parse_acc_leg(leg_info_str))==0 ) { LM_ERR("failed to parse multileg_info param\n"); return -1; } /* ----------- SYSLOG INIT SECTION ----------- */ /* parse the extra string, if any */ if (log_extra_str && (log_extra=parse_acc_extra(log_extra_str))==0 ) { LM_ERR("failed to parse log_extra param\n"); return -1; } if ((log_flag != -1) && !flag_in_range(log_flag)) { LM_ERR("log_flag set to invalid value\n"); return -1; } if ((log_missed_flag != -1) && !flag_in_range(log_missed_flag)) { LM_ERR("log_missed_flag set to invalid value\n"); return -1; } acc_log_init(); /* ----------- INIT CDR GENERATION ----------- */ if( cdr_enable < 0 || cdr_enable > 1) { LM_ERR("cdr_enable is out of range\n"); return -1; } if( cdr_expired_dlg_enable < 0 || cdr_expired_dlg_enable > 1) { LM_ERR("cdr_expired_dlg_enable is out of range\n"); return -1; } if( cdr_enable) { if( !cdr_start_str.s || !cdr_end_str.s || !cdr_duration_str.s) { LM_ERR( "necessary cdr_parameters are not set\n"); return -1; } if( !cdr_start_str.len || !cdr_end_str.len || !cdr_duration_str.len) { LM_ERR( "necessary cdr_parameters are empty\n"); return -1; } if( set_cdr_extra( cdr_log_extra_str) != 0) { LM_ERR( "failed to set cdr extra '%s'\n", cdr_log_extra_str); return -1; } if( cdr_facility_str && set_cdr_facility( cdr_facility_str) != 0) { LM_ERR( "failed to set cdr facility '%s'\n", cdr_facility_str); return -1; } if( init_cdr_generation() != 0) { LM_ERR("failed to init cdr generation\n"); return -1; } } /* ------------ SQL INIT SECTION ----------- */ #ifdef SQL_ACC if (db_url.s && db_url.len > 0) { /* parse the extra string, if any */ if (db_extra_str && (db_extra=parse_acc_extra(db_extra_str))==0 ) { LM_ERR("failed to parse db_extra param\n"); return -1; } if (acc_db_init(&db_url)<0){ LM_ERR("failed...did you load a database module?\n"); return -1; } /* fix the flags */ if ((db_flag != -1) && !flag_in_range(db_flag)) { LM_ERR("db_flag set to invalid value\n"); return -1; } if ((db_missed_flag != -1) && !flag_in_range(db_missed_flag)) { LM_ERR("db_missed_flag set to invalid value\n"); return -1; } } else { db_url.s = NULL; db_url.len = 0; db_flag = -1; db_missed_flag = -1; } #endif /* ------------ RADIUS INIT SECTION ----------- */ #ifdef RAD_ACC if (radius_config && radius_config[0]) { /* parse the extra string, if any */ if (rad_extra_str && (rad_extra=parse_acc_extra(rad_extra_str))==0 ) { LM_ERR("failed to parse rad_extra param\n"); return -1; } /* fix the flags */ if ((radius_flag != -1) && !flag_in_range(radius_flag)) { LM_ERR("radius_flag set to invalid value\n"); return -1; } if ((radius_missed_flag != -1) && !flag_in_range(radius_missed_flag)) { LM_ERR("radius_missed_flag set to invalid value\n"); return -1; } if (init_acc_rad( radius_config, service_type)!=0 ) { LM_ERR("failed to init radius\n"); return -1; } } else { radius_config = 0; radius_flag = -1; radius_missed_flag = -1; } #endif /* ------------ DIAMETER INIT SECTION ----------- */ #ifdef DIAM_ACC /* fix the flags */ if (flag_idx2mask(&diameter_flag)<0) return -1; if (flag_idx2mask(&diameter_missed_flag)<0) return -1; /* parse the extra string, if any */ if (dia_extra_str && (dia_extra=parse_acc_extra(dia_extra_str))==0 ) { LM_ERR("failed to parse dia_extra param\n"); return -1; } if (acc_diam_init()!=0) { LM_ERR("failed to init diameter engine\n"); return -1; } #endif _acc_module_initialized = 1; if(acc_init_engines()<0) { LM_ERR("failed to init extra engines\n"); return -1; } return 0; }
static int mod_init( void ) { LM_INFO("initializing...\n"); if (db_url.s) db_url.len = strlen(db_url.s); db_table_acc.len = strlen(db_table_acc.s); db_table_mc.len = strlen(db_table_mc.s); acc_method_col.len = strlen(acc_method_col.s); acc_fromtag_col.len = strlen(acc_fromtag_col.s); acc_totag_col.len = strlen(acc_totag_col.s); acc_callid_col.len = strlen(acc_callid_col.s); acc_sipcode_col.len = strlen(acc_sipcode_col.s); acc_sipreason_col.len = strlen(acc_sipreason_col.s); acc_time_col.len = strlen(acc_time_col.s); acc_created_avp_name.len = strlen(acc_created_avp_name.s); if (log_facility_str) { int tmp = str2facility(log_facility_str); if (tmp != -1) acc_log_facility = tmp; else { LM_ERR("invalid log facility configured"); return -1; } } /* load the TM API */ if (load_tm_api(&tmb)!=0) { LM_ERR("can't load TM API\n"); return -1; } /* if detect_direction is enabled, load rr also */ if (detect_direction) { if (load_rr_api(&rrb)!=0) { LM_ERR("can't load RR API\n"); return -1; } /* we need the append_fromtag on in RR */ if (!rrb.append_fromtag) { LM_ERR("'append_fromtag' RR param is not enabled!" " - required by 'detect_direction'\n"); return -1; } } /* init the extra engine */ init_acc_extra(); /* ----------- SYSLOG INIT SECTION ----------- */ acc_log_init(); /* ----------- DATABASE INIT SECTION ----------- */ if (db_url.s) { if (acc_db_init(&db_url)<0) { LM_ERR("failed! bad db url / missing db module ?\n"); return -1; } } /* ------------ AAA PROTOCOL INIT SECTION ----------- */ if (aaa_proto_url && aaa_proto_url[0]) { if (init_acc_aaa(aaa_proto_url, service_type)!=0 ) { LM_ERR("failed to init radius\n"); return -1; } } else { aaa_proto_url = NULL; } /* ----------- EVENT INTERFACE INIT SECTION ----------- */ if (init_acc_evi() < 0) { LM_ERR("cannot init acc events\n"); return -1; } acc_flags_ctx_idx = context_register_ptr(CONTEXT_GLOBAL, free_processing_acc_ctx); acc_tm_flags_ctx_idx = tmb.t_ctx_register_ptr(NULL); return 0; }
/** * init module function */ static int mod_init(void) { int fl; bind_cfgt_t bind_cfgt; if (register_mi_mod(exports.name, mi_cmds) != 0) { LM_ERR("failed to register MI commands\n"); return -1; } if (_dbg_cfgtrace_facility_str!=NULL) { fl = str2facility(_dbg_cfgtrace_facility_str); if (fl != -1) { _dbg_cfgtrace_facility = fl; } else { LM_ERR("invalid log facility configured"); return -1; } } if(dbg_init_rpc()!=0) { LM_ERR("failed to register RPC commands\n"); return -1; } if(cfg_declare("dbg", dbg_cfg_def, &default_dbg_cfg, cfg_sizeof(dbg), &dbg_cfg)) { LM_ERR("Fail to declare the configuration\n"); return -1; } /* anyhow, should fail before */ if (!dbg_cfg) { return -1; } LM_DBG("cfg level_mode:%d facility_mode:%d hash_size:%d\n", cfg_get(dbg, dbg_cfg, mod_level_mode), cfg_get(dbg, dbg_cfg, mod_facility_mode), cfg_get(dbg, dbg_cfg, mod_hash_size)); if(dbg_init_mod_levels(cfg_get(dbg, dbg_cfg, mod_hash_size))<0) { LM_ERR("failed to init per module log level\n"); return -1; } if(_dbg_log_assign>0) { if(dbg_init_pvcache()!=0) { LM_ERR("failed to create pvcache\n"); return -1; } } if(_dbg_reset_msgid==1) { unsigned int ALL = REQUEST_CB+FAILURE_CB+ONREPLY_CB +BRANCH_CB+ONSEND_CB+ERROR_CB+LOCAL_CB+EVENT_CB+BRANCH_FAILURE_CB; if (register_script_cb(dbg_msgid_filter, PRE_SCRIPT_CB|ALL, 0) != 0) { LM_ERR("could not insert callback"); return -1; } } if(_dbg_cfgtest==1) { bind_cfgt = (bind_cfgt_t)find_export("cfgt_bind_cfgt", 1, 0); if (!bind_cfgt) { LM_ERR("can't find cfgt module\n"); return -1; } if (bind_cfgt(&_dbg_cfgt) < 0) { return -1; } LM_INFO("bind to cfgt module\n"); } return dbg_init_bp_list(); }
/** * init module function */ static int mod_init(void) { if(pres_uri_match == 1) { presence_sip_uri_match = sip_uri_case_insensitive_match; } else { presence_sip_uri_match = sip_uri_case_sensitive_match; } if(presence_init_rpc()!=0) { LM_ERR("failed to register RPC commands\n"); return -1; } LM_DBG("db_url=%s/%d/%p\n", ZSW(db_url.s), db_url.len,db_url.s); if(db_url.s== NULL) library_mode= 1; EvList= init_evlist(); if(!EvList){ LM_ERR("unsuccessful initialize event list\n"); return -1; } if(library_mode== 1) { LM_DBG("Presence module used for API library purpose only\n"); return 0; } if(expires_offset<0) expires_offset = 0; if(to_tag_pref==NULL || strlen(to_tag_pref)==0) to_tag_pref="10"; if(max_expires == 0) max_expires = 3600; if(min_expires > max_expires) min_expires = max_expires; if(min_expires_action < 1 || min_expires_action > 2) { LM_ERR("min_expires_action must be 1 = RFC 6665/3261 Reply 423, 2 = force min_expires value\n"); return -1; } if(server_address.s== NULL) LM_DBG("server_address parameter not set in configuration file\n"); /* bind the SL API */ if (sl_load_api(&slb)!=0) { LM_ERR("cannot bind to SL API\n"); return -1; } /* load all TM stuff */ if(load_tm_api(&tmb)==-1) { LM_ERR("Can't load tm functions. Module TM not loaded?\n"); return -1; } if(db_url.s== NULL) { LM_ERR("database url not set!\n"); return -1; } /* binding to database module */ if (db_bind_mod(&db_url, &pa_dbf)) { LM_ERR("Database module not found\n"); return -1; } if (!DB_CAPABILITY(pa_dbf, DB_CAP_ALL)) { LM_ERR("Database module does not implement all functions" " needed by presence module\n"); return -1; } pa_db = pa_dbf.init(&db_url); if (!pa_db) { LM_ERR("Connection to database failed\n"); return -1; } /*verify table versions */ if((db_check_table_version(&pa_dbf, pa_db, &presentity_table, P_TABLE_VERSION) < 0) || (db_check_table_version(&pa_dbf, pa_db, &watchers_table, S_TABLE_VERSION) < 0)) { LM_ERR("error during table version check\n"); return -1; } if(subs_dbmode != NO_DB && db_check_table_version(&pa_dbf, pa_db, &active_watchers_table, ACTWATCH_TABLE_VERSION) < 0) { LM_ERR("wrong table version for %s\n", active_watchers_table.s); return -1; } if(subs_dbmode != DB_ONLY) { if(shtable_size< 1) shtable_size= 512; else shtable_size= 1<< shtable_size; subs_htable= new_shtable(shtable_size); if(subs_htable== NULL) { LM_ERR(" initializing subscribe hash table\n"); return -1; } if(restore_db_subs()< 0) { LM_ERR("restoring subscribe info from database\n"); return -1; } } if(publ_cache_enabled) { if(phtable_size< 1) phtable_size= 256; else phtable_size= 1<< phtable_size; pres_htable= new_phtable(); if(pres_htable== NULL) { LM_ERR("initializing presentity hash table\n"); return -1; } if(pres_htable_restore()< 0) { LM_ERR("filling in presentity hash table from database\n"); return -1; } } startup_time = (int) time(NULL); if(clean_period>0) { register_timer(msg_presentity_clean, 0, clean_period); register_timer(msg_watchers_clean, 0, clean_period); } if(db_update_period>0) register_timer(timer_db_update, 0, db_update_period); if (pres_waitn_time <= 0) pres_waitn_time = 5; if (pres_notifier_poll_rate <= 0) pres_notifier_poll_rate = 10; if (pres_notifier_processes < 0 || subs_dbmode != DB_ONLY) pres_notifier_processes = 0; if (pres_notifier_processes > 0) { if ((pres_notifier_id = shm_malloc(sizeof(int) * pres_notifier_processes)) == NULL) { LM_ERR("allocating shared memory\n"); return -1; } register_basic_timers(pres_notifier_processes); } if (pres_force_delete > 0) pres_force_delete = 1; if (pres_log_facility_str) { int tmp = str2facility(pres_log_facility_str); if (tmp != -1) { pres_local_log_facility = tmp; } else { LM_ERR("invalid log facility configured\n"); return -1; } } else { pres_local_log_facility = cfg_get(core, core_cfg, log_facility); } if (db_table_lock_type != 1) db_table_lock = DB_LOCKING_NONE; pa_dbf.close(pa_db); pa_db = NULL; goto_on_notify_reply=route_lookup(&event_rt, "presence:notify-reply"); if (goto_on_notify_reply>=0 && event_rt.rlist[goto_on_notify_reply]==0) goto_on_notify_reply=-1; /* disable */ return 0; }