/** * init module function */ static int mod_init(void) { load_tm_f load_tm; DBG("MSILO: initializing ...\n"); /* binding to mysql module */ if (bind_dbmod()) { DBG("MSILO: ERROR: Database module not found\n"); return -1; } /* import the TM auto-loading function */ if ( !(load_tm=(load_tm_f)find_export("load_tm", NO_SCRIPT, 0))) { LOG(L_ERR, "ERROR: msilo: mod_init: can't import load_tm\n"); return -1; } /* let the auto-loading function load all TM stuff */ if (load_tm( &tmb )==-1) return -1; ml = msg_list_init(); if(!ml) { DBG("ERROR: msilo: mod_init: can't initialize msg list\n"); return -1; } register_timer( m_clean_silo, 0, check_time); reg_addr.s = registrar; reg_addr.len = (registrar)?strlen(registrar):0; return 0; }
static int mod_init(void) { bind_sl_t bind_sl; DBG("speeddial module - initializing\n"); /* Find a database module */ if (bind_dbmod(db_url, &db_funcs)) { LOG(L_ERR, "sd:mod_init: Unable to bind database module\n"); return -1; } if (!DB_CAPABILITY(db_funcs, DB_CAP_QUERY)) { LOG(L_ERR, "sd:mod_init: Database modules does not " "provide all functions needed by SPEEDDIAL module\n"); return -1; } /** * We will need sl_send_reply from stateless * module for sending replies */ bind_sl = (bind_sl_t)find_export("bind_sl", 0, 0); if (!bind_sl) { ERR("This module requires sl module\n"); return -1; } if (bind_sl(&sl) < 0) return -1; return 0; }
/* * Module initialization function */ static int mod_init(void) { DBG("usrloc - initializing\n"); /* Register cache timer */ register_timer(timer, 0, timer_interval); /* Initialize fifo interface */ if (init_ul_fifo()<0) { LOG(L_ERR, "ERROR: usrloc/fifo initialization failed\n"); return -1; } /* Shall we use database ? */ if (db_mode != NO_DB) { /* Yes */ if (bind_dbmod() < 0) { /* Find database module */ LOG(L_ERR, "mod_init(): Can't bind database module\n"); return -1; } /* Open database connection in parent */ db = db_init(db_url); if (!db) { LOG(L_ERR, "mod_init(): Error while connecting database\n"); return -1; } else { LOG(L_INFO, "mod_init(): Database connection opened successfuly\n"); } } return 0; }
int domain_db_bind(char* db_url) { if (bind_dbmod(db_url, &domain_dbf )) { LM_ERR("Cannot bind to database module!"); return -1; } return 0; }
int domainpolicy_db_bind(char* db_url) { if (bind_dbmod(db_url, &domainpolicy_dbf )) { LM_CRIT("cannot bind to database module! " "Did you forget to load a database module ?\n"); return -1; } return 0; }
int domain_db_bind(char* db_url) { if (bind_dbmod(db_url, &domain_dbf )) { LOG(L_CRIT, "ERROR: domain_db_bind: cannot bind to database module! " "Did you forget to load a database module ?\n"); return -1; } return 0; }
/** * Bind to the database module. * @param db_url - URL of the database * @returns 0 on success, -1 on error */ int icscf_db_bind(char* db_url) { if (bind_dbmod(icscf_db_url, &dbf)) { LOG(L_CRIT, "CRIT:"M_NAME":icscf_db_bind: cannot bind to database module! " "Did you forget to load a database module ?\n"); return -1; } return 0; }
int group_db_bind(char* db_url) { if (bind_dbmod(db_url, &group_dbf)<0){ LM_ERR("unable to bind to the database module\n"); return -1; } if (!DB_CAPABILITY(group_dbf, DB_CAP_QUERY)) { LM_ERR("database module does not implement 'query' function\n"); return -1; } return 0; }
static int mod_init(void) { if (bind_dbmod(db_url, &db) < 0) { LOG(L_ERR, "avp_db:mod_init: Unable to bind a database driver\n"); return -1; } if (!DB_CAPABILITY(db, DB_CAP_QUERY)) { LOG(L_ERR, "avp_db:mod_init: Selected database driver does not suppor the query capability\n"); return -1; } return 0; }
/* binds to the corresponding database module * returns 0 on success, -1 on error */ int acc_db_bind(char* db_url) { acc_db_url=db_url; if (bind_dbmod(acc_db_url, &acc_dbf)<0){ LOG(L_ERR, "ERROR: acc_db_init: bind_db failed\n"); return -1; } /* Check database capabilities */ if (!DB_CAPABILITY(acc_dbf, DB_CAP_INSERT)) { LOG(L_ERR, "ERROR: acc_db_init: Database module does not implement insert function\n"); return -1; } return 0; }
static int mod_init(void) { bind_auth_t bind_auth; LOG(L_INFO, "AUTH_DB module - initializing\n"); user_column.len = strlen(user_column.s); domain_column.len = strlen(domain_column.s); pass_column.len = strlen(pass_column.s); pass_column_2.len = strlen(pass_column.s); /* Find a database module */ if (bind_dbmod(db_url, &auth_dbf) < 0){ LOG(L_ERR,"ERROR:auth_db:child_init: Unable to bind to " "a database driver\n"); return -1; } /* bind to auth module and import the API */ bind_auth = (bind_auth_t)find_export("bind_auth", 0, 0); if (!bind_auth) { LOG(L_ERR,"ERROR:auth_db:mod_init: Unable to find \"bind_auth\"" "function\n"); return -2; } if (bind_auth(&auth_api) < 0) { LOG(L_ERR,"ERROR:auth_db:mod_init: Unable to bind auth module\n"); return -3; } sl_reply = find_export("sl_send_reply", 2, 0); if (!sl_reply) { LOG(L_ERR,"ERROR:auth_db:mod_init: This module requires sl module\n"); return -4; } /* process additional list of credentials */ if (parse_aaa_avps( credentials_list, &credentials, &credentials_n)!=0) { LOG(L_ERR,"ERROR:auth_db:mod_init: failed to parse credentials\n"); return -5; } return 0; }
/** * init module function */ static int mod_init(void) { str _s; int ver; xcap_db_url.len = xcap_db_url.s ? strlen(xcap_db_url.s) : 0; /* binding to mysql module */ if (bind_dbmod(xcap_db_url.s, &xcap_dbf)) { LM_ERR("Database module not found\n"); return -1; } if (!DB_CAPABILITY(xcap_dbf, DB_CAP_ALL)) { LM_ERR("Database module does not implement all functions" " needed by the module\n"); return -1; } xcap_db = xcap_dbf.init(xcap_db_url.s); if (!xcap_db) { LM_ERR("while connecting to database\n"); return -1; } _s.s = xcap_db_table; _s.len = strlen(xcap_db_table); ver = table_version(&xcap_dbf, xcap_db, &_s); if(ver!=XCAP_TABLE_VERSION) { LM_ERR("Wrong version v%d for table <%s>, need v%d\n", ver, _s.s, XCAP_TABLE_VERSION); return -1; } curl_global_init(CURL_GLOBAL_ALL); if(periodical_query) { register_timer(query_xcap_update, 0, query_period); } return 0; }
static int mod_init(void) { load_tm_f load_tm; /* import the TM auto-loading function */ if ( !(load_tm = (load_tm_f)find_export("load_tm", NO_SCRIPT, 0))) { LOG(L_ERR, "ERROR:acc:mod_init: can't import load_tm\n"); return -1; } /* let the auto-loading function load all TM stuff */ if (load_tm( &tmb )==-1) return -1; if (verify_fmt(log_fmt)==-1) return -1; /* register callbacks*/ /* listen for all incoming requests */ if (tmb.register_tmcb( 0, 0, TMCB_REQUEST_IN, on_req, 0 ) <= 0) { LOG(L_ERR,"ERROR:acc:mod_init: cannot register TMCB_REQUEST_IN " "callback\n"); return -1; } if (bind_dbmod(db_url.s, &acc_dbf) < 0) { LOG(L_ERR, "ERROR:acc:mod_init: bind_db failed\n"); return -1; } /* Check database capabilities */ if (!DB_CAPABILITY(acc_dbf, DB_CAP_INSERT)) { LOG(L_ERR, "ERROR:acc:mod_init: Database module does not implement insert function\n"); return -1; } init_data(log_fmt); if (parse_attrs(&avps, &avps_n, attrs) < 0) { ERR("Error while parsing 'attrs' module parameter\n"); return -1; } return 0; }
static int mod_init(void) { if (bind_dbmod(db_url.s, &db )) { LOG(L_CRIT, "Cannot bind to database module! " "Did you forget to load a database module ?\n"); return -1; } /* Check if cache needs to be loaded from domain table */ if (db_mode) { if (connect_db() < 0) goto error; if (check_version() < 0) goto error; if (allocate_tables() < 0) goto error; if (reload_domain_list() < 0) goto error; disconnect_db(); } return 0; error: disconnect_db(); return -1; }
/** * init module function */ static int mod_init(void) { DBG("PDT: initializing...\n"); if(hs_two_pow<0) { LOG(L_ERR, "PDT:mod_init: hash_size_two_pow must be" " positive and less than %d\n", MAX_HSIZE_TWO_POW); return -1; } prefix.len = strlen(prefix.s); /* binding to mysql module */ if(bind_dbmod(db_url, &pdt_dbf)) { LOG(L_ERR, "PDT:mod_init: Database module not found\n"); return -1; } if (!DB_CAPABILITY(pdt_dbf, DB_CAP_ALL)) { LOG(L_ERR, "PDT: mod_init: Database module does not " "implement all functions needed by the module\n"); return -1; } /* open a connection with the database */ db_con = pdt_dbf.init(db_url); if(db_con==NULL) { LOG(L_ERR, "PDT: mod_init: Error while connecting to database\n"); return -1; } if (pdt_dbf.use_table(db_con, db_table) < 0) { LOG(L_ERR, "PDT: mod_init: Error in use_table\n"); goto error1; } DBG("PDT: mod_init: Database connection opened successfully\n"); /* init the hash and tree in share memory */ if( (_dhash = pdt_init_hash(hs_two_pow)) == NULL) { LOG(L_ERR, "PDT:mod_init: domain hash could not be allocated\n"); goto error1; } if( (_ptree = pdt_init_tree()) == NULL) { LOG(L_ERR, "PDT:mod_init: prefix tree could not be allocated\n"); goto error2; } /* loading all information from database */ if(pdt_load_db()!=0) { LOG(L_ERR, "PDT:mod_init: cannot load info from database\n"); goto error3; } pdt_dbf.close(db_con); db_con = 0; pdt_print_tree(_ptree); DBG("PDT:mod_init: -------------------\n"); pdt_print_hash(_dhash); last_sync = time(NULL); register_timer(pdt_clean_cache, 0, clean_time); /* success code */ return 0; error3: if(_ptree!=NULL) { pdt_free_tree(_ptree); _ptree = 0; } error2: if(_dhash!=NULL) { pdt_free_hash(_dhash); _dhash = 0; } error1: if(db_con!=NULL) { pdt_dbf.close(db_con); db_con = 0; } return -1; }
static int mod_init( void ) { load_tm_f load_tm; fprintf( stderr, "acc - initializing\n"); /* import the TM auto-loading function */ if ( !(load_tm=(load_tm_f)find_export("load_tm", NO_SCRIPT, 0))) { LOG(L_ERR, "ERROR: acc: mod_init: can't import load_tm\n"); return -1; } /* let the auto-loading function load all TM stuff */ if (load_tm( &tmb )==-1) return -1; if (verify_fmt(log_fmt)==-1) return -1; /* register callbacks */ /* report on completed transactions */ if (tmb.register_tmcb( TMCB_RESPONSE_OUT, acc_onreply, 0 /* empty param */ ) <= 0) return -1; /* account e2e acks if configured to do so */ if (tmb.register_tmcb( TMCB_E2EACK_IN, acc_onack, 0 /* empty param */ ) <=0 ) return -1; /* disable silent c-timer for registered calls */ if (tmb.register_tmcb( TMCB_REQUEST_IN, acc_onreq, 0 /* empty param */ ) <=0 ) return -1; /* report on missed calls */ if (tmb.register_tmcb( TMCB_ON_FAILURE, on_missed, 0 /* empty param */ ) <=0 ) return -1; /* get incoming replies ready for processing */ if (tmb.register_tmcb( TMCB_RESPONSE_IN, acc_onreply_in, 0 /* empty param */)<=0) return -1; #ifdef SQL_ACC if (bind_dbmod()) { LOG(L_ERR, "ERROR: acc: init_child bind_db failed..." "did you load a database module?\n"); return -1; } #endif #ifdef RAD_ACC /* open log */ rc_openlog("ser"); /* read config */ if (rc_read_config(radius_config)!=0) { LOG(L_ERR, "ERROR: acc: error opening radius config file: %s\n", radius_config ); return -1; } /* read dictionary */ if (rc_read_dictionary(rc_conf_str("dictionary"))!=0) { LOG(L_ERR, "ERROR: acc: error reading radius dictionary\n"); return -1; } #endif return 0; }
static int mod_init(void) { pv_spec_t avp_spec; str s; LM_INFO("initializing...\n"); if(siptrace_table==0 || strlen(siptrace_table)<=0) { LM_ERR("invalid table name\n"); return -1; } if (flag_idx2mask(&trace_flag)<0) return -1; /* Find a database module */ if (bind_dbmod(db_url, &db_funcs)) { LM_ERR("unable to bind database module\n"); return -1; } if (!DB_CAPABILITY(db_funcs, DB_CAP_INSERT)) { LM_ERR("database modules does not provide all functions needed by module\n"); return -1; } trace_on_flag = (int*)shm_malloc(sizeof(int)); if(trace_on_flag==NULL) { LM_ERR("no more shm memory left\n"); return -1; } *trace_on_flag = trace_on; /* register callbacks to TM */ if (load_tm_api(&tmb)!=0) { LM_ERR("can't load tm api\n"); return -1; } if(tmb.register_tmcb( 0, 0, TMCB_REQUEST_IN, trace_onreq_in, 0) <=0) { LM_ERR("can't register trace_onreq_in\n"); return -1; } /* register sl callback */ register_slcb_f = (register_slcb_t)find_export("register_slcb", 0, 0); if(register_slcb_f==NULL) { LM_ERR("can't load sl api\n"); return -1; } if(register_slcb_f(SLCB_REPLY_OUT,trace_sl_onreply_out, NULL)!=0) { LM_ERR("can't register trace_sl_onreply_out\n"); return -1; } if(register_slcb_f(SLCB_ACK_IN,trace_sl_ack_in, NULL)!=0) { LM_ERR("can't register trace_sl_ack_in\n"); return -1; } if(dup_uri_str.s!=0) { dup_uri_str.len = strlen(dup_uri_str.s); dup_uri = (struct sip_uri *)pkg_malloc(sizeof(struct sip_uri)); if(dup_uri==0) { LM_ERR("no more pkg memory left\n"); return -1; } memset(dup_uri, 0, sizeof(struct sip_uri)); if(parse_uri(dup_uri_str.s, dup_uri_str.len, dup_uri)<0) { LM_ERR("bad dup uri\n"); return -1; } } if(traced_user_avp_str && *traced_user_avp_str) { s.s = traced_user_avp_str; s.len = strlen(s.s); if (pv_parse_spec(&s, &avp_spec)==0 || avp_spec.type!=PVT_AVP) { LM_ERR("malformed or non AVP %s AVP definition\n", traced_user_avp_str); return -1; } if(pv_get_avp_name(0, &avp_spec.pvp, &traced_user_avp, &traced_user_avp_type)!=0) { LM_ERR("[%s] - invalid AVP definition\n", traced_user_avp_str); return -1; } } else { traced_user_avp.n = 0; traced_user_avp_type = 0; } if(trace_table_avp_str && *trace_table_avp_str) { s.s = trace_table_avp_str; s.len = strlen(s.s); if (pv_parse_spec(&s, &avp_spec)==0 || avp_spec.type!=PVT_AVP) { LM_ERR("malformed or non AVP %s AVP definition\n", trace_table_avp_str); return -1; } if(pv_get_avp_name(0, &avp_spec.pvp, &trace_table_avp, &trace_table_avp_type)!=0) { LM_ERR("[%s] - invalid AVP definition\n", trace_table_avp_str); return -1; } } else { trace_table_avp.n = 0; trace_table_avp_type = 0; } return 0; }
static int pa_mod_init(void) { DBG("Presence Agent - initializing\n"); test_mimetype_parser(); /* load the TM API */ if (load_tm_api(&tmb)!=0) { LOG(L_ERR, "ERROR:acc:mod_init: can't load TM API\n"); return -1; } if (register_fifo_cmd(fifo_pa_publish, "pa_publish", 0) < 0) { LOG(L_CRIT, "cannot register fifo pa_publish\n"); return -1; } if (register_fifo_cmd(fifo_pa_presence, "pa_presence", 0) < 0) { LOG(L_CRIT, "cannot register fifo pa_presence\n"); return -1; } if (register_fifo_cmd(fifo_pa_location, "pa_location", 0) < 0) { LOG(L_CRIT, "cannot register fifo pa_location\n"); return -1; } if (register_fifo_cmd(fifo_pa_location_contact, "pa_location_contact", 0) < 0) { LOG(L_CRIT, "cannot register fifo pa_location_contact\n"); return -1; } if (register_fifo_cmd(fifo_pa_watcherinfo, "pa_watcherinfo", 0) < 0) { LOG(L_CRIT, "cannot register fifo pa_watcherinfo\n"); return -1; } if (init_unixsock_iface() < 0) { LOG(L_ERR, "pa_mod_init: Error while initializing unix socket interface\n"); return -1; } /* Register cache timer */ register_timer(timer, 0, timer_interval); LOG(L_CRIT, "db_url=%p\n", db_url.s); LOG(L_CRIT, "db_url=%s\n", ZSW(db_url.s)); db_url.len = db_url.s ? strlen(db_url.s) : 0; LOG(L_CRIT, "db_url.len=%d\n", db_url.len); #ifdef HAVE_LOCATION_PACKAGE if (pa_domain.len == 0) { LOG(L_ERR, "pa_mod_init(): pa_domain must be specified\n"); return -1; } LOG(L_CRIT, "pa_mod: pa_mod=%s\n", ZSW(pa_domain.s)); #endif /* HAVE_LOCATION_PACKAGE */ LOG(L_CRIT, "pa_mod: use_db=%d db_url.s=%s\n", use_db, ZSW(db_url.s)); if (use_db) { if (!db_url.len) { LOG(L_ERR, "pa_mod_init(): no db_url specified but use_db=1\n"); return -1; } if (bind_dbmod(db_url.s, &pa_dbf) < 0) { /* Find database module */ LOG(L_ERR, "pa_mod_init(): Can't bind database module via url %s\n", db_url.s); return -1; } if (!DB_CAPABILITY(pa_dbf, DB_CAP_ALL)) { LOG(L_ERR, "pa_mod_init(): Database module does not implement all functions needed by the module\n"); return -1; } } default_priority = ((double)default_priority_percentage) / 100.0; LOG(L_CRIT, "pa_mod_init done\n"); return 0; }
/** * init module function */ static int mod_init(void) { db_res_t* db_res = NULL; code_t i, code; dc_t* cell; DBG("PDT: initializing...\n"); if(hs_two_pow<0) { LOG(L_ERR, "PDT: mod_init: hash_size_two_pow must be" " positive and less than %d\n", MAX_HSIZE_TWO_POW); return -1; } if(code_terminator>9 || code_terminator<0) { LOG(L_ERR, "PDT: mod_init: code_terminator must be a digit\n"); return -1; } if(!prefix_valid()) return -1; next_code = (code_t*)shm_malloc(sizeof(code_t)); if(!next_code) { LOG(L_ERR, "PDT: mod_init: cannot allocate next_code!\n"); return -1; } if(lock_init(&l) == 0) { shm_free(next_code); LOG(L_ERR, "PDT: mod_init: cannot init the lock\n"); return -1; } if(register_fifo_cmd(get_domainprefix, "get_domainprefix", 0)<0) { LOG(L_ERR, "PDT: mod_init: cannot register fifo command 'get_domaincode'\n"); goto error1; } /* binding to mysql module */ if(bind_dbmod()) { LOG(L_ERR, "PDT: mod_init: Database module not found\n"); goto error1; } /* open a connection with the database */ db_con = db_init(db_url); if(!db_con) { LOG(L_ERR, "PDT: mod_init: Error while connecting to database\n"); goto error1; } else { db_use_table(db_con, db_table); DBG("PDT: mod_init: Database connection opened successfully\n"); } /* init hashes in share memory */ if( (hash = init_double_hash(hs_two_pow)) == NULL) { LOG(L_ERR, "PDT: mod_init: hash could not be allocated\n"); goto error2; } /* loading all information from database */ *next_code = 0; if(db_query(db_con, NULL, NULL, NULL, NULL, 0, 0, "code", &db_res)==0) { for(i=0; i<RES_ROW_N(db_res); i++) { code = RES_ROWS(db_res)[i].values[0].val.int_val; if (!code_valid(code)) { LOG(L_ERR, "PDT: mod_init: existing code contains the terminator\n"); goto error; } if (*next_code < code) *next_code = code; cell=new_cell( (char*)(RES_ROWS(db_res)[i].values[1].val.string_val), code); if(cell == NULL) goto error; if(add_to_double_hash(hash, cell)<0) { LOG(L_ERR, "PDT: mod_init: could not add information from database" " into shared-memory hashes\n"); goto error; } } // clear up here //print_hash(hash->dhash, hash->hash_size); //print_hash(hash->chash, hash->hash_size); (*next_code)++; if (*next_code < start_range) *next_code = start_range; *next_code = apply_correction(*next_code); DBG("PDT: mod_init: next_code:%d\n", *next_code); /* free up the space allocated for response */ if(db_free_query(db_con, db_res)<0) { LOG(L_ERR, "PDT: mod_init: error when freeing" " up the response space\n"); } } else { /* query to database failed */ LOG(L_ERR, "PDT: mod_init: query to database failed\n"); goto error; } db_close(db_con); /* janakj - close the connection */ /* success code */ return 0; error: free_double_hash(hash); error2: db_close(db_con); error1: shm_free(next_code); lock_destroy(&l); return -1; }
/** * init module function */ static int mod_init(void) { load_tm_f load_tm; #ifdef HAVE_IHTTP load_ih_f load_ih; #endif int i; DBG("XJAB:mod_init: initializing ...\n"); if(!jdomain) { LOG(L_ERR, "XJAB:mod_init: ERROR jdomain is NULL\n"); return -1; } /* import mysql functions */ if (bind_dbmod()) { LOG(L_ERR, "XJAB:mod_init: error - database module not found\n"); return -1; } db_con = (db_con_t**)shm_malloc(nrw*sizeof(db_con_t*)); if (db_con == NULL) { LOG(L_ERR, "XJAB:mod_init: Error while allocating db_con's\n"); return -1; } /* import the TM auto-loading function */ if ( !(load_tm=(load_tm_f)find_export("load_tm", NO_SCRIPT, 0))) { LOG(L_ERR, "ERROR: xjab:mod_init: can't import load_tm\n"); return -1; } /* let the auto-loading function load all TM stuff */ if (load_tm( &tmb )==-1) return -1; #ifdef HAVE_IHTTP /* import the iHTTP auto-loading function */ if ( !(load_ih=(load_ih_f)find_export("load_ih", IH_NO_SCRIPT_F, 0))) { LOG(L_ERR, "ERROR:xjab:mod_init: can't import load_ih\n"); return -1; } /* let the auto-loading function load all TM stuff */ if (load_ih( &ihb )==-1) return -1; #endif pipes = (int**)pkg_malloc(nrw*sizeof(int*)); if (pipes == NULL) { LOG(L_ERR, "XJAB:mod_init:Error while allocating pipes\n"); return -1; } for(i=0; i<nrw; i++) { pipes[i] = (int*)pkg_malloc(2*sizeof(int)); if (!pipes[i]) { LOG(L_ERR, "XJAB:mod_init: Error while allocating pipes\n"); return -1; } } for(i=0; i<nrw; i++) { db_con[i] = db_init(db_url); if (!db_con[i]) { LOG(L_ERR, "XJAB:mod_init: Error while connecting database\n"); return -1; } else { db_use_table(db_con[i], db_table); DBG("XJAB:mod_init: Database connection opened successfuly\n"); } } /** creating the pipees */ for(i=0;i<nrw;i++) { /* create the pipe*/ if (pipe(pipes[i])==-1) { LOG(L_ERR, "XJAB:mod_init: error - cannot create pipe!\n"); return -1; } DBG("XJAB:mod_init: pipe[%d] = <%d>-<%d>\n", i, pipes[i][0], pipes[i][1]); } if((jwl = xj_wlist_init(pipes,nrw,max_jobs,cache_time,sleep_time, delay_time)) == NULL) { LOG(L_ERR, "XJAB:mod_init: error initializing workers list\n"); return -1; } if(xj_wlist_set_aliases(jwl, jaliases, jdomain, proxy) < 0) { LOG(L_ERR, "XJAB:mod_init: error setting aliases and outbound proxy\n"); return -1; } DBG("XJAB:mod_init: initialized ...\n"); return 0; }
/** * init module function */ static int mod_init(void) { str _s; int ver = 0; bind_presence_t bind_presence; presence_api_t pres; bind_pua_t bind_pua; pua_api_t pua; bind_libxml_t bind_libxml; libxml_api_t libxml_api; bind_xcap_t bind_xcap; xcap_api_t xcap_api; char* sep; LM_DBG("start\n"); if(server_address.s== NULL) { LM_DBG("server_address parameter not set in configuration file\n"); } if(server_address.s) server_address.len= strlen(server_address.s); else server_address.len= 0; if(xcap_root== NULL) { LM_ERR("xcap_root parameter not set\n"); return -1; } /* extract port if any */ sep= strchr(xcap_root, ':'); if(sep) { char* sep2= NULL; sep2= strchr(sep+ 1, ':'); if(sep2) sep= sep2; str port_str; port_str.s= sep+ 1; port_str.len= strlen(xcap_root)- (port_str.s-xcap_root); if(str2int(&port_str, &xcap_port)< 0) { LM_ERR("converting string to int [port]= %.*s\n",port_str.len, port_str.s); return -1; } if(xcap_port< 0 || xcap_port> 65535) { LM_ERR("wrong xcap server port\n"); return -1; } *sep= '\0'; } /* load SL API */ if(load_sl_api(&slb)==-1) { LM_ERR("can't load sl functions\n"); return -1; } /* load all TM stuff */ if(load_tm_api(&tmb)==-1) { LM_ERR("can't load tm functions\n"); return -1; } bind_presence= (bind_presence_t)find_export("bind_presence", 1,0); if (!bind_presence) { LM_ERR("Can't bind presence\n"); return -1; } if (bind_presence(&pres) < 0) { LM_ERR("Can't bind presence\n"); return -1; } pres_contains_event = pres.contains_event; pres_search_event = pres.search_event; pres_get_ev_list = pres.get_event_list; pres_new_shtable = pres.new_shtable; pres_destroy_shtable= pres.destroy_shtable; pres_insert_shtable = pres.insert_shtable; pres_delete_shtable = pres.delete_shtable; pres_update_shtable = pres.update_shtable; pres_search_shtable = pres.search_shtable; pres_copy_subs = pres.mem_copy_subs; pres_update_db_subs = pres.update_db_subs; pres_extract_sdialog_info= pres.extract_sdialog_info; if(!pres_contains_event || !pres_get_ev_list || !pres_new_shtable || !pres_destroy_shtable || !pres_insert_shtable || !pres_delete_shtable || !pres_update_shtable || !pres_search_shtable || !pres_copy_subs || !pres_extract_sdialog_info) { LM_ERR("importing functions from presence module\n"); return -1; } db_url.len = db_url.s ? strlen(db_url.s) : 0; LM_DBG("db_url=%s/%d/%p\n", ZSW(db_url.s), db_url.len, db_url.s); /* binding to mysql module */ if (bind_dbmod(db_url.s, &rls_dbf)) { LM_ERR("Database module not found\n"); return -1; } if (!DB_CAPABILITY(rls_dbf, DB_CAP_ALL)) { LM_ERR("Database module does not implement all functions" " needed by the module\n"); return -1; } rls_db = rls_dbf.init(db_url.s); if (!rls_db) { LM_ERR("while connecting database\n"); return -1; } /* verify table version */ _s.s = rlsubs_table; _s.len = strlen(rlsubs_table); ver = table_version(&rls_dbf, rls_db, &_s); if(ver!=W_TABLE_VERSION) { LM_ERR("Wrong version v%d for table <%s>," " need v%d\n", ver, _s.s, W_TABLE_VERSION); return -1; } _s.s = rlpres_table; _s.len = strlen(rlpres_table); ver = table_version(&rls_dbf, rls_db, &_s); if(ver!=P_TABLE_VERSION) { LM_ERR("Wrong version v%d for table <%s>," " need v%d\n", ver, _s.s, P_TABLE_VERSION); return -1; } if(hash_size<=1) hash_size= 512; else hash_size = 1<<hash_size; rls_table= pres_new_shtable(hash_size); if(rls_table== NULL) { LM_ERR("while creating new hash table\n"); return -1; } if(rls_restore_db_subs()< 0) { LM_ERR("while restoring rl watchers table\n"); return -1; } if(rls_db) rls_dbf.close(rls_db); rls_db = NULL; if(waitn_time<= 0) waitn_time= 5; if(waitn_time<= 0) waitn_time= 100; /* bind libxml wrapper functions */ if((bind_libxml=(bind_libxml_t)find_export("bind_libxml_api", 1, 0))== NULL) { LM_ERR("can't import bind_libxml_api\n"); return -1; } if(bind_libxml(&libxml_api)< 0) { LM_ERR("can not bind libxml api\n"); return -1; } XMLNodeGetAttrContentByName= libxml_api.xmlNodeGetAttrContentByName; XMLDocGetNodeByName= libxml_api.xmlDocGetNodeByName; XMLNodeGetNodeByName= libxml_api.xmlNodeGetNodeByName; XMLNodeGetNodeContentByName= libxml_api.xmlNodeGetNodeContentByName; if(XMLNodeGetAttrContentByName== NULL || XMLDocGetNodeByName== NULL || XMLNodeGetNodeByName== NULL || XMLNodeGetNodeContentByName== NULL) { LM_ERR("libxml wrapper functions could not be bound\n"); return -1; } /* bind pua */ bind_pua= (bind_pua_t)find_export("bind_pua", 1,0); if (!bind_pua) { LM_ERR("Can't bind pua\n"); return -1; } if (bind_pua(&pua) < 0) { LM_ERR("mod_init Can't bind pua\n"); return -1; } if(pua.send_subscribe == NULL) { LM_ERR("Could not import send_subscribe\n"); return -1; } pua_send_subscribe= pua.send_subscribe; if(pua.get_record_id == NULL) { LM_ERR("Could not import send_subscribe\n"); return -1; } pua_get_record_id= pua.get_record_id; if(!rls_integrated_xcap_server) { /* bind xcap */ bind_xcap= (bind_xcap_t)find_export("bind_xcap", 1, 0); if (!bind_xcap) { LM_ERR("Can't bind xcap_client\n"); return -1; } if (bind_xcap(&xcap_api) < 0) { LM_ERR("Can't bind xcap\n"); return -1; } xcap_GetNewDoc= xcap_api.getNewDoc; if(xcap_GetNewDoc== NULL) { LM_ERR("Can't import xcap_client functions\n"); return -1; } } register_timer(timer_send_notify,0, waitn_time); register_timer(rls_presentity_clean, 0, clean_period); register_timer(rlsubs_table_update, 0, clean_period); return 0; }
int rls_mod_init(void) { load_tm_f load_tm; bind_dlg_mod_f bind_dlg; struct timer_ln *i_timer = NULL; DEBUG_LOG("RLS module initialization\n"); /* ??? if other module uses this libraries it might be a problem ??? */ xmlInitParser(); DEBUG_LOG(" ... common libraries\n"); qsa_initialize(); if (time_event_management_init() != 0) { LOG(L_ERR, "rls_mod_init(): Can't initialize time event management!\n"); return -1; } if (subscription_management_init() != 0) { LOG(L_ERR, "rls_mod_init(): Can't initialize time event management!\n"); return -1; } /* import the TM auto-loading function */ if ( !(load_tm=(load_tm_f)find_export("load_tm", NO_SCRIPT, 0))) { LOG(L_ERR, "rls_mod_init(): Can't import tm!\n"); return -1; } /* let the auto-loading function load all TM stuff */ if (load_tm(&tmb)==-1) { LOG(L_ERR, "rls_mod_init(): load_tm() failed\n"); return -1; } bind_dlg = (bind_dlg_mod_f)find_export("bind_dlg_mod", -1, 0); if (!bind_dlg) { LOG(L_ERR, "Can't import dlg\n"); return -1; } if (bind_dlg(&dlg_func) != 0) { return -1; } if (rls_init() != 0) { return -1; } if (vs_init() != 0) { return -1; } /* xcap_servers = (ptr_vector_t*)mem_alloc(sizeof(ptr_vector_t)); if (!xcap_servers) { LOG(L_ERR, "rls_mod_init(): can't allocate memory for XCAP servers vector\n"); return -1; } ptr_vector_init(xcap_servers, 8); */ /* set authorization type according to requested "auth type name" * and other (type specific) parameters */ if (set_auth_params(&rls_auth_params, auth_type_str) != 0) return -1; use_db = 0; if (db_mode > 0) { int db_url_len = db_url ? strlen(db_url) : 0; if (!db_url_len) { LOG(L_ERR, "rls_mod_init(): no db_url specified but db_mode > 0\n"); db_mode = 0; } } if (db_mode > 0) { if (bind_dbmod(db_url, &rls_dbf) < 0) { LOG(L_ERR, "rls_mod_init(): Can't bind database module via url %s\n", db_url); return -1; } if (!DB_CAPABILITY(rls_dbf, DB_CAP_ALL)) { /* ? */ LOG(L_ERR, "rls_mod_init(): Database module does not implement all functions needed by the module\n"); return -1; } use_db = 1; } /* once-shot timer for reloading data from DB - * needed because it can trigger database operations * in other modules and they mostly intialize their * database connection in child_init functions */ i_timer = timer_alloc(); if (!i_timer) { ERR("can't allocate memory for DB init timer\n"); return -1; } else { timer_init(i_timer, init_timer_cb, i_timer, 0); timer_add(i_timer, S_TO_TICKS(init_timer_delay)); } fill_xcap_params = (fill_xcap_params_func)find_export("fill_xcap_params", 0, -1); return 0; }