app_java_admin.xml 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661
  1. <?xml version="1.0" encoding='utf-8'?>
  2. <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
  3. "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
  4. <!-- Include general documentation entities -->
  5. <!ENTITY % docentities SYSTEM "../../../docbook/entities.xml">
  6. %docentities;
  7. ]>
  8. <!-- Module User's Guide -->
  9. <chapter>
  10. <title>&adminguide;</title>
  11. <!-- Section Overview -->
  12. <section>
  13. <title>Overview</title>
  14. <para>
  15. This module allows execution of Java compiled classes from the &kamailio;
  16. config file, exporting functions to access the SIP message from Java
  17. using the Java Native Interface (JNI).
  18. </para>
  19. </section>
  20. <!-- end op section Overview -->
  21. <!-- Section Dependencies -->
  22. <section>
  23. <title>Dependencies</title>
  24. <!-- Section Modules -->
  25. <section>
  26. <title>&kamailio; Modules</title>
  27. <para>
  28. The following modules must be loaded before this module:
  29. <itemizedlist>
  30. <listitem>
  31. <para>
  32. <emphasis>none</emphasis>.
  33. </para>
  34. </listitem>
  35. </itemizedlist>
  36. </para>
  37. </section>
  38. <!-- End of section Modules -->
  39. <!-- Section External Libraries or Applications -->
  40. <section>
  41. <title>External Libraries or Applications</title>
  42. <para>
  43. <!--
  44. The following libraries or applications must be installed before running
  45. &kamailio; with this module loaded:
  46. -->
  47. <itemizedlist>
  48. <para><emphasis>The following packages are runtime libraries, required to launch</emphasis></para>
  49. <listitem override="disc"><para><emphasis>java-common</emphasis> Base of all Java packages.</para></listitem>
  50. <listitem override="disc"><para><emphasis>default-jre</emphasis> Standard Java or Java compatible Runtime.</para></listitem>
  51. <listitem override="disc"><para><emphasis>gcj-jre</emphasis> Java runtime environment using GIJ/classpath.</para></listitem>
  52. <listitem override="disc"><para><emphasis>libgcj12 (>=12)</emphasis> Java runtime library for use with gcj.</para></listitem>
  53. </itemizedlist>
  54. <itemizedlist>
  55. <para><emphasis>The following packages are optional, required for development</emphasis></para>
  56. <listitem override="box"><para><emphasis>ant</emphasis> Java based build tool like make.</para></listitem>
  57. <listitem override="box"><para><emphasis>ant-contrib</emphasis> Collection of tasks, types and other tools for Apache Ant.</para></listitem>
  58. <listitem override="box"><para><emphasis>ant-gcj</emphasis> Java based build tool like make (GCJ).</para></listitem>
  59. <listitem override="box"><para><emphasis>default-jdk</emphasis> Standard Java or Java compatible Development Kit</para></listitem>
  60. <listitem override="box"><para><emphasis>gcj-jdk</emphasis> gcj and classpath development tools for Java(TM)</para></listitem>
  61. <listitem override="box"><para><emphasis>libgcj13-dev (>=12)</emphasis> Java development headers for use with gcj</para></listitem>
  62. <listitem override="box"><para><emphasis>jdk</emphasis> JDK Development Kit (either oracle jdk or openjdk)</para></listitem>
  63. </itemizedlist>
  64. </para>
  65. <para>
  66. The following libraries or applications must be compiled before
  67. running &kamailio; with this module loaded:
  68. <itemizedlist>
  69. <para><emphasis>The following packages are runtime libraries, required to launch</emphasis></para>
  70. <listitem override="circle"><para><emphasis>&lt;class_name&gt;</emphasis>.class</para></listitem>
  71. <listitem override="circle"><para><emphasis>&kamailiobinary;</emphasis>.jar</para></listitem>
  72. </itemizedlist>
  73. </para>
  74. </section>
  75. <!-- end of section External Libraries or Applications -->
  76. </section>
  77. <!-- end of section Dependencies -->
  78. <!-- Section Java Runtime -->
  79. <section>
  80. <title>Java runtime</title>
  81. <section>
  82. <title>JRE or JDK is required to use this module</title>
  83. <para>Java runtime library (JRE and JDK for building app_java) is required to use this module.</para>
  84. </section>
  85. </section>
  86. <!-- end of section Java Runtime -->
  87. <!-- Section Parameters -->
  88. <section>
  89. <title>Parameters</title>
  90. <!-- class_name -->
  91. <section id="app_java.p.class_name">
  92. <title><varname>class_name</varname> (string)</title>
  93. <para>
  94. The class name should have the same compiled file name.
  95. If the value is <emphasis>"&kamailio;"</emphasis>, then the compiled file should be named as <emphasis>"&kamailio;.class"</emphasis>.
  96. </para>
  97. <para>
  98. <emphasis>
  99. Default value is <quote>&kamailio;</quote>.
  100. </emphasis>
  101. </para>
  102. <example>
  103. <title>Set <varname>class_name</varname> parameter</title>
  104. <programlisting format="linespecific">
  105. ...
  106. modparam("app_java", "class_name", "&kamailio;")
  107. ...
  108. </programlisting>
  109. </example>
  110. </section>
  111. <!-- child_init_method -->
  112. <section id="app_java.p.child_init_method">
  113. <title><varname>child_init_method</varname> (string)</title>
  114. <para>
  115. TBD.
  116. </para>
  117. <para>
  118. <emphasis>
  119. Default value is <quote>child_init</quote>.
  120. </emphasis>
  121. </para>
  122. <example>
  123. <title>Set <varname>child_init_method</varname> parameter</title>
  124. <programlisting format="linespecific">
  125. ...
  126. modparam("app_java", "child_init_method", "my_mod_init")
  127. ...
  128. </programlisting>
  129. </example>
  130. </section>
  131. <!-- java_options -->
  132. <section id="app_java.p.java_option">
  133. <title><varname>java_options</varname> (string)</title>
  134. <para>
  135. Java options for Java Virtual Machine.
  136. For more info read <ulink url="http://docs.oracle.com/javase/6/docs/technotes/tools/windows/java.html"><citetitle>java docs</citetitle></ulink>
  137. </para>
  138. <para>
  139. <emphasis>
  140. Default value is <quote>-Djava.compiler=NONE</quote>.
  141. </emphasis>
  142. </para>
  143. <example>
  144. <title>Set <varname>java_options</varname> parameter</title>
  145. <programlisting format="linespecific">
  146. ...
  147. modparam("app_java", "java_options", "-Djava.compiler=NONE")
  148. ...
  149. </programlisting>
  150. </example>
  151. <example>
  152. <title>Set <varname>java_options</varname> parameter (live configuration)</title>
  153. <programlisting format="linespecific">
  154. ...
  155. # Assumes "application java folder" is located at /opt/kamailio/java
  156. modparam("app_java", "java_options", "-Djava.compiler=NONE
  157. -Djava.class.path=/path/to/kamailio/modules:/opt/kamailio/java:
  158. /opt/kamailio/java/kamailio.jar")
  159. ...
  160. </programlisting>
  161. </example>
  162. <example>
  163. <title>Set <varname>java_options</varname> parameter (verbose configuration)</title>
  164. <programlisting format="linespecific">
  165. ...
  166. # Assumes "application java folder" is located at /opt/kamailio/java
  167. modparam("app_java", "java_options", "-verbose:gc,class,jni
  168. -Djava.compiler=NONE -Djava.class.path=/path/to/kamailio/modules:
  169. /opt/kamailio/java:/opt/kamailio/java/kamailio.jar")
  170. ...
  171. </programlisting>
  172. </example>
  173. <example>
  174. <title>Set <varname>java_options</varname> parameter (debug configuration)</title>
  175. <programlisting format="linespecific">
  176. ...
  177. # Assumes "application java folder" is located at /opt/kamailio/java
  178. modparam("app_java", "java_options", "-Xdebug -verbose:gc,class,jni
  179. -Djava.compiler=NONE -Djava.class.path=/path/to/kamailio/modules:
  180. /opt/kamailio/java:/opt/kamailio/java/kamailio.jar")
  181. ...
  182. </programlisting>
  183. </example>
  184. </section>
  185. <!-- force_cmd_exec -->
  186. <section id="app_java.p.force_cmd_exec">
  187. <title><varname>force_cmd_exec</varname> (int)</title>
  188. <para>
  189. This parameter forces execution a &kamailiobinary; comnmand with java native method <quote>KamExec</quote>.
  190. # Note: this is an untested yet feature, may cause (but may not) a memory leaks if used from embedded languages.
  191. </para>
  192. <para>
  193. <emphasis>
  194. Default value is <quote>0 (off)</quote>.
  195. </emphasis>
  196. </para>
  197. <example>
  198. <title>Set <varname>force_cmd_exec</varname> parameter</title>
  199. <programlisting format="linespecific">
  200. ...
  201. modparam("app_java", "force_cmd_exec", 1)
  202. ...
  203. </programlisting>
  204. </example>
  205. </section>
  206. </section>
  207. <!-- End of section Parameters -->
  208. <!-- Section Functions -->
  209. <section>
  210. <title>Functions</title>
  211. <!-- Section Common requirements -->
  212. <section>
  213. <title>
  214. Common requirements
  215. </title>
  216. <para>Each function has a required parameter <quote>method_signature</quote>. For more info
  217. see <ulink url="http://www.rgagnon.com/javadetails/java-0286.html"
  218. ><citetitle>Determine the signature of a method</citetitle></ulink>.
  219. Signature represents the variable type. The mapping between the Java type and C type
  220. is
  221. <programlisting format="linespecific">
  222. Type Chararacter
  223. boolean Z
  224. byte B
  225. char C
  226. double D
  227. float F
  228. int I
  229. long J
  230. object L
  231. short S
  232. void V
  233. Note that to specify an object, the "L" is followed by the
  234. object's class name and ends with a semi-colon, ';' .
  235. </programlisting>
  236. </para>
  237. <para> app_java supports the following signatures:
  238. <programlisting format="linespecific">
  239. Primitives: Z,B,C,D,F,I,J,L,S,V
  240. Objects:
  241. Ljava/lang/Boolean;
  242. Ljava/lang/Byte;
  243. Ljava/lang/Character;
  244. Ljava/lang/Double;
  245. Ljava/lang/Float;
  246. Ljava/lang/Integer;
  247. Ljava/lang/Long;
  248. Ljava/lang/Short;
  249. Ljava/lang/String;
  250. NULL parameter: V
  251. Each parameter passed to function will be cast according to given signature.
  252. Parameters are optional, ommitting a parameter meant the passed value is NULL.
  253. Parameters count should be exactly the same as signature count.
  254. Note 1: Arrays representation (symbol '[') is not supported yet.
  255. Note 2: You shall use a correct signature, e.g. the following examples of
  256. combinations are invalid:
  257. java_method_exec("ExampleMethod", "ZI", "False");
  258. java_method_exec("ExampleMethod", "LI", "something", "5");
  259. </programlisting>
  260. </para>
  261. </section>
  262. <!-- End of section Common Requirements -->
  263. <!-- Section java_method_exec -->
  264. <section id="app_java.f.java_method_exec">
  265. <title>java_method_exec(method, method_signature, [param1[, param2[, ...]]])</title>
  266. <para>Executes a java class method <emphasis>method</emphasis>. Parameter <emphasis>method_signature</emphasis> is required.</para>
  267. <itemizedlist>
  268. <listitem>
  269. <example>
  270. <title>Signature: "V"</title>
  271. <para>&kamailio; prototype</para>
  272. <programlisting format="linespecific">java_method_exec("ExampleMethod", "V");</programlisting>
  273. <para>Java prototype</para>
  274. <programlisting format="linespecific">public int ExampleMethod();</programlisting>
  275. <para>Example of usage:</para>
  276. <programlisting format="linespecific">
  277. # &kamailio;
  278. java_method_exec("ExampleMethod", "V");
  279. # Java
  280. public int ExampleMethod()
  281. {
  282. ... do something;
  283. return 1;
  284. }
  285. </programlisting>
  286. </example>
  287. </listitem>
  288. <listitem>
  289. <example>
  290. <title>Signature: "Ljava/lang/String;I"</title>
  291. <para>&kamailio; prototype</para>
  292. <programlisting format="linespecific">java_method_exec("ExampleMethod", "Ljava/lang/String;I", "Hello world", "5");</programlisting>
  293. <para>Java prototype</para>
  294. <programlisting format="linespecific">public int ExampleMethod(String param1, int param2);</programlisting>
  295. <para>In the above scenario parameter 2 ("5") will be cast to integer representation.</para>
  296. <para>Example of usage:</para>
  297. <programlisting format="linespecific">
  298. # &kamailio;
  299. java_method_exec("ExampleMethod", "Ljava/lang/String;I", "$mb", "$ml");
  300. # Java
  301. public int ExampleMethod(String SipMessageBuffer, int SipMessageLenght)
  302. {
  303. ... do something with buffer;
  304. return 1;
  305. }
  306. </programlisting>
  307. </example>
  308. </listitem>
  309. <listitem>
  310. <example>
  311. <title>Signature: "ZB"</title>
  312. <para>&kamailio; prototype</para>
  313. <programlisting format="linespecific">java_method_exec("ExampleMethod", "ZB", "true", "0x05");</programlisting>
  314. <para>Java prototype</para>
  315. <programlisting format="linespecific">public int ExampleMethod(boolean param1, byte param2);</programlisting>
  316. <para>In the above scenario parameter 1 ("true") will be cast to boolean representation.</para>
  317. <para>Example of usage:</para>
  318. <programlisting format="linespecific">
  319. # &kamailio;
  320. java_method_exec("ExampleMethod", "ZB", "true", "0x05");
  321. # Java
  322. public int ExampleMethod(boolean flagSet, byte bFlag);
  323. {
  324. if (flagSet)
  325. {
  326. ... do something with flags;
  327. }
  328. return 1;
  329. }
  330. </programlisting>
  331. </example>
  332. </listitem>
  333. </itemizedlist>
  334. </section>
  335. <!-- end of section java_method_exec -->
  336. <!-- Section java_staticmethod_method_exec -->
  337. <section id="app_java.f.java_staticmethod_exec">
  338. <title>java_staticmethod_exec(method, method_signature, [param1[, param2[, ...]]])</title>
  339. <para>Executes a Java static method <emphasis>method</emphasis>. Parameter <emphasis>method_signature</emphasis> is required.</para>
  340. <itemizedlist>
  341. <listitem>
  342. <example>
  343. <title>Signature: "V"</title>
  344. <para>&kamailio; prototype</para>
  345. <programlisting format="linespecific">java_staticmethod_exec("ExampleMethod", "V");</programlisting>
  346. <para>Java prototype</para>
  347. <programlisting format="linespecific">public static int ExampleMethod();</programlisting>
  348. <para>Example of usage:</para>
  349. <programlisting format="linespecific">
  350. # &kamailio;
  351. java_staticmethod_exec("ExampleMethod", "V");
  352. # Java
  353. public static int ExampleMethod()
  354. {
  355. ... do something;
  356. return 1;
  357. }
  358. </programlisting>
  359. </example>
  360. </listitem>
  361. <listitem>
  362. <example>
  363. <title>Signature: "Ljava/lang/String;I"</title>
  364. <para>&kamailio; prototype</para>
  365. <programlisting format="linespecific">java_staticmethod_exec("ExampleMethod", "Ljava/lang/String;I", "Hello world", "5");</programlisting>
  366. <para>Java prototype</para>
  367. <programlisting format="linespecific">public static int ExampleMethod(String param1, int param2);</programlisting>
  368. <para>In the above scenario parameter 2 ("5") will be cast to integer representation.</para>
  369. <para>Example of usage:</para>
  370. <programlisting format="linespecific">
  371. # &kamailio;
  372. java_staticmethod_exec("ExampleMethod", "Ljava/lang/String;I", "$mb", "$ml");
  373. # Java
  374. public static int ExampleMethod(String SipMessageBuffer, int SipMessageLenght)
  375. {
  376. ... do something with buffer;
  377. return 1;
  378. }
  379. </programlisting>
  380. </example>
  381. </listitem>
  382. <listitem>
  383. <example>
  384. <title>Signature: "ZB"</title>
  385. <para>&kamailio; prototype</para>
  386. <programlisting format="linespecific">java_staticmethod_exec("ExampleMethod", "ZB", "true", "0x05");</programlisting>
  387. <para>Java prototype</para>
  388. <programlisting format="linespecific">public static int ExampleMethod(boolean param1, byte param2);</programlisting>
  389. <para>In the above scenario parameter 1 ("true") will be cast to boolean representation.</para>
  390. <para>Example of usage:</para>
  391. <programlisting format="linespecific">
  392. # &kamailio;
  393. java_staticmethod_exec("ExampleMethod", "ZB", "true", "0x05");
  394. # Java
  395. public static int ExampleMethod(boolean flagSet, byte bFlag);
  396. {
  397. if (flagSet)
  398. {
  399. ... do something with flags;
  400. }
  401. return 1;
  402. }
  403. </programlisting>
  404. </example>
  405. </listitem>
  406. </itemizedlist>
  407. </section>
  408. <!-- end of section java_staticmethod_exec -->
  409. <!-- Section java_s_method_exec -->
  410. <section id="app_java.f.java_s_method_exec">
  411. <title>java_s_method_exec(method, method_signature, [param1[, param2[, ...]]])</title>
  412. <para>Executes a Java class synchronized method <emphasis>method</emphasis>. Parameter <emphasis>method_signature</emphasis> is required.</para>
  413. <para>For more info see <ulink url="http://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html"><citetitle>Synchronized Methods</citetitle></ulink></para>
  414. <itemizedlist>
  415. <listitem>
  416. <example>
  417. <title>Signature: "V"</title>
  418. <para>&kamailio; prototype</para>
  419. <programlisting format="linespecific">java_s_method_exec("ExampleMethod", "V");</programlisting>
  420. <para>Java prototype</para>
  421. <programlisting format="linespecific">public synchronized int ExampleMethod();</programlisting>
  422. <para>Example of usage:</para>
  423. <programlisting format="linespecific">
  424. # &kamailio;
  425. java_s_method_exec("ExampleMethod", "V");
  426. # Java
  427. public synchronized int ExampleMethod()
  428. {
  429. ... do something;
  430. return 1;
  431. }
  432. </programlisting>
  433. </example>
  434. </listitem>
  435. <listitem>
  436. <example>
  437. <title>Signature: "Ljava/lang/String;I"</title>
  438. <para>&kamailio; prototype</para>
  439. <programlisting format="linespecific">java_s_method_exec("ExampleMethod", "Ljava/lang/String;I", "Hello world", "5");</programlisting>
  440. <para>Java prototype</para>
  441. <programlisting format="linespecific">public synchronized int ExampleMethod(String param1, int param2);</programlisting>
  442. <para>In the above scenario parameter 2 ("5") will be cast to integer representation.</para>
  443. <para>Example of usage:</para>
  444. <programlisting format="linespecific">
  445. # &kamailio;
  446. java_s_method_exec("ExampleMethod", "Ljava/lang/String;I", "$mb", "$ml");
  447. # Java
  448. public synchronized int ExampleMethod(String SipMessageBuffer, int SipMessageLenght)
  449. {
  450. ... do something with buffer;
  451. return 1;
  452. }
  453. </programlisting>
  454. </example>
  455. </listitem>
  456. <listitem>
  457. <example>
  458. <title>Signature: "ZB"</title>
  459. <para>&kamailio; prototype</para>
  460. <programlisting format="linespecific">java_s_method_exec("ExampleMethod", "ZB", "true", "0x05");</programlisting>
  461. <para>Java prototype</para>
  462. <programlisting format="linespecific">public synchronized int ExampleMethod(boolean param1, byte param2);</programlisting>
  463. <para>In the above scenario parameter 1 ("true") will be cast to boolean representation.</para>
  464. <para>Example of usage:</para>
  465. <programlisting format="linespecific">
  466. # &kamailio;
  467. java_s_method_exec("ExampleMethod", "ZB", "true", "0x05");
  468. # Java
  469. public synchronized int ExampleMethod(boolean flagSet, byte bFlag);
  470. {
  471. if (flagSet)
  472. {
  473. ... do something with flags;
  474. }
  475. return 1;
  476. }
  477. </programlisting>
  478. </example>
  479. </listitem>
  480. </itemizedlist>
  481. </section>
  482. <!-- end of section java_s_method_exec -->
  483. <!-- Section java_s_staticmethod_exec -->
  484. <section id="app_java.f.java_s_staticmethod_exec">
  485. <title>java_s_staticmethod_exec(method, method_signature, [param1[, param2[, ...]]])</title>
  486. <para>Executes a java synchronized static method <emphasis>method</emphasis>. Parameter <emphasis>method_signature</emphasis> is required.</para>
  487. <para>For more info see <ulink url="http://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html"><citetitle>Synchronized Methods</citetitle></ulink></para>
  488. <itemizedlist>
  489. <listitem>
  490. <example>
  491. <title>Signature: "V"</title>
  492. <para>&kamailio; prototype</para>
  493. <programlisting format="linespecific">java_s_staticmethod_exec("ExampleMethod", "V");</programlisting>
  494. <para>Java prototype</para>
  495. <programlisting format="linespecific">public static synchronized int ExampleMethod();</programlisting>
  496. <para>Example of usage:</para>
  497. <programlisting format="linespecific">
  498. # &kamailio;
  499. java_s_staticmethod_exec("ExampleMethod", "V");
  500. # Java
  501. public static synchronized int ExampleMethod()
  502. {
  503. ... do something;
  504. return 1;
  505. }
  506. </programlisting>
  507. </example>
  508. </listitem>
  509. <listitem>
  510. <example>
  511. <title>Signature: "Ljava/lang/String;I"</title>
  512. <para>&kamailio; prototype</para>
  513. <programlisting format="linespecific">java_s_staticmethod_exec("ExampleMethod", "Ljava/lang/String;I", "Hello world", "5");</programlisting>
  514. <para>Java prototype</para>
  515. <programlisting format="linespecific">public static synchronized int ExampleMethod(String param1, int param2);</programlisting>
  516. <para>In the above scenario parameter 2 ("5") will be cast to integer representation.</para>
  517. <para>Example of usage:</para>
  518. <programlisting format="linespecific">
  519. # &kamailio;
  520. java_s_staticmethod_exec("ExampleMethod", "Ljava/lang/String;I", "$mb", "$ml");
  521. # Java
  522. public static synchronized int ExampleMethod(String SipMessageBuffer, int SipMessageLenght)
  523. {
  524. ... do something with buffer;
  525. return 1;
  526. }
  527. </programlisting>
  528. </example>
  529. </listitem>
  530. <listitem>
  531. <example>
  532. <title>Signature: "ZB"</title>
  533. <para>&kamailio; prototype</para>
  534. <programlisting format="linespecific">java_s_staticmethod_exec("ExampleMethod", "ZB", "true", "0x05");</programlisting>
  535. <para>Java prototype</para>
  536. <programlisting format="linespecific">public static synchronized int ExampleMethod(boolean param1, byte param2);</programlisting>
  537. <para>In the above scenario parameter 1 ("true") will be cast to boolean representation.</para>
  538. <para>Example of usage:</para>
  539. <programlisting format="linespecific">
  540. # &kamailio;
  541. java_s_staticmethod_exec("ExampleMethod", "ZB", "true", "0x05");
  542. # Java
  543. public static synchronized int ExampleMethod(boolean flagSet, byte bFlag);
  544. {
  545. if (flagSet)
  546. {
  547. ... do something with flags;
  548. }
  549. return 1;
  550. }
  551. </programlisting>
  552. </example>
  553. </listitem>
  554. </itemizedlist>
  555. </section>
  556. <!-- end of section java_s_method_exec -->
  557. </section>
  558. <!-- End of section Functions -->
  559. <!-- Section Java API-->
  560. <section>
  561. <title>Java Module API</title>
  562. <para></para>
  563. <!-- Section Minimal program skeleton -->
  564. <section>
  565. <title>Minimal program skeleton</title>
  566. <para></para>
  567. <example>
  568. <title>Minimal program skeleton</title>
  569. <para></para>
  570. <programlisting format="linespecific">
  571. import org.siprouter.*;
  572. import org.siprouter.NativeInterface.*;
  573. public class Kamailio extends NativeMethods
  574. {
  575. /* Here you should specify a full path to app_java.so */
  576. static
  577. {
  578. System.load("/opt/kamailio/lib/kamailio/modules/app_java.so");
  579. }
  580. /* Constructor. Do not remove !!! */
  581. public Kamailio()
  582. {
  583. }
  584. /*
  585. This method should be executed for each children process, immediately after forking.
  586. Required. Do not remove !!!
  587. */
  588. public int child_init(int rank)
  589. {
  590. return 1;
  591. }
  592. }
  593. </programlisting>
  594. </example>
  595. </section>
  596. <!-- End of section Minimal program skeleton -->
  597. </section>
  598. <!-- End of section Java API -->
  599. </chapter>