mjsip下的401和407认证问题

来源:互联网 发布:表情包大战知乎 编辑:程序博客网 时间:2024/06/12 01:36
 前久在用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.  }  

 同样的方式解决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. }  
 
原创粉丝点击