登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: [xmpp最小实现合集]有些老版本的 spark 会不停地请求 bookmarks,即使有后面的 error 回应,虽然最新的不会这样,但是还是给个兼容性吧     [回主站]     [分站链接]
[xmpp最小实现合集]有些老版本的 spark 会不停地请求 bookmarks,即使有后面的 error 回应,虽然最新的不会这样,但是还是给个兼容性吧
clq
浏览(237) - 2018-10-04 15:35:51 发表 编辑

关键字: xmpp_doc

[2018-10-04 15:41:49 最后更新]
[xmpp最小实现合集]

            //2018.10.12 有些老版本的 spark 会不停地请求 bookmarks,即使有后面的 error 回应,虽然最新的不会这样,但是还是给个兼容性吧
            //####server返回bookmark信息
            //jabber:iq:private 下面还有很多种请求,这里是暂时只支持一个
            if ("jabber:iq:private" == xmlns && Find(sLine, "storage:bookmarks")) {
                
                //请求
                //<iq id="XO7Zs-42" type="get">
                //  <query xmlns="jabber:iq:private">
                //    <storage xmlns="storage:bookmarks"/>
                //  </query>
                //</iq>
                
                
                //回应
                //<iq type="result" id="ab4aa" to="guanfei@xumatomacbook-pro.local/Psi+">
                //<query xmlns="jabber:iq:private">
                //<storage xmlns="storage:bookmarks"/>
                //</query>
                //</iq>        


                res := "<iq type=\"result\"" +
                " id=\"" + id + "\"" + //id 一定要和原来的一样
                //" from=\"" + res_from +"\"" + //要查询的对方,这个非常的关键,不对的话 openfire/spark 会卡死
                //" to=\"t2@127.0.0.1/Spark\">" +
                " to=\"" + t_jid + "\">" +
                
                //+'<query xmlns="' + xmlns + '"/>'
                "<query xmlns=\"jabber:iq:private\">" +
                "<storage xmlns=\"storage:bookmarks\"/>" +
                "</query>" +
                
                "</iq>"
                ;

                //SendCmd(res);
                ////Exit;
                //Continue;//退出也可以,因为还没应答
                SendCmd_xmpp(r, w, res);
                
                bRead = false; //如果能读取到完整命令,那暂时还不需要再读取//这是和 delphi 版本不同的地方,一定要在每个命令成功后添加
                continue;    
            }//if iq xmlns="storage:bookmarks"



clq  2018-10-04 15:41:48 发表 编辑

缺省的错误回答如下,应该可以更精简,这里列出了所有已知的可能性,如果客户端是自己的,其实没有这个必要.

            //--------------------------------------------------
            //其他的 iq 回应错误就可以了
            //http://wiki.jabbercn.org/RFC3920#IQ.E8.AF.AD.E4.B9.89.E5.AD.A6
           
            //<error type='modify'>
            //<feature-not-implemented/> -- 请求的特性未被接收者或服务器实现所以不能处理;相关的错误类型应该(SHOULD)是"cancel".
            //<service-unavailable/> -- 服务器或接收者目前无法提供被请求的服务;相关错误类型应该(SHOULD)是"cancel".
           
           
            //错误 error //还是应该返回没有实现?
            //id := get_value1(sLine, 'id=', ' ');  //一定要取对
            //xmlns := get_value1(sLine, 'xmlns="', '"');  //一定要取对
            //if Trim(xmlns) = '' then
            //xmlns := get_value1(sLine, 'xmlns=''', '''');  //一定要取对           
           
            //http://iluoxuan.iteye.com/blog/1736252
            res :=
            //<iq to='jane@longbourn.lit/garden'
            //type='error'
            "<iq type=\"error\"" +
    //            " from=\"" + GetXmppHost(t_user) + "\"" +
                //" to=\"t2@127.0.0.1/Spark\"" +
                " to=\"" + t_jid + "\"" +           
            " id=\"" +id+ "\"" + //id 一定要和原来的一样
            ">" +
            ////+'<query xmlns="jabber:iq:roster"/>' //不能放这个,这个会让 spark 重连接
            //"<query xmlns=\"" + xmlns + "\"/>" + //对于某些版本的 spark 似乎一定要正确的给回这个
            "<error type=\"cancel\">" +
            //"<error code='405' type=\"cancel\">" +
           
             
   
    //        "<query xmlns=\"" + xmlns + "\"/>" + //对于某些版本的 spark 似乎一定要正确的给回这个
    //        "<error code='503' type=\"cancel\">" + //clq 2018
            "<service-unavailable xmlns=\"urn:ietf:params:xml:ns:xmpp-stanzas\"/>" +
            //xmlns 为 bookmark 时,对于 spark 来说,只能是 service-unavailable, feature-not-implemented 是不行的
    //        "<feature-not-implemented xmlns=\"urn:ietf:params:xml:ns:xmpp-stanzas\"/>" +   //xmlns 一定要有,否则 spark 不认//并且固定是这个
            //"<feature-not-implemented xmlns=\"" + xmlns + "\"/>" +  //xmlns 一定要有,否则 spark 不认//错误的时候反而不能用原来的 xmlns
            //<not-allowed xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/> //这个也没用 spark 就是会卡
            "</error>" +
            "</iq>"
            ;
           
            //http://wiki.jabbercn.org/XEP-0030
            //如果隐私和安全事项或策略阻止服务器或其他授权实体返回<item-not-found/>错误,取而代之它 应该 返回一个<service-unavailable/>错误:
            //
            //例4. 服务不可用
            //
            //<iq type='error'
            //    from='plays.shakespeare.lit'
            //    to='romeo@montague.net/orchard'
            //    id='info1'>
            //  <query xmlns='http://jabber.org/protocol/disco#info'/>
            //  <error code='503' type='cancel'>
            //    <service-unavailable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
            //  </error>
            //</iq>
           
            //SendCmd(res);

            //Exit;
            //Continue;//退出也可以,因为还没应答       
           
            SendCmd_xmpp(r, w, res);
           
            bRead = false; //如果能读取到完整命令,那暂时还不需要再读取//这是和 delphi 版本不同的地方,一定要在每个命令成功后添加
            continue;                   
       
        }//if <iq





总数:1 页次:1/1 首页 尾页  
总数:1 页次:1/1 首页 尾页  


所在合集/目录
xmpp协议最小实现合集 更多



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1