[SR-Users] Called with SDP without DTLS fingerprint from WebRTC to SIP

Benjamin Flügel | vio:networks benjamin.fluegel at vionetworks.de
Mon Sep 14 11:32:02 CEST 2020


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;
}



More information about the sr-users mailing list