<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hi,<br>
    <br>
    chan-sip.c in release 11 and 12 is dropping sip calls in which no
    common audio media is negotiated, regardless of if other media are
    negotiated. <br>
    <br>
    There are very valid cases when a call is wanted with any
    combination of video and text, but no audio.<br>
    <br>
    One place where calls without audio are blocked is in the function:<br>
    sip_request_call<br>
    <br>
    Where a comment in the beginning says:<br>
        /* mask request with some set of allowed formats.<br>
         * XXX this needs to be fixed.<br>
         * The original code uses AST_FORMAT_AUDIO_MASK, but it is<br>
         * unclear what to use here. We have global_capabilities, which
    is<br>
         * configured from sip.conf, and sip_tech.capabilities, which is<br>
         * hardwired to all audio formats.<br>
         */<br>
    And then an audio-less call is blocked by this statement:<br>
    <br>
    if (!(ast_format_cap_has_type(cap, AST_FORMAT_TYPE_AUDIO))) {<br>
            ast_log(LOG_NOTICE, "Asked to get a channel of unsupported
    format %s while capability is %s\n",<br>
            ast_getformatname_multiple(tmp, sizeof(tmp), cap),<br>
            ast_getformatname_multiple(tmp2, sizeof(tmp2),
    sip_cfg.caps));<br>
            *cause = AST_CAUSE_BEARERCAPABILITY_NOTAVAIL;    /* Can't
    find codec to connect to host */<br>
            return NULL;<br>
    <br>
    ---------<br>
    <br>
    There is a similar check for outgoing calls in chan-sip.c function
    sip_call :<br>
    /* If there are no audio formats left to offer, punt */<br>
        if (!(ast_format_cap_has_type(p->jointcaps,
    AST_FORMAT_TYPE_AUDIO))) {<br>
            ast_log(LOG_WARNING, "No audio format found to offer.
    Cancelling call to %s\n", p->username);<br>
            res = -1;<br>
    <br>
    I suggest that the check in both these places is replaced with a
    check for any common supported media and codec.<br>
    <br>
    Something like:<br>
    <br>
    if (!(ast_format_cap_has_type(cap,
    (AST_FORMAT_TYPE_AUDIO||AST_FORMAT_TYPE_VIDEO||AST_FORMAT_TYPE_TEXT)))
    {<br>
     <br>
    <br>
    Or would it be preferred to create a combined mask for all valid SIP
    media formats in frame.h  ?<br>
    <br>
    (Pjsip should be checked for the same problem.)<br>
    <br>
    Regards<br>
    <br>
    Gunnar<br>
    <br>
    <br>
    <div class="moz-signature">-- <br>
      <hr>
      Gunnar Hellström<br>
      Omnitor<br>
      <a class="moz-txt-link-abbreviated" href="mailto:gunnar.hellstrom@omnitor.se">gunnar.hellstrom@omnitor.se</a><br>
      <br>
    </div>
  </body>
</html>