app_lua_exp.c 31 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525
  1. /**
  2. * $Id$
  3. *
  4. * Copyright (C) 2010 Daniel-Constantin Mierla (asipto.com)
  5. *
  6. * This file is part of Kamailio, a free SIP server.
  7. *
  8. * Kamailio is free software; you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License as published by
  10. * the Free Software Foundation; either version 2 of the License, or
  11. * (at your option) any later version
  12. *
  13. * Kamailio is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program; if not, write to the Free Software
  20. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  21. *
  22. */
  23. #include <stdio.h>
  24. #include <unistd.h>
  25. #include <stdlib.h>
  26. #include <sys/stat.h>
  27. #include "../../sr_module.h"
  28. #include "../../dprint.h"
  29. #include "../../route.h"
  30. #include "../../ut.h"
  31. #include "../../modules/sl/sl.h"
  32. #include "../../modules/tm/tm_load.h"
  33. #include "../../modules_k/sqlops/sql_api.h"
  34. #include "../../modules_k/rr/api.h"
  35. #include "../../modules/auth/api.h"
  36. #include "../../modules_k/auth_db/api.h"
  37. #include "../../modules_k/maxfwd/api.h"
  38. #include "../../modules_k/registrar/api.h"
  39. #include "../../modules_k/dispatcher/api.h"
  40. #include "../../modules/xhttp/api.h"
  41. #include "../../modules/sdpops/api.h"
  42. #include "app_lua_api.h"
  43. #define SR_LUA_EXP_MOD_SL (1<<0)
  44. #define SR_LUA_EXP_MOD_TM (1<<1)
  45. #define SR_LUA_EXP_MOD_SQLOPS (1<<2)
  46. #define SR_LUA_EXP_MOD_RR (1<<3)
  47. #define SR_LUA_EXP_MOD_AUTH (1<<4)
  48. #define SR_LUA_EXP_MOD_AUTH_DB (1<<5)
  49. #define SR_LUA_EXP_MOD_MAXFWD (1<<6)
  50. #define SR_LUA_EXP_MOD_REGISTRAR (1<<7)
  51. #define SR_LUA_EXP_MOD_DISPATCHER (1<<8)
  52. #define SR_LUA_EXP_MOD_XHTTP (1<<9)
  53. #define SR_LUA_EXP_MOD_SDPOPS (1<<10)
  54. /**
  55. *
  56. */
  57. static unsigned int _sr_lua_exp_reg_mods = 0;
  58. /**
  59. * auth
  60. */
  61. static auth_api_s_t _lua_authb;
  62. /**
  63. * auth_db
  64. */
  65. static auth_db_api_t _lua_auth_dbb;
  66. /**
  67. * dispatcher
  68. */
  69. static dispatcher_api_t _lua_dispatcherb;
  70. /**
  71. * maxfwd
  72. */
  73. static maxfwd_api_t _lua_maxfwdb;
  74. /**
  75. * registrar
  76. */
  77. static registrar_api_t _lua_registrarb;
  78. /**
  79. * rr
  80. */
  81. static rr_api_t _lua_rrb;
  82. /**
  83. * sqlops
  84. */
  85. static sqlops_api_t _lua_sqlopsb;
  86. /**
  87. * sl
  88. */
  89. static sl_api_t _lua_slb;
  90. /**
  91. * tm
  92. */
  93. static tm_api_t _lua_tmb;
  94. static tm_xapi_t _lua_xtmb;
  95. /**
  96. * xhttp
  97. */
  98. static xhttp_api_t _lua_xhttpb;
  99. /**
  100. * sdpops
  101. */
  102. static sdpops_api_t _lua_sdpopsb;
  103. /**
  104. *
  105. */
  106. static int lua_sr_sl_send_reply (lua_State *L)
  107. {
  108. str txt;
  109. int code;
  110. int ret;
  111. sr_lua_env_t *env_L;
  112. env_L = sr_lua_env_get();
  113. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_SL))
  114. {
  115. LM_WARN("weird: sl function executed but module not registered\n");
  116. return app_lua_return_error(L);
  117. }
  118. if(env_L->msg==NULL)
  119. {
  120. LM_WARN("invalid parameters from Lua env\n");
  121. return app_lua_return_error(L);
  122. }
  123. code = lua_tointeger(L, -2);
  124. if(code<100 || code>=800)
  125. return app_lua_return_error(L);
  126. txt.s = (char*)lua_tostring(L, -1);
  127. if(txt.s==NULL || env_L->msg==NULL)
  128. return app_lua_return_error(L);
  129. txt.len = strlen(txt.s);
  130. ret = _lua_slb.freply(env_L->msg, code, &txt);
  131. return app_lua_return_int(L, ret);
  132. }
  133. /**
  134. *
  135. */
  136. static int lua_sr_sl_get_reply_totag (lua_State *L)
  137. {
  138. str txt;
  139. int ret;
  140. sr_lua_env_t *env_L;
  141. env_L = sr_lua_env_get();
  142. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_SL))
  143. {
  144. LM_WARN("weird: sl function executed but module not registered\n");
  145. return app_lua_return_false(L);
  146. }
  147. if(env_L->msg==NULL)
  148. {
  149. LM_WARN("invalid parameters from Lua env\n");
  150. return app_lua_return_error(L);
  151. }
  152. ret = _lua_slb.get_reply_totag(env_L->msg, &txt);
  153. if(ret<0)
  154. {
  155. LM_WARN("sl get_reply_totag returned false\n");
  156. return app_lua_return_false(L);
  157. }
  158. lua_pushlstring(L, txt.s, txt.len);
  159. return 1;
  160. }
  161. /**
  162. *
  163. */
  164. static const luaL_reg _sr_sl_Map [] = {
  165. {"send_reply", lua_sr_sl_send_reply},
  166. {"get_reply_totag", lua_sr_sl_get_reply_totag},
  167. {NULL, NULL}
  168. };
  169. /**
  170. *
  171. */
  172. static int lua_sr_tm_t_reply(lua_State *L)
  173. {
  174. char *txt;
  175. int code;
  176. int ret;
  177. sr_lua_env_t *env_L;
  178. env_L = sr_lua_env_get();
  179. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_TM))
  180. {
  181. LM_WARN("weird: tm function executed but module not registered\n");
  182. return app_lua_return_error(L);
  183. }
  184. if(env_L->msg==NULL)
  185. {
  186. LM_WARN("invalid parameters from Lua env\n");
  187. return app_lua_return_error(L);
  188. }
  189. code = lua_tointeger(L, -2);
  190. if(code<100 || code>=800)
  191. return app_lua_return_error(L);
  192. txt = (char*)lua_tostring(L, -1);
  193. if(txt!=NULL && env_L->msg!=NULL)
  194. {
  195. ret = _lua_tmb.t_reply(env_L->msg, code, txt);
  196. return app_lua_return_int(L, ret);
  197. }
  198. return app_lua_return_error(L);
  199. }
  200. /**
  201. *
  202. */
  203. static int lua_sr_tm_t_relay(lua_State *L)
  204. {
  205. int ret;
  206. sr_lua_env_t *env_L;
  207. env_L = sr_lua_env_get();
  208. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_TM))
  209. {
  210. LM_WARN("weird: tm function executed but module not registered\n");
  211. return app_lua_return_error(L);
  212. }
  213. if(env_L->msg==NULL)
  214. {
  215. LM_WARN("invalid parameters from Lua env\n");
  216. return app_lua_return_error(L);
  217. }
  218. ret = _lua_tmb.t_relay(env_L->msg, NULL, NULL);
  219. return app_lua_return_int(L, ret);
  220. }
  221. /**
  222. *
  223. */
  224. static int lua_sr_tm_t_on_failure(lua_State *L)
  225. {
  226. char *name;
  227. int i;
  228. sr_lua_env_t *env_L;
  229. env_L = sr_lua_env_get();
  230. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_TM))
  231. {
  232. LM_WARN("weird: tm function executed but module not registered\n");
  233. return app_lua_return_error(L);
  234. }
  235. if(env_L->msg==NULL)
  236. {
  237. LM_WARN("invalid parameters from Lua env\n");
  238. return app_lua_return_error(L);
  239. }
  240. name = (char*)lua_tostring(L, -1);
  241. if(name==NULL)
  242. {
  243. LM_WARN("invalid parameters from Lua\n");
  244. return app_lua_return_error(L);
  245. }
  246. i = route_get(&failure_rt, name);
  247. if(failure_rt.rlist[i]==0)
  248. {
  249. LM_WARN("no actions in failure_route[%s]\n", name);
  250. return app_lua_return_error(L);
  251. }
  252. _lua_xtmb.t_on_failure((unsigned int)i);
  253. return app_lua_return_int(L, 1);
  254. }
  255. /**
  256. *
  257. */
  258. static int lua_sr_tm_t_on_branch(lua_State *L)
  259. {
  260. char *name;
  261. int i;
  262. sr_lua_env_t *env_L;
  263. env_L = sr_lua_env_get();
  264. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_TM))
  265. {
  266. LM_WARN("weird: tm function executed but module not registered\n");
  267. return app_lua_return_error(L);
  268. }
  269. if(env_L->msg==NULL)
  270. {
  271. LM_WARN("invalid parameters from Lua env\n");
  272. return app_lua_return_error(L);
  273. }
  274. name = (char*)lua_tostring(L, -1);
  275. if(name==NULL)
  276. {
  277. LM_WARN("invalid parameters from Lua\n");
  278. return app_lua_return_error(L);
  279. }
  280. i = route_get(&branch_rt, name);
  281. if(branch_rt.rlist[i]==0)
  282. {
  283. LM_WARN("no actions in branch_route[%s]\n", name);
  284. return app_lua_return_error(L);
  285. }
  286. _lua_xtmb.t_on_branch((unsigned int)i);
  287. return app_lua_return_int(L, 1);
  288. }
  289. /**
  290. *
  291. */
  292. static int lua_sr_tm_t_on_reply(lua_State *L)
  293. {
  294. char *name;
  295. int i;
  296. sr_lua_env_t *env_L;
  297. env_L = sr_lua_env_get();
  298. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_TM))
  299. {
  300. LM_WARN("weird: tm function executed but module not registered\n");
  301. return app_lua_return_error(L);
  302. }
  303. if(env_L->msg==NULL)
  304. {
  305. LM_WARN("invalid parameters from Lua env\n");
  306. return app_lua_return_error(L);
  307. }
  308. name = (char*)lua_tostring(L, -1);
  309. if(name==NULL)
  310. {
  311. LM_WARN("invalid parameters from Lua\n");
  312. return app_lua_return_error(L);
  313. }
  314. i = route_get(&onreply_rt, name);
  315. if(onreply_rt.rlist[i]==0)
  316. {
  317. LM_WARN("no actions in onreply_route[%s]\n", name);
  318. return app_lua_return_error(L);
  319. }
  320. _lua_xtmb.t_on_reply((unsigned int)i);
  321. return app_lua_return_int(L, 1);
  322. }
  323. /**
  324. *
  325. */
  326. static int lua_sr_tm_t_check_trans(lua_State *L)
  327. {
  328. int ret;
  329. sr_lua_env_t *env_L;
  330. env_L = sr_lua_env_get();
  331. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_TM))
  332. {
  333. LM_WARN("weird: tm function executed but module not registered\n");
  334. return app_lua_return_error(L);
  335. }
  336. if(env_L->msg==NULL)
  337. {
  338. LM_WARN("invalid parameters from Lua env\n");
  339. return app_lua_return_error(L);
  340. }
  341. ret = _lua_xtmb.t_check_trans(env_L->msg);
  342. return app_lua_return_int(L, ret);
  343. }
  344. /**
  345. *
  346. */
  347. static int lua_sr_tm_t_is_canceled(lua_State *L)
  348. {
  349. int ret;
  350. sr_lua_env_t *env_L;
  351. env_L = sr_lua_env_get();
  352. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_TM))
  353. {
  354. LM_WARN("weird: tm function executed but module not registered\n");
  355. return app_lua_return_error(L);
  356. }
  357. if(env_L->msg==NULL)
  358. {
  359. LM_WARN("invalid parameters from Lua env\n");
  360. return app_lua_return_error(L);
  361. }
  362. ret = _lua_xtmb.t_is_canceled(env_L->msg);
  363. return app_lua_return_int(L, ret);
  364. }
  365. /**
  366. *
  367. */
  368. static const luaL_reg _sr_tm_Map [] = {
  369. {"t_reply", lua_sr_tm_t_reply},
  370. {"t_relay", lua_sr_tm_t_relay},
  371. {"t_on_failure", lua_sr_tm_t_on_failure},
  372. {"t_on_branch", lua_sr_tm_t_on_branch},
  373. {"t_on_reply", lua_sr_tm_t_on_reply},
  374. {"t_check_trans", lua_sr_tm_t_check_trans},
  375. {"t_is_canceled", lua_sr_tm_t_is_canceled},
  376. {NULL, NULL}
  377. };
  378. /**
  379. *
  380. */
  381. static int lua_sr_sqlops_query(lua_State *L)
  382. {
  383. str scon;
  384. str squery;
  385. str sres;
  386. int ret;
  387. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_SQLOPS))
  388. {
  389. LM_WARN("weird: sqlops function executed but module not registered\n");
  390. return app_lua_return_error(L);
  391. }
  392. scon.s = (char*)lua_tostring(L, -3);
  393. squery.s = (char*)lua_tostring(L, -2);
  394. sres.s = (char*)lua_tostring(L, -1);
  395. if(scon.s == NULL || squery.s == NULL || sres.s == NULL)
  396. {
  397. LM_WARN("invalid parameters from Lua\n");
  398. return app_lua_return_error(L);
  399. }
  400. scon.len = strlen(scon.s);
  401. squery.len = strlen(squery.s);
  402. sres.len = strlen(sres.s);
  403. ret = _lua_sqlopsb.query(&scon, &squery, &sres);
  404. return app_lua_return_int(L, ret);
  405. }
  406. /**
  407. *
  408. */
  409. static int lua_sr_sqlops_value(lua_State *L)
  410. {
  411. str sres;
  412. int col;
  413. int row;
  414. sql_val_t *val;
  415. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_SQLOPS))
  416. {
  417. LM_WARN("weird: sqlops function executed but module not registered\n");
  418. return app_lua_return_false(L);
  419. }
  420. sres.s = (char*)lua_tostring(L, -3);
  421. row = lua_tointeger(L, -2);
  422. col = lua_tointeger(L, -1);
  423. if(row<0 || col<0 || sres.s==NULL)
  424. {
  425. LM_WARN("invalid parameters from Lua\n");
  426. return app_lua_return_false(L);
  427. }
  428. sres.len = strlen(sres.s);
  429. if(_lua_sqlopsb.value(&sres, row, col, &val)<0)
  430. return app_lua_return_false(L);
  431. if(val->flags&PV_VAL_NULL)
  432. {
  433. lua_pushinteger(L, 0);
  434. return 1;
  435. }
  436. if(val->flags&PV_VAL_INT)
  437. {
  438. lua_pushinteger(L, val->value.n);
  439. return 1;
  440. }
  441. lua_pushlstring(L, val->value.s.s, val->value.s.len);
  442. return 1;
  443. }
  444. /**
  445. *
  446. */
  447. static int lua_sr_sqlops_is_null(lua_State *L)
  448. {
  449. str sres;
  450. int col;
  451. int row;
  452. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_SQLOPS))
  453. {
  454. LM_WARN("weird: sqlops function executed but module not registered\n");
  455. return app_lua_return_false(L);
  456. }
  457. sres.s = (char*)lua_tostring(L, -3);
  458. row = lua_tointeger(L, -2);
  459. col = lua_tointeger(L, -1);
  460. if(row<0 || col<0 || sres.s==NULL)
  461. {
  462. LM_WARN("invalid parameters from Lua\n");
  463. return app_lua_return_false(L);
  464. }
  465. sres.len = strlen(sres.s);
  466. if(_lua_sqlopsb.is_null(&sres, row, col)==1)
  467. return app_lua_return_true(L);
  468. return app_lua_return_false(L);
  469. }
  470. /**
  471. *
  472. */
  473. static int lua_sr_sqlops_column(lua_State *L)
  474. {
  475. str sres;
  476. int col;
  477. str name = {0, 0};
  478. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_SQLOPS))
  479. {
  480. LM_WARN("weird: sqlops function executed but module not registered\n");
  481. return app_lua_return_false(L);
  482. }
  483. sres.s = (char*)lua_tostring(L, -2);
  484. col = lua_tointeger(L, -1);
  485. if(col<0 || sres.s==NULL)
  486. {
  487. LM_WARN("invalid parameters from Lua\n");
  488. return app_lua_return_false(L);
  489. }
  490. sres.len = strlen(sres.s);
  491. if(_lua_sqlopsb.column(&sres, col, &name)<0)
  492. return app_lua_return_false(L);
  493. lua_pushlstring(L, name.s, name.len);
  494. return 1;
  495. }
  496. /**
  497. *
  498. */
  499. static int lua_sr_sqlops_nrows(lua_State *L)
  500. {
  501. str sres;
  502. int rows;
  503. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_SQLOPS))
  504. {
  505. LM_WARN("weird: sqlops function executed but module not registered\n");
  506. return app_lua_return_false(L);
  507. }
  508. sres.s = (char*)lua_tostring(L, -1);
  509. if(sres.s==NULL)
  510. {
  511. LM_WARN("invalid parameters from Lua\n");
  512. return app_lua_return_false(L);
  513. }
  514. sres.len = strlen(sres.s);
  515. rows = _lua_sqlopsb.nrows(&sres);
  516. if(rows<0)
  517. return app_lua_return_false(L);
  518. lua_pushinteger(L, rows);
  519. return 1;
  520. }
  521. /**
  522. *
  523. */
  524. static int lua_sr_sqlops_ncols(lua_State *L)
  525. {
  526. str sres;
  527. int cols;
  528. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_SQLOPS))
  529. {
  530. LM_WARN("weird: sqlops function executed but module not registered\n");
  531. return app_lua_return_false(L);
  532. }
  533. sres.s = (char*)lua_tostring(L, -1);
  534. if(sres.s==NULL)
  535. {
  536. LM_WARN("invalid parameters from Lua\n");
  537. return app_lua_return_false(L);
  538. }
  539. sres.len = strlen(sres.s);
  540. cols = _lua_sqlopsb.ncols(&sres);
  541. if(cols<0)
  542. return app_lua_return_false(L);
  543. lua_pushinteger(L, cols);
  544. return 1;
  545. }
  546. /**
  547. *
  548. */
  549. static int lua_sr_sqlops_reset(lua_State *L)
  550. {
  551. str sres;
  552. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_SQLOPS))
  553. {
  554. LM_WARN("weird: sqlops function executed but module not registered\n");
  555. return app_lua_return_false(L);
  556. }
  557. sres.s = (char*)lua_tostring(L, -1);
  558. if(sres.s==NULL)
  559. {
  560. LM_WARN("invalid parameters from Lua\n");
  561. return app_lua_return_false(L);
  562. }
  563. sres.len = strlen(sres.s);
  564. _lua_sqlopsb.reset(&sres);
  565. return app_lua_return_true(L);
  566. }
  567. /**
  568. *
  569. */
  570. static const luaL_reg _sr_sqlops_Map [] = {
  571. {"query", lua_sr_sqlops_query},
  572. {"value", lua_sr_sqlops_value},
  573. {"is_null", lua_sr_sqlops_is_null},
  574. {"column", lua_sr_sqlops_column},
  575. {"nrows", lua_sr_sqlops_nrows},
  576. {"ncols", lua_sr_sqlops_ncols},
  577. {"reset", lua_sr_sqlops_reset},
  578. {NULL, NULL}
  579. };
  580. /**
  581. *
  582. */
  583. static int lua_sr_rr_record_route(lua_State *L)
  584. {
  585. int ret;
  586. str sv = {0, 0};
  587. sr_lua_env_t *env_L;
  588. env_L = sr_lua_env_get();
  589. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_RR))
  590. {
  591. LM_WARN("weird: rr function executed but module not registered\n");
  592. return app_lua_return_error(L);
  593. }
  594. if(env_L->msg==NULL)
  595. {
  596. LM_WARN("invalid parameters from Lua env\n");
  597. return app_lua_return_error(L);
  598. }
  599. if(lua_gettop(L)==1)
  600. {
  601. sv.s = (char*)lua_tostring(L, -1);
  602. if(sv.s!=NULL)
  603. sv.len = strlen(sv.s);
  604. }
  605. ret = _lua_rrb.record_route(env_L->msg, (sv.len>0)?&sv:NULL);
  606. return app_lua_return_int(L, ret);
  607. }
  608. /**
  609. *
  610. */
  611. static int lua_sr_rr_loose_route(lua_State *L)
  612. {
  613. int ret;
  614. sr_lua_env_t *env_L;
  615. env_L = sr_lua_env_get();
  616. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_RR))
  617. {
  618. LM_WARN("weird: rr function executed but module not registered\n");
  619. return app_lua_return_error(L);
  620. }
  621. if(env_L->msg==NULL)
  622. {
  623. LM_WARN("invalid parameters from Lua env\n");
  624. return app_lua_return_error(L);
  625. }
  626. ret = _lua_rrb.loose_route(env_L->msg);
  627. return app_lua_return_int(L, ret);
  628. }
  629. /**
  630. *
  631. */
  632. static const luaL_reg _sr_rr_Map [] = {
  633. {"record_route", lua_sr_rr_record_route},
  634. {"loose_route", lua_sr_rr_loose_route},
  635. {NULL, NULL}
  636. };
  637. static int lua_sr_auth_challenge(lua_State *L, int hftype)
  638. {
  639. int ret;
  640. str realm = {0, 0};
  641. int flags;
  642. sr_lua_env_t *env_L;
  643. env_L = sr_lua_env_get();
  644. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_AUTH))
  645. {
  646. LM_WARN("weird: auth function executed but module not registered\n");
  647. return app_lua_return_error(L);
  648. }
  649. if(env_L->msg==NULL)
  650. {
  651. LM_WARN("invalid parameters from Lua env\n");
  652. return app_lua_return_error(L);
  653. }
  654. if(lua_gettop(L)!=2)
  655. {
  656. LM_WARN("invalid number of parameters from Lua\n");
  657. return app_lua_return_error(L);
  658. }
  659. realm.s = (char*)lua_tostring(L, -2);
  660. flags = lua_tointeger(L, -1);
  661. if(flags<0 || realm.s==NULL)
  662. {
  663. LM_WARN("invalid parameters from Lua\n");
  664. return app_lua_return_error(L);
  665. }
  666. realm.len = strlen(realm.s);
  667. ret = _lua_authb.auth_challenge(env_L->msg, &realm, flags, hftype);
  668. return app_lua_return_int(L, ret);
  669. }
  670. /**
  671. *
  672. */
  673. static int lua_sr_auth_www_challenge(lua_State *L)
  674. {
  675. return lua_sr_auth_challenge(L, HDR_AUTHORIZATION_T);
  676. }
  677. /**
  678. *
  679. */
  680. static int lua_sr_auth_proxy_challenge(lua_State *L)
  681. {
  682. return lua_sr_auth_challenge(L, HDR_PROXYAUTH_T);
  683. }
  684. /**
  685. *
  686. */
  687. static int lua_sr_auth_pv_authenticate(lua_State *L, int hftype)
  688. {
  689. int ret;
  690. str realm = {0, 0};
  691. str passwd = {0, 0};
  692. int flags;
  693. sr_lua_env_t *env_L;
  694. env_L = sr_lua_env_get();
  695. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_AUTH))
  696. {
  697. LM_WARN("weird: auth function executed but module not registered\n");
  698. return app_lua_return_error(L);
  699. }
  700. if(env_L->msg==NULL)
  701. {
  702. LM_WARN("invalid parameters from Lua env\n");
  703. return app_lua_return_error(L);
  704. }
  705. if(lua_gettop(L)!=3)
  706. {
  707. LM_WARN("invalid number of parameters from Lua\n");
  708. return app_lua_return_error(L);
  709. }
  710. realm.s = (char*)lua_tostring(L, -3);
  711. passwd.s = (char*)lua_tostring(L, -2);
  712. flags = lua_tointeger(L, -1);
  713. if(flags<0 || realm.s==NULL || passwd.s==NULL)
  714. {
  715. LM_WARN("invalid parameters from Lua\n");
  716. return app_lua_return_error(L);
  717. }
  718. realm.len = strlen(realm.s);
  719. passwd.len = strlen(passwd.s);
  720. ret = _lua_authb.pv_authenticate(env_L->msg, &realm, &passwd, flags,
  721. hftype);
  722. return app_lua_return_int(L, ret);
  723. }
  724. /**
  725. *
  726. */
  727. static int lua_sr_auth_pv_www_authenticate(lua_State *L)
  728. {
  729. return lua_sr_auth_pv_authenticate(L, HDR_AUTHORIZATION_T);
  730. }
  731. /**
  732. *
  733. */
  734. static int lua_sr_auth_pv_proxy_authenticate(lua_State *L)
  735. {
  736. return lua_sr_auth_pv_authenticate(L, HDR_PROXYAUTH_T);
  737. }
  738. /**
  739. *
  740. */
  741. static int lua_sr_auth_consume_credentials(lua_State *L)
  742. {
  743. int ret;
  744. sr_lua_env_t *env_L;
  745. env_L = sr_lua_env_get();
  746. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_AUTH))
  747. {
  748. LM_WARN("weird: auth function executed but module not registered\n");
  749. return app_lua_return_error(L);
  750. }
  751. if(env_L->msg==NULL)
  752. {
  753. LM_WARN("invalid parameters from Lua env\n");
  754. return app_lua_return_error(L);
  755. }
  756. ret = _lua_authb.consume_credentials(env_L->msg);
  757. return app_lua_return_int(L, ret);
  758. }
  759. /**
  760. *
  761. */
  762. static const luaL_reg _sr_auth_Map [] = {
  763. {"www_challenge", lua_sr_auth_www_challenge},
  764. {"proxy_challenge", lua_sr_auth_proxy_challenge},
  765. {"pv_www_authenticate", lua_sr_auth_pv_www_authenticate},
  766. {"pv_proxy_authenticate", lua_sr_auth_pv_proxy_authenticate},
  767. {"consume_credentials", lua_sr_auth_consume_credentials},
  768. {NULL, NULL}
  769. };
  770. /**
  771. *
  772. */
  773. static int lua_sr_auth_db_authenticate(lua_State *L, hdr_types_t hftype)
  774. {
  775. int ret;
  776. str realm = {0, 0};
  777. str table = {0, 0};
  778. sr_lua_env_t *env_L;
  779. env_L = sr_lua_env_get();
  780. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_AUTH_DB))
  781. {
  782. LM_WARN("weird: auth function executed but module not registered\n");
  783. return app_lua_return_error(L);
  784. }
  785. if(env_L->msg==NULL)
  786. {
  787. LM_WARN("invalid parameters from Lua env\n");
  788. return app_lua_return_error(L);
  789. }
  790. if(lua_gettop(L)!=2)
  791. {
  792. LM_WARN("invalid number of parameters from Lua\n");
  793. return app_lua_return_error(L);
  794. }
  795. realm.s = (char*)lua_tostring(L, -2);
  796. table.s = (char*)lua_tostring(L, -1);
  797. if(realm.s==NULL || table.s==NULL)
  798. {
  799. LM_WARN("invalid parameters from Lua\n");
  800. return app_lua_return_error(L);
  801. }
  802. realm.len = strlen(realm.s);
  803. table.len = strlen(table.s);
  804. ret = _lua_auth_dbb.digest_authenticate(env_L->msg, &realm, &table,
  805. hftype);
  806. return app_lua_return_int(L, ret);
  807. }
  808. /**
  809. *
  810. */
  811. static int lua_sr_auth_db_www_authenticate(lua_State *L)
  812. {
  813. return lua_sr_auth_db_authenticate(L, HDR_AUTHORIZATION_T);
  814. }
  815. /**
  816. *
  817. */
  818. static int lua_sr_auth_db_proxy_authenticate(lua_State *L)
  819. {
  820. return lua_sr_auth_db_authenticate(L, HDR_PROXYAUTH_T);
  821. }
  822. /**
  823. *
  824. */
  825. static const luaL_reg _sr_auth_db_Map [] = {
  826. {"www_authenticate", lua_sr_auth_db_www_authenticate},
  827. {"proxy_authenticate", lua_sr_auth_db_proxy_authenticate},
  828. {NULL, NULL}
  829. };
  830. /**
  831. *
  832. */
  833. static int lua_sr_maxfwd_process_maxfwd(lua_State *L)
  834. {
  835. int ret;
  836. int limit;
  837. sr_lua_env_t *env_L;
  838. env_L = sr_lua_env_get();
  839. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_MAXFWD))
  840. {
  841. LM_WARN("weird: maxfwd function executed but module not registered\n");
  842. return app_lua_return_error(L);
  843. }
  844. if(env_L->msg==NULL)
  845. {
  846. LM_WARN("invalid parameters from Lua env\n");
  847. return app_lua_return_error(L);
  848. }
  849. if(lua_gettop(L)!=1)
  850. {
  851. LM_WARN("invalid number of parameters from Lua\n");
  852. return app_lua_return_error(L);
  853. }
  854. limit = lua_tointeger(L, -1);
  855. if(limit<0)
  856. {
  857. LM_WARN("invalid parameters from Lua\n");
  858. return app_lua_return_error(L);
  859. }
  860. ret = _lua_maxfwdb.process_maxfwd(env_L->msg, limit);
  861. return app_lua_return_int(L, ret);
  862. }
  863. /**
  864. *
  865. */
  866. static const luaL_reg _sr_maxfwd_Map [] = {
  867. {"process_maxfwd", lua_sr_maxfwd_process_maxfwd},
  868. {NULL, NULL}
  869. };
  870. /**
  871. *
  872. */
  873. static int lua_sr_registrar_save(lua_State *L)
  874. {
  875. int ret;
  876. int flags;
  877. char *table;
  878. sr_lua_env_t *env_L;
  879. flags = 0;
  880. env_L = sr_lua_env_get();
  881. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_MAXFWD))
  882. {
  883. LM_WARN("weird: maxfwd function executed but module not registered\n");
  884. return app_lua_return_error(L);
  885. }
  886. if(env_L->msg==NULL)
  887. {
  888. LM_WARN("invalid parameters from Lua env\n");
  889. return app_lua_return_error(L);
  890. }
  891. if(lua_gettop(L)==1)
  892. {
  893. table = (char*)lua_tostring(L, -1);
  894. } else if(lua_gettop(L)==2) {
  895. table = (char*)lua_tostring(L, -2);
  896. flags = lua_tointeger(L, -1);
  897. } else {
  898. LM_WARN("invalid number of parameters from Lua\n");
  899. return app_lua_return_error(L);
  900. }
  901. if(table==NULL || strlen(table)==0)
  902. {
  903. LM_WARN("invalid parameters from Lua\n");
  904. return app_lua_return_error(L);
  905. }
  906. ret = _lua_registrarb.save(env_L->msg, table, flags);
  907. return app_lua_return_int(L, ret);
  908. }
  909. /**
  910. *
  911. */
  912. static int lua_sr_registrar_lookup(lua_State *L)
  913. {
  914. int ret;
  915. char *table;
  916. sr_lua_env_t *env_L;
  917. env_L = sr_lua_env_get();
  918. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_MAXFWD))
  919. {
  920. LM_WARN("weird: maxfwd function executed but module not registered\n");
  921. return app_lua_return_error(L);
  922. }
  923. if(env_L->msg==NULL)
  924. {
  925. LM_WARN("invalid parameters from Lua env\n");
  926. return app_lua_return_error(L);
  927. }
  928. if(lua_gettop(L)!=1)
  929. {
  930. LM_WARN("invalid number of parameters from Lua\n");
  931. return app_lua_return_error(L);
  932. }
  933. table = (char*)lua_tostring(L, -1);
  934. if(table==NULL || strlen(table)==0)
  935. {
  936. LM_WARN("invalid parameters from Lua\n");
  937. return app_lua_return_error(L);
  938. }
  939. ret = _lua_registrarb.lookup(env_L->msg, table);
  940. return app_lua_return_int(L, ret);
  941. }
  942. /**
  943. *
  944. */
  945. static const luaL_reg _sr_registrar_Map [] = {
  946. {"save", lua_sr_registrar_save},
  947. {"lookup", lua_sr_registrar_lookup},
  948. {NULL, NULL}
  949. };
  950. /**
  951. *
  952. */
  953. static int lua_sr_dispatcher_select(lua_State *L)
  954. {
  955. int ret;
  956. int setid;
  957. int algid;
  958. int mode;
  959. sr_lua_env_t *env_L;
  960. env_L = sr_lua_env_get();
  961. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_DISPATCHER))
  962. {
  963. LM_WARN("weird: dispatcher function executed but module"
  964. " not registered\n");
  965. return app_lua_return_error(L);
  966. }
  967. if(env_L->msg==NULL)
  968. {
  969. LM_WARN("invalid parameters from Lua env\n");
  970. return app_lua_return_error(L);
  971. }
  972. if(lua_gettop(L)==3)
  973. {
  974. setid = lua_tointeger(L, -3);
  975. algid = lua_tointeger(L, -2);
  976. mode = lua_tointeger(L, -1);
  977. } else if(lua_gettop(L)==2) {
  978. setid = lua_tointeger(L, -2);
  979. algid = lua_tointeger(L, -1);
  980. mode = 0;
  981. } else {
  982. LM_WARN("invalid number of parameters from Lua\n");
  983. return app_lua_return_error(L);
  984. }
  985. ret = _lua_dispatcherb.select(env_L->msg, setid, algid, mode);
  986. return app_lua_return_int(L, ret);
  987. }
  988. /**
  989. *
  990. */
  991. static int lua_sr_dispatcher_next(lua_State *L)
  992. {
  993. int ret;
  994. int mode;
  995. sr_lua_env_t *env_L;
  996. env_L = sr_lua_env_get();
  997. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_DISPATCHER))
  998. {
  999. LM_WARN("weird: dispatcher function executed but module"
  1000. " not registered\n");
  1001. return app_lua_return_error(L);
  1002. }
  1003. if(env_L->msg==NULL)
  1004. {
  1005. LM_WARN("invalid parameters from Lua env\n");
  1006. return app_lua_return_error(L);
  1007. }
  1008. mode = 0;
  1009. if(lua_gettop(L)==1)
  1010. {
  1011. /* mode given as parameter */
  1012. mode = lua_tointeger(L, -1);
  1013. }
  1014. ret = _lua_dispatcherb.next(env_L->msg, mode);
  1015. return app_lua_return_int(L, ret);
  1016. }
  1017. /**
  1018. *
  1019. */
  1020. static int lua_sr_dispatcher_mark(lua_State *L)
  1021. {
  1022. int ret;
  1023. int mode;
  1024. sr_lua_env_t *env_L;
  1025. env_L = sr_lua_env_get();
  1026. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_DISPATCHER))
  1027. {
  1028. LM_WARN("weird: dispatcher function executed but module"
  1029. " not registered\n");
  1030. return app_lua_return_error(L);
  1031. }
  1032. if(env_L->msg==NULL)
  1033. {
  1034. LM_WARN("invalid parameters from Lua env\n");
  1035. return app_lua_return_error(L);
  1036. }
  1037. mode = 0;
  1038. if(lua_gettop(L)==1)
  1039. {
  1040. /* mode given as parameter */
  1041. mode = lua_tointeger(L, -1);
  1042. }
  1043. ret = _lua_dispatcherb.mark(env_L->msg, mode);
  1044. return app_lua_return_int(L, ret);
  1045. }
  1046. /**
  1047. *
  1048. */
  1049. static int lua_sr_dispatcher_is_from(lua_State *L)
  1050. {
  1051. int ret;
  1052. int mode;
  1053. sr_lua_env_t *env_L;
  1054. env_L = sr_lua_env_get();
  1055. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_DISPATCHER))
  1056. {
  1057. LM_WARN("weird: dispatcher function executed but module"
  1058. " not registered\n");
  1059. return app_lua_return_error(L);
  1060. }
  1061. if(env_L->msg==NULL)
  1062. {
  1063. LM_WARN("invalid parameters from Lua env\n");
  1064. return app_lua_return_error(L);
  1065. }
  1066. mode = -1;
  1067. if(lua_gettop(L)==1)
  1068. {
  1069. /* mode given as parameter */
  1070. mode = lua_tointeger(L, -1);
  1071. }
  1072. ret = _lua_dispatcherb.is_from(env_L->msg, mode);
  1073. return app_lua_return_int(L, ret);
  1074. }
  1075. /**
  1076. *
  1077. */
  1078. static const luaL_reg _sr_dispatcher_Map [] = {
  1079. {"select", lua_sr_dispatcher_select},
  1080. {"next", lua_sr_dispatcher_next},
  1081. {"mark", lua_sr_dispatcher_mark},
  1082. {"is_from", lua_sr_dispatcher_is_from},
  1083. {NULL, NULL}
  1084. };
  1085. /**
  1086. *
  1087. */
  1088. static int lua_sr_xhttp_reply(lua_State *L)
  1089. {
  1090. int rcode;
  1091. str reason;
  1092. str ctype;
  1093. str mbody;
  1094. int ret;
  1095. sr_lua_env_t *env_L;
  1096. env_L = sr_lua_env_get();
  1097. if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_XHTTP))
  1098. {
  1099. LM_WARN("weird: xhttp function executed but module not registered\n");
  1100. return app_lua_return_error(L);
  1101. }
  1102. if(env_L->msg==NULL)
  1103. {
  1104. LM_WARN("invalid parameters from Lua env\n");
  1105. return app_lua_return_error(L);
  1106. }
  1107. rcode = lua_tointeger(L, -4);
  1108. reason.s = (char*)lua_tostring(L, -3);
  1109. ctype.s = (char*)lua_tostring(L, -2);
  1110. mbody.s = (char*)lua_tostring(L, -1);
  1111. if(reason.s == NULL || ctype.s == NULL || mbody.s == NULL)
  1112. {
  1113. LM_WARN("invalid parameters from Lua\n");
  1114. return app_lua_return_error(L);
  1115. }
  1116. reason.len = strlen(reason.s);
  1117. ctype.len = strlen(ctype.s);
  1118. mbody.len = strlen(mbody.s);
  1119. ret = _lua_xhttpb.reply(env_L->msg, rcode, &reason, &ctype, &mbody);
  1120. return app_lua_return_int(L, ret);
  1121. }
  1122. /**
  1123. *
  1124. */
  1125. static const luaL_reg _sr_xhttp_Map [] = {
  1126. {"reply", lua_sr_xhttp_reply},
  1127. {NULL, NULL}
  1128. };
  1129. /**
  1130. *
  1131. */
  1132. static int lua_sr_sdpops_with_media(lua_State *L)
  1133. {
  1134. int ret;
  1135. str media;
  1136. sr_lua_env_t *env_L;
  1137. env_L = sr_lua_env_get();
  1138. media.s = (char*)lua_tostring(L, -1);
  1139. media.len = strlen(media.s);
  1140. ret = _lua_sdpopsb.sdp_with_media(env_L->msg, &media);
  1141. return app_lua_return_int(L, ret);
  1142. }
  1143. /**
  1144. *
  1145. */
  1146. static const luaL_reg _sr_sdpops_Map [] = {
  1147. {"sdp_with_media", lua_sr_sdpops_with_media},
  1148. {NULL, NULL}
  1149. };
  1150. /**
  1151. *
  1152. */
  1153. int lua_sr_exp_init_mod(void)
  1154. {
  1155. if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_SL)
  1156. {
  1157. /* bind the SL API */
  1158. if (sl_load_api(&_lua_slb) < 0) {
  1159. LM_ERR("cannot bind to SL API\n");
  1160. return -1;
  1161. }
  1162. LM_DBG("loaded sl api\n");
  1163. }
  1164. if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_TM)
  1165. {
  1166. /* bind the TM API */
  1167. if (tm_load_api(&_lua_tmb) < 0)
  1168. {
  1169. LM_ERR("cannot bind to TM API\n");
  1170. return -1;
  1171. }
  1172. LM_DBG("loaded tm api\n");
  1173. /* bind the TM XAPI */
  1174. if (tm_load_xapi(&_lua_xtmb) < 0)
  1175. {
  1176. LM_ERR("cannot bind to TM XAPI\n");
  1177. return -1;
  1178. }
  1179. LM_DBG("loaded tm xapi\n");
  1180. }
  1181. if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_SQLOPS)
  1182. {
  1183. /* bind the SQLOPS API */
  1184. if (sqlops_load_api(&_lua_sqlopsb) < 0)
  1185. {
  1186. LM_ERR("cannot bind to SQLOPS API\n");
  1187. return -1;
  1188. }
  1189. LM_DBG("loaded sqlops api\n");
  1190. }
  1191. if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_RR)
  1192. {
  1193. /* bind the RR API */
  1194. if (rr_load_api(&_lua_rrb) < 0)
  1195. {
  1196. LM_ERR("cannot bind to RR API\n");
  1197. return -1;
  1198. }
  1199. LM_DBG("loaded rr api\n");
  1200. }
  1201. if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_AUTH)
  1202. {
  1203. /* bind the AUTH API */
  1204. if (auth_load_api(&_lua_authb) < 0)
  1205. {
  1206. LM_ERR("cannot bind to AUTH API\n");
  1207. return -1;
  1208. }
  1209. LM_DBG("loaded auth api\n");
  1210. }
  1211. if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_AUTH_DB)
  1212. {
  1213. /* bind the AUTH_DB API */
  1214. if (auth_db_load_api(&_lua_auth_dbb) < 0)
  1215. {
  1216. LM_ERR("cannot bind to AUTH_DB API\n");
  1217. return -1;
  1218. }
  1219. LM_DBG("loaded auth_db api\n");
  1220. }
  1221. if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_MAXFWD)
  1222. {
  1223. /* bind the MAXFWD API */
  1224. if (maxfwd_load_api(&_lua_maxfwdb) < 0)
  1225. {
  1226. LM_ERR("cannot bind to MAXFWD API\n");
  1227. return -1;
  1228. }
  1229. LM_DBG("loaded maxfwd api\n");
  1230. }
  1231. if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_REGISTRAR)
  1232. {
  1233. /* bind the REGISTRAR API */
  1234. if (registrar_load_api(&_lua_registrarb) < 0)
  1235. {
  1236. LM_ERR("cannot bind to REGISTRAR API\n");
  1237. return -1;
  1238. }
  1239. LM_DBG("loaded registrar api\n");
  1240. }
  1241. if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_DISPATCHER)
  1242. {
  1243. /* bind the DISPATCHER API */
  1244. if (dispatcher_load_api(&_lua_dispatcherb) < 0)
  1245. {
  1246. LM_ERR("cannot bind to DISPATCHER API\n");
  1247. return -1;
  1248. }
  1249. LM_DBG("loaded dispatcher api\n");
  1250. }
  1251. if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_XHTTP)
  1252. {
  1253. /* bind the XHTTP API */
  1254. if (xhttp_load_api(&_lua_xhttpb) < 0)
  1255. {
  1256. LM_ERR("cannot bind to XHTTP API\n");
  1257. return -1;
  1258. }
  1259. LM_DBG("loaded xhttp api\n");
  1260. }
  1261. if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_SDPOPS)
  1262. {
  1263. /* bind the SDPOPS API */
  1264. if (sdpops_load_api(&_lua_sdpopsb) < 0)
  1265. {
  1266. LM_ERR("cannot bind to SDPOPS API\n");
  1267. return -1;
  1268. }
  1269. LM_DBG("loaded sdpops api\n");
  1270. }
  1271. return 0;
  1272. }
  1273. /**
  1274. *
  1275. */
  1276. int lua_sr_exp_register_mod(char *mname)
  1277. {
  1278. int len;
  1279. len = strlen(mname);
  1280. if(len==2 && strcmp(mname, "sl")==0)
  1281. {
  1282. _sr_lua_exp_reg_mods |= SR_LUA_EXP_MOD_SL;
  1283. return 0;
  1284. } else if(len==2 && strcmp(mname, "tm")==0) {
  1285. _sr_lua_exp_reg_mods |= SR_LUA_EXP_MOD_TM;
  1286. return 0;
  1287. } else if(len==6 && strcmp(mname, "sqlops")==0) {
  1288. _sr_lua_exp_reg_mods |= SR_LUA_EXP_MOD_SQLOPS;
  1289. return 0;
  1290. } else if(len==2 && strcmp(mname, "rr")==0) {
  1291. _sr_lua_exp_reg_mods |= SR_LUA_EXP_MOD_RR;
  1292. return 0;
  1293. } else if(len==4 && strcmp(mname, "auth")==0) {
  1294. _sr_lua_exp_reg_mods |= SR_LUA_EXP_MOD_AUTH;
  1295. return 0;
  1296. } else if(len==7 && strcmp(mname, "auth_db")==0) {
  1297. _sr_lua_exp_reg_mods |= SR_LUA_EXP_MOD_AUTH_DB;
  1298. return 0;
  1299. } else if(len==6 && strcmp(mname, "maxfwd")==0) {
  1300. _sr_lua_exp_reg_mods |= SR_LUA_EXP_MOD_MAXFWD;
  1301. return 0;
  1302. } else if(len==9 && strcmp(mname, "registrar")==0) {
  1303. _sr_lua_exp_reg_mods |= SR_LUA_EXP_MOD_REGISTRAR;
  1304. return 0;
  1305. } else if(len==10 && strcmp(mname, "dispatcher")==0) {
  1306. _sr_lua_exp_reg_mods |= SR_LUA_EXP_MOD_DISPATCHER;
  1307. return 0;
  1308. } else if(len==5 && strcmp(mname, "xhttp")==0) {
  1309. _sr_lua_exp_reg_mods |= SR_LUA_EXP_MOD_XHTTP;
  1310. return 0;
  1311. } else if(len==6 && strcmp(mname, "sdpops")==0) {
  1312. _sr_lua_exp_reg_mods |= SR_LUA_EXP_MOD_SDPOPS;
  1313. return 0;
  1314. }
  1315. return -1;
  1316. }
  1317. /**
  1318. *
  1319. */
  1320. void lua_sr_exp_openlibs(lua_State *L)
  1321. {
  1322. if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_SL)
  1323. luaL_openlib(L, "sr.sl", _sr_sl_Map, 0);
  1324. if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_TM)
  1325. luaL_openlib(L, "sr.tm", _sr_tm_Map, 0);
  1326. if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_SQLOPS)
  1327. luaL_openlib(L, "sr.sqlops", _sr_sqlops_Map, 0);
  1328. if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_RR)
  1329. luaL_openlib(L, "sr.rr", _sr_rr_Map, 0);
  1330. if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_AUTH)
  1331. luaL_openlib(L, "sr.auth", _sr_auth_Map, 0);
  1332. if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_AUTH_DB)
  1333. luaL_openlib(L, "sr.auth_db", _sr_auth_db_Map, 0);
  1334. if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_MAXFWD)
  1335. luaL_openlib(L, "sr.maxfwd", _sr_maxfwd_Map, 0);
  1336. if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_REGISTRAR)
  1337. luaL_openlib(L, "sr.registrar", _sr_registrar_Map, 0);
  1338. if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_DISPATCHER)
  1339. luaL_openlib(L, "sr.dispatcher", _sr_dispatcher_Map, 0);
  1340. if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_XHTTP)
  1341. luaL_openlib(L, "sr.xhttp", _sr_xhttp_Map, 0);
  1342. if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_SDPOPS)
  1343. luaL_openlib(L, "sr.sdpops", _sr_sdpops_Map, 0);
  1344. }