mjsip下的401和407认证问题

 前久在用mjsip开发sip客户端的时候遇到401和407问题被卡了几天,所以在这做个记录。401我的解决是在注册失败并收到401错误时,把服务器返回的信息重新组装一次,再请求一次,部分代码如下:
Java代码 复制代码  收藏代码
  1. if (code==401) {   
  2.  Message req=transaction.getRequestMessage();   
  3.  req.setCSeqHeader(req.getCSeqHeader().incSequenceNumber());   
  4.  WwwAuthenticateHeader wah=resp.getWwwAuthenticateHeader();   
  5.  String qop_options=wah.getQopOptionsParam();   
  6.  printLog("DEBUG: qop-options: "+qop_options,LogLevel.MEDIUM);   
  7.  qop=(qop_options!=null)? "auth" : null;   
  8.  AuthorizationHeader ah=(new DigestAuthentication(SipMethods.REGISTER,req.getRequestLine().getAddress().toString(),wah,qop,null,username,passwd)).getAuthorizationHeader();   
  9.  req.setAuthorizationHeader(ah);   
  10.  TransactionClient t=new TransactionClient(sip_provider,req,this);   
  11.  t.request();   
  12.  }  
            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信息,代码如下:

Java代码 复制代码  收藏代码
  1. if(code==407){   
  2.      Message ack = MessageFactory.createRequest(sip_provider, SipMethods.ACK, to, from, null);   
  3.      ack.setCallIdHeader(req.getCallIdHeader());   
  4.      TransactionClient t=new TransactionClient(sip_provider,ack,this);    
  5.        t.request();   
  6. }   
  7. if ((code==407)){   
  8.        req.setCSeqHeader(req.getCSeqHeader().incSequenceNumber());   
  9.        WwwAuthenticateHeader wah;   
  10.        wah=msg.getProxyAuthenticateHeader();   
  11.        String qop_options=wah.getQopOptionsParam();   
  12.        qop=(qop_options!=null)? "auth" : null;   
  13.        RequestLine rl=req.getRequestLine();   
  14.        DigestAuthentication digest=new DigestAuthentication(rl.getMethod(),rl.getAddress().toString(),wah,qop,null,username,password);   
  15.        AuthorizationHeader ah;   
  16.        ah=digest.getProxyAuthorizationHeader();   
  17.        req.setAuthorizationHeader(ah);   
  18.        transactions.remove(tc.getTransactionId());   
  19.        tc=new TransactionClient(sip_provider,req,this);   
  20.        transactions.put(tc.getTransactionId(),tc);   
  21.        tc.request();   
  22. }  
            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
    评论
基于java语言的SIP实现。结构清晰。 mjsip_1.6 .........\changes.txt .........\classes .........\lib .........\...\COPYRIGHT.txt .........\...\license.txt .........\...\server.jar .........\...\sip.jar .........\...\ua.jar .........\make-HOW-TO.txt .........\Makefile .........\makefile-config .........\media .........\.....\local .........\.....\.....\media .........\.....\.....\.....\icon.gif .........\.....\.....\ua .........\.....\.....\..\call.gif .........\.....\.....\..\hangup.gif .........\.....\.....\..\off.wav .........\.....\.....\..\on.wav .........\.....\.....\..\ring.wav .........\mjsip.cfg.txt .........\README.txt .........\src .........\...\COPYRIGHT.txt .........\...\license.txt .........\...\local .........\...\.....\media .........\...\.....\.....\AudioClipPlayer.java .........\...\.....\.....\AudioClipPlayerListener.java .........\...\.....\.....\AudioInput.java .........\...\.....\.....\AudioOutput.java .........\...\.....\.....\AudioOutput.java.saved .........\...\.....\.....\AudioOutputStream.java .........\...\.....\.....\AudioReceiver.java .........\...\.....\.....\AudioSender.java .........\...\.....\.....\ExtendedPipedInputStream.java .........\...\.....\.....\ExtendedPipedOutputStream.java .........\...\.....\.....\G711.java .........\...\.....\.....\JMediaReceiver.java .........\...\.....\.....\JMediaReceiverListener.java .........\...\.....\.....\JMediaSender.java .........\...\.....\.....\JVisualReceiver.java .........\...\.....\.....\Mixer.java .........\...\.....\.....\MixerLine.java .........\...\.....\.....\RtpStreamReceiver.java .........\...\.....\.....\RtpStreamSender.java .........\...\.....\.....\RtpStreamTranslator.java .........\...\.....\.....\SplitterLine.java .........\...\.....\.....\ToneInputStream.java .........\...\.....\.....\UdpStreamReceiver.java .........\...\.....\.....\UdpStreamSender.java .........\...\.....\net .........\...\.....\...\KeepAliveSip.java .........\...\.....\...\KeepAliveUdp.java .........\...\.....\...\RtpFlow.java .........\...\.....\...\RtpInputFlow.java .........\...\.....\...\RtpOutputFlow.java .........\...\.....\...\RtpPacket.java .........\...\.....\...\RtpSocket.java .........\...\.....\...\UdpMultiRelay.java .........\...\.....\...\UdpRelay.java .........\...\.....\...\UdpRelayListener.java .........\...\.....\server .........\...\.....\......\AuthenticationServer.java .........\...\.....\......\AuthenticationServerImpl.java .........\...\.....\......\AuthenticationService.java .........\...\.....\......\AuthenticationServiceImpl.java .........\...\.....\......\CallLogger.java .........\...\.....\......\CallLoggerImpl.java .........\...\.....\......\DomainRoutingRule.java .........\...\.....\......\LocationService.java .........\...\.....\......\LocationServiceImpl.java .........\...\.....\......\PrefixRoutingRule.java .........\...\.....\......\Proxy.java .........\...\.....\......\Proxy.java.saved .........\...\.....\......\Redirect.java .........\...\.....\......\Registrar.java .........\...\.....\......\Repository.java .........\...\.....\......\RoutingRule.java .........\...\.....\......\ServerEngine.java .........\...\.....\......\ServerProfile.java .........\...\.....\......\StatefulProxy.java .........\...\.....\......\StatefulProxyState.java .........\...\.....\ua .........\...\.....\..\CommandLineMA.java .........\...\.....\..\CommandLinePA.java .........\...\.....\..\CommandLineUA.java .........\...\.....\..\GraphicalUA.java

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值