Sofia-SIP辅助文档十七 - Sofia SIP用户代理库 - "url" - URL模块

阅读Sofia-SIP源码 - su模块 - su_alloc.c/h 阅读详情

http://sofia-sip.sourceforge.net/refdocs/url/index.html,翻译自官网的这张网页。


模块元信息

Sofia url模块包括一些使用URL数据类型url_t的宏和函数,他们可以解析和打印URL。

联系人:
Pekka Pessi < Pekka.Pessi@nokia-email.address.hidden>
状态:
Sofia SIP Core library
许可:
LGPL

使用URL库

URL库提供了URL的数据类型以及与之相关的辅助函数。URL解析器可以将URL里的组件分离出来放入url_t结构体内。

注:
请注意我们认为URL和URI是可互相替换的术语。

正式的URI语法在RFC 3986里被严格定义。

URLs包括可打印ASCII字符集的一个子集。这个子集不包括空格和在基于文本的协议中通常用作分隔符的字符,例如< > # %和 " (双引号),这些字符的位置在ECMA-5中预留给了国家扩展。在US-ASCII中,这些字符是:{ } | \ ^ [ ] `。

还有九个字符在URI的某些部分有着特殊的含义。这些保留字符用来分隔URL中的各个语法部分。这些保留字符是:@ / ; ? & = + and $。

URL库能够理解两种URL语法。首先,基本语法,例如被用于ftp:,http:和rtsp:这些URL:

scheme ":" ["//" [ user [":" password ] "@"] host [":" port ] ] ["/" path ] ["?" query ] ["#" fragment ]

另一种,被用于mailto:,sip:,im:,tel和pres:等URL:

scheme ":" [ [ user [":" password ] "@"] host [":" port ] ] [";" params ] ["?" query ] ["#" fragment ]

注意url解析器会认为“*”是一个合法的URL。

例如:

http://example.org:7100/cgi-bin/query?key=90786
ftp://user:pass\@ftp.example.com/pub/
sip:user:pass\@example.com;user=ip
tel:+358718008000

字串转换成#url_t

url_make()函数可以将一个字串转换成新生成的url_t结构体。URL中的各个组件会被分离出来。如果十六进制表示法的编码字符在URL的这一部分是合法字符,那么就可以移出这个十六进制表示的字串。例如,"%41"被解码成"A"在user部分,但"%40" (@)不做任何转换。(This is called canonization of the URL fields.)

url_format()函数可以生成URL,它有着类似于printf()函数相似的格式化功能。

例如,当我们想从如下字串中生成一个URL

sip:joe%2Euser@example%2Ecom;method=%4D%45%53%53%41%47%45?body=CANNED%20MSG

各个组件是\0结束的,canonized,向如下所示赋给结构体:

 url_type = url_sip
 url_root = 0
 url_scheme = "sip"
 url_user = "joe.user"
 url_password = NULL
 url_host = "example.com"
 url_port = NULL
 url_path = NULL
 url_params = "method=MESSAGE"
 url_headers = "body=CANNED%20MSG"
 url_fragment = NULL

可以使用url_param()和url_have_param()函数得到url->url_params字串中的特定参数。

字串转换成#url_t

url_as_string()函数可以将一个url_t结构体转换成新生成的字串。

URL模块中的函数和宏

<sofia-sip/url.h>头文件中包括了URL模块的类型、函数和宏。函数和宏在这里展示作为参考。最重要的操作URL的函数和宏是:

url_t *url_make(su_home_t *h, char const *str);
url_t *url_format(su_home_t *h, char const *fmt, ...);
char *url_as_string(su_home_t *home, url_t const *url);
url_t *url_hdup(su_home_t *h, url_t const *src);
int url_sanitize(url_t *u);
char const *url_scheme(enum url_type_e type);

#define URL_INIT_AS(type)
void url_init(url_t *url, enum url_type_e type);

int url_cmp(url_t const *a, url_t const *b);
int url_cmp_all(url_t const *a, url_t const *b);

isize_t url_param(char const *params, char const *tag,
                  char value[], isize_t vlen);
int url_has_param(url_t const *url, char const *name);
int url_param_add(su_home_t *h, url_t *url, char const *param);

这些是URL模块中用来处理编码的函数:

int url_reserved_p(char const *s);
char *url_escape(char *d, char const *s, char const reserved[]);
int url_esclen(char const *s, char const reserved[]);
char *url_unescape(char *d, char const *s);

这是一些解析URL的函数和宏:

char const *url_port_default(enum url_type_e url_type);
char const *url_tport_default(enum url_type_e url_type);
char const *url_port(url_t const *u);
#define URL_PORT(u)

除了基本的URL结构体url_t,库接口还提供联合体类型url_string_t用来作为参数传递未解析过的字串,而不是解析过的URL:

#define URL_STRING_P(u) ((u) && *((url_string_t*)(u))->us_str != 0)
#define URL_IS_STRING(u) ((u) && *((url_string_t*)(u))->us_str != 0)
int url_string_p(url_string_t const * url);
int url_is_string(url_string_t const * url);
#define URL_STRING_MAKE(s)

有一些类printf()函数的格式化宏:

#define URL_PRINT_FORMAT
#define URL_PRINT_ARGS(u)

这些函数会计算URL中的MD5 digest,或者将URL的内容转成MD5 sum:

void url_update(struct su_md5_t *md5, url_t const *url);
void url_digest(void *hash, int hsize, url_t const *, char const *key);

SIP或SIPS的URI有一些参数用来控制请求的传输。有些情况下,他们应该被检测到和移出:

这些函数可作为使用URL库的协议解析器的构建块:

int url_d(url_t *url, char *s);
isize_t url_len(url_t const * url);
issize_t url_e(char buffer[], isize_t n, url_t const *url);
#define URL_E(buf, end, url)
isize_t url_xtra(url_t const * url);
issize_t url_dup(char *, isize_t , url_t *dst, url_t const *src);
#define URL_DUP(buf, end, dst, src)

sofia sip开发九 使用EMIPLIB库增加RTP流处理 sofia sip开发 阅读详情

相关推荐

Sofia-SIP辅助文档十三 - Sofia SIP用户代理库 - "nta" - SIP事务模块

http://sofia-sip.sourceforge.net/refdocs/nta/index.html,翻译自官网的这张网页。 Module Meta Information Sofia SIP Transaction API (nta) provides simple interface to the SIP transaction, transport and

Neohan的专栏 2160

vs2017中调试sofsip-cli

本文给出vs2017调试sofsip-cli,方便读者学习sofiasip

tusong86的博客 458

阅读Sofia-SIP源码三 源码文件结构

源码文件结构

Neohan的专栏 1545

Sofia-SIP辅助文档二 - C语言代码风格指南

 http://sofia-sip.sourceforge.net/refdocs/styleguide.html This document gives general guidelines on generic C style and code formatting within Sofia-SIP. The guidelines include identifier naming

Neohan的专栏 1658

Sofia-SIP辅助文档十五 - Sofia SIP用户代理库 - "sip" - SIP解析模块

http://sofia-sip.sourceforge.net/refdocs/sip/index.html,翻译自官网的这张网页。 Module Meta Information The Sofia sip module contains interface to the SIP parser and the header and message objects.

Neohan的专栏 1588

Sofia-SIP辅助文档十六 - Sofia SIP用户代理库 - "msg" - 消息解析模块

http://sofia-sip.sourceforge.net/refdocs/msg/index.html,翻译自官网的这张网页。 Module Meta Information This module contains parser and functions for manipulating messages and headers for text-based p

Neohan的专栏 1693

sofia sip开发六 寻找开发过程中遇到sofia sip库使用问题的解决方法

sofia sip开发

Neohan的专栏 1785

sip-URI的基本结构

sip-URI的基本结构;sip-URI和sip地址的区别和联系

弘毅_hao的博客 1565

Sofia-SIP辅助文档七 - Sofia SIP用户代理库 - "su" - 操作系统功能和工具

http://sofia-sip.sourceforge.net/refdocs/su/index.html,翻译自官网的这张网页。 模块信息 su模块内包含了一些供Sofia通信软件使用的简单、可移植的socket/时间/同步库。 联系人:Pekka Pessi Pekka.Pessi@nokia-email.address.hidden> 状态:Sofi

Neohan的专栏 1122

基于STM32的RS485土壤氮磷钾与PH传感器数据采集与OLED显示实战(附完整代码)

本文详细介绍了基于STM32单片机通过RS485协议采集土壤氮磷钾与PH传感器数据的实战项目。涵盖硬件选型、连接方法、Modbus-RTU通信协议解析、STM32程序实现及OLED显示,提供完整代码和调试技巧,适用于农业物联网环境监测系统。

kotlin6android的博客 333

从原理图到PCB:Cadence Allegro 17.4网表同步全流程详解(含第三方网表配置)

本文详细解析了Cadence Allegro 17.4中从Orcad原理图到PCB布局的网表同步全流程。核心内容包括标准的第一方网表同步步骤,以及针对第三方网表导入时关键的封装库路径配置方法,并提供了常见同步错误的排查思路,帮助工程师高效、准确地完成设计数据传递,确保PCB设计顺利开局。

salt9的博客 653

Sofia的同步与多线程

本文介绍Sofia的同步与多线程接口。 Sofia工具库提供了简单的,不依赖操作系统的同步接口。同步接口包含用于管理事件、消息、时间和多线程的原语。 克隆对象 The process may be divided into many tasks via cloning. Several tasks may run in context of one t...

至虛極,守靜篤 965

NeurIPS‘25新研究!PINN+GNN强强联手,模型精度飙升50%!

物理图神经网络研究取得重大进展!UCLA团队提出的PhysGNN架构在NeurIPS'2025上引发关注,该模型成功融合PINN的物理约束优势与GNN的图结构处理能力,解决了工程仿真中的关键瓶颈。研究显示,PhysGNN在城市热网预测中误差降低42%,电网负荷模拟的物理规则违反率下降68%。同步解析的SyncTREE模型则创新性地将RC树物理特性融入GNN,实现毫秒级IC时序分析;HSPGNN模型通过嵌入偏微分方程,显著提升多变量时间序列填补精度。

m0_73122726的博客 1021

Sofia-SIP辅助文档三 - 编码指南

 http://sofia-sip.sourceforge.net/refdocs/programming.html Writing Portable Code Most of Sofia-SIP software is written as portable. All core modules are (or at least should be) written in ANSI C

Neohan的专栏 2579

计算机视觉三大顶会(ICCV/CVPR/ECCV)投稿指南与趋势解析

本文详细解析计算机视觉三大顶会(ICCV/CVPR/ECCV)的投稿指南与最新趋势。从基础认知到实战经验,涵盖时间线管理、选题策略、论文写作技巧及实验设计要点,帮助研究者提升投稿成功率。特别关注2024年技术融合、评估维度和伦理要求等前沿趋势,为计算机视觉领域的研究者提供实用建议。

weixin_29165725的博客 1831

详解YOLOv5网络结构/数据集获取/环境搭建/训练/推理/验证/导出/部署

本文给大家带来的教程是利用YOLOv5训练自己的数据集,以及有关YOLOv5的网络结构讲解/数据集获取/环境搭建/训练/推理/验证/导出/部署相关的教程,同时通过示例的方式让大家来了解具体的操作流程,过程中还分享给大家一些好用的资源,我还对其中的参数进行了详细的讲解,通过本文大家可以成功训练自己的数据集,在开始之前给大家推荐一下我的YOLOv5专栏,本专栏包含上百种YOLOv5的改进机制以及如何撰写论文的教程,手把手教大家如何改进YOLOv5非常适合科研小白。

Snu77的博客 4898

Sofia "nua"模块--高层UA库

nua模块包含UA库的实现代码,它关心SIP UA的基本功能。它的功能包括呼叫话务管理、消息,及事件检索。 概述 NUAAPI为高层应用程序提供了一个透明的,完全控制的SIP协议引擎。NUA在现有的事务语义之(nta模块的实现)上提供呼叫语义。通过NUA可以搭建不同的SIPUA,比如说终端、网关,或MCU。 nua引擎为应用程序员隐藏...

至虛極,守靜篤 2723

AI视频生成工作流开发:从产品拆解到带货视频全流程实现

本文介绍了一套完整的AI视频生成工作流开发方案,该系统能够自动分析产品素材并生成9个标准化分镜,支持白底图智能替换,最终输出专业带货视频。系统基于Coze平台搭建,整合豆包大模型及多模态生成模型,实现从产品分析、脚本生成到视频合成的全流程自动化。关键模块包括产品特征提取、智能分镜分配、视觉内容生成和用户交互调整,支持手动优化提示词和输出结果。该方案采用模块化设计,结合多种AI模型协同工作,为电商视频制作提供高效解决方案。

huanghm88的专栏 382

SoFiA2用户手册自翻译

SoFiA 2 用户手册 一、 介绍 随着下一代厘米波射电望远镜(包括ASKAPASKAPASKAP、MeerKATMeerKATMeerKAT、WSRT/ApertifWSRT/ApertifWSRT/Apertif)将要进行新一代大规模盲中性氢测量以及快速、全自动、准确和可靠的寻找源,对这些测量对于科学来说至关重要。SoFiASoFiASoFiA(Serra et al.2015)的找源应用程序旨在满足中性氢社区的源查找需求,并已成为光谱线数据事实上的标准源查找工具。 虽然SoFiASoFiASoFiA

Kirk.Vito的博客 723

2.3 MMU Notifier(上):KVM 催生的页表变化通知

探讨了MMU Notifier机制的作用及其在虚拟化等场景中的应用。当CPU页表发生变更(如munmap、页面迁移等操作)时,需要通知拥有"第二套页表"的子系统(如KVM的EPT/NPT、IOMMU、GPU等)失效其映射。MMU Notifier通过订阅-通知机制实现这一功能,核心数据结构包括mmu_notifier订阅对象和回调接口mmu_notifier_ops。当CPU页表修改时,通过mmu_notifier_range描述变更范围,调用订阅者的回调函数进行同步,确保外部MMU与CPU页表一致性。

图形/计算GPU的驱动与虚拟化技术分享园地 1025

使用 MATLAB/Simulink + Communications Toolbox + 5G Toolbox,构建一个2×2 MIMO-OFDM通信系统

本文通过Simulink+CommunicationsToolbox构建2×2 MIMO-OFDM通信系统,重点实现信道均衡滤波器(ZF与MMSE)的设计与应用。详细介绍了系统架构、建模步骤(包括信道估计、均衡器实现)和仿真场景设计,通过BER、星座图和EVM对比分析验证了MMSE均衡器在抑制噪声和信号恢复方面的优势。文章总结了MIMO均衡的核心原理与实践经验,并提出了扩展至大规模MIMO、深度学习均衡器等优化方向,为无线通信系统设计提供实用指导。

amy_mhd的博客 125

Sofia内存管理

本文简要介绍Sofia所使用的home-based内存管理方式。 源文件 文件 su_alloc.h 内存管理接口定义 文件 su_alloc_stat.h 内存管理统计信息 函数 char * su_strdup(su_home_t*home, char const...

至虛極,守靜篤 701

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

开源项目教程:Sofia-SIP 深度指南

开源项目教程:Sofia-SIP 深度指南 1. 项目介绍 Sofia-SIP 是一个遵循 IETF RFC3261 标准的开源 SIP 用户代理库,支持多种实时通信服务,如VoIP、即时消息(IM)等。该库由Nokia研究中研发的SIP栈为基础,专为GNU/Linux平台设计,但其通用性使得它能够应用于更广泛的环境。Sofia-SIP采用LGPL许可,确保了其在开源社区中的广泛适用性和灵活性。最...

gitblog_00259的博客 1521

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Sofia-SIP模块开发指南

源文出处http://sofia-sip.sourceforge.net/refdocs/programming.html编程指南编写可移植代码Sofia-SIP软件代码大部分都是可移植的。所有核心模块都是(至少应该是)遵循ANSI C 89规范的,也用到了一些ANSI C 99特性。如果有平台依赖的部分,都被集中分离到独立的C文件中,并封装接口,与软件其他部分隔离。SU模块处理OS特定功能的抽象...

至虛極,守靜篤 5816

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

常用SIP URL解析

SIP支持多种URI/URL方案,包括sip、sips、tel、pres,还有用于SIP的im,这里想谈谈安全SIP、电话、状态呈现和即时消息相关的URI方案。之前SIP URL中给了一个列表,说明SIP头域中可以引用的URI方案。 SIP 与 SIPS URI 许多地方使用SUP URI,其中包括To、From、Contact这些头域,还有说明请求目的端的Request-URI。SIP URI和mailto URI很像,也可以在页面上显示为超链接。它们还可以是电话号码。SIP U...

至虛極,守靜篤 6509

SIP消息头域的说明

 1 general-header类:为描述消息基本属性的通用头域,可用于请求消息或响应消息;通用头域的域名只有在协议版本改变时才可有效地扩展。不过,通信中的所有方均认为是“通用头域”的新的头域也可认为是通用头域。不被认可的头域作为实体头域。 1.1 Call-ID Call-ID通用头域唯一标识一个特定的请求或者一个特定客户的所有登记。来自同一个客户的所有的登记应该使用同样的

zysee的专栏 3932
上一篇: Sofia-SIP辅助文档十六 - Sofia SIP用户代理库 - "msg" - 消息解析模块
下一篇: Sofia-SIP辅助文档十八 - Sofia SIP用户代理库 - "bnf" - 字符串解析模块
Neohan
博客等级 码龄26年 33粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值