zoukankan      html  css  js  c++  java
  • 解决openfire中发送某些特殊字符会断开xmpp连接的问题

    在openfire中,如果发送某些特殊的字符(例如一些表情符合),会断开xmpp的连接,经查,是由以下的代码问题引起的:

    srcjavaorgjivesoftwareopenfire etMXParser.java


        protected char more() throws IOException, XmlPullParserException {
        	final char codePoint  = super.more(); // note - this does NOT return a codepoint now, but simply a (single byte) character!
    		if ((codePoint == 0x0) ||  // 0x0 is not allowed, but flash clients insist on sending this as the very first character of a stream. We should stop allowing this codepoint after the first byte has been parsed.
    				(codePoint == 0x9) ||          				     
    				(codePoint == 0xA) ||
    				(codePoint == 0xD) ||
    				((codePoint >= 0x20) && (codePoint <= 0xD7FF)) ||
    				((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) ||
    				((codePoint >= 0x10000) && (codePoint <= 0x10FFFF))) {
    			return codePoint;
    		}
    		
    		throw new XmlPullParserException("Illegal XML character: " + Integer.parseInt(codePoint+"", 16));
        }

    由于在这里把特殊的字符当成了一个异常,所以openfire会断开连接。


    解决方法:

    把代码修改为如下:

        @Override
        protected char more() throws IOException, XmlPullParserException {
        	final char codePoint  = super.more(); // note - this does NOT return a codepoint now, but simply a (single byte) character!
    		if ((codePoint == 0x0) ||  // 0x0 is not allowed, but flash clients insist on sending this as the very first character of a stream. We should stop allowing this codepoint after the first byte has been parsed.
    				(codePoint == 0x9) ||          				     
    				(codePoint == 0xA) ||
    				(codePoint == 0xD) ||		
    				//fix some emotion
    				((codePoint >= 0x20) && (codePoint <= 0xFFFD)) ||				
    				((codePoint >= 0x10000) && (codePoint <= 0x10FFFF))) {
    			return codePoint;
    		}
    		
    		throw new XmlPullParserException("Illegal XML character: " + Integer.parseInt(codePoint+"", 16));
        }




    [文章作者]曾健生

    [作者邮箱]h6k65@126.com

    [作者QQ]190678908

    [新浪微博] @newjueqi

    [博客]http://blog.csdn.net/newjueqi

              http://blog.sina.com.cn/h6k65


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    systemd 介绍
    Goland读取配置文件--viper包
    Goland日志记录
    进程查询端口占用
    Python zip() 函数
    Jenkins权限管理(角色权限)
    Django ORM查询总结
    如何查看windows计算机重启记录
    Django ORM迁移
    Django中文乱码解决
  • 原文地址:https://www.cnblogs.com/dingxiaoyue/p/4926832.html
Copyright © 2011-2022 走看看