app_java_admin.html 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585
  1. <html><head>
  2. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  3. <title>Chapter&nbsp;1.&nbsp;Admin Guide</title><meta name="generator" content="DocBook XSL Stylesheets V1.77.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="d6e1"></a>Chapter&nbsp;1.&nbsp;Admin Guide</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#d6e3">Overview</a></span></dt><dt><span class="section"><a href="#d6e6">Dependencies</a></span></dt><dd><dl><dt><span class="section"><a href="#d6e8">Kamailio Modules</a></span></dt><dt><span class="section"><a href="#d6e15">External Libraries or Applications</a></span></dt></dl></dd><dt><span class="section"><a href="#d6e67">Java runtime</a></span></dt><dd><dl><dt><span class="section"><a href="#d6e69"></a></span></dt></dl></dd><dt><span class="section"><a href="#d6e72">Parameters</a></span></dt><dd><dl><dt><span class="section"><a href="#d6e74"><code class="varname">class_name</code> (string)</a></span></dt><dt><span class="section"><a href="#d6e87"><code class="varname">child_init_method</code> (string)</a></span></dt><dt><span class="section"><a href="#d6e98"><code class="varname">java_options</code> (string)</a></span></dt><dt><span class="section"><a href="#d6e123"><code class="varname">force_kam_cmd_exec</code> (int)</a></span></dt></dl></dd><dt><span class="section"><a href="#d6e135">Functions</a></span></dt><dd><dl><dt><span class="section"><a href="#d6e137">
  4. Common requirements
  5. </a></span></dt><dt><span class="section"><a href="#d6e146">java_method_exec(method, method_signature, [param1[, param2[, ...]]])</a></span></dt><dt><span class="section"><a href="#d6e181">java_staticmethod_exec(method, method_signature, [param1[, param2[, ...]]])</a></span></dt><dt><span class="section"><a href="#d6e216">java_s_method_exec(method, method_signature, [param1[, param2[, ...]]])</a></span></dt><dt><span class="section"><a href="#d6e254">java_s_staticmethod_exec(method, method_signature, [param1[, param2[, ...]]])</a></span></dt></dl></dd><dt><span class="section"><a href="#d6e292">Java Module API</a></span></dt><dd><dl><dt><span class="section"><a href="#d6e295">Minimal program skeleton</a></span></dt></dl></dd></dl></div>
  6. <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d6e3"></a>Overview</h2></div></div></div>
  7. <p>
  8. This module allows executing Java compiled classes from config file, exporting
  9. functions to access the SIP message from Java using Java Native Interface (JNI).
  10. </p>
  11. </div>
  12. <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d6e6"></a>Dependencies</h2></div></div></div>
  13. <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d6e8"></a>Kamailio Modules</h3></div></div></div>
  14. <p>
  15. The following modules must be loaded before this module:
  16. </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
  17. <p>
  18. <span class="emphasis"><em>none</em></span>.
  19. </p>
  20. </li></ul></div><p>
  21. </p>
  22. </div>
  23. <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d6e15"></a>External Libraries or Applications</h3></div></div></div>
  24. <p>
  25. </p><div class="itemizedlist"><p><span class="emphasis"><em>The following packages are runtime libraries, required to launch</em></span></p><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem" style="list-style-type: disc"><p><span class="emphasis"><em>java-common</em></span> Base of all Java packages.</p></li><li class="listitem" style="list-style-type: disc"><p><span class="emphasis"><em>default-jre</em></span> Standard Java or Java compatible Runtime.</p></li><li class="listitem" style="list-style-type: disc"><p><span class="emphasis"><em>gcj-jre</em></span> Java runtime environment using GIJ/classpath.</p></li><li class="listitem" style="list-style-type: disc"><p><span class="emphasis"><em>libgcj12 (&gt;=12)</em></span> Java runtime library for use with gcj.</p></li></ul></div><p>
  26. </p><div class="itemizedlist"><p><span class="emphasis"><em>The following packages are optional, required for development</em></span></p><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem" style="list-style-type: square"><p><span class="emphasis"><em>ant</em></span> Java based build tool like make.</p></li><li class="listitem" style="list-style-type: square"><p><span class="emphasis"><em>ant-contrib</em></span> Collection of tasks, types and other tools for Apache Ant.</p></li><li class="listitem" style="list-style-type: square"><p><span class="emphasis"><em>ant-gcj</em></span> Java based build tool like make (GCJ).</p></li><li class="listitem" style="list-style-type: square"><p><span class="emphasis"><em>default-jdk</em></span> Standard Java or Java compatible Development Kit</p></li><li class="listitem" style="list-style-type: square"><p><span class="emphasis"><em>gcj-jdk</em></span> gcj and classpath development tools for Java(TM)</p></li><li class="listitem" style="list-style-type: square"><p><span class="emphasis"><em>libgcj13-dev (&gt;=12)</em></span> Java development headers for use with gcj</p></li><li class="listitem" style="list-style-type: square"><p><span class="emphasis"><em>jdk</em></span> JDK Development Kit (either oracle jdk or openjdk)</p></li></ul></div><p>
  27. </p>
  28. <p>
  29. The following libraries or applications must be compiled before
  30. running Kamailio with this module loaded:
  31. </p><div class="itemizedlist"><p><span class="emphasis"><em>The following packages are runtime libraries, required to launch</em></span></p><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem" style="list-style-type: circle"><p><span class="emphasis"><em>&lt;class_name&gt;</em></span>.class</p></li><li class="listitem" style="list-style-type: circle"><p><span class="emphasis"><em>kamailio</em></span>.jar</p></li></ul></div><p>
  32. </p>
  33. </div>
  34. </div>
  35. <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d6e67"></a>Java runtime</h2></div></div></div>
  36. <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d6e69"></a></h3></div></div></div>
  37. <p>Java runtime library (JRE or JDK) is required to use this module.</p>
  38. </div>
  39. </div>
  40. <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d6e72"></a>Parameters</h2></div></div></div>
  41. <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d6e74"></a><code class="varname">class_name</code> (string)</h3></div></div></div>
  42. <p>
  43. The class name should have the same compiled file name.
  44. If the value is <span class="emphasis"><em>"Kamailio"</em></span>, then the compiled file should be named as <span class="emphasis"><em>"Kamailio.class"</em></span>.
  45. </p>
  46. <p>
  47. <span class="emphasis"><em>
  48. Default value is <span class="quote">&#8220;<span class="quote">Kamailio</span>&#8221;</span>.
  49. </em></span>
  50. </p>
  51. <div class="example"><a name="d6e83"></a><p class="title"><b>Example&nbsp;1.1.&nbsp;Set <code class="varname">class_name</code> parameter</b></p><div class="example-contents">
  52. <pre class="programlisting">
  53. ...
  54. modparam("app_java", "class_name", "Kamailio")
  55. ...
  56. </pre>
  57. </div></div><br class="example-break">
  58. </div>
  59. <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d6e87"></a><code class="varname">child_init_method</code> (string)</h3></div></div></div>
  60. <p>
  61. TBD.
  62. </p>
  63. <p>
  64. <span class="emphasis"><em>
  65. Default value is <span class="quote">&#8220;<span class="quote">child_init</span>&#8221;</span>.
  66. </em></span>
  67. </p>
  68. <div class="example"><a name="d6e94"></a><p class="title"><b>Example&nbsp;1.2.&nbsp;Set <code class="varname">child_init_method</code> parameter</b></p><div class="example-contents">
  69. <pre class="programlisting">
  70. ...
  71. modparam("app_java", "child_init_method", "my_mod_init")
  72. ...
  73. </pre>
  74. </div></div><br class="example-break">
  75. </div>
  76. <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d6e98"></a><code class="varname">java_options</code> (string)</h3></div></div></div>
  77. <p>
  78. Java options for Java Virtual Machine.
  79. For more info read <a class="ulink" href="http://docs.oracle.com/javase/6/docs/technotes/tools/windows/java.html" target="_top"><em class="citetitle">java docs</em></a>
  80. </p>
  81. <p>
  82. <span class="emphasis"><em>
  83. Default value is <span class="quote">&#8220;<span class="quote">-Djava.compiler=NONE</span>&#8221;</span>.
  84. </em></span>
  85. </p>
  86. <div class="example"><a name="d6e107"></a><p class="title"><b>Example&nbsp;1.3.&nbsp;Set <code class="varname">java_options</code> parameter</b></p><div class="example-contents">
  87. <pre class="programlisting">
  88. ...
  89. modparam("app_java", "java_options", "-Djava.compiler=NONE")
  90. ...
  91. </pre>
  92. </div></div><br class="example-break">
  93. <div class="example"><a name="d6e111"></a><p class="title"><b>Example&nbsp;1.4.&nbsp;Set <code class="varname">java_options</code> parameter (live configuration)</b></p><div class="example-contents">
  94. <pre class="programlisting">
  95. ...
  96. # Assumes "application java folder" is located at /opt/kamailio/java
  97. modparam("app_java", "java_options", "-Djava.compiler=NONE -Djava.class.path=/path/to/kamailio/modules:/opt/kamailio/java:/opt/kamailio/java/kamailio.jar")
  98. ...
  99. </pre>
  100. </div></div><br class="example-break">
  101. <div class="example"><a name="d6e115"></a><p class="title"><b>Example&nbsp;1.5.&nbsp;Set <code class="varname">java_options</code> parameter (verbose configuration)</b></p><div class="example-contents">
  102. <pre class="programlisting">
  103. ...
  104. # Assumes "application java folder" is located at /opt/kamailio/java
  105. modparam("app_java", "java_options", "-verbose:gc,class,jni -Djava.compiler=NONE -Djava.class.path=/path/to/kamailio/modules:/opt/kamailio/java:/opt/kamailio/java/kamailio.jar")
  106. ...
  107. </pre>
  108. </div></div><br class="example-break">
  109. <div class="example"><a name="d6e119"></a><p class="title"><b>Example&nbsp;1.6.&nbsp;Set <code class="varname">java_options</code> parameter (debug configuration)</b></p><div class="example-contents">
  110. <pre class="programlisting">
  111. ...
  112. # Assumes "application java folder" is located at /opt/kamailio/java
  113. modparam("app_java", "java_options", "-Xdebug -verbose:gc,class,jni -Djava.compiler=NONE -Djava.class.path=/path/to/kamailio/modules:/opt/kamailio/java:/opt/kamailio/java/kamailio.jar")
  114. ...
  115. </pre>
  116. </div></div><br class="example-break">
  117. </div>
  118. <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d6e123"></a><code class="varname">force_kam_cmd_exec</code> (int)</h3></div></div></div>
  119. <p>
  120. This parameter forces execution a kamailio comnmand with java native method <span class="quote">&#8220;<span class="quote">KamExec</span>&#8221;</span>.
  121. # Note: this is an untested yet feature, may cause (but may not) a memory leaks if used from embedded languages.
  122. </p>
  123. <p>
  124. <span class="emphasis"><em>
  125. Default value is <span class="quote">&#8220;<span class="quote">0 (off)</span>&#8221;</span>.
  126. </em></span>
  127. </p>
  128. <div class="example"><a name="d6e131"></a><p class="title"><b>Example&nbsp;1.7.&nbsp;Set <code class="varname">force_kam_cmd_exec</code> parameter</b></p><div class="example-contents">
  129. <pre class="programlisting">
  130. ...
  131. modparam("app_java", "force_kam_cmd_exec", 1)
  132. ...
  133. </pre>
  134. </div></div><br class="example-break">
  135. </div>
  136. </div>
  137. <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d6e135"></a>Functions</h2></div></div></div>
  138. <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d6e137"></a>
  139. Common requirements
  140. </h3></div></div></div>
  141. <p>Each function has a required parameter <span class="quote">&#8220;<span class="quote">method_signature</span>&#8221;</span>. For more info
  142. see <a class="ulink" href="http://www.rgagnon.com/javadetails/java-0286.html" target="_top"><em class="citetitle">Determine the signature of a method</em></a>.
  143. Signature represents the variable type. The mapping between the Java type and C type
  144. is
  145. </p><pre class="programlisting">
  146. Type Chararacter
  147. boolean Z
  148. byte B
  149. char C
  150. double D
  151. float F
  152. int I
  153. long J
  154. object L
  155. short S
  156. void V
  157. Note that to specify an object, the "L" is followed by the object's class name and ends with a semi-colon, ';' .
  158. </pre><p>
  159. </p>
  160. <p> app_java supports the following signatures:
  161. </p><pre class="programlisting">
  162. Primitives: Z,B,C,D,F,I,J,L,S,V
  163. Objects:
  164. Ljava/lang/Boolean;
  165. Ljava/lang/Byte;
  166. Ljava/lang/Character;
  167. Ljava/lang/Double;
  168. Ljava/lang/Float;
  169. Ljava/lang/Integer;
  170. Ljava/lang/Long;
  171. Ljava/lang/Short;
  172. Ljava/lang/String;
  173. NULL parameter: V
  174. Each parameter passed to function will be cast according to given signature.
  175. Parameters are optional, ommitting a parameter meant the passed value is NULL.
  176. Parameters count should be exactly the same as signature count.
  177. Note 1: Arrays representation (symbol '[') is not supported yet.
  178. Note 2: You shall use a correct signature, e.g. the following examples of combinations are invalid:
  179. java_method_exec("ExampleMethod", "ZI", "False");
  180. java_method_exec("ExampleMethod", "LI", "something", "5");
  181. </pre><p>
  182. </p>
  183. </div>
  184. <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d6e146"></a>java_method_exec(method, method_signature, [param1[, param2[, ...]]])</h3></div></div></div>
  185. <p>Executes a java class method <span class="emphasis"><em>method</em></span>. Parameter <span class="emphasis"><em>method_signature</em></span> is required.</p>
  186. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
  187. <div class="example"><a name="d6e153"></a><p class="title"><b>Example&nbsp;1.8.&nbsp;Signature: "V"</b></p><div class="example-contents">
  188. <p>Kamailio prototype</p>
  189. <pre class="programlisting">java_method_exec("ExampleMethod", "V");</pre>
  190. <p>Java prototype</p>
  191. <pre class="programlisting">public int ExampleMethod();</pre>
  192. <p>Example of usage:</p>
  193. <pre class="programlisting">
  194. # Kamailio
  195. java_method_exec("ExampleMethod", "V");
  196. # Java
  197. public int ExampleMethod()
  198. {
  199. ... do something;
  200. return 1;
  201. }
  202. </pre>
  203. </div></div><br class="example-break">
  204. </li><li class="listitem">
  205. <div class="example"><a name="d6e162"></a><p class="title"><b>Example&nbsp;1.9.&nbsp;Signature: "Ljava/lang/String;I"</b></p><div class="example-contents">
  206. <p>Kamailio prototype</p>
  207. <pre class="programlisting">java_method_exec("ExampleMethod", "Ljava/lang/String;I", "Hello world", "5");</pre>
  208. <p>Java prototype</p>
  209. <pre class="programlisting">public int ExampleMethod(String param1, int param2);</pre>
  210. <p>In the above scenario parameter 2 ("5") will be cast to integer representation.</p>
  211. <p>Example of usage:</p>
  212. <pre class="programlisting">
  213. # Kamailio
  214. java_method_exec("ExampleMethod", "Ljava/lang/String;I", "$mb", "$ml");
  215. # Java
  216. public int ExampleMethod(String SipMessageBuffer, int SipMessageLenght)
  217. {
  218. ... do something with buffer;
  219. return 1;
  220. }
  221. </pre>
  222. </div></div><br class="example-break">
  223. </li><li class="listitem">
  224. <div class="example"><a name="d6e172"></a><p class="title"><b>Example&nbsp;1.10.&nbsp;Signature: "ZB"</b></p><div class="example-contents">
  225. <p>Kamailio prototype</p>
  226. <pre class="programlisting">java_method_exec("ExampleMethod", "ZB", "true", "0x05");</pre>
  227. <p>Java prototype</p>
  228. <pre class="programlisting">public int ExampleMethod(boolean param1, byte param2);</pre>
  229. <p>In the above scenario parameter 1 ("true") will be cast to boolean representation.</p>
  230. <p>Example of usage:</p>
  231. <pre class="programlisting">
  232. # Kamailio
  233. java_method_exec("ExampleMethod", "ZB", "true", "0x05");
  234. # Java
  235. public int ExampleMethod(boolean flagSet, byte bFlag);
  236. {
  237. if (flagSet)
  238. {
  239. ... do something with flags;
  240. }
  241. return 1;
  242. }
  243. </pre>
  244. </div></div><br class="example-break">
  245. </li></ul></div>
  246. </div>
  247. <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d6e181"></a>java_staticmethod_exec(method, method_signature, [param1[, param2[, ...]]])</h3></div></div></div>
  248. <p>Executes a java static method <span class="emphasis"><em>method</em></span>. Parameter <span class="emphasis"><em>method_signature</em></span> is required.</p>
  249. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
  250. <div class="example"><a name="d6e188"></a><p class="title"><b>Example&nbsp;1.11.&nbsp;Signature: "V"</b></p><div class="example-contents">
  251. <p>Kamailio prototype</p>
  252. <pre class="programlisting">java_staticmethod_exec("ExampleMethod", "V");</pre>
  253. <p>Java prototype</p>
  254. <pre class="programlisting">public static int ExampleMethod();</pre>
  255. <p>Example of usage:</p>
  256. <pre class="programlisting">
  257. # Kamailio
  258. java_staticmethod_exec("ExampleMethod", "V");
  259. # Java
  260. public static int ExampleMethod()
  261. {
  262. ... do something;
  263. return 1;
  264. }
  265. </pre>
  266. </div></div><br class="example-break">
  267. </li><li class="listitem">
  268. <div class="example"><a name="d6e197"></a><p class="title"><b>Example&nbsp;1.12.&nbsp;Signature: "Ljava/lang/String;I"</b></p><div class="example-contents">
  269. <p>Kamailio prototype</p>
  270. <pre class="programlisting">java_staticmethod_exec("ExampleMethod", "Ljava/lang/String;I", "Hello world", "5");</pre>
  271. <p>Java prototype</p>
  272. <pre class="programlisting">public static int ExampleMethod(String param1, int param2);</pre>
  273. <p>In the above scenario parameter 2 ("5") will be cast to integer representation.</p>
  274. <p>Example of usage:</p>
  275. <pre class="programlisting">
  276. # Kamailio
  277. java_staticmethod_exec("ExampleMethod", "Ljava/lang/String;I", "$mb", "$ml");
  278. # Java
  279. public static int ExampleMethod(String SipMessageBuffer, int SipMessageLenght)
  280. {
  281. ... do something with buffer;
  282. return 1;
  283. }
  284. </pre>
  285. </div></div><br class="example-break">
  286. </li><li class="listitem">
  287. <div class="example"><a name="d6e207"></a><p class="title"><b>Example&nbsp;1.13.&nbsp;Signature: "ZB"</b></p><div class="example-contents">
  288. <p>Kamailio prototype</p>
  289. <pre class="programlisting">java_staticmethod_exec("ExampleMethod", "ZB", "true", "0x05");</pre>
  290. <p>Java prototype</p>
  291. <pre class="programlisting">public static int ExampleMethod(boolean param1, byte param2);</pre>
  292. <p>In the above scenario parameter 1 ("true") will be cast to boolean representation.</p>
  293. <p>Example of usage:</p>
  294. <pre class="programlisting">
  295. # Kamailio
  296. java_staticmethod_exec("ExampleMethod", "ZB", "true", "0x05");
  297. # Java
  298. public static int ExampleMethod(boolean flagSet, byte bFlag);
  299. {
  300. if (flagSet)
  301. {
  302. ... do something with flags;
  303. }
  304. return 1;
  305. }
  306. </pre>
  307. </div></div><br class="example-break">
  308. </li></ul></div>
  309. </div>
  310. <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d6e216"></a>java_s_method_exec(method, method_signature, [param1[, param2[, ...]]])</h3></div></div></div>
  311. <p>Executes a java class synchronized method <span class="emphasis"><em>method</em></span>. Parameter <span class="emphasis"><em>method_signature</em></span> is required.</p>
  312. <p>For more info see <a class="ulink" href="http://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html" target="_top"><em class="citetitle">Synchronized Methods</em></a></p>
  313. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
  314. <div class="example"><a name="d6e226"></a><p class="title"><b>Example&nbsp;1.14.&nbsp;Signature: "V"</b></p><div class="example-contents">
  315. <p>Kamailio prototype</p>
  316. <pre class="programlisting">java_s_method_exec("ExampleMethod", "V");</pre>
  317. <p>Java prototype</p>
  318. <pre class="programlisting">public synchronized int ExampleMethod();</pre>
  319. <p>Example of usage:</p>
  320. <pre class="programlisting">
  321. # Kamailio
  322. java_s_method_exec("ExampleMethod", "V");
  323. # Java
  324. public synchronized int ExampleMethod()
  325. {
  326. ... do something;
  327. return 1;
  328. }
  329. </pre>
  330. </div></div><br class="example-break">
  331. </li><li class="listitem">
  332. <div class="example"><a name="d6e235"></a><p class="title"><b>Example&nbsp;1.15.&nbsp;Signature: "Ljava/lang/String;I"</b></p><div class="example-contents">
  333. <p>Kamailio prototype</p>
  334. <pre class="programlisting">java_s_method_exec("ExampleMethod", "Ljava/lang/String;I", "Hello world", "5");</pre>
  335. <p>Java prototype</p>
  336. <pre class="programlisting">public synchronized int ExampleMethod(String param1, int param2);</pre>
  337. <p>In the above scenario parameter 2 ("5") will be cast to integer representation.</p>
  338. <p>Example of usage:</p>
  339. <pre class="programlisting">
  340. # Kamailio
  341. java_s_method_exec("ExampleMethod", "Ljava/lang/String;I", "$mb", "$ml");
  342. # Java
  343. public synchronized int ExampleMethod(String SipMessageBuffer, int SipMessageLenght)
  344. {
  345. ... do something with buffer;
  346. return 1;
  347. }
  348. </pre>
  349. </div></div><br class="example-break">
  350. </li><li class="listitem">
  351. <div class="example"><a name="d6e245"></a><p class="title"><b>Example&nbsp;1.16.&nbsp;Signature: "ZB"</b></p><div class="example-contents">
  352. <p>Kamailio prototype</p>
  353. <pre class="programlisting">java_s_method_exec("ExampleMethod", "ZB", "true", "0x05");</pre>
  354. <p>Java prototype</p>
  355. <pre class="programlisting">public synchronized int ExampleMethod(boolean param1, byte param2);</pre>
  356. <p>In the above scenario parameter 1 ("true") will be cast to boolean representation.</p>
  357. <p>Example of usage:</p>
  358. <pre class="programlisting">
  359. # Kamailio
  360. java_s_method_exec("ExampleMethod", "ZB", "true", "0x05");
  361. # Java
  362. public synchronized int ExampleMethod(boolean flagSet, byte bFlag);
  363. {
  364. if (flagSet)
  365. {
  366. ... do something with flags;
  367. }
  368. return 1;
  369. }
  370. </pre>
  371. </div></div><br class="example-break">
  372. </li></ul></div>
  373. </div>
  374. <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d6e254"></a>java_s_staticmethod_exec(method, method_signature, [param1[, param2[, ...]]])</h3></div></div></div>
  375. <p>Executes a java synchronized static method <span class="emphasis"><em>method</em></span>. Parameter <span class="emphasis"><em>method_signature</em></span> is required.</p>
  376. <p>For more info see <a class="ulink" href="http://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html" target="_top"><em class="citetitle">Synchronized Methods</em></a></p>
  377. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
  378. <div class="example"><a name="d6e264"></a><p class="title"><b>Example&nbsp;1.17.&nbsp;Signature: "V"</b></p><div class="example-contents">
  379. <p>Kamailio prototype</p>
  380. <pre class="programlisting">java_s_staticmethod_exec("ExampleMethod", "V");</pre>
  381. <p>Java prototype</p>
  382. <pre class="programlisting">public static synchronized int ExampleMethod();</pre>
  383. <p>Example of usage:</p>
  384. <pre class="programlisting">
  385. # Kamailio
  386. java_s_staticmethod_exec("ExampleMethod", "V");
  387. # Java
  388. public static synchronized int ExampleMethod()
  389. {
  390. ... do something;
  391. return 1;
  392. }
  393. </pre>
  394. </div></div><br class="example-break">
  395. </li><li class="listitem">
  396. <div class="example"><a name="d6e273"></a><p class="title"><b>Example&nbsp;1.18.&nbsp;Signature: "Ljava/lang/String;I"</b></p><div class="example-contents">
  397. <p>Kamailio prototype</p>
  398. <pre class="programlisting">java_s_staticmethod_exec("ExampleMethod", "Ljava/lang/String;I", "Hello world", "5");</pre>
  399. <p>Java prototype</p>
  400. <pre class="programlisting">public static synchronized int ExampleMethod(String param1, int param2);</pre>
  401. <p>In the above scenario parameter 2 ("5") will be cast to integer representation.</p>
  402. <p>Example of usage:</p>
  403. <pre class="programlisting">
  404. # Kamailio
  405. java_s_staticmethod_exec("ExampleMethod", "Ljava/lang/String;I", "$mb", "$ml");
  406. # Java
  407. public static synchronized int ExampleMethod(String SipMessageBuffer, int SipMessageLenght)
  408. {
  409. ... do something with buffer;
  410. return 1;
  411. }
  412. </pre>
  413. </div></div><br class="example-break">
  414. </li><li class="listitem">
  415. <div class="example"><a name="d6e283"></a><p class="title"><b>Example&nbsp;1.19.&nbsp;Signature: "ZB"</b></p><div class="example-contents">
  416. <p>Kamailio prototype</p>
  417. <pre class="programlisting">java_s_staticmethod_exec("ExampleMethod", "ZB", "true", "0x05");</pre>
  418. <p>Java prototype</p>
  419. <pre class="programlisting">public static synchronized int ExampleMethod(boolean param1, byte param2);</pre>
  420. <p>In the above scenario parameter 1 ("true") will be cast to boolean representation.</p>
  421. <p>Example of usage:</p>
  422. <pre class="programlisting">
  423. # Kamailio
  424. java_s_staticmethod_exec("ExampleMethod", "ZB", "true", "0x05");
  425. # Java
  426. public static synchronized int ExampleMethod(boolean flagSet, byte bFlag);
  427. {
  428. if (flagSet)
  429. {
  430. ... do something with flags;
  431. }
  432. return 1;
  433. }
  434. </pre>
  435. </div></div><br class="example-break">
  436. </li></ul></div>
  437. </div>
  438. </div>
  439. <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d6e292"></a>Java Module API</h2></div></div></div>
  440. <p></p>
  441. <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d6e295"></a>Minimal program skeleton</h3></div></div></div>
  442. <p></p>
  443. <div class="example"><a name="d6e298"></a><p class="title"><b>Example&nbsp;1.20.&nbsp;Minimal program skeleton</b></p><div class="example-contents">
  444. <p></p>
  445. <pre class="programlisting">
  446. import org.siprouter.*;
  447. import org.siprouter.NativeInterface.*;
  448. public class Kamailio extends NativeMethods
  449. {
  450. /* Here you should specify a full path to app_java.so */
  451. static
  452. {
  453. System.load("/opt/kamailio/lib/kamailio/modules/app_java.so");
  454. }
  455. /* Constructor. Do not remove !!! */
  456. public Kamailio()
  457. {
  458. }
  459. /*
  460. This method should be executed for each children process, immediately after forking.
  461. Required. Do not remove !!!
  462. */
  463. public int child_init(int rank)
  464. {
  465. return 1;
  466. }
  467. }
  468. </pre>
  469. </div></div><br class="example-break">
  470. </div>
  471. </div>
  472. </div></body></html>