Session Establishment
许多基于XMMP的IM都实现这么一个client-server构架:要求client来建立一个和server相关的的session用来处理预料中的即时通讯和出席状态。然而,这有很多前提条件:
1.流认证Stream Authentication
在尝试建立session和发送任何xml节之前,client必须完成流认证(Stream Authentication)
2.资源绑定Resource Binding
在完成流认证之后,client必须绑定资源到流上,so that the client's address is of the form <user@domain/resource>, after which the entity is now said to be a "connected resource" in the terminology of [XMPP‑CORE]
如果server支持session,他必须包含一个<session/>元素,这个元素是被'urn:ietf:params:xml:ns:xmpp-session'命名空间限制的。他向client宣告session建立
server向client告知session建立功能
<stream:stream
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
id='c2s_345'
from='example.com'
version='1.0'>
<stream:features>
<bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/>
<session xmlns='urn:ietf:params:xml:ns:xmpp-session'/>
</stream:features>
在接到必须建立session的通知(完成资源绑定),如果client期望使用即时通讯和出席功能的话,它就必须建立session。
第一步:client向server请求session
<iq to='example.com'
type='set'
id='sess_1'>
<session xmlns='urn:ietf:params:xml:ns:xmpp-session'/>
</iq>
第二步:server告知client,session已经被建立
<iq from='example.com'
type='result'
id='sess_1'/>
当建立session的时候,一个连接的资源被称之为活跃的资源。
可能会出现多种错误情况。例如,由于用户名或授权身份(authorization identity)没有创建session的许可,或者资源标识符已经有了一个活跃的资源连接, server就可能在创建session时遇到内部的错误。
第二步(alt):server返回错误(内部错误)
<iq from='example.com' type='error' id='sess_1'>
<session xmlns='urn:ietf:params:xml:ns:xmpp-session'/>
<error type='wait'>
<internal-server-error
xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
</error>
</iq>
如果用户或者资源不允许创建资源,server必须返回错误
<iq from='example.com' type='error' id='sess_1'>
<session xmlns='urn:ietf:params:xml:ns:xmpp-session'/>
<error type='auth'>
<forbidden
xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
</error>
</iq>
如果已经存在一个一个活跃的资源连接,server会有两种处理:1)终止连接,创建一个新的连接;2)驳回新连接创建请求,继续维护以前的活跃连接。这两种server都都要实现,但是建议实现第一种情况。
在第一种情况,server应该向活跃的资源连接发送<conflict/>流错误,并终结该活跃资源的XML流和潜在的TCP连接,同时向新请求的session返回一个类型为‘result’的IQ节以表示成功。
在第二种情况,server应该向新请求的连接发送<conflict/>流错误,同时维护以前连接的XML流,以便于新请求的连接有机会在另一个session请求建立发送过来前议定一个不冲突的资源标示符(non-conflicting resource identifier)。
情况一
<stream:error>
<conflict xmlns='urn:ietf:params:xml:ns:xmpp-streams'/>
</stream:error>
</stream:stream>
情况二
<iq from='example.com' type='error' id='sess_1'>
<session xmlns='urn:ietf:params:xml:ns:xmpp-session'/>
<error type='cancel'>
<conflict xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
</error>
</iq>
在请求建立后,client应该发送初始的出席信息和请求花名册(roster),虽然这些都是可选的。
Note:在允许创建一个即时通讯和出席的session之前,server也许会要求事先帐户配置(prior account provisioning)。事先帐户配置(prior account provisioning)的方法包括server管理员创建帐户和用'jabber:iq:register'的帐户创建
分享到:
相关推荐
**SIP:会话初始化协议(Session Initiation Protocol)** SIP,即会话初始化协议,是一种应用层控制(信号)协议,用于创建、修改和终止一个或多个参与者的会话。这种会话涵盖范围广泛,包括互联网电话通话、...
SDP(Session Description Protocol)是IETF(Internet Engineering Task Force)定义的一种协议,记录在RFC 2327中,用于描述多媒体会话的特性,包括音频、视频和其他数据流的编码格式、传输地址和端口等信息。...
标题 "rfc2501-rfc3000" 提及的是互联网工程任务组(IETF)发布的请求评论(Request for Comments, RFC)文档的一个序列。这些文档是定义和标准化互联网协议和技术的重要资料,涵盖了从2501到3000号的范围。描述中...
Session Description Protocol(SDP)是Internet工程任务组(IETF)定义的一种标准协议,文档编号为RFC2327。SDP主要用于在多媒体通信中描述会话或会议的特性,如音频、视频和其他数据流的类型、编码方式、传输地址...
综上所述,SIP协议通过RFC3261和RFC3265的组合,提供了一套强大且灵活的框架,用于建立、管理和终止多媒体会话,并通过事件订阅机制实现状态的实时同步。理解并掌握这些知识点对于开发和部署基于SIP的应用至关重要。
为了解决这个问题,后来引入了Cookie和Session机制来跟踪用户会话。HTTP/1.1还引入了持久连接,允许在一个TCP连接上连续发送多个请求和响应,减少了连接建立和关闭的开销。 两者的对比: 1. 目的:FTP主要服务于...
RFC4028是SIP(Session Initiation Protocol,会话初始协议)的一个扩展机制,用于定义SIP会话的存活机制。该扩展通过发送周期性的re-INVITE或UPDATE请求来保持会话的活动性,从而使用户代理和代理服务器能够判断...
6. **rfc5245**:介绍了ICE(Interactive Connectivity Establishment)框架,这是一种在NAT环境下的连接建立技术,用于解决多媒体通信中的连接问题。 7. **rfc5389**:定义了SIP(Session Initiation Protocol)...
标题中的“444RFC3621(sip).zip_RFC36_RFC3621_rfc SIP_sip”表明这是一个与SIP(Session Initiation Protocol)相关的压缩文件,其中包含了对RFC3621标准的讨论。SIP是一种用于创建、修改和终止多媒体通信会话的...
《SIP:会话初始化协议》(RFC-2543)是互联网标准草案,由M. Handley、H. Schulzrinne、E. Schooler、J. Rosenberg等人于1999年提出,旨在定义一种用于创建、修改和终止多参与者会话的应用层控制协议。SIP(Session ...
标题中的"rfc3262.txt.zip_rfc3261_rfc3261.txt_rfc3262_sip 3261"表明这是一个与SIP(Session Initiation Protocol)相关的压缩文件,其中包含了RFC3261和RFC3262这两个重要的互联网标准文档。描述中提到的"sip_rfc...
RFC 3665详细描述了基本的SIP呼叫流程实例,其中特别关注了通过SIP ALG(Application Layer Gateway)进行的会话建立过程。SIP ALG是一种网络设备或软件,用于在NAT(Network Address Translation)环境中正确处理...
RFC3261是SIP的核心标准,全称为"Session Initiation Protocol (SIP): anomalies, issues, and resolutions"。该文档详尽地定义了SIP的语法、语义、流程和行为,旨在为开发者提供构建SIP兼容系统所需的所有信息。RFC...
SIP(Session Initiation Protocol)是一种应用层控制(信令)协议,用于创建、修改和终止多媒体通信会话。而Diameter协议则是用于网络认证、授权和计费的协议,是RADIUS协议的增强版,更适应现代网络的需求。 **...
《RFC5366:基于SIP请求中的URI列表建立会议》 该文档详细阐述了如何利用Session Initiation Protocol (SIP)的URI列表服务来创建会议。SIP是一种用于建立、修改和终止多媒体通信会话的协议,广泛应用于VoIP(Voice ...
紧随RFC1001之后的是RFC1002,即"网络会话协议"(Network Session Protocol)。这个协议是用来建立和管理两个网络节点之间的通信会话。它提供了一个框架,使得应用程序可以在不同系统之间进行数据交换。然而,由于其...
标题中的"RFC3621sip-china.rar_RFC 3621_RFC3621_sip"表明这是一份关于RFC 3621的文档,主要聚焦于SIP(Session Initiation Protocol)协议,且可能是针对中国用户的中文版。描述提到"RFC3621-Sip-中文文档,非常...
《Session Timers in the Session Initiation Protocol (SIP)》是网络工作小组制定的一份标准跟踪协议文档(RFC 4028),由S. Donovan与J. Rosenberg在2005年4月发布。该文档主要介绍了会话发起协议(SIP)中的会话...
标题"RFC4566中文版"和描述中的"RFC4566 RFC4566中文版 sdp文档"都指向一个关键的规范——RFC4566,这是一个关于Session Description Protocol (SDP)的文档,并且已经被翻译成了中文。SDP是一种用于在多媒体通信中...