Hey guys and girls,
I'm trying to configure Kamailio so that I can communicate over it using WebRTC and
SIP.
Client 1 is a softphone based on SIPJS. Client 2 is a Yealink phone.
Both are registered with the Kamailio. Behind the Kamailio there is another Asterisk. The
Kamailio acts as a proxy here.
So far everything works. Only if I accept the call, which is made from Client 1 to Client
2 or vice versa, then I get this error in Client 1:
Called with SDP without DTLS fingerprint. I can see that the fingerprint is present in the
INVITE from Client 1 to Client 2. However, it is missing in the OK.
The lower part contains my NATMANAGE config. This could probably be optimized a lot, but
for now it should work.
Unfortunately I have only recently started with Kamailio. I hope you can help me there. I
can also send you the SIP-Log if you want to.
Many thanks in advance.
Greetings Benny
route[NATMANAGE] {
if (is_request()) {
if(has_totag()) {
if (check_route_param("nat=yes")) {
setbflag(FLB_NATB);
}
if (check_route_param("rtp=bridge")) {
setbflag(FLB_BRIDGE);
}
if (check_route_param("rtp=ws")) {
setbflag(FLB_RTPWS);
}
}
}
if (!isbflagset(FLB_BRIDGE)) {
return;
}
if (!(isflagset(FLT_NATS) || isbflagset(FLB_NATB) || isbflagset(FLB_RTPWS))) {
return;
}
$xavp(r=>$T_branch_idx) = "replace-origin replace-session-connection";
if (!nat_uac_test("8")) {
xlog("IS TRUSTED");
$xavp(r=>$T_branch_idx) = $xavp(r=>$T_branch_idx) + " trust-address";
}
if (is_request()) {
if (!has_totag()) {
if (!t_is_failure_route()) {
$avp(extra_id) = @via[1].branch + $T_branch_idx;
$xavp(r=>$T_branch_idx) = $xavp(r=>$T_branch_idx) + "
via-branch=extra";
xlog("BRANCH: $T_branch_idx");
}
}
}
if (is_reply()) {
$avp(extra_id) = @via[2].branch + $T_branch_idx;
$xavp(r=>$T_branch_idx) = $xavp(r=>$T_branch_idx) + "
via-branch=extra";
xlog("BRANCH: $T_branch_idx");
}
if(isbflagset(FLB_RTPWS)){
xlog("IS WS");
if(is_request()){
xlog("IS REQUEST");
if ($proto =~ "ws") {
xlog("WEB --> SIP");
$xavp(r=>$T_branch_idx) = $xavp(r=>$T_branch_idx) + " rtcp-mux-demux
DTLS=off SDES-off ICE=remove RTP/AVP";
rtpengine_manage($xavp(r=>$T_branch_idx));
if (route(FROMASTERISK)) {
xlog("FROM INTERNAL");
} else {
xlog("FROM EXTERNAL");
rtpengine_manage(" direction=external direction=internal ICE=remove
loop-protect");
}
} else {
xlog("SIP --> WEB");
$xavp(r=>$T_branch_idx) = $xavp(r=>$T_branch_idx) + " rtcp-mux-offer
generate-mid DTLS=passive SDES-off ICE=force RTP/SAVPF direction=internal
direction=external loop-protect";
}
} else {
xlog("IS RESPONSE");
if ($proto =~ "ws") {
xlog("WEB --> SIP");
$xavp(r=>$T_branch_idx) = $xavp(r=>$T_branch_idx) + " rtcp-mux-demux
DTLS=off SDES-off ICE=remove RTP/AVP direction=external direction=internal
loop-protect";
} else {
xlog("SIP --> WEB");
$xavp(r=>$T_branch_idx) = $xavp(r=>$T_branch_idx) + " rtcp-mux-offer
generate-mid DTLS=passive SDES-off ICE=force RTP/SAVPF direction=internal
direction=external loop-protect";
}
rtpengine_manage($xavp(r=>$T_branch_idx));
}
} else {
xlog("SIP --> SIP");
if (route(FROMASTERISK)) {
xlog("FROM INTERNAL");
rtpengine_manage(" direction=internal direction=external ICE=remove
loop-protect");
} else {
xlog("FROM EXTERNAL");
rtpengine_manage(" direction=external direction=internal ICE=remove
loop-protect");
}
}
xlog("NATMANAGE branch_id:$T_branch_idx ruri: $ru, method:$rm, status:$rs, extra_id:
$avp(extra_id), rtpengine_manage: $xavp(r=>$T_branch_idx)\n");
if (is_request()) {
if (!has_totag()) {
if (t_is_branch_route()) {
if (isbflagset(FLB_NATB)) {
add_rr_param(";nat=yes");
}
if (isbflagset(FLB_BRIDGE)) {
add_rr_param(";rtp=bridge");
}
if (isbflagset(FLB_RTPWS)) {
add_rr_param(";rtp=ws");
}
}
}
}
if (is_reply()) {
if (isbflagset(FLB_NATB)) {
if (is_first_hop()) {
if (af == INET) {
set_contact_alias();
}
}
}
}
return;
}