解决openfire中发送某些特殊字符会断开xmpp连接的问题

2023-05-16

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

src\java\org\jivesoftware\openfire\net\MXParser.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


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解决openfire中发送某些特殊字符会断开xmpp连接的问题 的相关文章

  • Openfire服务器,多个连接,route.all-resources不起作用

    We use http bind我们的聊天应用程序使用 BOSH 和 Openfire 3 8 2 作为后端 Strope 库 JS 作为前端 每个用户通过连接获得指定的唯一资源 这意味着用户可以同时登录不同的设备 浏览器 多个连接 例如
  • 使用 EC2(Amazon Web Services)自动 Ejabberd 集群[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 Using Ejabberd http www process one net en ejabberd in EC2 http aws amazon
  • XMPP 带有支持 X-FACEBOOK-PLATFORM 的 Java Asmack 库

    我正在尝试使用 Smack 库在 Android 上进行 Facebook 聊天 我读过Chat API http developers facebook com docs chat 来自 Facebook 但我不明白如何使用这个库向 Fa
  • Whatsapp 或 telegram 等应用程序如何监听 Android 上的来电/消息事件?

    我构建了一个 VoIP 呼叫应用程序 它与服务器保持持久连接以监听任何来电 我实现了一个后台服务来做到这一点 但自从 Oreo 以来 由于引入了后台执行限制 https developer android com about version
  • 使用 iOS Openfire 和 Robbie Hanson 库加入具有所有者权限的现有 XMPP MUC Room

    我正在使用以下代码加入现有的 MUC 房间 XMPPRoomMemoryStorage roomStorage XMPPRoomMemoryStorage alloc init XMPPJID roomJID XMPPJID jidWith
  • 如何断开 XMPPPY 客户端对象的连接

    使用 XMPPPY 连接到 XMPP 服务器非常简单 from xmpp client import Client as XMPPClient self xmppClient XMPPClient jabber foo com if not
  • 无法与 aSmack 4.0.2 建立新连接

    我正在学习 Android 编程 这几天我一直在努力解决这个问题 我正在编写一个应该连接到 XMPP 服务器的 Android 应用程序 我总是遇到同样的错误 并且真的不知道我做错了什么 我尝试过通过谷歌找到的示例代码 但也无法与它们建立连
  • ejabberd MAM 不适用于 MUC

    xep 0313 适用于名册 但不适用于房间聊天 我可以获取名册的存档消息 但无法获取房间的存档消息 为什么
  • 通过xmpp在android中传输文件?

    我只是想通过 xmpp 传输文件 我正在使用 asmack lib 我在下面遇到异常 E AndroidRuntime 332 FATAL EXCEPTION main E AndroidRuntime 332 java lang Null
  • SSL 握手挂起

    我在论坛上看到过这个问题 但找不到任何合适的解决方案 此外 所有这些问题都缺少一些信息 所以我想把我学到的所有东西放在这里 连接点 我正在使用 SSL TLSopenfire具有2路身份验证 获得自签名通配符证书 这意味着我在客户端和服务器
  • OpenFire - 使用 PubSub 的永久群聊

    首先从这个问题 Smack openfire 如何让用户永久留在群聊室 https stackoverflow com questions 19653877 asmack openfire how do i keep a user perm
  • 为什么我的 wss://(基于 SSL/TLS 的 WebSockets)连接立即断开而不给出任何错误?

    将此发布给遇到同样问题的其他人 我当时正在开发一个浏览器客户端 它使用 stanza io 连接到 XMPP 服务器 在我的例子中是 Prosody 我默认使用 wss 连接 在开发过程中的某个时刻 我的客户端根本无法连接 它会立即无提示地
  • Android GCM:了解 XMPP

    我正在尝试使用应用程序在我的 GCM 中实现 XMPP 协议 但即使经过广泛搜索 我也不理解其背后的概念 另外 也许我并不真的需要 XMPP 来完成我想用我的应用程序做的事情 但我喜欢学习东西 让我们以 HTTP 为例 我的应用程序将 he
  • XMPP 服务器的 libxml2 与 expat

    我正在尝试从头开始创建一个 XMPP 库 以及后来的服务器 Go http golang org 尽管语言本身无关紧要 作为学习 XMPP 协议和服务器软件开发一般知识的一种手段 正如许多人所知 XMPP 是基于 XML 的消息传递协议 它
  • 如何在 XMPP 中实现“上次查看时间”功能(如 Whatsapp)?

    我正在开发一个聊天应用程序 并希望添加 上次查看时间 功能 我正在尝试使用存在节来实现它 但遇到一个问题 请检查下面的链接 当用户 B 也不可用时 未获取用户 A 的不可用状态 https stackoverflow com questio
  • 如何使用 Smack 通过 XMPP 设置/获取配置文件数据

    我正在 Android 上使用 Smack 库开发 XMPP 客户端 花名册 消息 状态等内容运行得很好 然而 我没有找到一种方法来存储额外的个人资料信息 用户图片 狗的名字 我从谷歌搜索中看到的唯一方法是使用 VCard 但它根本不起作用
  • ejabberd 支持离线文件传输吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在开发 XMPP 客户端 使用 ejabberd 作为服务器 我的问题是如何支持离线文件传输 我只想对图像文件进行离线文件传输 例如 即使约翰离线
  • XMPP会议室邀请函

    在我的聊天应用程序中 我想实现群聊功能 同样 我想创建房间并向我的朋友发送加入房间的邀请 这是我加入并邀请朋友进入房间的代码 创建房间 Create Room btn CreateRoom Button findViewById R id
  • Openfire 在用户离线时发送推送通知

    我使用 openfire 3 9 3 服务器和 Android 和 IOS 作为客户端 我想在收件人用户离线时通过推送通知向两个客户端发送消息 当发送推送时 发送者应该收到消息收据 为此 我尝试过 制作拦截器 在此 我没有收到任何可以跟踪的
  • 在android中使用smack 4.1获取在线用户(名册条目)

    我一直在尝试使用 android 中的 smack 4 1 beta 2 获取名册条目 https github com igniterealtime Smack wiki Smack 4 1 Readme and UpgradeGuide

随机推荐

  • 《自己动手写Docker》书摘之一: Linux Namespace

    Linux Namespace 介绍 我们经常听到说Docker 是一个使用了Linux Namespace 和 Cgroups 的虚拟化工具 xff0c 但是什么是Linux Namespace 它在Docker内是怎么被使用的 xff0
  • app后端设计(1)--api(2014.01.31更新)

    1 Restful设计原则 Restful风格 xff1a RESTfu设计原则 它被Roy Felding提出 xff08 在他的 基于网络的软件架构 论文中第五章 xff09 而REST的核心原则是将你的API拆分为逻辑上的资源 这些资
  • [How To] Remove deleted records from Main Index in Sphinx

    http www sanisoft com blog 2013 06 28 remove deleted records in sphinx The problem You probably landed here searching fo
  • 左右值无限分类实现算法[转]

    http www jcwcn com archiver tid 227253 html 一 引言 产品分类 xff0c 多级的树状结构的论坛 xff0c 邮件列表等许多地方我们都会遇到这样的问题 xff1a 如何存储多级结构的数据 xff1
  • 给xmpphp添加了几个常用的方法

    给xmpphp添加给了以下的常用方法 xff1a registerNewUser 注册一个新用户 addRosterContact 发送添加好友的请求 accept friend request 接受好友请求 deleteRosterCon
  • app后端设计(2)--xmpp的使用(2014.01.14更新)

    在app中有时候是需要添加聊天服务 xff0c 在这里谈谈曾经开发聊天服务的经验 xff1a xff08 1 xff09 聊天服务端选的openfire xff0c 这是一个基于xmpp协议的聊天服务器 xff08 XMPP是一种基于XML
  • Nginx Location配置总结

    http blog sina com cn s blog 97688f8e0100zws5 html 语法规则 xff1a location 61 uri 61 开头表示精确匹配 开头表示uri以某个常规字符串开头 xff0c 理解为匹配
  • Nginx 下配置SSL证书的方法

    http www jb51 net article 24629 htm 默认 Nginx 是没有 ssl 模块的 xff0c 而我的 VPS 默认装的是 Nginx 0 7 63 xff0c 顺带把 Nginx 升级到 0 7 64 并且
  • 使用nginx搭建https服务器

    http www cnblogs com tintin1926 archive 2012 07 12 2587311 html 最近在研究nginx xff0c 整好遇到一个需求就是希望服务器与客户端之间传输内容是加密的 xff0c 防止中
  • Nginx与Lua

    http www cnblogs com xd502djj archive 2012 11 20 2779598 html 今天安装lua试试 xff0c 这个从开始装的 xff0c 发现一篇文字 xff0c 字数虽少 xff0c 但是却讲
  • MYSQL的空间查询

    http blog sina com cn s blog a48af8c001018q1p html 本文将向各位介绍如何使用MySql5 x中的空间数据库 xff0c 并展示一下它高效的性能 xff08 前提是正确使用 xff09 本文适
  • APM飞控使用动捕等外部定位

    本文初次写于2023 03 03 xff0c pixhawk飞控应该是刷写了ArduPilot 4 1以上的版本 机载计算机通过WIFI和vrpn ros client获取动捕系统 xff08 vicon或者nokov xff09 的无人机
  • APNS导致消息丢失和发送效率原因

    http blog csdn net tlq1988 article details 9612237 首先说明一下 xff0c 本文只是介绍一些容易被开发者忽视 xff0c 而导致性能低下问题 并不是介绍如何向苹果设备成功发送一条消息 xf
  • 苹果通知推送服务(APNS)一些关键特性摘要

    http ramosli iteye com blog 1940843 前段时间 xff0c 仔细研究了APNS的文档 xff0c 把一些关键的地方记录了下来 xff0c 弄懂这些对于理解APNS的规则 xff0c 至关重要 1 If AP
  • 陌陌架构分享 – Apple Push Notification Service

    http blog latermoon com p 61 878 先描述下基本概念 xff0c 标准的iPhone应用是没有后台运行的 xff0c 要实现实时推送消息到手机 xff0c 需要借助Apple提供的APNS服务 iPhone会和
  • CentOS安装JAVA

    http hermosa young iteye com blog 1798026 每次都要搜索一下太麻烦了 xff0c 留个底 xff0c 方便以后查询 一般情况下 xff0c 我们都要将linux自带的OPENJDK卸载掉 xff0c
  • openfire推送离线聊天信息的插件

    插件说明 在手机的聊天应用中 xff0c 经常出现的一个需求就是把用户的离线消息通过推送系统推送到用户的手机上 xff0c 为了实现这个功能 xff0c 本人就开发了本插件 xff0c 这个openfire 插件是拦截了发给openfire
  • APNs 推送原理及问题

    http bbs csdn net topics 390461996 在 iOS 平台上 xff0c 大部分应用是不允许在后台运行并连接网络的 在应用没有被运行的时候 xff0c 只能通过 Apple Push Notification S
  • app后端设计(3)--短信,邮件,推送服务(2014.12.05更新)

    在app的后端设计中 xff0c 免不了消息的推送 xff0c 短信 xff0c 邮件等服务 xff0c 下面就个人的开发经验谈谈这方面 xff08 1 xff09 最重要的是 xff0c 各种推送一定要放在队列系统中处理 xff0c 不然
  • 解决openfire中发送某些特殊字符会断开xmpp连接的问题

    在openfire中 xff0c 如果发送某些特殊的字符 xff08 例如一些表情符合 xff09 xff0c 会断开xmpp的连接 xff0c 经查 xff0c 是由以下的代码问题引起的 xff1a src java org jiveso