逸逸记事
逸逸记事

我的分类(专题)

首页(175)
儿子(9)
SIP技术(9)
Web2.0(12)
摄影和DVD(8)
软件开发随笔(18)
名古屋打工生活(11)
微软技术开发(47)
Java技术(12)
加拿大移民生活(20)
生活点滴(6)
第一份工作--上海贝尔(18)
完成项目(13)
回国后的生活(0)


最新日志
独行者
终于知道什么叫外包了
人生悲哀之事
水晶报表中显示动态图片
水晶报表中的简单参数设置
怀念下小黑
dotnet中的数据连接Timeout
老板的思路
又买房了
交通事故

最新回复
回复:独行者
回复:怀念下小黑
回复:老板的思路
回复:mjSip学习笔记
回复:老板的思路
回复:dotnet中的数据连接Timeo
回复:mjSip学习笔记
回复:交通事故
回复:交通事故
回复:又买房了

留言板

签写新留言

您好,很希望问您一个关于jain-sip
生活经历就是最大的财富,羡哦~
java的Web开发问题
回复:疑问
IT还不如妓女呢,呵呵
myjavaserver的空间
求助
您的子域名已开通

统计
blog名称:人在旅途
日志总数:175
评论数量:505
留言数量:13
访问次数:1665314
建立时间:2005年12月7日

链接

 

生命是过客,人在旅途。奶奶是信基督教的,没啥文化,却养育了四子二女,还带过九个孙辈。老人家对生命的看法就是“人都是客人,迟早要回去的。”就以《人在旅途》来纪念她。

 

«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31

公告
  本人上传的源程序中可能引用或使用了第三方的库或程序,也可能是修改了第三方的例程甚至是源程序.所以本人上传的源程序禁止在以单纯学习为目的的任何以外场合使用,不然如果引起任何版权问题,本人不负任何责任.




     本站首页    管理页面    写新日志    退出
调整中...
[SIP技术]JAIN SIP instantmessaging学习
人在旅途 发表于 2006/1/17 15:15:19

学习目的:通过阅读源程序,了解如何使用JAVA的JAIN包来制作SIP客户端程序(IM).     学习笔记:    Class  说明  InstantMessagingGUI  启动类,负责显示主画面,读如初始化文件,初始化个变量,启动和停止SIPListener.  IMUserAgent  实现SIPListener.借口,负责SIPStack和SIPProvider等SIP通信类的生成和初始化,SIPListener的登记和注销,响应各种到达的事件(SIP消息).  ListenerInstantMessaging  负责响应主画面的各种UI操作,如Sign in,OFFLINE,IM...  IMMessageProcessing  负责IM聊天中的消息发送和接受,其中有DIALOG概念  AuthenticationDialog  让用户输入ID和密码  AuthenticationProcess  负责提供从认证文件来的ID和密码信息,产生认证要求SIP消息的回映SIP消息的头  BuddyList  负责主画面中BuddyList的操作(加,减,信息...)和所对应的认证文件相关操作(读如,保存)  BuddyTag  BuddyList中的一项  ChatFrame  IM画面  ChatSession  负责一个IM画面的操作,各种IM信息管理,收发操作(信息显示,SIP发信...),IM的SIP对话管理  ChatSessionManager  多个ChatSession管理  AlertInstantMessaging  显示错误信息  ConfigurationFrame  初始化信息管理画面  RemoteSipURLFrame  让用户输入IM的对方地址  presence下*Processing  负责各种SIP消息的接受分析和回应  IMRegisterProcessing  负责REGISTER和UNREGISTER消息,成功后会调用IMSubscribeProcessing和IMNotifyProcessing发送附加消息  注:gov.nist.javax.sip.Utils被使用,但它在API文档中不存在.  1.REGISTER(sign in)消息  消息行  说明  REGISTER sip:nist.gov:4000 SIP/2.0  请求方法 URI SIP版本号   Call-ID: nist-sip-im-register-callId1  主机 本地表示  CSeq: 1 REGISTER  同一CALLID中的序数 请求方法  From: <sip:deruelle@nist.gov>;tag=924  FROM(用户) 标记(区别共享同一IP地址相同CALLID的请求)  To: <sip:deruelle@nist.gov>  TO(用户)  Via: SIP/2.0/UDP 127.0.0.1:4010;branch=z9hG4bK973d37d8ff9de1a0e2a50e5ff70f82e7  发送协议 发送方 分支参数(用于代理服务器并行分发请求时标记个分支)  Max-Forwards: 10    Contact: <sip:127.0.0.1:4010;transport=udp>  给出以后需要时的直接通讯地址  Allow: INVITE, SUBSCRIBE, NOTIFY, MESSAGE, INFO, PUBLISH    Content-Length: 0     2.REGISTER(sign in)消息的响应    消息行  说明  SIP/2.0 200 OK  SIP版本号 状态码 状态说明   Call-ID: nist-sip-im-register-callId1  (同请求)  CSeq: 1 REGISTER  (同请求)  From: <sip:deruelle@nist.gov>;tag=924  FROM(用户) 标记(区别共享同一IP地址相同CALLID的请求)  To: <sip:deruelle@nist.gov>  TO(用户)  Via: SIP/2.0/UDP 127.0.0.1:4010;branch=z9hG4bK973d37d8ff9de1a0e2a50e5ff70f82e7  发送协议 发送方 分支参数(用于代理服务器并行分发请求时标记个分支)  Max-Forwards: 10    Contact: <sip:127.0.0.1:4010;transport=udp>;expires=3600  直接通讯地址(同请求) REGISTER有效时间  Content-Length: 0     3.REGISTER(sign out)消息 基本和REGISTER(sign in)消息一样,只是在以下两个方面不同: 3.1<TO>头部字段和<FROM>头部字段一样加了个标记项. 3.2<Allow>头部字段没有了,被一个<Expires: 0>头部字段所代替了. 4.REGISTER(sign out)消息的响应 和REGISTER(sign out)消息一样有了相应的变化(标记项和<Expires: 0>头部字段). 5.Subscribe和Unsubscribe消息(IM的消息)在增加一个Contact(联系人)后要向该联系人发送Subscribe消息,该联系人收到该消息后可以认证发送者后作出不同响应.在删除一个Contact(联系人)后要向该联系人发送Unsubscribe消息,该消息后和Subscribe基本相同,expiresHeader为0或空的是Unsubscribe消息,有大于0数据的是Subscribe消息.这两个消息和其他SIP消息一样都靠SIPProxy转送.如果消息的接受一方没有Register(在线),SIPProxy会代理没有在线一方响应.在用户SignIn(发送REGISTER消息)后会自动向所有BUDDYLIST中的用户(联系人)发送SUBSCRIBE消息.同样在用户SIGNOUT(发送UNREGISTER消息)后也应该向所有BUDDYLIST中的用户(联系人)发送UNSUBSCRIBE消息.Subscribe消息的发送和响应如下:发送者先检查看和联系人是否已经有DIALOG了,如果已经有了那么fromHeader和toHeader等参数就从DIALOG中取并用DIALOG发送消息,不然就自己产生参数(fromHeader中有新TAG数据而toHeader中没有TAG数据)并用新的TRANSACTION发送.联系人方收到该消息后,立即返回OK响应消息.随后认证发送者,如果可以接受发送者,就向presenceManager中追加或更新发送者所代表的Subscriber(包括名字,响应消息和DIALOG),并把自己状态通过Notify消息发给发送者(通过SIPPROXY);如果认证结果为不可接受,就通过Notify消息(状态为NULL)通知发送者.发送者收到响应消息后,就从消息中取得新的DIALOG并往presenceManager中追加或更新发送者所代表的Presentity(包括名字,响应消息和DIALOG).再往buddyList中追加该联系人的情报.Unsubscribe消息的发送和响应如下:消息的发送和Subscribe消息的发送一样只是expiresHeader为0.联系人方收到该消息后,就检查DIALOG情报,如果消息发自以前发送过Subscribe消息的用户(有DIALOG),就返回OK响应,并向发送方发送状态为NULL的NODIFY消息;如果消息发自以前没有发送过Subscribe消息的用户(没有DIALOG),就返回CALL_OR_TRANSACTION_DOES_NOT_EXIST响应.发送者收到响应消息后,不做任何处理.

阅读全文(28201) | 回复(12) | 编辑 | 精华

回复:JAIN SIP instantmessaging学习
CNSUN(游客)发表评论于2006/6/27 9:41:51

您好,你有没有关于sip即时消息的源码阿,在有我想做一点关于sip即时消息的东西,我怎么学习呢,我就想用JAIN-SIP来做,谢谢 以下为blog主人的回复: MySIP从学习的角度来看是不错的.  http://blogger.org.cn/blog/more.asp?name=zhoujianjun&id=12495

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除

回复:JAIN SIP instantmessaging学习
happy懒猫(游客)发表评论于2006/5/12 0:42:12

thanks!
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除

» 1 2 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)

站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.266 second(s), page refreshed 144767840 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号