除却巫山不是云
离思
元稹
曾经沧海难为水,除却巫山不是云。
取次花丛懒回顾,半缘修道半缘君。
欲得周郎顾时时误抚琴
国风·郑风·子衿
诗经
鸣筝金粟柱,素手玉房前。
欲得周郎顾,时时误拂弦。
纵我不往子宁不嗣音
国风·郑风·子衿
诗经
青青子衿,悠悠我心。纵我不往,子宁不嗣音?
青青子佩,悠悠我思。纵我不往,子宁不来?
挑兮达兮,在城阙兮。一日不见,如三月兮。
那人却在灯火阑珊处
青玉案 元夕
辛弃疾
东风夜放花千树,更吹落,星如雨。
宝马雕车香满路。
凤箫声动,玉壶光转,一夜鱼龙舞。
蛾儿雪柳黄金缕,笑语盈盈暗香去。
众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。
为伊消得人憔悴
蝶恋花
柳永
伫倚危楼风细细,望极春愁,黯黯生天际。草色烟光残照里,无言谁会凭阑意。
拟把疏狂图一醉,对酒当歌,强乐还无味。衣带渐宽终不悔,为伊消得人憔悴
待到山花烂漫时
卜算子.咏梅
风雨送春归,飞雪迎春到。
已是悬崖百丈冰,犹有花枝俏。
俏也不争春,只把春来报。
待到山花烂漫时,她在丛中笑。
阅读SIP协议观后感
本文主要记录阅读 SIP rfc3261 文档的一些所思所考,不会对其进行整理分类,并且存在跳跃性
生成 SIP 响应
8.2.6
除了 invite 外需要生成临时响应,其它响应应该立即响应
生成的临时响应,请求中的时间戳应该直接复制到响应中。如果响应慢就需要将延迟时间以 s 为单位,将时间生成在响应中
响应的 Call-ID、CSeq、VIA的顺序必须相同。除了 100,其它响应的 uri 内容必须相同,并且需要添加一个 tag,用于 dialog。
事务的解读事务的分为客户端事务与服务器事务,客户端事务发送请求,服务器事务发送响应。
无状态代理不包含客户端事务或服务器事务。
200(Ok)的ack作用:主要为了确保 200ok 能够正常发送到 UAC。如果后续不发送 ACK,那么服务端会不断发送,并且在三分钟后断开连接
疑问:为啥 200 ok 的 ack 作为自己单独的事务?
解答:这样设计的原因是保证送达到UAC,并且如果没有回复 ACK,那么 UAS 将会重传
客户端事务:客户端事务的主要负责将接收到的响应传递给 TU, 并过滤重传与不允许的传递。对于 invite ...
Sip协议中的一些概念
本文主要介绍 SIP 协议中的一些缩写字符的含义,这些缩写在阅读 Sofia-sip 的代码时常有出现
Sip 缩写字符
线性空白(Linear White Space,简称LWS): 位于文本字符序列中的空白字符,包括空格、制表符和换行符等。在计算机编程中,线性空白通常用来描述文本中字符之间的间距,包括但不限于字母、数字、标点符号等。线性空白与非线性空白(Non-Linear White Space,简称NLWS)相对,非线性空白一般指符号或标点之间的间距,如句子结束的标点符号与下一句的起始字母之间的间隔
CRLF: 换行符
Sofia中的一些概念
本文主要对 Sofia 中的一些概念进行分析与解释,方便进行源码阅读。
Sofia 概念事件循环Event loop 与根对象 root object
NUA以事件反应器模式(也称为分发及通知模式)驱动事件系统(请参考[Using Design Patterns to Develop Reusable Object-oriented Communication Software, D.C. Schmidt, CACM October ‘95, 38(10): 65-74]一书)。Sofia以任务作为编程模型的基本执行单元。根据编程模型,程序可以请求事件循环在特定事件触发时调用回调函数。具体事件包括I/O激活,定时器或其它任务传递的异步消息。
root 对象是应用软件中描述一个任务的句柄。
透视事件的另一种方式是:root对象描述任务的主事件循环。通过root对象,任务代码可以访问它的上下文信息(magic)和线程同步,比如说等待对象、定时器,消息。
使用NUA服务的应用必须创建一个root对象,并设置处理NUA事件的回调函数。
调用 su_root_create()创建root对象 ...
Sofia发送subscriber的源码解析
本文将对 sofia 发送 subscriber 这个信令进行源码分析其中会对一些涉及到的其它源码进行解析,用以后续学习
Sofia 的 handle这里对 handle 进行一定的解释。这个 handle 用于管理向谁发送什么样的数据,这个谁一般指定 uac 。 一个 handle 会生成一个新的 call-id,产生一个新的 session。
nua_handle_destroy(): 用于销毁这个 handle。
小知识:FreeSWITCH 一般在创建后 nua_handle_bind(fnh, &mod_sofia_globals.destroy_private),后续不用后会自动销毁, 这个销毁主要依赖于 our_sofia_event_callback中的以下代码:12345if ((sofia_private && sofia_private == &mod_sofia_globals.destroy_private)) { nua_handle_bind(nh, NULL); nua_handle ...