/* * initialize module */ static int mod_init(void) { LM_INFO("initializing...\n"); /* load the SL API */ if (load_sl_api(&slb)!=0) { LM_ERR("can't load SL API\n"); return -1; } if (acpt_c) { acpt_s.len = strlen(acpt_c); acpt_s.s = acpt_c; } else { acpt_s.len = ACPT_DEF_LEN; acpt_s.s = ACPT_DEF; } if (acpt_enc_c) { acpt_enc_s.len = strlen(acpt_enc_c); acpt_enc_s.s = acpt_enc_c; } else { acpt_enc_s.len = ACPT_ENC_DEF_LEN; acpt_enc_s.s = ACPT_ENC_DEF; } if (acpt_lan_c) { acpt_lan_s.len = strlen(acpt_lan_c); acpt_lan_s.s = acpt_lan_c; } else { acpt_lan_s.len = ACPT_LAN_DEF_LEN; acpt_lan_s.s = ACPT_LAN_DEF; } if (supt_c) { supt_s.len = strlen(supt_c); supt_s.s = supt_c; } else { supt_s.len = SUPT_DEF_LEN; supt_s.s = SUPT_DEF; } return 0; }
int mod_init(void) { LM_DBG("initializing module...\n"); if (seq_route) { seq_route_id = get_script_route_ID_by_name(seq_route, rlist, RT_NO); if (seq_route_id == -1) LM_ERR("route \"%s\" does not exist! ignoring\n", seq_route); } if (load_tm_api(&tm_api) != 0) { LM_ERR("failed to load tm API\n"); return -1; } if (use_dialog && load_dlg_api(&dlg_api) != 0) { LM_ERR("failed to load dialog API\n"); return -1; } if (load_rr_api(&rr_api) != 0) { LM_ERR("failed to load rr API\n"); return -1; } if (load_sl_api(&sl_api) != 0) { LM_ERR("failed to load sl API\n"); return -1; } if (__register_script_cb(run_helper_logic, PRE_SCRIPT_CB|REQ_TYPE_CB, NULL, -1) != 0) { LM_ERR("cannot register script callback"); return -1; } 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; }