<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hello,<br>
    <br>
    config file uses a special languaged, self made by the project. The
    parameters of config files used to be string only for most of the
    time, with fixup to convert to other types at startup -- some notes
    here:<br>
    <br>
    - <a class="moz-txt-link-freetext" href="http://www.asipto.com/pub/kamailio-devel-guide/#c16cmd_function">http://www.asipto.com/pub/kamailio-devel-guide/#c16cmd_function</a><br>
    <br>
    Later, after kamailio-ser integration started, there are some
    options of giving parameters as integer, or even expressions in some
    cases -- an extension to config language started by Andrei
    Pelinescu-Onciul, which was not propagated to all functions, afaik.<br>
    <br>
    So, in summary, yes, every parameter is expected as string unless
    special fixup function is used. If you get a core dump, provide the
    backtrace. Even the prameter is invalid, it should be detected and
    printed as error message, then exit. Anyhow, have in mind that
    config is not C or other generic purpose programming language.<br>
    <br>
    Cheers,<br>
    Daniel<br>
    <br>
    <div class="moz-cite-prefix">On 1/20/13 10:21 PM, Konstantin M.
      wrote:<br>
    </div>
    <blockquote
cite="mid:CAEYtTzcGmWyW_Rh78-6_nAE7wOT2LTshZCE-dt8ST5czZcN6eg@mail.gmail.com"
      type="cite">Hello,<br>
      <br>
      While developing and testing my new application (app_java) I've
      experienced a very wierd behaviour.<br>
      <br>
      a simple line:<br>
      &nbsp;ismethod(free(malloc(0))); <br>
      in kamailio config file produces a segfault:<br>
      &nbsp;0(2227) ERROR: &lt;core&gt; [cfg.y:3455]: cfg. parser: failed to
      find command malloc<br>
      &nbsp;0(2227) : &lt;core&gt; [cfg.y:3594]: parse error in config file
      /opt/kamailio/etc/kamailio/kamailio.cfg, line 640, column 25:
      unknown command, missing loadmodule?<br>
      <br>
      <br>
      Program received signal SIGSEGV, Segmentation fault.<br>
      0x081defde in yyparse () at cfg.y:3480<br>
      3480&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($1 &amp;&amp;
      mod_func_action-&gt;val[1].u.number &lt; MAX_ACTIONS-2) {<br>
      (gdb)<br>
      <br>
      <br>
      so, let's pass a very wierd values :-) :<br>
      See following:<br>
      <br>
      <br>
      here is a small code snippet:<br>
      ----------<br>
      exported functions definition (params from 2 to 7): { "java_exec",
      (cmd_function)java_exec, 7,&nbsp;&nbsp; NULL, 0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ANY_ROUTE },<br>
      function prototype: int java_exec(struct sip_msg *msg, char
      *method_name, char *signature, char *p1, char *p2, char *p3, char
      *p4, char *p5);<br>
      ----------<br>
      <br>
      1)<br>
      &nbsp;java_exec("test",
      "Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;", "str1",
      "str2", "str3");<br>
      &nbsp;java_exec("test", "Ljava/lang/String;ILjava/lang/String;",
      "str1", 5, "str3");<br>
      <br>
      <br>
      &nbsp;0(854) ERROR: app_java [java_iface.c:81]: java_exec():
      method_name='test',
      signature='Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;',
      params: 'str1', 'str2', 'str3', '(null)', '(null)'<br>
      &nbsp;0(854) ERROR: app_java [java_iface.c:81]: java_exec():
      method_name='test',
      signature='Ljava/lang/String;ILjava/lang/String;', params: 'str1',
      '5', 'str3', '(null)', '(null)'<br>
      <br>
      <br>
      2)<br>
      &nbsp;java_exec("test", "Ljava/lang/String;ILjava/lang/String;B",
      "str1", 5, "str3", 77);<br>
      &nbsp;java_exec("test", "Ljava/lang/String;ILjava/lang/String;B",
      "str1", 5, "str3", 0x77);<br>
      <br>
      &nbsp;0(854) ERROR: app_java [java_iface.c:81]: java_exec():
      method_name='test',
      signature='Ljava/lang/String;ILjava/lang/String;B', params:
      'str1', '5', 'str3', '77', '(null)'<br>
      &nbsp;0(877) ERROR: app_java [java_iface.c:81]: java_exec():
      method_name='test',
      signature='Ljava/lang/String;ILjava/lang/String;B', params:
      'str1', '5', 'str3', '119', '(null)'<br>
      <br>
      &nbsp;so, 77 is '77', 0x77 is '119' (hex conversion, ok)<br>
      <br>
      3)<br>
      &nbsp;java_exec("test", "Ljava/lang/String;ILjava/lang/String;Z",
      "str1", 5, "str3", true);<br>
      &nbsp;java_exec("test", "Ljava/lang/String;ILjava/lang/String;Z",
      "str1", 5, "str3", false);<br>
      <br>
      &nbsp;0(907) ERROR: app_java [java_iface.c:81]: java_exec():
      method_name='test',
      signature='Ljava/lang/String;ILjava/lang/String;Z', params:
      'str1', '5', 'str3', '1', '(null)'<br>
      &nbsp;0(907) ERROR: app_java [java_iface.c:81]: java_exec():
      method_name='test',
      signature='Ljava/lang/String;ILjava/lang/String;Z', params:
      'str1', '5', 'str3', '0', '(null)'<br>
      <br>
      &nbsp;so, true is '1', false is '0'. What is it ?<br>
      <br>
      4)<br>
      &nbsp;java_exec("test", "Ljava/lang/String;ILjava/lang/String;Z",
      "str1", 5, "str3", TRUE);<br>
      &nbsp;java_exec("test", "Ljava/lang/String;ILjava/lang/String;Z",
      "str1", 5, "str3", FALSE);<br>
      <br>
      &nbsp;0(931) : &lt;core&gt; [cfg.y:3594]: parse error in config file
      /opt/kamailio/etc/kamailio/kamailio.cfg, line 632, column 86:
      syntax error<br>
      &nbsp;0(931) : &lt;core&gt; [cfg.y:3594]: parse error in config file
      /opt/kamailio/etc/kamailio/kamailio.cfg, line 632, column 86:
      '('')' expected (function call)<br>
      &nbsp;0(931) : &lt;core&gt; [cfg.y:3594]: parse error in config file
      /opt/kamailio/etc/kamailio/kamailio.cfg, line 633, column 87:
      syntax error<br>
      &nbsp;0(931) : &lt;core&gt; [cfg.y:3594]: parse error in config file
      /opt/kamailio/etc/kamailio/kamailio.cfg, line 633, column 87:
      '('')' expected (function call)<br>
      ERROR: bad config file (4 errors)<br>
      <br>
      5)<br>
      &nbsp;java_exec("test", "Ljava/lang/String;ILjava/lang/String;Z",
      "str1", 5, "str3", is_method("INVITE"));<br>
      <br>
      Program received signal SIGSEGV, Segmentation fault.<br>
      fix_rval_expr (p=p@entry=0xb55dad00) at rvalue.c:3791<br>
      3791&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
      fix_rval(&amp;rve-&gt;left.rval);<br>
      (gdb)<br>
      <br>
      6)<br>
      &nbsp;java_exec("test", "Ljava/lang/String;ILjava/lang/String;Z",
      "str1", 5, "str3", is_unknown_method("INVITE"));<br>
      <br>
      Program received signal SIGSEGV, Segmentation fault.<br>
      0x081defde in yyparse () at cfg.y:3480<br>
      3480&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($1 &amp;&amp;
      mod_func_action-&gt;val[1].u.number &lt; MAX_ACTIONS-2) {<br>
      (gdb)<br>
      <br>
      <br>
      7)<br>
      &nbsp;java_exec("test", "Ljava/lang/String;ILjava/lang/String;Z",
      "str1", 5, "str3", nonexistent_value);<br>
      <br>
      &nbsp;0(1022) : &lt;core&gt; [cfg.y:3594]: parse error in config file
      /opt/kamailio/etc/kamailio/kamailio.cfg, line 634, column 99:
      syntax error<br>
      &nbsp;0(1022) : &lt;core&gt; [cfg.y:3594]: parse error in config file
      /opt/kamailio/etc/kamailio/kamailio.cfg, line 634, column 99:
      '('')' expected (function call)<br>
      ERROR: bad config file (2 errors)<br>
      <br>
      8)<br>
      &nbsp;java_exec("test", "Ljava/lang/String;ILjava/lang/String;Z",
      "str1", 5, "str3", nonexistent_function());<br>
      <br>
      &nbsp;0(1035) : &lt;core&gt; [cfg.y:3594]: parse error in config file
      /opt/kamailio/etc/kamailio/kamailio.cfg, line 634, column 99:
      syntax error<br>
      &nbsp;0(1035) : &lt;core&gt; [cfg.y:3594]: parse error in config file
      /opt/kamailio/etc/kamailio/kamailio.cfg, line 634, column 99:
      '('')' expected (function call)<br>
      &nbsp;0(1035) ERROR: &lt;core&gt; [cfg.y:3455]: cfg. parser: failed to
      find command nonexistent_function<br>
      &nbsp;0(1035) : &lt;core&gt; [cfg.y:3594]: parse error in config file
      /opt/kamailio/etc/kamailio/kamailio.cfg, line 635, column 103:
      unknown command, missing loadmodule?<br>
      <br>
      <br>
      Program received signal SIGSEGV, Segmentation fault.<br>
      0x081defde in yyparse () at cfg.y:3480<br>
      3480&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($1 &amp;&amp;
      mod_func_action-&gt;val[1].u.number &lt; MAX_ACTIONS-2) {<br>
      (gdb)<br>
      <br>
      <br>
      9)<br>
      &nbsp;java_exec("test", "Ljava/lang/String;ILjava/lang/String;Z",
      "str1", 5, "str3", 7777777777777777777777777777777777);<br>
      <br>
      &nbsp;0(1368) ERROR: app_java [java_iface.c:81]: java_exec():
      method_name='test',
      signature='Ljava/lang/String;ILjava/lang/String;Z', params:
      'str1', '5', 'str3', '2147483647', '(null)'<br>
      <br>
      &nbsp;so, 7777777777777777777777777777777777 is '2147483647' (INT_MAX)<br>
      <br>
      10)<br>
      &nbsp;java_exec("test", "Ljava/lang/String;ILjava/lang/String;Z",
      "str1", 5, "str3", 0x5 &lt;&lt; 1);<br>
      <br>
      &nbsp;0(1392) ERROR: app_java [java_iface.c:81]: java_exec():
      method_name='test',
      signature='Ljava/lang/String;ILjava/lang/String;Z', params:
      'str1', '5', 'str3', '10', '(null)'<br>
      <br>
      ----------------------------------<br>
      Creating a new function java_exec2 with int param:<br>
      exported function:&nbsp;&nbsp;&nbsp;&nbsp; { "java_exec2", (cmd_function)java_exec2,
      2,&nbsp;&nbsp; NULL, 0,&nbsp;&nbsp;&nbsp;&nbsp; ANY_ROUTE },<br>
      prototype: int java_exec2(struct sip_msg *msg, char *method_name,
      int param);<br>
      <br>
      &nbsp;java_exec2("test", 5);<br>
      <br>
      &nbsp;0(1690) ERROR: app_java [java_mod.c:56]: java_exec2():
      method_name='test', params: '-1252293208'<br>
      <br>
      &nbsp;changing prototype to: int java_exec2(struct sip_msg *msg, char
      *method_name, void *param);<br>
      &nbsp;and trying to cast to (char*):<br>
      <br>
      &nbsp;0(1867) ERROR: app_java [java_mod.c:56]: java_exec2():
      method_name='test', params: '5'<br>
      <br>
      &nbsp;so, the params are being forcibly cast to (char *) ? Why the
      params aren't void pointers ?<br>
      <br>
      -------------------------------------------<br>
      <br>
      <br>
      <br>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
sr-dev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:sr-dev@lists.sip-router.org">sr-dev@lists.sip-router.org</a>
<a class="moz-txt-link-freetext" href="http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev">http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev</a>
</pre>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
Daniel-Constantin Mierla - <a class="moz-txt-link-freetext" href="http://www.asipto.com">http://www.asipto.com</a>
<a class="moz-txt-link-freetext" href="http://twitter.com/#!/miconda">http://twitter.com/#!/miconda</a> - <a class="moz-txt-link-freetext" href="http://www.linkedin.com/in/miconda">http://www.linkedin.com/in/miconda</a>
Kamailio World Conference, April 16-17, 2013, Berlin
 - <a class="moz-txt-link-freetext" href="http://conference.kamailio.com">http://conference.kamailio.com</a> -</pre>
  </body>
</html>