`
Blackbaby
  • 浏览: 185778 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

mjsip下的401和407认证问题

    博客分类:
  • sip
阅读更多

      前久在用mjsip开发sip客户端的时候遇到401和407问题被卡了几天,所以在这做个记录。401我的解决是在注册失败并收到401错误时,把服务器返回的信息重新组装一次,再请求一次,部分代码如下:

            if (code==401) {
	            Message req=transaction.getRequestMessage();
	            req.setCSeqHeader(req.getCSeqHeader().incSequenceNumber());
	            WwwAuthenticateHeader wah=resp.getWwwAuthenticateHeader();
	            String qop_options=wah.getQopOptionsParam();
	            printLog("DEBUG: qop-options: "+qop_options,LogLevel.MEDIUM);
	            qop=(qop_options!=null)? "auth" : null;
	            AuthorizationHeader ah=(new DigestAuthentication(SipMethods.REGISTER,req.getRequestLine().getAddress().toString(),wah,qop,null,username,passwd)).getAuthorizationHeader();
	            req.setAuthorizationHeader(ah);
	            TransactionClient t=new TransactionClient(sip_provider,req,this);
	            t.request();
             }

 同样的方式解决407问题,所不同的是在发出invite后要回应一个ack信息,代码如下:

            if(code==407){
    	            Message ack = MessageFactory.createRequest(sip_provider, SipMethods.ACK, to, from, null);
    	            ack.setCallIdHeader(req.getCallIdHeader());
    	            TransactionClient t=new TransactionClient(sip_provider,ack,this); 
                   t.request();
            }
            if ((code==407)){
                   req.setCSeqHeader(req.getCSeqHeader().incSequenceNumber());
                   WwwAuthenticateHeader wah;
                   wah=msg.getProxyAuthenticateHeader();
                   String qop_options=wah.getQopOptionsParam();
                   qop=(qop_options!=null)? "auth" : null;
                   RequestLine rl=req.getRequestLine();
                   DigestAuthentication digest=new DigestAuthentication(rl.getMethod(),rl.getAddress().toString(),wah,qop,null,username,password);
                   AuthorizationHeader ah;
                   ah=digest.getProxyAuthorizationHeader();
                   req.setAuthorizationHeader(ah);
                   transactions.remove(tc.getTransactionId());
                   tc=new TransactionClient(sip_provider,req,this);
                   transactions.put(tc.getTransactionId(),tc);
                   tc.request();
            }
 

 

分享到:
评论

相关推荐

    再谈mjsip的401和407问题

    本文将深入探讨在使用MJSIP时可能会遇到的401和407错误,以及如何通过源码理解和解决这些问题。 401 Unauthorized和407 Proxy Authentication Required是HTTP状态代码,它们在SIP协议中也有类似的应用。在SIP通信中...

    mjsip的介绍.pdf (官方文档)

    4. **社区支持**:mjsip拥有活跃的开发者社区,能够及时获取技术支持和解决问题。 ### 结论 mjsip作为一款优秀的SIP库,不仅提供了标准的SIP实现,还通过其高级接口和参考实现,极大地简化了SIP应用的开发过程。...

    MjSip开源VoIP程序分析文档

    - **第五部分**:用户认证和行为设置。 - `from_url`:SIP协议中的发送者字段,格式为`sip:username@url`。 - `username`:由VoIP服务提供商提供的用户名。 - `passwd`:由VoIP服务提供商提供的用户密码。 - `...

    mjsip学习文档

    MjSip是一个Java语言实现的SIP(Session Initiation Protocol)协议栈,适用于初学者进行SIP相关应用和服务的开发。它遵循RFC3261标准,提供了一个灵活且层次化的架构,允许开发者轻松创建SIP基础应用。MjSip的核心...

    p2psip_base on mjsip

    本文将深入探讨一个基于P2P(Peer-to-Peer)技术和SIP(Session Initiation Protocol)协议的Java通信软件项目——"p2psip_base on mjsip"。这个项目的核心在于利用P2P的分布式特性与SIP的通信规范,构建了一个高效...

    mjsip_1.8.zip

    7. **部署与调试**:部署mjsip涉及配置服务器、设置用户认证、网络拓扑优化等多个环节。同时,开发者需要学会使用日志和调试工具来排查问题,确保系统的稳定运行。 8. **社区支持与持续发展**:作为开源项目,mjsip...

    mjsip2me架包及源码

    【mjsip2me架包及源码】是一款专为J2ME平台设计的SIP(Session Initiation Protocol)客户端开发资源,包含了完整的库文件和源代码,方便开发者进行通信应用的构建。SIP是一种互联网协议,用于控制多媒体通信会话,...

    sipdroid(Android SIP client)JAVA源码

    * Mjsip contributing the original stack, * initial port to Android emulator and development of a Test SIP Client by Hughes Systique Corporation. i-p-tel GmbH, the founder of this project, ported ...

    MJServer.zip

    这个压缩包的核心内容是关于如何在iOS应用开发中构建网络服务,以便实现数据的交换和通信。 【描述】"亲测可用"表明这些代码已经被验证过,能够正常工作,这为开发者提供了信心,他们可以参考和学习这些代码来搭建...

    基于SIP和P2P的视频传输技术的研究与实现

    未来的研究方向可以进一步探索如何在更大的网络规模下,提高系统的资源分配效率和响应速度,以应对日益增长的视频传输需求。 关键词:信令控制,MjSip,混合式P2P,Chord,JXTA 通过上述分析,可以看出,基于SIP和...

    基于SIP的Android视频通信终端实现.pdf

    STUN是一种网络协议,它允许位于NAT后的客户端发现其公网地址和端口,并且判断其NAT类型,从而帮助实现SIP的穿越NAT问题。 此外,针对无线视频通信的特殊需求,如质量容忍度低,高丢包率等问题,文档中提出了调节丢...

    Android Walkie-Talkie-开源

    在这个项目中,mjsip库很可能被用来处理语音通话的建立和管理,包括拨号、接听、挂断等操作。 3. **WalkieTalkie**:这是Android客户端应用程序的源代码,包含UI设计、用户交互逻辑和音频处理等部分。客户端需要...

    sip2peer:Sip2Peer的官方git存储库,Sip2Peer是基于开源SIP的API,用于在同级之间进行可靠的连接和通信

    Universtita的degli Studi di Parma DSG-分布式系统组Sip2Peer内容:-config:对等配置文件-doc:sip2peer java doc -lib:MjSIP和本地服务器-scriptPython:运行示例代码的Python脚本-src:源代码为了运行示例对等...

    mjserver sip服务器

    A MjSip-based server implementation is also available. It can be used as Registrar, Redirect, Stateless Proxy or Stateful Proxy.

    Android代码-Sipdroid

    Copyright (C) 2005 Luca Veltri - University of Parma - Italy (http://mjsip.org) This file is part of Sipdroid (http://www.sipdroid.org) Sipdroid is free software; you can redistribute it and/or

    MyJavaSIP1.7_for_Eclipse

    是MyJavaSIP1.7在eclipse中...If you are interested in all java source files of the mjsip stack (v1.7) and reference applications (mjProxy v1.7, mjSBC v1.7, and mjUA v1.7), you can download them from here

    MyJavaSip1.6

    mjsip_1.6 .........\changes.txt .........\classes .........\lib .........\...\COPYRIGHT.txt .........\...\license.txt .........\...\server.jar .........\...\sip.jar .........\...\ua....

Global site tag (gtag.js) - Google Analytics