测试 rtpengine 的 sip-source 参数

修改 /etc/rtpengine/rtpengine.conf 文件,增加一行配置:

sip-source = true # 一般不需要这样配置,本文仅为说明问题

offfer 部分的日志如下:

[1713246486.390578] DEBUG: [1-5025@192.168.43.126]: [control] Dump for 'offer' from 127.0.0.1:34943: { "supports": [ "load limit" ], "sdp": "v=0

o=XRMG 1704250570 3 IN IP4 10.143.1.14

s=XRMG V2.0

c=IN IP4 10.143.1.14

t=0 0

m=audio 30608 RTP/AVP 8 101

c=IN IP4 10.143.1.14

b=AS:82

b=RS:600

b=RR:2000

a=rtpmap:8 PCMA/8000

a=ptime:20

a=sendrecv

a=rtpmap:101 telephone-event/8000

a=fmtp:101 0-15

", "replace": [ "origin", "session-connection" ], "call-id": "1-5025@192.168.43.126", "via-branch": "z9hG4bK-5025-1-00", "received-from": [ "IP4", "192.168.43.126" ], "from-tag": "5025SIPpTag001", "command": "offer" }

这里 sip-source 的地址(来自 received-from)为 192.168.43.126,端口来自 sdp 里面的 30608

接下来的日志为:

[core] set FILLED flag for stream, local 192.168.43.126:36912 remote 192.168.43.126:30608

远端地址不是 sdp 的 c 地址,而是 sip-source

源码里面 trust_address 如果为 true 代表采用 sdp 的 c 地址,跟 sip-source 的意思正好是反过来的

// call_interfaces.c

// ...

static void call_ng_flags_flags(struct sdp_ng_flags *out, str *s, void *dummy) {
	str_hyphenate(s);

	switch (__csh_lookup(s)) {
		case CSH_LOOKUP("trust-address"):
			out->trust_address = 1;   // sdp c address
			break;
		case CSH_LOOKUP("SIP-source-address"):
		case CSH_LOOKUP("sip-source-address"):
			out->trust_address = 0;  // sip-source
			break;

// sdp.c
// ...
static int fill_endpoint(struct endpoint *ep, const struct sdp_media *media, struct sdp_ng_flags *flags,
		struct network_address *address, long int port)
{
	struct sdp_session *session = media->session;

	if (!flags->trust_address) {
		if (is_addr_unspecified(&flags->parsed_received_from)) {
			if (__parse_address(&flags->parsed_received_from, NULL, &flags->received_from_family,
						&flags->received_from_address))
				return -1;
		}
		ep->address = flags->parsed_received_from; // sip-source
	}
相关推荐
无名38721 天前
SIPp uac.xml 之我见
通讯
酒茶白开水2 个月前
React二组件进阶
react.js·生命周期·context·通讯·props·render-props·高阶组件
佳途自动化学院3 个月前
三菱FX3U进阶课程-运动控制讲解
自动化·plc·工控·通讯·三菱
无名3873 个月前
简单介绍 Kamailio cfg_rpc 模块
通讯
无名3874 个月前
MicroSIP 使用笔记
通讯
无名3875 个月前
Kamailio openssl 3.0.x 需要注意的事项
通讯
h6play5 个月前
如何优雅的实现 iframe 多层级嵌套通讯
npm·vue·bridge·iframe·通讯·连接·嵌套iframe
无名3875 个月前
rtpengine 的端点学习模式
通讯
无名3876 个月前
Debian11 下源码编译 rtpengine11.1
通讯