测试 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
	}
相关推荐
ysdysyn11 天前
C# Modbus RTU 多从站控制全攻略:一端口,双轴控制
开发语言·c#·mvvm·通讯·modbus rtu
SunkingYang19 天前
MFC进程间消息传递:SendMessage、PostMessage与SendNotifyMessage分别如何实现,进程间通讯需要注意哪些问题
c++·mfc·通讯·postmessage·sendmessage·sendnotify·进程间
SunkingYang19 天前
QT程序如何将事件和消息发送给MFC程序,MFC程序如何接收消息和事件
qt·mfc·消息·事件·通信·通讯·传递
B_lack0261 个月前
Wincc画面通讯故障判断
上位机·通讯·西门子plc·wincc
brave and determined1 个月前
接口通讯学习(day04):RS-232与RS-485:通信接口全解析
网络·uart·通讯·emc·rs232·rs485·嵌入式设计
研华科技Advantech2 个月前
构建自主可控“数字网络”,重塑新能源汽车智能产线高可靠实时通讯
汽车·新能源·通讯·智能产线
张人玉2 个月前
VsionMaster筛选机错误情况
数码相机·c#·通讯·网络通讯
张人玉2 个月前
c#串口读写威盟士五插针
开发语言·c#·通讯
好望角雾眠4 个月前
第四阶段C#通讯开发-1:通讯基础理论,串口,通讯模式,单位转换,代码示例
开发语言·笔记·c#·串口·通讯
专业机床数据采集8 个月前
宝元LNC数控数据采集方式、跨平台采集通讯方案介绍
cnc·通讯·采集·数控·宝元lnc