Example #1
0
static int mod_init(void)
{
	LM_INFO("Initializing module...\n");

	if (build_hdr_masks()) {
		LM_ERR("Cannot build initial mandatory headers mask\n");
		return -1;
	}

	if (mc_level > 9 || mc_level < 1) {
		LM_WARN("invalid level. using default 6\n");
		mc_level = 6;
	}

	compress_ctx_pos = context_register_ptr(CONTEXT_GLOBAL);
	LM_DBG("received compress context postion %d\n", compress_ctx_pos);

	compact_ctx_pos = context_register_ptr(CONTEXT_GLOBAL);
	LM_DBG("received compact context postion %d\n", compact_ctx_pos);

	memset(&tm_api, 0, sizeof(struct tm_binds));
	if (load_tm_api(&tm_api) != 0)
		LM_DBG("TM modules was not found\n");

	return 0;
}
Example #2
0
static int mod_init(void)
{
	if (payload_compression) {
		load_compression =
			(load_compression_f)find_export("load_compression", 1, 0);
		if (!load_compression) {
			LM_ERR("can't bind compression module!\n");
			return -1;
		}

		if (load_compression(&compression_api)) {
			LM_ERR("failed to load compression api!\n");
			return -1;
		}
	}

	hep_ctx_idx = context_register_ptr(CONTEXT_GLOBAL, free_hep_context);

	return 0;
}
Example #3
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;
}
Example #4
0
static int mod_init(void)
{
	unsigned int n;

	LM_INFO("Dialog module - initializing\n");

	if (timeout_spec.s)
		timeout_spec.len = strlen(timeout_spec.s);

	init_db_url( db_url , 1 /*can be null*/);
	dlg_id_column.len = strlen(dlg_id_column.s);
	call_id_column.len = strlen(call_id_column.s);
	from_uri_column.len = strlen(from_uri_column.s);
	from_tag_column.len = strlen(from_tag_column.s);
	to_uri_column.len = strlen(to_uri_column.s);
	to_tag_column.len = strlen(to_tag_column.s);
	state_column.len = strlen(state_column.s);
	start_time_column.len = strlen(start_time_column.s);
	timeout_column.len = strlen(timeout_column.s);
	to_cseq_column.len = strlen(to_cseq_column.s);
	from_cseq_column.len = strlen(from_cseq_column.s);
	to_route_column.len = strlen(to_route_column.s);
	from_route_column.len = strlen(from_route_column.s);
	to_contact_column.len = strlen(to_contact_column.s);
	from_contact_column.len = strlen(from_contact_column.s);
	to_sock_column.len = strlen(to_sock_column.s);
	from_sock_column.len = strlen(from_sock_column.s);
	profiles_column.len = strlen(profiles_column.s);
	vars_column.len = strlen(vars_column.s);
	sflags_column.len = strlen(sflags_column.s);
	mflags_column.len = strlen(mflags_column.s);
	flags_column.len = strlen(flags_column.s);
	dialog_table_name.len = strlen(dialog_table_name.s);

	/* param checkings */

	if( log_profile_hash_size <= 0)
	{
		LM_ERR("invalid value for log_profile_hash_size:%d!!\n",
			log_profile_hash_size);
		return -1;
	}

	if (rr_param.s==0 || rr_param.s[0]==0) {
		LM_ERR("empty rr_param!!\n");
		return -1;
	}
	rr_param.len = strlen(rr_param.s);
	if (rr_param.len>MAX_DLG_RR_PARAM_NAME) {
		LM_ERR("rr_param too long (max=%d)!!\n", MAX_DLG_RR_PARAM_NAME);
		return -1;
	}

	if (default_timeout<=0) {
		LM_ERR("0 default_timeout not accepted!!\n");
		return -1;
	}


	if (ping_interval<=0) {
		LM_ERR("Non-positive ping interval not accepted!!\n");
		return -1;
	}

	/* update the len of the extra headers */
	if (dlg_extra_hdrs.s)
		dlg_extra_hdrs.len = strlen(dlg_extra_hdrs.s);

	if (seq_match_mode!=SEQ_MATCH_NO_ID &&
	seq_match_mode!=SEQ_MATCH_FALLBACK &&
	seq_match_mode!=SEQ_MATCH_STRICT_ID ) {
		LM_ERR("invalid value %d for seq_match_mode param!!\n",seq_match_mode);
		return -1;
	}

	/* if statistics are disabled, prevent their registration to core */
	if (dlg_enable_stats==0)
		exports.stats = 0;

	/* we are only interested in these parameters if the cachedb url was defined */
	if (cdb_url.s) {
		cdb_url.len = strlen(cdb_url.s);
		if (init_cachedb_utils() <0) {
			LM_ERR("cannot init cachedb utils\n");
			return -1;
		}

		cdb_val_prefix.len = strlen(cdb_val_prefix.s);
		cdb_noval_prefix.len = strlen(cdb_noval_prefix.s);
		cdb_size_prefix.len = strlen(cdb_size_prefix.s);
	}

	/* allocate a slot in the processing context */
	ctx_dlg_idx = context_register_ptr(CONTEXT_GLOBAL);
	ctx_timeout_idx = context_register_int(CONTEXT_GLOBAL);
	ctx_lastdstleg_idx = context_register_int(CONTEXT_GLOBAL);

	/* create dialog state changed event */
	if (state_changed_event_init() < 0) {
		LM_ERR("cannot create dialog state changed event\n");
		return -1;
	}

	/* create profile hashes */
	if (add_profile_definitions( profiles_nv_s, 0)!=0 ) {
		LM_ERR("failed to add profiles without value\n");
		return -1;
	}
	if (add_profile_definitions( profiles_wv_s, 1)!=0 ) {
		LM_ERR("failed to add profiles with value\n");
		return -1;
	}


	/* load the TM API */
	if (load_tm_api(&d_tmb)!=0) {
		LM_ERR("can't load TM API\n");
		return -1;
	}

	/* load RR API also */
	if (load_rr_api(&d_rrb)!=0) {
		LM_ERR("can't load RR API\n");
		return -1;
	}

	/* register callbacks*/
	/* listen for all incoming requests  */
	if ( d_tmb.register_tmcb( 0, 0, TMCB_REQUEST_IN, dlg_onreq, 0, 0 ) <=0 ) {
		LM_ERR("cannot register TMCB_REQUEST_IN callback\n");
		return -1;
	}

	/* listen for all routed requests  */
	if ( d_rrb.register_rrcb( dlg_onroute, 0, 1 ) <0 ) {
		LM_ERR("cannot register RR callback\n");
		return -1;
	}

	if (register_script_cb( dialog_cleanup, POST_SCRIPT_CB|REQ_TYPE_CB|RPL_TYPE_CB,0)<0) {
		LM_ERR("cannot register script callback");
		return -1;
	}

	if ((accept_replicated_dlg || accept_repl_profiles) &&
		bin_register_cb("dialog", receive_binary_packet) < 0) {
		LM_ERR("Cannot register binary packet callback!\n");
		return -1;
	}

	if ( register_timer( "dlg-timer", dlg_timer_routine, NULL, 1,
	TIMER_FLAG_DELAY_ON_DELAY)<0 ) {
		LM_ERR("failed to register timer\n");
		return -1;
	}

	if ( register_timer( "dlg-pinger", dlg_ping_routine, NULL,
	ping_interval, TIMER_FLAG_DELAY_ON_DELAY)<0) {
		LM_ERR("failed to register timer 2\n");
		return -1;
	}

	/* init handlers */
	init_dlg_handlers(default_timeout);

	/* init timer */
	if (init_dlg_timer(dlg_ontimeout)!=0) {
		LM_ERR("cannot init timer list\n");
		return -1;
	}

	if (init_dlg_ping_timer()!=0) {
		LM_ERR("cannot init ping timer\n");
		return -1;
	}

	/* initialized the hash table */
	for( n=0 ; n<(8*sizeof(n)) ; n++) {
		if (dlg_hash_size==(1<<n))
			break;
		if (dlg_hash_size<(1<<n)) {
			LM_WARN("hash_size is not a power "
				"of 2 as it should be -> rounding from %d to %d\n",
				dlg_hash_size, 1<<(n-1));
			dlg_hash_size = 1<<(n-1);
			break;
		}
	}

	if ( init_dlg_table(dlg_hash_size)<0 ) {
		LM_ERR("failed to create hash table\n");
		return -1;
	}

	if (repl_prof_init() < 0) {
		LM_ERR("cannot initialize profile replication\n");
		return -1;
	}

	/* if a database should be used to store the dialogs' information */
	if (dlg_db_mode==DB_MODE_NONE) {
		db_url.s = 0; db_url.len = 0;
	} else {
		if (dlg_db_mode!=DB_MODE_REALTIME &&
		dlg_db_mode!=DB_MODE_DELAYED && dlg_db_mode!=DB_MODE_SHUTDOWN ) {
			LM_ERR("unsupported db_mode %d\n", dlg_db_mode);
			return -1;
		}
		if ( !db_url.s || db_url.len==0 ) {
			LM_ERR("db_url not configured for db_mode %d\n", dlg_db_mode);
			return -1;
		}
		if (init_dlg_db(&db_url, dlg_hash_size, db_update_period)!=0) {
			LM_ERR("failed to initialize the DB support\n");
			return -1;
		}
		run_load_callbacks();
	}

	mark_dlg_loaded_callbacks_run();
	destroy_cachedb(0);

	return 0;
}