LINUX.ORG.RU

Perl + jabber = хрень или дрякозяблы..


0

1

Добрейший денек, славные нынче погоды стоят, не правда ли?..

Ну а теперь к делу. Второй день мучаюсь сильными болями - не могу понять, то ли perl не едет, то ли jabber..

Суть задачи - скрипт отсылающий сообщения по джаберу. В качестве джаббер-сервера - openfire. Вроде просто, да не тут то было. Русский текст - будь он неладен.

Испробовал все что нашел - Net::Jabber, Net::XMPP, Jabber::SimpleSend, чёто еще уже не помню.. С инглишем проблем нет, с русским тоже пока не большой текст (т.е. тупо «Проверка», «Прием. Ау.. Аллё.» - все работает на ура), но стоит дать текст поболее так в ответ тишина - и ошибок нет (на клиенте) и сообщения нет (у получателя).

Про UTF8 и Perl знаю, и в курсе о внутреннем представлении и прочее.. Все вокруг юникодное, use utf-8 и прочее все в норме.

Единственное, что я надыбал, это когда длинный русский текст уходит, в warn.log джаббер сервера выплевывается вот такая дрянь

2011.08.29 14:20:14 Closing session due to exception: (SOCKET, R: /192.168.1.2:33402, L: /192.168.1.23:5222, S: 0.0.0.0/0.0.0.0:5222)
org.apache.mina.filter.codec.ProtocolDecoderException: java.nio.charset.MalformedInputException: Input length = 1 (Hexdump: 3C 6D 65 73 73 61 67 65 20 74 6F 3D 27 73 68 65 76 5F 61 79 40 73 77 69 66 74 2E 67 65 6F 73 65 69 73 27 3E 3C 62 6F 64 79 3E D0 9D D0 BE D0 B2 D1 8B D0 B9 20 D0 BA D0 BE D0 BC D0 BC D0 B5 D0 BD D1 82 D0 B0 D1 80 D0 B8 D0 B9 20 D0 B4 D0 BE D0 B1 D0 B0 D0 B2 D0 BB D0 B5 D0 BD 20 D0 BA 20 D0 B7 D0 B0 D0 B4 D0 B0 D1 87 D0 B5 20 D0 97 D0 B0 D0 B4 D0 B0 D1 87 D0 B0 3A 20 D0 93 D0 B0 D0 B7 D0 BF D1 80 D0 BE D0 BD D0 B5 D1 84 D1 82 D1 8C 2D D0 9D D0 A2 D0 A6 2C 20 D0 BF D0 B5 D1 80 D0 B5 D1 83 D1 81 D1 82 D0 B0 D0 BD D0 BE D0 B2 D0 BA D0 B0 20 45 43 48 4F 53 20 D0 94 D0 BE D0 B1 D0 B0 D0 B2 D0 B8 D0 BB 3A 20 D0 98 D0 B2 D0 B0 D0 BD 20 D0 98 D0 B2 D0 B0 D0 BD D0 BE D0 B2 20 D0 9F D1 80 D0 B8 D0 BE D1 80 D0 B8 D1 82 D0 B5 D1 82 3A 20 D0 9D D0 BE D1 80 D0 BC D0 B0 D0)
        at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:170)
        at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:299)
        at org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilterChain.java:53)
        at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:648)
        at org.apache.mina.filter.executor.ExecutorFilter.processEvent(ExecutorFilter.java:239)
        at org.apache.mina.filter.executor.ExecutorFilter$ProcessEventsRunnable.run(ExecutorFilter.java:283)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.nio.charset.MalformedInputException: Input length = 1
        at java.nio.charset.CoderResult.throwException(Unknown Source)
        at java.nio.charset.CharsetDecoder.decode(Unknown Source)
        at org.jivesoftware.openfire.nio.XMLLightweightParser.read(XMLLightweightParser.java:183)
        at org.jivesoftware.openfire.nio.XMPPDecoder.doDecode(XMPPDecoder.java:41)
        at org.apache.mina.filter.codec.CumulativeProtocolDecoder.decode(CumulativeProtocolDecoder.java:133)
        at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:163)
        ... 9 more
2011.08.29 14:20:14 Closing session due to exception: (SOCKET, R: /192.168.1.2:33402, L: /192.168.1.23:5222, S: 0.0.0.0/0.0.0.0:5222)
org.apache.mina.filter.codec.ProtocolDecoderException: java.nio.charset.MalformedInputException: Input length = 1 (Hexdump: BB D1 8C D0 BD D1 8B D0 B9 20 D0 92 D1 8B D0 BF D0 BE D0 BB D0 BD D0 B5 D0 BD D0 BE 3A 20 35 36 25 20 D0 9C D0 B5 D0 BD D0 B5 D0 B4 D0 B6 D0 B5 D1 80 3A 20 49 76 61 6E 20 49 76 61 6E 6F 76 20 D0 9F D1 80 D0 BE D0 B5 D0 BA D1 82 3A 20 D0 A1 D0 BE D0 BF D1 80 D0 BE D0 B2 D0 BE D0 B6 D0 B4 D0 B5 D0 BD D0 B8 D0 B5 20 50 61 72 61 64 69 67 6D 20 32 30 3C 2F 62 6F 64 79 3E 3C 73 75 62 6A 65 63 74 3E 50 69 65 20 41 64 76 69 63 65 3C 2F 73 75 62 6A 65 63 74 3E 3C 2F 6D 65 73 73 61 67 65 3E)
        at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:170)
        at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:299)
        at org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilterChain.java:53)
        at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:648)
        at org.apache.mina.filter.executor.ExecutorFilter.processEvent(ExecutorFilter.java:239)
        at org.apache.mina.filter.executor.ExecutorFilter$ProcessEventsRunnable.run(ExecutorFilter.java:283)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.nio.charset.MalformedInputException: Input length = 1
        at java.nio.charset.CoderResult.throwException(Unknown Source)
        at java.nio.charset.CharsetDecoder.decode(Unknown Source)
        at org.jivesoftware.openfire.nio.XMLLightweightParser.read(XMLLightweightParser.java:183)
        at org.jivesoftware.openfire.nio.XMPPDecoder.doDecode(XMPPDecoder.java:41)
        at org.apache.mina.filter.codec.CumulativeProtocolDecoder.decode(CumulativeProtocolDecoder.java:133)
        at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:163)
        ... 9 more

Как я понимаю, чтото в кодировке не то.. Это породил простой код

use strict;
use warnings;
use Jabber::SimpleSend qw(send_jabber_message);
use utf8;

my $txt=qq~Новый комментарий добавлен к задаче Задача: Газпронефть-НТЦ, переустановка ECHOS Добавил: Иван Иванов Приоритет: Нормальный Выполнено: 56% Менедер: Ivan Ivanov Проект: Сопровождение Paradigm 20~;

send_jabber_message
        (
                {
                       user     => 'otkogo@swift',
                       password => 'password',
                       target   => 'kuda@swift',
                       subject  => 'Pie Advice',
                       message  => $txt
                }
        );

С другими модулями ситуация точно такая же. Неуж сервер чудит? Хотя опенфаер стоит не первый год (сейчас последняя версия) - нареканий никогда не было



Последнее исправление: x09 (всего исправлений: 2)

Ответ на: комментарий от DELIRIUM

В том и дело, что с обычными клиентами все ок..

x09
() автор топика
Ответ на: комментарий от DELIRIUM

попробовал sendxmpp.. Выяснил одну странную вещь.. сообщения длинее 214 символов опенфаер игнорирует..)))) хотя если пользоваться обычными клиентами то все ок..

Я нашел недокументированный твиттер-модуль? ))))

x09
() автор топика
Ответ на: комментарий от bass

А у меня везде))) Правда я сам столкнулся лишь с самопрограммными решениями, а те два юзера что жаловались на невозможность отправить длинный текст - были посланы т.к. кто бы поверил)))))

x09
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.