mjsip下的401和407认证问题
来源:互联网 发布:表情包大战知乎 编辑:程序博客网 时间:2024/06/12 01:36
前久在用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();
- }
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();
- }
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认证问题
- form认证和windows认证间切换的问题
- openWRT下的mentohust的认证乱码的问题
- Linux下sendmail的smtp认证的问题及其解决方案
- C#下调用WebService的权限认证问题
- C#下调用WebService的权限认证问题
- Centos下本地连接postgresql时出现认证错误的问题
- hadoop在Kerberos认证模式下的用户切换问题
- windows下samba用户认证的缓存问题
- cdh下kerberos认证问题
- Linux下SSH2认证模式的配置和使用
- HttpWebRequest提交Form和上传文件的认证问题
- 身份认证部分遇到的问题和解决方案
- HTTP的基本认证和摘要认证
- SSL的单向认证和双向认证
- SSL的单向认证和双向认证
- Javacard的内部认证和外部认证
- Deepin下的有线认证
- WebKit内核源码分析(一)
- Joomla SEO完美解决方案
- Oracle诊断工具-RDA
- 操作gridview,选中行时改变背景色且checkbox被选中,隔行变色,全选变色
- HTTP 头部解释
- mjsip下的401和407认证问题
- “云”驱动未来:福特发布概念车Evos
- Lazy loading of images in Listview
- Safe3 WEB应用防火墙 linux硬件版
- handler 中 obtainmessage和new message有什么区别
- ANDROID例子程序(ApiDemo)简单分类整理
- FQDN是什么?DNS又是什么?NNTP又是什么
- ext js 保存功能
- ZooKeeper中的写操作细节(一)