That is what I figured was happening.  I have tried sending it back to a 
standard routing block, but perhaps I am doing it incorrectly.

When I try to send it back to a regular routing block I get the following error:

CRITICAL: tm [tm.c:1754]: _w_t_relay_to(): unsupported route type: 64

Config:

event_route[tm:local-request] {
    sip_trace();
    if(is_method("OPTIONS") && $ru =~ "pstnhub.microsoft.com") {
        $var(domain) = $fd;
        append_hf("Contact: <sip:$var(domain):5061;transport=tls>\r\n");
        xlog("L_INFO", “TEAMS Contact: $var(domain)\r\n");
        route(TEAMS_SEND);
    }
    xlog("L_INFO", "Sent out tm request: $mb\n");
}

route[TEAMS_SEND] {
    $var(domain) = $fd;
    $xavp(tls=>server_name) = $var(domain);
    $xavp(tls[0]=>server_id) = $var(domain);
    $du = "sip:$var(domain):5061;transport=tls"; 
    t_relay();
}


For testing, I also tried generating the packets in a normal route using 
t_uac_send and controlling it with rtimer.  As ugly a hack that this approach 
is, it did manage to create the packets and set the xavp as required (although, 
it certainly wouldn’t help dispatcher know if a gateway is offline…).  
Additional trouble is that if a second domain attempts to send OPTIONS packets 
in the while loop (see below) it goes out the same TLS connection, so it is 
rejected.

Config:

route["PING-TEAMS"] {
    sql_query("db", "select domain from domain;", "domain_list");
    $var(i) = 0;
    while ($dbr(domain_list=>[$var(i),0]) != $null) {
        $var(domain) = $dbr(domain_list=>[$var(i),0]);
        xlog(“OPTIONS from domain name $var(domain)");
        $xavp(tls=>server_name) = $var(domain);
        $xavp(tls[0]=>server_id) = $var(domain);
        $du = "sip:$var(domain):5061;transport=tls"; 
        t_uac_send ("OPTIONS", "sip:$var(domain):5061;transport=tls", 
"sip:sip3.pstnhub.microsoft.com;transport=tls", "", "From: 
sip:$var(domain)\r\nTo: 
sip:sip3.pstnhub.microsoft.com;transport=tls\r\nContact: 
<sip:$var(domain):5061;transport=tls>\r\n", "");
        sleep(2);
        t_uac_send ("OPTIONS", "sip:$var(domain):5061;transport=tls", 
"sip:sip2.pstnhub.microsoft.com;transport=tls", "", "From: 
sip:$var(domain)\r\nTo: 
sip:sip2.pstnhub.microsoft.com;transport=tls\r\nContact: 
<sip:$var(domain):5061;transport=tls>\r\n", "");
        sleep(2);
        t_uac_send ("OPTIONS", "sip:$var(domain):5061;transport=tls", 
"sip:sip.pstnhub.microsoft.com;transport=tls", "", "From: 
sip:$var(domain)\r\nTo: sip:sip.pstnhub.microsoft.com;transport=tls\r\nContact: 
<sip:$var(domain):5061;transport=tls>\r\n", "");
        sleep(5);
        $var(i) = $var(i) + 1; 
               
    }
}

200 from MS on domain 0:

2021/01/11 08:48:31.291048 52.114.7.24:5061 -> *myip*:52606
SIP/2.0 200 OK
FROM: <sip:100.sbc.*mydomain*.net>;tag=3393f0703fb0ccaca74109ff37de39f5-5a503a0a
TO: <sip:sip3.pstnhub.microsoft.com>
CSEQ: 10 OPTIONS
CALL-ID: [email protected]
VIA: SIP/2.0/TLS 
*myip*:5061;branch=z9hG4bK9306.42d92227000000000000000000000000.0
CONTENT-LENGTH: 0
ALLOW: INVITE,ACK,OPTIONS,CANCEL,BYE,NOTIFY
SERVER: Microsoft.PSTNHub.SIPProxy v.2020.12.28.1 i.ASEA.0


403 from MS on domain 1:

2021/01/11 08:49:39.755005 52.114.7.24:5061 -> *myip*:52606
SIP/2.0 403 Forbidden
FROM: <sip:101.sbc.*mydomain*.net>;tag=3393f0703fb0ccaca74109ff37de39f5-69555a28
TO: <sip:sip3.pstnhub.microsoft.com>
CSEQ: 10 OPTIONS
CALL-ID: [email protected]
VIA: SIP/2.0/TLS 
*myip*:5061;branch=z9hG4bK4306.973e1562000000000000000000000000.0
REASON: Q.850;cause=63;text="00cce062-66c6-45a4-8b5c-ccd48b71a9f6;Provided 
Trunk FQDN '101.sbc.*mydomain*.net' is not allowed. Connection allows
ollowing fqdns: 100.sbc.*mydomain*.net, 100.sbc.*mydomain*.net."
CONTENT-LENGTH: 0
ALLOW: INVITE,ACK,OPTIONS,CANCEL,BYE,NOTIFY
SERVER: Microsoft.PSTNHub.SIPProxy v.2020.12.28.1 i.ASEA.0



- Charles Phillips




> On Jan 11, 2021, at 4:13 AM, Daniel-Constantin Mierla <[email protected]> 
> wrote:
> 
> Hello,
> 
> the xavp_cfg set in the event_route is not propagated (kept) to the moment 
> when the message is sent out to tls. The event_route[tm:local-request] is 
> executed when the local request is constructed, terminated before sending 
> out, so whatever avp/xavp is set in the event route are deleted when the 
> block execution is terminated.
> 
> It requires another solution here, I am thinking about what can be done and 
> will be added soon in the master branch.
> 
> Meanwhile, a workaround is to look traffic back to kamailio so the routing 
> happens over request_route block, where you can set the xavp.
> 
> Cheers,
> Daniel
> 
> On 08.01.21 22:23, Charles Phillips wrote:
>> Thanks Daniel, I needed some certainty to get unstuck.  It appears that the 
>> problem is actually related to the TLS config.  I am using multiple TLS 
>> configs, so it looks like the problem may be that the server_name server_id 
>> are not being set, so the reply is returning to the default TLS config.  Not 
>> to mention that when I set the testing domains certs under the default 
>> config, it works...
>> 
>> This is observed in the logs:
>> 
>> tls_get_connect_server_name(): xavp with outbound server name not found
>> tls_get_connect_server_id(): xavp with outbound server id not found
>> tls_complete_init(): Using initial TLS domain TLSc<default> 
>> 
>> Is there a way to set this with xavp_cfg in the event_route?  I have read 
>> that section and tried may combinations, but since the OPTIONs packets from 
>> the dispatcher module do not seem to traverse the standard routes, I am not 
>> sure how to handle this.
>> 
>> Any advice would be greatly appreciated!
>> 
>> 
>> - Charles Phillips
>> 
>> 
>> 
>> 
>>> On Jan 8, 2021, at 12:56 PM, Daniel-Constantin Mierla <[email protected] 
>>> <mailto:[email protected]>> wrote:
>>> 
>>> Hello,
>>> 
>>> there is an option that you can set to reuse the port for tcp/tls 
>>> connections, but even so it is a best effort and it is not going to ensured 
>>> -- all these are practically flags set to the sockets and the kernel (tcp 
>>> stack) decides after all.
>>> 
>>> Anyhow, the rport is mainly useful for connectionless communication, like 
>>> UDP. For tcp/tls, the SIP specs demand to reuse the existing connections. 
>>> As I did several Kamailio-MSTeams interconnectivity deployments, I can tell 
>>> that the source port was never a problem. The TLS connection is kept open 
>>> and MSTeams sends back traffic on it.
>>> 
>>> Cheers,
>>> Daniel
>>> 
>>> On 08.01.21 14:32, Charles Phillips wrote:
>>>> Thanks for the quick response Joel.  Yes, I have read the article and I 
>>>> have tested and confirmed that I am correctly appending the contact header 
>>>> (I probably should have left that in the snippet for clarity).  Below is 
>>>> an example of Kamailio setting up the connection.  It is going out port 
>>>> 46245 this time, but it is random.
>>>> 
>>>> 07:59:23.572319 IP *my.kamailio.server*.46245 > *ms.teams.server*.sip-tls: 
>>>> Flags [P.], seq 1:518, ack 1, win 502, length 517
>>>> 07:59:23.802458 IP *ms.teams.server*.sip-tls > *my.kamailio.server*.46245: 
>>>> Flags [P.], seq 1:3767, ack 518, win 2051, length 3766
>>>> 
>>>> The TLS connection shows as successful in the logs.
>>>> 
>>>> 
>>>> - Charles 
>>>> 
>>>> 
>>>> Date: Thu, 7 Jan 2021 19:12:10 -0800
>>>> From: Joel Serrano <[email protected] <mailto:[email protected]>>
>>>> To: "Kamailio (SER) - Users Mailing List"
>>>>    <[email protected] <mailto:[email protected]>>
>>>> Subject: Re: [SR-Users] Source Port on TLS OPTIONS from Dispatcher
>>>> Message-ID:
>>>>    <CAMtXxQnLtEyD=40cwKembxiyj3D778eK=+5jd7sl4cvybyx...@mail.gmail.com 
>>>> <mailto:CAMtXxQnLtEyD=40cwKembxiyj3D778eK=+5jd7sl4cvybyx...@mail.gmail.com>>
>>>> Content-Type: text/plain; charset="utf-8"
>>>> 
>>>> Hi Charles,
>>>> 
>>>> I don't think your issue is rport, make sure you are setting the Contact
>>>> header correctly.
>>>> 
>>>> Have you checked this blog post:
>>>> https://skalatan.de/en/blog/kamailio-sbc-teams 
>>>> <https://skalatan.de/en/blog/kamailio-sbc-teams> ?
>>>> 
>>>> There is a specific section that talks about how to tell Kamailio to send
>>>> the OPTIONS like MS Teams wants them.
>>>> 
>>>> Good luck,
>>>> Joel.
>>>> 
>>>> 
>>>>> On Jan 7, 2021, at 7:31 PM, Charles Phillips <[email protected] 
>>>>> <mailto:[email protected]>> wrote:
>>>>> 
>>>>> Hello all.  As they say in radio, “long time listener, first time caller”
>>>>> 
>>>>> Anyway, I am having trouble getting past the following road block and any 
>>>>> help would be greatly appreciated.
>>>>> 
>>>>> Kamailio version is 5.4.3 
>>>>> 
>>>>> When attempting to use dispatcher to send OPTIONS packets to several TLS 
>>>>> destinations, the packets are leaving the Kamailio server on random 
>>>>> ports.  This is a problem because the servers I am sending the OPTIONS to 
>>>>> (MS Teams) are enforcing rport so the responses are returned to a port 
>>>>> that Kamailio is not listening on.  I have tried to force the socket in 
>>>>> the event route (relevant parts of snippet below) but it does not appear 
>>>>> to help.  I should also mention that I am not behind NAT and the TLS 
>>>>> socket is specified in the dispatcher attrs. 
>>>>> 
>>>>> event_route[tm:local-request] {
>>>>>     sip_trace();
>>>>> 
>>>>> 
>>>>>     $fs = “tls:**ip-address**:5061”;
>>>>> 
>>>>> 
>>>>> }
>>>>> 
>>>>> I have used Kamailio as a TLS server for many projects, but this is my 
>>>>> first time as a client.  I am sure I am missing something.
>>>>> 
>>>>> - Charles
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>> 
>>>> 
>>>> 
>>>> _______________________________________________
>>>> Kamailio (SER) - Users Mailing List
>>>> [email protected] <mailto:[email protected]>
>>>> https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users 
>>>> <https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users>
>>> -- 
>>> Daniel-Constantin Mierla -- www.asipto.com <http://www.asipto.com/>
>>> www.twitter.com/miconda <http://www.twitter.com/miconda> -- 
>>> www.linkedin.com/in/miconda <http://www.linkedin.com/in/miconda>
>>> Funding: https://www.paypal.me/dcmierla <https://www.paypal.me/dcmierla>
> -- 
> Daniel-Constantin Mierla -- www.asipto.com <http://www.asipto.com/>
> www.twitter.com/miconda <http://www.twitter.com/miconda> -- 
> www.linkedin.com/in/miconda <http://www.linkedin.com/in/miconda>
> Funding: https://www.paypal.me/dcmierla <https://www.paypal.me/dcmierla>
_______________________________________________
Kamailio (SER) - Users Mailing List
[email protected]
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users

Reply via email to