sipcapture.cfg 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986
  1. #!KAMAILIO
  2. #
  3. # Example configuration file for a sipcapture node
  4. #
  5. ####### Global Parameters definitions #########
  6. #
  7. # Please, make all your configuration changes here
  8. #
  9. # *** To enable extra stats
  10. # - define WITH_STATISTIC_METHOD_EXTRA
  11. # - define WITH_STATISTIC_INVITE_1XX
  12. #!substdef "!HOMER_DB_USER!homer_user!g"
  13. #!substdef "!HOMER_DB_PASSWORD!homer_password!g"
  14. #!substdef "!HOMER_LISTEN_PROTO!udp!g"
  15. #!substdef "!HOMER_LISTEN_IF!0.0.0.0!g"
  16. #!substdef "!HOMER_LISTEN_PORT!9060!g"
  17. #!substdef "!HOMER_STATS_SERVER!tcp:HOMER_LISTEN_IF:8888!g"
  18. ####### Global Parameters #########
  19. debug=1
  20. log_stderror=no
  21. log_name="homer"
  22. memdbg=5
  23. memlog=5
  24. ##!define WITH_HOMER_GEO
  25. ##!define WITH_HOMER_CUSTOM_STATS #enable it for HTTP custom stats
  26. log_facility=LOG_LOCAL1
  27. fork=yes
  28. children=5
  29. /* uncomment the next line to disable TCP (default on) */
  30. disable_tcp=no
  31. tcp_accept_no_cl=yes
  32. /* IP and port for HEP capturing) */
  33. listen=HOMER_LISTEN_PROTO:HOMER_LISTEN_IF:HOMER_LISTEN_PORT
  34. listen=tcp:0.0.0.0:9061
  35. #!ifdef WITH_HOMER_CUSTOM_STATS
  36. listen=HOMER_STATS_SERVER
  37. #!endif
  38. #Max loops
  39. max_while_loops=100
  40. # set paths to location of modules (to sources or installation folders)
  41. #!ifdef WITH_SRCPATH
  42. mpath="modules"
  43. #!else
  44. mpath="/usr/local/lib/kamailio/modules/"
  45. #!endif
  46. loadmodule "pv.so"
  47. loadmodule "db_mysql.so"
  48. loadmodule "sipcapture.so"
  49. loadmodule "textops.so"
  50. loadmodule "rtimer.so"
  51. loadmodule "xlog.so"
  52. loadmodule "sqlops.so"
  53. loadmodule "htable.so"
  54. loadmodule "tm.so"
  55. loadmodule "sl.so"
  56. loadmodule "siputils.so"
  57. loadmodule "exec.so"
  58. #!ifdef WITH_HOMER_GEO
  59. loadmodule "geoip.so"
  60. #!endif
  61. #!ifdef WITH_HOMER_CUSTOM_STATS
  62. loadmodule "xhttp.so"
  63. loadmodule "jansson.so"
  64. loadmodule "avpops.so"
  65. #!endif
  66. modparam("htable", "htable", "a=>size=8;autoexpire=400")
  67. modparam("htable", "htable", "b=>size=8;autoexpire=31")
  68. # TODO: tune autoexpire setting for htable "c"
  69. modparam("htable", "htable", "c=>size=8;autoexpire=31")
  70. #!ifdef WITH_HOMER_CUSTOM_STATS
  71. modparam("htable", "htable", "d=>size=8;autoexpire=400")
  72. modparam("xhttp", "url_match", "^/api/v1/stat")
  73. #!endif
  74. modparam("rtimer", "timer", "name=ta;interval=60;mode=1;")
  75. modparam("rtimer", "exec", "timer=ta;route=TIMER_STATS")
  76. modparam("sqlops","sqlcon","cb=>mysql://HOMER_DB_USER:[email protected]/homer_statistic")
  77. modparam("sqlops","sqlcon","wc=>mysql://HOMER_DB_USER:[email protected]/homer_data")
  78. # ----- mi_fifo params -----
  79. ####### Routing Logic ########
  80. modparam("sipcapture", "db_url", "mysql://HOMER_DB_USER:[email protected]/homer_data")
  81. modparam("sipcapture", "capture_on", 1)
  82. modparam("sipcapture", "hep_capture_on", 1)
  83. modparam("sipcapture", "insert_retries", 5)
  84. modparam("sipcapture", "insert_retry_timeout", 10)
  85. #modparam("sipcapture", "capture_node", "homer01")
  86. modparam("sipcapture", "nonsip_hook", 1)
  87. #!ifdef WITH_HOMER_GEO
  88. modparam("geoip", "path", "/usr/share/GeoIP/GeoIP.dat")
  89. #!endif
  90. #Stats time
  91. stats.min = 5 desc "My stats TIME min"
  92. # Main SIP request routing logic
  93. # - processing of any incoming SIP request starts with this route
  94. route {
  95. if($sht(a=>method::total) == $null) $sht(a=>method::total) = 0;
  96. $sht(a=>method::total) = $sht(a=>method::total) + 1;
  97. if($sht(a=>packet::count) == $null) $sht(a=>packet::count) = 0;
  98. if($sht(a=>packet::size) == $null) $sht(a=>packet::size) = 0;
  99. #Packets
  100. $sht(a=>packet::count) = $sht(a=>packet::count) + 1;
  101. $sht(a=>packet::size) = $sht(a=>packet::size) + $ml;
  102. if($sht(b=>$rm::$cs::$ci) != $null) {
  103. #$var(a) = "sip_capture_call" + "_%Y%m%d";
  104. #Store
  105. route(STORE);
  106. drop;
  107. }
  108. $sht(b=>$rm::$cs::$ci) = 1;
  109. if($sht(a=>method::all) == $null) $sht(a=>method::all) = 0;
  110. $sht(a=>method::all) = $sht(a=>method::all) + 1;
  111. if (is_method("INVITE|REGISTER")) {
  112. if($ua =~ "(friendly-scanner|sipvicious|sipcli)") {
  113. sql_query("cb", "INSERT INTO alarm_data_mem (create_date, type, total, source_ip, description) VALUES(NOW(), 'scanner', 1, '$si', 'Friendly scanner alarm!') ON DUPLICATE KEY UPDATE total=total+1");
  114. route(KILL_VICIOUS);
  115. }
  116. #IP Method
  117. sql_query("cb", "INSERT INTO stats_ip_mem ( method, source_ip, total) VALUES('$rm', '$si', 1) ON DUPLICATE KEY UPDATE total=total+1");
  118. #!ifdef WITH_HOMER_GEO
  119. if(geoip_match("$si", "src")) {
  120. xlog("REGISTER|INVITE SIP message [$si] from: $gip(src=>cc)\n");
  121. sql_query("cb", "INSERT INTO stats_geo_mem ( method, country, lat, lon, total) VALUES('$rm', '$gip(src=>cc)', '$gip(src=>lat)', '$gip(src=>lon)', 1) ON DUPLICATE KEY UPDATE total=total+1");
  122. }
  123. #!endif
  124. if($au != $null) $var(anumber) = $au;
  125. else $var(anumber) = $fU;
  126. if($(var(anumber){s.substr,0,5}) == "+204231") {
  127. if($sht(a=>alarm::scam) == $null) $sht(a=>alarm::scam) = 0;
  128. $sht(a=>alarm::scam) = $sht(a=>alarm::scam) + 1;
  129. }
  130. if($(rU{s.substr,0,5}) == "+204231") {
  131. if($sht(a=>alarm::scam) == $null) $sht(a=>alarm::scam) = 0;
  132. $sht(a=>alarm::scam) = $sht(a=>alarm::scam) + 1;
  133. }
  134. #if($sel(contact.uri.host) =~ "^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))$") {
  135. if($sel(contact.uri.host) =~ "^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$") {
  136. if($sht(a=>alarm::dns) == $null) $sht(a=>alarm::dns) = 0;
  137. $sht(a=>alarm::dns) = $sht(a=>alarm::dns) + 1;
  138. }
  139. if($sel(contact.uri.host) != $si) {
  140. if($sht(a=>alarm::spoofing) == $null) $sht(a=>alarm::spoofing) = 0;
  141. $sht(a=>alarm::spoofing) = $sht(a=>alarm::spoofing) + 1;
  142. }
  143. if($au =~ "(\=)|(\-\-)|(\')|(\#)|(\%27)|(\%24)") {
  144. if($sht(a=>alarm::sqlinjection) == $null) $sht(a=>alarm::sqlinjection) = 0;
  145. $sht(a=>alarm::sqlinjection) = $sht(a=>alarm::sqlinjection) + 1;
  146. }
  147. if($(hdr(Record-Route)[0]{nameaddr.uri}) != $si) {
  148. if($sht(a=>alarm::spoofing) == $null) $sht(a=>alarm::spoofing) = 0;
  149. $sht(a=>alarm::spoofing) = $sht(a=>alarm::spoofing) + 1;
  150. }
  151. if (is_method("INVITE")) {
  152. if (has_totag()) {
  153. if($sht(a=>method::reinvite) == $null) $sht(a=>method::reinvite) = 0;
  154. $sht(a=>method::reinvite) = $sht(a=>method::reinvite) + 1;
  155. }
  156. else {
  157. if($sht(a=>method::invite) == $null) $sht(a=>method::invite) = 0;
  158. $sht(a=>method::invite) = $sht(a=>method::invite) + 1;
  159. if($adu != $null) {
  160. if($sht(a=>method::invite::auth) == $null) $sht(a=>method::invite::auth) = 0;
  161. $sht(a=>method::invite::auth) = $sht(a=>method::invite::auth) + 1;
  162. }
  163. if($ua != $null) {
  164. sql_query("cb", "INSERT INTO stats_useragent_mem (useragent, method, total) VALUES('$ua', 'INVITE', 1) ON DUPLICATE KEY UPDATE total=total+1");
  165. }
  166. }
  167. }
  168. else {
  169. if($sht(a=>method::register) == $null) $sht(a=>method::register) = 0;
  170. $sht(a=>method::register) = $sht(a=>method::register) + 1;
  171. if($adu != $null) {
  172. if($sht(a=>method::register::auth) == $null) $sht(a=>method::register::auth) = 0;
  173. $sht(a=>method::register::auth) = $sht(a=>method::register::auth) + 1;
  174. }
  175. if($ua != $null) {
  176. sql_query("cb", "INSERT INTO stats_useragent_mem (useragent, method, total) VALUES('$ua', 'REGISTER', 1) ON DUPLICATE KEY UPDATE total=total+1");
  177. }
  178. }
  179. }
  180. else if(is_method("BYE")) {
  181. if($sht(a=>method::bye) == $null) $sht(a=>method::bye) = 0;
  182. $sht(a=>method::bye) = $sht(a=>method::bye) + 1;
  183. if(is_present_hf("Reason")) {
  184. $var(cause) = $(hdr(Reason){param.value,cause}{s.int});
  185. if($var(cause) != 16 && $var(cause) !=17) {
  186. if($sht(a=>stats::sdf) == $null) $sht(a=>stats::sdf) = 0;
  187. $sht(a=>stats::sdf) = $sht(a=>stats::sdf) + 1;
  188. }
  189. }
  190. # if($si != $sht(a=>ipinit::aleg::$ci) && $si != $sht(a=>ipinit::bleg::$ci)) {
  191. # if($sht(a=>alarm::sessiontd) == $null) $sht(a=>alarm::sessiontd) = 0;
  192. # $sht(a=>alarm::sessiontd) = $sht(a=>alarm::sessiontd) + 1;
  193. # }
  194. }
  195. else if(is_method("CANCEL")) {
  196. if($sht(a=>method::cancel) == $null) $sht(a=>method::cancel) = 0;
  197. $sht(a=>method::cancel) = $sht(a=>method::cancel) + 1;
  198. }
  199. else if(is_method("OPTIONS")) {
  200. if($sht(a=>method::options) == $null) $sht(a=>method::options) = 0;
  201. $sht(a=>method::options) = $sht(a=>method::options) + 1;
  202. #xlog("OPTIONS COUNTING.... $sht(a=>method::options)\n");
  203. }
  204. else if(is_method("REFER")) {
  205. if($sht(a=>method::refer) == $null) $sht(a=>method::refer) = 0;
  206. $sht(a=>method::refer) = $sht(a=>method::refer) + 1;
  207. }
  208. else if(is_method("UPDATE")) {
  209. if($sht(a=>method::update) == $null) $sht(a=>method::update) = 0;
  210. $sht(a=>method::update) = $sht(a=>method::update) + 1;
  211. }
  212. #!ifdef WITH_STATISTIC_METHOD_EXTRA
  213. else if(is_method("ACK")) {
  214. if($sht(a=>method::ack) == $null) $sht(a=>method::ack) = 0;
  215. $sht(a=>method::ack) = $sht(a=>method::ack) + 1;
  216. }
  217. else {
  218. if($sht(a=>method::unknown) == $null) $sht(a=>method::unknown) = 0;
  219. $sht(a=>method::unknown) = $sht(a=>method::uknown) + 1;
  220. }
  221. #!endif
  222. else if(is_method("PUBLISH"))
  223. {
  224. if(has_body("application/vq-rtcpxr") && $(rb{s.substr,0,1}) != "x") {
  225. $var(table) = "report_capture";
  226. $var(callid) = $(rb{re.subst,/(.*)CallID:([0-9A-Za-z@-]{5,120})(.*)$/\2/s});
  227. #xlog("CALLID: $var(callid)");
  228. #!ifdef KAMAILIO_4_3
  229. xlog("report_capture is not in < 4.3");
  230. #!else
  231. report_capture("$var(table)", "$var(callid)");
  232. #!endif
  233. drop;
  234. }
  235. }
  236. #Store
  237. route(STORE);
  238. drop;
  239. }
  240. onreply_route {
  241. if($sht(a=>method::total) == $null) $sht(a=>method::total) = 0;
  242. $sht(a=>method::total) = $sht(a=>method::total) + 1;
  243. if($sht(b=>$rs::$cs::$rm::$ci) != $null) {
  244. #Store
  245. route(STORE);
  246. drop;
  247. }
  248. $sht(b=>$rs::$cs::$rm::$ci) = 1;
  249. if($sht(a=>method::all) == $null) $sht(a=>method::all) = 0;
  250. $sht(a=>method::all) = $sht(a=>method::all) + 1;
  251. #413 Too large
  252. if(status == "413") {
  253. if($sht(a=>response::413) == $null) $sht(a=>response::413) = 0;
  254. $sht(a=>response::413) = $sht(a=>response::413) + 1;
  255. if($sht(a=>alarm::413) == $null) $sht(a=>alarm::413) = 0;
  256. $sht(a=>alarm::413) = $sht(a=>alarm::413) + 1;
  257. }
  258. #403 Unauthorize
  259. else if(status == "403") {
  260. if($sht(a=>response::403) == $null) $sht(a=>response::403) = 0;
  261. $sht(a=>response::403) = $sht(a=>response::403) + 1;
  262. if($sht(a=>alarm::403) == $null) $sht(a=>alarm::403) = 0;
  263. $sht(a=>alarm::403) = $sht(a=>alarm::403) + 1;
  264. }
  265. # Too many hops
  266. else if(status == "483") {
  267. if($sht(a=>response::483) == $null) $sht(a=>response::483) = 0;
  268. $sht(a=>response::483) = $sht(a=>response::483) + 1;
  269. if($sht(a=>alarm::483) == $null) $sht(a=>alarm::483) = 0;
  270. $sht(a=>alarm::483) = $sht(a=>alarm::483) + 1;
  271. }
  272. # loops
  273. else if(status == "482") {
  274. if($sht(a=>response::482) == $null) $sht(a=>response::482) = 0;
  275. $sht(a=>response::482) = $sht(a=>response::482) + 1;
  276. if($sht(a=>alarm::482) == $null) $sht(a=>alarm::482) = 0;
  277. $sht(a=>alarm::482) = $sht(a=>alarm::482) + 1;
  278. }
  279. # Call Transaction Does not exist
  280. else if(status == "481") {
  281. if($sht(a=>alarm::481) == $null) $sht(a=>alarm::481) = 0;
  282. $sht(a=>alarm::481) = $sht(a=>alarm::481) + 1;
  283. }
  284. # 408 Timeout
  285. else if(status == "408") {
  286. if($sht(a=>alarm::408) == $null) $sht(a=>alarm::408) = 0;
  287. $sht(a=>alarm::408) = $sht(a=>alarm::408) + 1;
  288. }
  289. # 400
  290. else if(status == "400") {
  291. if($sht(a=>alarm::400) == $null) $sht(a=>alarm::400) = 0;
  292. $sht(a=>alarm::400) = $sht(a=>alarm::400) + 1;
  293. }
  294. # MOVED
  295. else if(status =~ "^(30[012])$") {
  296. if($sht(a=>response::300) == $null) $sht(a=>response::300) = 0;
  297. $sht(a=>response::300) = $sht(a=>response::300) + 1;
  298. }
  299. if($rm == "INVITE") {
  300. #ISA
  301. if(status =~ "^(408|50[03])$") {
  302. if($sht(a=>stats::isa) == $null) $sht(a=>stats::isa) = 0;
  303. $sht(a=>stats::isa) = $sht(a=>stats::isa) + 1;
  304. }
  305. #Bad486
  306. if(status =~ "^(486|487|603)$") {
  307. if($sht(a=>stats::bad::invite) == $null) $sht(a=>stats::bad::invite) = 0;
  308. $sht(a=>stats::bad::invite) = $sht(a=>stats::bad::invite) + 1;
  309. }
  310. #SD
  311. if(status =~ "^(50[034])$") {
  312. if($sht(a=>stats::sd) == $null) $sht(a=>stats::sd) = 0;
  313. $sht(a=>stats::sd) = $sht(a=>stats::sd) + 1;
  314. }
  315. if(status == "407") {
  316. if($sht(a=>response::407::invite) == $null) $sht(a=>response::407::invite)= 0;
  317. $sht(a=>response::407::invite) = $sht(a=>response::407::invite) + 1;
  318. }
  319. else if(status == "401") {
  320. if($sht(a=>response::401::invite) == $null) $sht(a=>response::401::invite)= 0;
  321. $sht(a=>response::401::invite) = $sht(a=>response::401::invite) + 1;
  322. }
  323. else if(status == "200") {
  324. if($sht(a=>response::200::invite) == $null) $sht(a=>response::200::invite)= 0;
  325. $sht(a=>response::200::invite) = $sht(a=>response::200::invite) + 1;
  326. }
  327. #Aditional stats
  328. #!ifdef WITH_STATISTIC_INVITE_1XX
  329. else if(status == "100") {
  330. if($sht(a=>response::100::invite) == $null) $sht(a=>response::100::invite)= 0;
  331. $sht(a=>response::100::invite) = $sht(a=>response::100::invite) + 1;
  332. }
  333. else if(status == "180") {
  334. if($sht(a=>response::180::invite) == $null) $sht(a=>response::180::invite)= 0;
  335. $sht(a=>response::180::invite) = $sht(a=>response::180::invite) + 1;
  336. }
  337. else if(status == "183") {
  338. if($sht(a=>response::183::invite) == $null) $sht(a=>response::183::invite)= 0;
  339. $sht(a=>response::183::invite) = $sht(a=>response::183::invite) + 1;
  340. }
  341. #!endif
  342. }
  343. else if($rm == "BYE") {
  344. if(status == "407") {
  345. if($sht(a=>response::407::bye) == $null) $sht(a=>response::407::bye) = 0;
  346. $sht(a=>response::407::bye) = $sht(a=>response::407::bye) + 1;
  347. }
  348. else if(status == "401") {
  349. if($sht(a=>response::401::bye) == $null) $sht(a=>response::401::bye) = 0;
  350. $sht(a=>response::401::bye) = $sht(a=>response::401::bye) + 1;
  351. }
  352. else if(status == "200") {
  353. if($sht(a=>response::200::bye) == $null) $sht(a=>response::200::bye) = 0;
  354. $sht(a=>response::200::bye) = $sht(a=>response::200::bye) + 1;
  355. }
  356. }
  357. #Store
  358. route(STORE);
  359. drop;
  360. }
  361. route[KILL_VICIOUS] {
  362. xlog("Kill-Vicious ! si : $si ru : $ru ua : $ua\n");
  363. return;
  364. }
  365. route[STATS_BY_IP] {
  366. if($sht(c=>$rs::$sel(via[1].host)) == $null) $sht(c=>$rs::$sel(via[1].host)) = 0;
  367. $sht(c=>$rs::$sel(via[1].host)) = $sht(c=>$rs::$sel(via[1].host)) + 1;
  368. }
  369. route[PARSE_STATS_IP] {
  370. sht_iterator_start("i1", "c");
  371. while(sht_iterator_next("i1")) {
  372. $var(sipcode) = $(shtitkey(i1){s.select,0,:});
  373. $var(ip) = $(shtitkey(i1){s.select,2,:});
  374. if($shtitval(i1) > $avp($var(sipcode))) {
  375. sql_query("cb", "INSERT INTO alarm_data (create_date, type, total, source_ip, description) VALUES(NOW(), 'Too Many $var(sipcode)', $shtitval(i1), '$var(ip)', 'Too Many $var(sipcode)')");
  376. }
  377. }
  378. sht_iterator_end("i1");
  379. sht_rm_name_re("c=>.*");
  380. }
  381. route[TIMER_STATS] {
  382. #xlog("timer routine: time is $TS\n");
  383. route(CHECK_ALARM);
  384. #Check statistics
  385. route(CHECK_STATS);
  386. }
  387. route[SEND_ALARM] {
  388. exec_msg('echo "Value: $var(thvalue), Type: $var(atype), Desc: $var(aname)" | mail -s "Homer Alarm $var(atype) - $var(thvalue)" $var(aemail) ') ;
  389. }
  390. route[CHECK_ALARM]
  391. {
  392. #POPULATE ALARM THRESHOLDS
  393. #Homer 5 sql schema
  394. sql_query("cb", "SELECT type,value,name,notify,email FROM alarm_config WHERE NOW() between startdate AND stopdate AND active = 1", "ra");
  395. if($dbr(ra=>rows)>0)
  396. {
  397. $var(i) = 0;
  398. while($var(i)<$dbr(ra=>rows))
  399. {
  400. $var(atype) = $dbr(ra=>[$var(i),0]);
  401. $var(avalue) = $dbr(ra=>[$var(i),1]);
  402. $var(aname) = $dbr(ra=>[$var(i),2]);
  403. $var(anotify) = $(dbr(ra=>[$var(i),3]){s.int});
  404. $var(aemail) = $dbr(ra=>[$var(i),4]);
  405. $avp($var(atype)) = $var(avalue);
  406. if($sht(a=>alarm::$var(atype)) != $null) {
  407. $var(thvalue) = $sht(a=>alarm::$var(atype));
  408. }
  409. #If Alarm - go here
  410. if($var(thvalue) > $var(avalue)) {
  411. sql_query("cb", "INSERT INTO alarm_data (create_date, type, total, description) VALUES(NOW(), '$var(aname)', $var(thvalue), '$var(aname) - $var(atype)');");
  412. #Notify
  413. if($var(anotify) == 1) {
  414. route(SEND_ALARM);
  415. }
  416. }
  417. #Alarm for Scanner;
  418. if($var(atype) == "scanner") {
  419. sql_query("cb", "DELETE FROM alarm_data_mem WHERE type='scanner' AND total < $var(avalue)");
  420. if($var(anotify) == 1)
  421. {
  422. sql_query("cb", "SELECT * FROM alarm_data_mem WHERE type='scanner' AND total >= $var(avalue) LIMIT 2", "rd");
  423. if($dbr(rd=>rows) > 0) {
  424. route(SEND_ALARM);
  425. }
  426. sql_result_free("rd");
  427. }
  428. }
  429. $sht(a=>alarm::$var(atype)) = 0;
  430. $var(i) = $var(i) + 1;
  431. }
  432. }
  433. sql_result_free("ra");
  434. #if(sql_xquery("cb", "select type,value,name,notify,email from alarm_config WHERE startdate > NOW() AND stopdate < NOW() AND active = 1", "trigger") == 1) {
  435. # $var(i) = 0;
  436. # while($xavp(trigger[$var(i)]) != $null) {
  437. # $avp($xavp(trigger[$var(i)]=>type)) = $xavp(trigger[$var(i)]=>value);
  438. # $avp($xavp(trigger[$var(i)]=>type)+"_notify") = $xavp(trigger[$var(i)]=>notify);
  439. # $avp($xavp(trigger[$var(i)]=>type)+"_email") = $xavp(trigger[$var(i)]=>email);
  440. # $var(i) = $var(i) + 1;
  441. # }
  442. #}
  443. route(PARSE_STATS_IP);
  444. #delete old alarms
  445. sql_query("cb", "DELETE FROM alarm_data WHERE create_date < DATE_SUB(NOW(), INTERVAL 5 DAY)");
  446. }
  447. route[CHECK_STATS] {
  448. #SQL STATS
  449. $var(tm) = ($time(min) mod 10);
  450. if($var(tm) != 0 && $var(tm) != $sel(cfg_get.stats.min)) return;
  451. $var(t1) = $TS;
  452. $var(t2) = $var(t1) - ($sel(cfg_get.stats.min)*60);
  453. $var(t_date) = "FROM_UNIXTIME(" + $var(t1) + ", '%Y-%m-%d %H:%i:00')";
  454. $var(f_date) = "FROM_UNIXTIME(" + $var(t2) + ", '%Y-%m-%d %H:%i:00')";
  455. #ALARM SCANNERS
  456. sql_query("cb", "INSERT INTO alarm_data (create_date, type, total, source_ip, description) SELECT create_date, type, total, source_ip, description FROM alarm_data_mem;");
  457. sql_query("cb", "TRUNCATE TABLE alarm_data_mem");
  458. #STATS Useragent
  459. sql_query("cb", "INSERT INTO stats_useragent (from_date, to_date, useragent, method, total) SELECT $var(f_date) as from_date, $var(t_date) as to_date, useragent, method, total FROM stats_useragent_mem;");
  460. sql_query("cb", "TRUNCATE TABLE stats_useragent_mem");
  461. #STATS IP
  462. sql_query("cb", "INSERT INTO stats_ip (from_date, to_date, method, source_ip, total) SELECT $var(f_date) as from_date, $var(t_date) as to_date, method, source_ip, total FROM stats_ip_mem;");
  463. sql_query("cb", "TRUNCATE TABLE stats_ip_mem");
  464. #!ifdef WITH_HOMER_GEO
  465. sql_query("cb", "INSERT INTO stats_geo (from_date, to_date, method, country, lat, lon, total) SELECT $var(f_date) as from_date, $var(t_date) as to_date, method, country, lat, lon, total FROM stats_geo_mem;");
  466. sql_query("cb", "TRUNCATE TABLE stats_geo_mem");
  467. #!endif
  468. #INSERT SQL STATS
  469. #Packet HEP stats
  470. if($sht(a=>packet::count) != $null && $sht(a=>packet::count) > 0) {
  471. sql_query("cb", "INSERT INTO stats_data (from_date, to_date, type, total) VALUES($var(f_date), $var(t_date), 'packet_count', $sht(a=>packet::count)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>packet::count)");
  472. $sht(a=>packet::count) = 0;
  473. }
  474. if($sht(a=>packet::size) != $null && $sht(a=>packet::size) > 0) {
  475. sql_query("cb", "INSERT INTO stats_data (from_date, to_date, type, total) VALUES($var(f_date), $var(t_date), 'packet_size', $sht(a=>packet::size)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>packet::size)");
  476. $sht(a=>packet::size) = 0;
  477. }
  478. #SDF
  479. if($sht(a=>stats::sdf) != $null && $sht(a=>stats::sdf) > 0) {
  480. sql_query("cb", "INSERT INTO stats_data (from_date, to_date, type, total) VALUES($var(f_date), $var(t_date), 'sdf', $sht(a=>stats::sdf)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>stats::sdf)");
  481. $sht(a=>stats::sdf) = 0;
  482. }
  483. #ISA
  484. if($sht(a=>stats::isa) != $null && $sht(a=>stats::isa) > 0) {
  485. sql_query("cb", "INSERT INTO stats_data (from_date, to_date, type, total) VALUES($var(f_date), $var(t_date), 'isa', $sht(a=>stats::isa)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>stats::isa)");
  486. $sht(a=>stats::isa) = 0;
  487. }
  488. #SD
  489. if($sht(a=>stats::sd) != $null && $sht(a=>stats::sd) > 0) {
  490. sql_query("cb", "INSERT INTO stats_data (from_date, to_date, type, total) VALUES($var(f_date), $var(t_date), 'isa', $sht(a=>stats::sd)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>stats::sd)");
  491. $sht(a=>stats::sd) = 0;
  492. }
  493. #SSR
  494. if($sht(a=>stats::ssr) != $null && $sht(a=>stats::ssr) > 0) {
  495. sql_query("cb", "INSERT INTO stats_data (from_date, to_date, type, total) VALUES($var(f_date), $var(t_date), 'ssr', $sht(a=>stats::ssr)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>stats::ssr)");
  496. $sht(a=>stats::ssr) = 0;
  497. }
  498. #ASR
  499. $var(asr) = 0;
  500. #if($sht(a=>response::200::invite) > 0) {
  501. if($sht(a=>method::invite) > 0) {
  502. if($sht(a=>response::407::invite) == $null) $sht(a=>response::407::invite) = 0;
  503. if($sht(a=>response::200::invite) == $null) $sht(a=>response::200::invite) = 0;
  504. $var(d) = $sht(a=>method::invite) - $sht(a=>response::407::invite);
  505. if($var(d) > 0) {
  506. $var(asr) = $sht(a=>response::200::invite) * 100 / $var(d);
  507. if($var(asr) > 100) $var(asr) = 100;
  508. }
  509. }
  510. #Stats DATA
  511. sql_query("cb", "INSERT INTO stats_data (from_date, to_date, type, total) VALUES($var(f_date), $var(t_date), 'asr', $var(asr)) ON DUPLICATE KEY UPDATE total=(total+$var(asr))/2");
  512. #NER
  513. $var(ner) = 0;
  514. #if($sht(a=>response::200::invite) > 0 || $sht(a=>stats::bad::invite) > 0) {
  515. if($sht(a=>method::invite) > 0) {
  516. if($sht(a=>response::200::invite) == $null) $sht(a=>response::200::invite) = 0;
  517. if($sht(a=>response::bad::invite) == $null) $sht(a=>response::bad::invite) = 0;
  518. if($sht(a=>response::407::invite) == $null) $sht(a=>response::407::invite) = 0;
  519. $var(d) = $sht(a=>method::invite) - $sht(a=>response::407::invite);
  520. if($var(d) > 0) {
  521. $var(ner) = ($sht(a=>response::200::invite) + $sht(a=>stats::bad::invite)) * 100 / $var(d);
  522. if($var(ner) > 100) $var(ner) = 100;
  523. }
  524. }
  525. sql_query("cb", "INSERT INTO stats_data (from_date, to_date, type, total) VALUES($var(f_date), $var(t_date), 'ner', $var(ner)) ON DUPLICATE KEY UPDATE total=(total+$var(ner))/2");
  526. #INVITE
  527. if($sht(a=>method::reinvite) > 0) {
  528. sql_query("cb", "INSERT INTO stats_method (from_date, to_date, method, totag, total) VALUES($var(f_date), $var(t_date),'INVITE', 1, $sht(a=>method::reinvite)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>method::reinvite)");
  529. $sht(a=>method::reinvite) = 0;
  530. }
  531. #INVITE
  532. if($sht(a=>method::invite) > 0) {
  533. sql_query("cb", "INSERT INTO stats_method (from_date, to_date, method, total) VALUES($var(f_date), $var(t_date), 'INVITE', $sht(a=>method::invite)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>method::invite)");
  534. $sht(a=>method::invite) = 0;
  535. }
  536. #INVITE AUTH
  537. if($sht(a=>method::invite::auth) > 0) {
  538. sql_query("cb", "INSERT INTO stats_method (from_date, to_date, method, auth, total) VALUES($var(f_date), $var(t_date), 'INVITE', 1, $sht(a=>method::invite::auth)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>method::invite::auth)");
  539. $sht(a=>method::invite::auth) = 0;
  540. }
  541. #REGISTER
  542. if($sht(a=>method::register) > 0) {
  543. sql_query("cb", "INSERT INTO stats_method (from_date, to_date, method, total) VALUES($var(f_date), $var(t_date), 'REGISTER', $sht(a=>method::register)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>method::register)");
  544. $sht(a=>method::register) = 0;
  545. }
  546. #REGISTER AUTH
  547. if($sht(a=>method::register::auth) > 0) {
  548. sql_query("cb", "INSERT INTO stats_method (from_date, to_date, method, auth, total) VALUES($var(f_date), $var(t_date), 'REGISTER', 1, $sht(a=>method::register::auth)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>method::register::auth)");
  549. $sht(a=>method::register::auth) = 0;
  550. }
  551. #BYE
  552. if($sht(a=>method::bye) > 0) {
  553. sql_query("cb", "INSERT INTO stats_method (from_date, to_date, method, total) VALUES($var(f_date), $var(t_date), 'BYE', $sht(a=>method::bye)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>method::bye)");
  554. $sht(a=>method::bye) = 0;
  555. }
  556. #CANCEL
  557. if($sht(a=>method::cancel) > 0) {
  558. sql_query("cb", "INSERT INTO stats_method (from_date, to_date, method, total) VALUES($var(f_date), $var(t_date), 'CANCEL', $sht(a=>method::cancel)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>method::cancel)");
  559. $sht(a=>method::cancel) = 0;
  560. }
  561. #OPTIONS
  562. if($sht(a=>method::options) > 0) {
  563. sql_query("cb", "INSERT INTO stats_method (from_date, to_date, method, total) VALUES($var(f_date), $var(t_date), 'OPTIONS', $sht(a=>method::options)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>method::options)");
  564. $sht(a=>method::options) = 0;
  565. }
  566. #!ifdef WITH_STATISTIC_METHOD_EXTRA
  567. #UNKNOWN
  568. if($sht(a=>method::unknown) > 0) {
  569. sql_query("cb", "INSERT INTO stats_method (from_date, to_date, method, total) VALUES($var(f_date), $var(t_date), 'UNKNOWN', $sht(a=>method::unknown)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>method::unknown)");
  570. $sht(a=>method::unknown) = 0;
  571. }
  572. #ACK
  573. if($sht(a=>method::ack) > 0) {
  574. sql_query("cb", "INSERT INTO stats_method (from_date, to_date, method, total) VALUES($var(f_date), $var(t_date), 'ACK', $sht(a=>method::ack)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>method::ack)");
  575. $sht(a=>method::ack) = 0;
  576. }
  577. #!endif
  578. #REFER
  579. if($sht(a=>method::refer) > 0) {
  580. sql_query("cb", "INSERT INTO stats_method (from_date, to_date, method, total) VALUES($var(f_date), $var(t_date), 'REFER', $sht(a=>method::refer)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>method::refer)");
  581. $sht(a=>method::refer) = 0;
  582. }
  583. #UPDATE
  584. if($sht(a=>method::update) > 0) {
  585. sql_query("cb", "INSERT INTO stats_method (from_date, to_date, method, total) VALUES($var(f_date), $var(t_date), 'UPDATE', $sht(a=>method::update)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>method::update)");
  586. $sht(a=>method::update) = 0;
  587. }
  588. #RESPONSE
  589. #300
  590. if($sht(a=>response::300) > 0) {
  591. sql_query("cb", "INSERT INTO stats_method (from_date, to_date, method, total) VALUES($var(f_date), $var(t_date), '300', $sht(a=>response::300)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>response::300)");
  592. $sht(a=>response::300) = 0;
  593. }
  594. #407 INVITE
  595. if($sht(a=>response::407::invite) > 0) {
  596. sql_query("cb", "INSERT INTO stats_method (from_date, to_date, method, cseq, total) VALUES($var(f_date), $var(t_date), '407', 'INVITE', $sht(a=>response::407::invite)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>response::407::invite)");
  597. $sht(a=>response::407::invite) = 0;
  598. }
  599. #401 INVITE
  600. if($sht(a=>response::401::invite) > 0) {
  601. sql_query("cb", "INSERT INTO stats_method (from_date, to_date, method, cseq, total) VALUES($var(f_date), $var(t_date), '401', 'INVITE', $sht(a=>response::401::invite)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>response::401::invite)");
  602. $sht(a=>response::401::invite) = 0;
  603. }
  604. #!ifdef WITH_STATISTIC_INVITE_1XX
  605. #100 INVITE
  606. if($sht(a=>response::100::invite) > 0) {
  607. sql_query("cb", "INSERT INTO stats_method (from_date, to_date, method, cseq, total) VALUES($var(f_date), $var(t_date), '100', 'INVITE', $sht(a=>response::100::invite)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>response::100::i
  608. $sht(a=>response::100::invite) = 0;
  609. }
  610. #180 INVITE
  611. if($sht(a=>response::180::invite) > 0) {
  612. sql_query("cb", "INSERT INTO stats_method (from_date, to_date, method, cseq, total) VALUES($var(f_date), $var(t_date), '180', 'INVITE', $sht(a=>response::180::invite)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>response::180::i
  613. $sht(a=>response::180::invite) = 0;
  614. }
  615. #183 INVITE
  616. if($sht(a=>response::183::invite) > 0) {
  617. sql_query("cb", "INSERT INTO stats_method (from_date, to_date, method, cseq, total) VALUES($var(f_date), $var(t_date), '183', 'INVITE', $sht(a=>response::183::invite)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>response::183::i
  618. $sht(a=>response::183::invite) = 0;
  619. }
  620. #!endif
  621. #200 INVITE
  622. if($sht(a=>response::200::invite) > 0) {
  623. sql_query("cb", "INSERT INTO stats_method (from_date, to_date, method, cseq, total) VALUES($var(f_date), $var(t_date), '200', 'INVITE', $sht(a=>response::200::invite)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>response::200::invite)");
  624. $sht(a=>response::200::invite) = 0;
  625. }
  626. #407 BYE
  627. if($sht(a=>response::407::bye) > 0) {
  628. sql_query("cb", "INSERT INTO stats_method (from_date, to_date, method, cseq, total) VALUES($var(f_date), $var(t_date), '407', 'BYE', $sht(a=>response::407::bye)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>response::407::bye)");
  629. $sht(a=>response::407::bye) = 0;
  630. }
  631. #401 BYE
  632. if($sht(a=>response::401::bye) > 0) {
  633. sql_query("cb", "INSERT INTO stats_method (from_date, to_date, method, cseq, total) VALUES($var(f_date), $var(t_date), '401', 'BYE', $sht(a=>response::401::bye)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>response::401::bye)");
  634. $sht(a=>response::401::bye) = 0;
  635. }
  636. #200 BYE
  637. if($sht(a=>response::200::bye) > 0) {
  638. sql_query("cb", "INSERT INTO stats_method (from_date, to_date, method, cseq, total) VALUES($var(f_date), $var(t_date), '200', 'BYE', $sht(a=>response::200::bye)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>response::200::bye)");
  639. $sht(a=>response::200::bye) = 0;
  640. }
  641. #ALL TRANSACTIONS MESSAGES
  642. if($sht(a=>method::all) > 0) {
  643. sql_query("cb", "INSERT INTO stats_method (from_date, to_date, method, total) VALUES($var(f_date), $var(t_date), 'ALL', $sht(a=>method::all)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>method::all)");
  644. $sht(a=>method::all) = 0;
  645. }
  646. #ALL MESSAGES ON INTERFACE
  647. if($sht(a=>method::total) > 0) {
  648. sql_query("cb", "INSERT INTO stats_method (from_date, to_date, method, total) VALUES($var(f_date), $var(t_date), 'TOTAL', $sht(a=>method::total)) ON DUPLICATE KEY UPDATE total=total+$sht(a=>method::total)");
  649. $sht(a=>method::total) = 0;
  650. }
  651. #!ifdef WITH_HOMER_CUSTOM_STATS
  652. #Generic stats
  653. sht_iterator_start("i1", "d");
  654. while(sht_iterator_next("i1")) {
  655. $var(key) = $(shtitkey(i1){s.select,2,:});
  656. sql_query("cb", "INSERT INTO stats_generic (from_date, to_date, type, total) VALUES($var(f_date), $var(t_date), '$var(key)', $shtitval(i1)) ON DUPLICATE KEY UPDATE total=(total+$shtitval(i1))/2");
  657. }
  658. sht_iterator_end("i1");
  659. sht_rm_name_re("d=>.*");
  660. #!endif
  661. }
  662. route[STORE] {
  663. if($rm == "REGISTER") {
  664. $var(table) = "sip_capture_registration";
  665. }
  666. else if($rm =~ "(INVITE|UPDATE|BYE|ACK|PRACK|REFER|CANCEL)$")
  667. {
  668. $var(table) = "sip_capture_call";
  669. }
  670. else if($rm =~ "(NOTIFY)$" && is_present_hf("Event") && $hdr(Event)=~"refer;")
  671. {
  672. $var(table) = "sip_capture_call";
  673. }
  674. else if($rm =~ "(INFO)$")
  675. {
  676. $var(table) = "sip_capture_call";
  677. }
  678. else if($rm =~ "(OPTIONS)$" )
  679. {
  680. $var(table) = "sip_capture_rest";
  681. }
  682. else {
  683. $var(table) = "sip_capture_rest";
  684. }
  685. #!ifdef KAMAILIO_4_3
  686. #For old models. Not accurate insert time. System vs capture time.
  687. #$var(utc) = $timef(%Y%m%d);
  688. #as workaround for kamailio < 4.4
  689. sql_query("cb", "SELECT UTC_DATE()+0;", "ra");
  690. if($dbr(ra=>rows)>0) {
  691. $var(utc) = $dbr(ra=>[0,0]);
  692. }
  693. sql_result_free("ra");
  694. #!else
  695. #for Kamailio >=4.4 please uncomment this parameters:
  696. # New utimef can fix the timediff issue. But unfortunately only kamailio 4.4
  697. $var(utc) = $utimef(%Y%m%d);
  698. # or sipcapture style
  699. #$var(utc) = "%Y%m%d";
  700. #!endif
  701. $var(a) = $var(table) + "_" + $var(utc);
  702. sip_capture("$var(a)");
  703. }
  704. #!ifdef WITH_HOMER_CUSTOM_STATS
  705. event_route[xhttp:request] {
  706. set_reply_close();
  707. set_reply_no_connect();
  708. xlog("L_WARN", "HTTP request received on $Rp, $hu\n");
  709. if($hu =~ "/api/v1/stats/push") {
  710. #Json is our body
  711. $var(json) = $rb;
  712. jansson_get("type", $var(json), "$var(n)");
  713. xlog("L_WARN","Type is $var(n)");
  714. if($var(n) == "rtp_stat") {
  715. $var(i) = 0;
  716. $(avp(x)[0]) = 'interval';
  717. $(avp(x)[1]) = 'streams';
  718. $(avp(x)[2]) = 'packets';
  719. $(avp(x)[3]) = 'lost';
  720. $(avp(x)[4]) = 'late';
  721. $(avp(x)[5]) = 'lost_perc';
  722. $(avp(x)[6]) = 'late_perc';
  723. $(avp(x)[7]) = 'out_of_seq';
  724. $(avp(x)[8]) = 'delay_min';
  725. $(avp(x)[9]) = 'delay_max';
  726. while(is_avp_set("$(avp(x)[$var(i)])")) {
  727. xlog("L_INFO", "Array value [$var(i)]: $(avp(x)[$var(i)])\n");
  728. jansson_get("$(avp(x)[$var(i)])", $var(json), "$var(d)");
  729. $var(n) = $(var(d){s.int});
  730. if($sht(d=>generic::$(avp(x)[$var(i)])) == $null) $sht(d=>generic::$(avp(x)[$var(i)])) = $var(n);
  731. else $sht(d=>generic::$(avp(x)[$var(i)])) = ($sht(d=>generic::$(avp(x)[$var(i)])) + $var(n))/2;
  732. $var(i) = $var(i) + 1;
  733. }
  734. }
  735. xhttp_reply("200", "Ok", "done", "");
  736. exit;
  737. }
  738. xhttp_reply("403", "Forbidden", "", "");
  739. exit;
  740. }
  741. #!endif
  742. event_route[sipcapture:request] {
  743. #xlog("HEP Request!\n");
  744. #xlog("received sipcapture request from $si:$sp\r\n");
  745. #xlog("HEP VERSION $hep(version) request from $si:$sp\r\n");
  746. #xlog("HEP CHUNK Source IP $hep(0x002) request from $si:$sp\r\n");
  747. #xlog("HEP CHUNK Type: $hep(0x00b)\r\n");
  748. #Is it SIP ?
  749. if($hep(0x00b) == 1){
  750. #Do parsing internal
  751. #$var(data) = $hep(0x00f);
  752. #$var(family) = $hep(0x001);
  753. ##$var(proto) = $hep(0x002);
  754. #$var(proto) = 17;
  755. #$var(srcip) = $hep(0x003);
  756. #$var(dstip) = $hep(0x004);
  757. #$var(srcport) = $hep(0x007);
  758. #$var(dstport) = $hep(0x008);
  759. ##$#var(timesec) = $hep(0x009);
  760. ##$var(timeusec) = $hep(0x00a);
  761. #$var(correlation_id) = $hep(0x011);
  762. #$var(type) = $hep(0x00b);
  763. #xlog("HEP CHUNK SIP PAYLOAD $var(data) request from $si:$sp: Time: $var(timesec), $var(timeusec), Proto: $var(proto), Family: $var(family), SRC:$var(srcip) $var(srcport), DST: $var(dstip) $var(dstport) \r\n");
  764. return 1;
  765. }
  766. #####################RTCP###############################
  767. else if($hep(0x00b) == 5){
  768. #If report lets proceed here with payload
  769. #xlog("HEP RTCP CHUNK PAYLOAD $hep(0x00f) request from $si:$sp\r\n");
  770. #Do parsing internal
  771. $var(utc) = $utimef(%Y%m%d);
  772. $var(table) = "rtcp_capture_all_" + $var(utc);
  773. #$var(table) = "rtcp_capture";
  774. $var(json) = $hep(0x00f);
  775. $var(family) = $hep(0x001);
  776. $var(proto) = 17;
  777. #$var(proto) = $hep(0x002);
  778. $var(srcip) = $hep(0x003);
  779. $var(dstip) = $hep(0x004);
  780. $var(srcport) = $hep(0x007);
  781. $var(dstport) = $hep(0x008);
  782. $var(timesec) = $hep(0x009);
  783. $var(timeusec) = $hep(0x00a);
  784. $var(correlation_id) = $hep(0x011);
  785. $var(type) = $hep(0x00b);
  786. $var(node) = "prototype";
  787. #$var(millisec) = ""+$var(timesec)+$var(timeusec);
  788. $var(t_date) = "FROM_UNIXTIME(" + $var(timesec) + ", '%Y-%m-%d %H:%i:%S')";
  789. #xlog("HEP CHUNK RTCP JSON PAYLOAD $var(json) request from $si:$sp: $var(table),$var(family),$var(proto),$var(srcip),$var(dstip), $var(srcport), $var(dstport), $var(correlation_id)\r\n");
  790. #if(!jansson_get("timestamp", $var(json), "$var(millisec)"))
  791. #{
  792. # $var(millisec) = "MICROSECOND(NOW())";
  793. #}
  794. #$var(millisec) = "(($var(timesec)*1000+$var(timeusec))*1000)";
  795. $var(millisec) = "(("+$var(timesec)+"*1000+"+$var(timeusec)+")*1000)";
  796. #xlog("HEP RTCP JSON PAYLOAD [$var(json)]. Id: $var(correlation_id)\r\n");
  797. sql_query("wc", "INSERT INTO $var(table) (date, micro_ts, correlation_id, source_ip, source_port, destination_ip, destination_port, proto, family, type, node, msg) VALUES($var(t_date), $var(millisec), '$var(correlation_id)','$var(srcip)',$var(srcport),'$var(dstip)',$var(dstport),$var(proto),$var(family),$var(type),'$var(node)','$var(json)')");
  798. return 0;
  799. }
  800. else
  801. {
  802. $var(data) = $hep(0x00f);
  803. #xlog("ANOTHER HEP CHUNK JSON PAYLOAD $var(data) request from $si:$sp:\r\n");
  804. xlog("ANOTHER HEP CHUNK TYPE: $hep(0x00b);\r\n");
  805. return 0;
  806. }
  807. }