mjsip下的401和407认证问题

      前久在用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();
            }
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值