`
songhuagao
  • 浏览: 8929 次
  • 性别: Icon_minigender_1
  • 来自: 香格里拉
最近访客 更多访客>>
社区版块
存档分类
最新评论

RFC 3921:session建立

阅读更多
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 3261协议,SIP: Session Initiation Protocol

    **SIP:会话初始化协议(Session Initiation Protocol)** SIP,即会话初始化协议,是一种应用层控制(信号)协议,用于创建、修改和终止一个或多个参与者的会话。这种会话涵盖范围广泛,包括互联网电话通话、...

    rfc2327-SDP Session Description Protocol

    SDP(Session Description Protocol)是IETF(Internet Engineering Task Force)定义的一种协议,记录在RFC 2327中,用于描述多媒体会话的特性,包括音频、视频和其他数据流的编码格式、传输地址和端口等信息。...

    rfc2501-rfc3000

    标题 "rfc2501-rfc3000" 提及的是互联网工程任务组(IETF)发布的请求评论(Request for Comments, RFC)文档的一个序列。这些文档是定义和标准化互联网协议和技术的重要资料,涵盖了从2501到3000号的范围。描述中...

    rfc2327 Session Description Protocol(SDP)

    Session Description Protocol(SDP)是Internet工程任务组(IETF)定义的一种标准协议,文档编号为RFC2327。SDP主要用于在多媒体通信中描述会话或会议的特性,如音频、视频和其他数据流的类型、编码方式、传输地址...

    RFC3261,RFC3265 SIP协议

    综上所述,SIP协议通过RFC3261和RFC3265的组合,提供了一套强大且灵活的框架,用于建立、管理和终止多媒体会话,并通过事件订阅机制实现状态的实时同步。理解并掌握这些知识点对于开发和部署基于SIP的应用至关重要。

    Ftp协议:RFC959和HTTP协议:RFC2616

    为了解决这个问题,后来引入了Cookie和Session机制来跟踪用户会话。HTTP/1.1还引入了持久连接,允许在一个TCP连接上连续发送多个请求和响应,减少了连接建立和关闭的开销。 两者的对比: 1. 目的:FTP主要服务于...

    RFC4028中文版

    RFC4028是SIP(Session Initiation Protocol,会话初始协议)的一个扩展机制,用于定义SIP会话的存活机制。该扩展通过发送周期性的re-INVITE或UPDATE请求来保持会话的活动性,从而使用户代理和代理服务器能够判断...

    rfc系列文档打包下载

    6. **rfc5245**:介绍了ICE(Interactive Connectivity Establishment)框架,这是一种在NAT环境下的连接建立技术,用于解决多媒体通信中的连接问题。 7. **rfc5389**:定义了SIP(Session Initiation Protocol)...

    444RFC3621(sip).zip_RFC36_RFC3621_rfc SIP_sip

    标题中的“444RFC3621(sip).zip_RFC36_RFC3621_rfc SIP_sip”表明这是一个与SIP(Session Initiation Protocol)相关的压缩文件,其中包含了对RFC3621标准的讨论。SIP是一种用于创建、修改和终止多媒体通信会话的...

    RFC-2543---SIP Session Initiation Protocol.doc

    《SIP:会话初始化协议》(RFC-2543)是互联网标准草案,由M. Handley、H. Schulzrinne、E. Schooler、J. Rosenberg等人于1999年提出,旨在定义一种用于创建、修改和终止多参与者会话的应用层控制协议。SIP(Session ...

    rfc3262.txt.zip_rfc3261_rfc3261.txt_rfc3262_sip 3261

    标题中的"rfc3262.txt.zip_rfc3261_rfc3261.txt_rfc3262_sip 3261"表明这是一个与SIP(Session Initiation Protocol)相关的压缩文件,其中包含了RFC3261和RFC3262这两个重要的互联网标准文档。描述中提到的"sip_rfc...

    RFC 3665 呼叫流程实例

    RFC 3665详细描述了基本的SIP呼叫流程实例,其中特别关注了通过SIP ALG(Application Layer Gateway)进行的会话建立过程。SIP ALG是一种网络设备或软件,用于在NAT(Network Address Translation)环境中正确处理...

    SIP协议标准RFC3261-RFC2543

    RFC3261是SIP的核心标准,全称为"Session Initiation Protocol (SIP): anomalies, issues, and resolutions"。该文档详尽地定义了SIP的语法、语义、流程和行为,旨在为开发者提供构建SIP兼容系统所需的所有信息。RFC...

    RFC3588_RFC3261中文版

    SIP(Session Initiation Protocol)是一种应用层控制(信令)协议,用于创建、修改和终止多媒体通信会话。而Diameter协议则是用于网络认证、授权和计费的协议,是RADIUS协议的增强版,更适应现代网络的需求。 **...

    rfc5366英文版word

    《RFC5366:基于SIP请求中的URI列表建立会议》 该文档详细阐述了如何利用Session Initiation Protocol (SIP)的URI列表服务来创建会议。SIP是一种用于建立、修改和终止多媒体通信会话的协议,广泛应用于VoIP(Voice ...

    RFC1001 - RFC1960

    紧随RFC1001之后的是RFC1002,即"网络会话协议"(Network Session Protocol)。这个协议是用来建立和管理两个网络节点之间的通信会话。它提供了一个框架,使得应用程序可以在不同系统之间进行数据交换。然而,由于其...

    RFC3621sip-china.rar_RFC 3621_RFC3621_sip

    标题中的"RFC3621sip-china.rar_RFC 3621_RFC3621_sip"表明这是一份关于RFC 3621的文档,主要聚焦于SIP(Session Initiation Protocol)协议,且可能是针对中国用户的中文版。描述提到"RFC3621-Sip-中文文档,非常...

    rfc3261(中文版)_rfc3261_sip协议_

    SIP(Session Initiation Protocol,会话初始协议)是网络通信领域中的一个关键协议,尤其在互联网电话(VoIP)和其他多媒体通信服务中扮演着核心角色。RFC3261是SIP协议的最新官方定义,为这个协议提供了详细的技术...

    RFC4566中文版

    标题"RFC4566中文版"和描述中的"RFC4566 RFC4566中文版 sdp文档"都指向一个关键的规范——RFC4566,这是一个关于Session Description Protocol (SDP)的文档,并且已经被翻译成了中文。SDP是一种用于在多媒体通信中...

Global site tag (gtag.js) - Google Analytics