Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Подземелье Магов
  
 

Фильтр по датам

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  20:56[Войти] | [Зарегистрироваться]

Обсуждение материала
Пишем Jabber-клиент на Delphi
Полный текст материала


Другие публикации автора: Дмитрий Кузан

Цитата или краткий комментарий:

«... Описание протокола Jabber с примером реализации клиента на Delphi ...»


Важно:
  • Страница предназначена для обсуждения материала, его содержания, полезности, соответствия действительности и так далее. Смысл не в разборке, а в приближении к истине :о) и пользе для всех.
  • Любые другие сообщения или вопросы, а так же личные эмоции в адрес авторов и полемика, не относящаяся к теме обсуждаемого материала, будут удаляться без предупреждения авторов, дабы не мешать жителям нормально общаться.
  • При голосовании учитывайте уровень, на который расчитан материал. "Интересность и полезность" имеет смысл оценивать относительно того, кому именно предназначался материал.
  • Размер одного сообщений не должен превышать 5К. Если Вам нужно сказать больше, сделайте это за два раза. Или, что в данной ситуации правильнее, напишите свою статью.
Всегда легче осудить сделанное, нежели сделать самому. Поэтому, пожалуйста, соблюдайте правила Королевства и уважайте друг друга.



Добавить свое мнение.

Результаты голосования
Оценка содержания

  Содержит полезные и(или) интересные сведения
[1]1995%
 
  Ничего особенно нового и интересного
[2]15%
 
  Написано неверно (обязательно укажите почему)
[3]00%
 
Всего проголосовали: 20

Оценка стиля изложения

  Все понятно, материал читается легко
[1]857.1%
 
  Есть неясности в изложении
[2]535.7%
 
  Непонятно написано, трудно читается
[3]17.1%
 
Всего проголосовали: 14




Смотрите также материалы по темам:
[Сетевые службы и протоколы]

Комментарии жителей
Отслеживать это обсуждение

Всего сообщений: 98

07-10-2013 21:40
А можно еще раз ссылку на D2010 + NativeXML


17-01-2013 08:44
http://rghost.ru/43103472


17-01-2013 03:53
Добрый день. К сожалению файлы по последним ссылкам больше не доступны. Кто успел скачать, не могли бы Вы выложить еще раз этот файл?



29-09-2012 10:42
Спасибо!


28-09-2012 01:32
Добрый день!

Извиняюсь, за то что долго не отвечал, выкладываю версию для D2010 кому надо еще

http://zalil.ru/33796093

Сейчас к сожалению почти забросил клиента, поэтому сильно помочь ответами не смогу.

>> Удаление:
<iq from='pmavirus@jabber.ru/TJabberClient' type='set' id='339656037'>
            <query xmlns='jabber:iq:roster'>
                  <item jid='artem-soft@jabber.ru' subscription='remove'/>
                         <group>Buddies</group>
                        </item></query>
</iq>

попробуйте убрать /> в итем, получается закрытие лишнее, вы же после закрываете, т.е. <item jid='artem-soft@jabber.ru' subscription='remove'>



04-09-2012 02:02
Добавляю контакт пакетом:
>>><iq from='pmavirus@jabber.ru' type='set' id='c5528f75b2'><query xmlns='jabber:iq:roster'><item jid='artem-soft@jabber.ru' name='artem-soft@jabber.ru'><group>Buddies</group></item></query></iq>undefined
Ответ:
<iq from="pmavirus@jabber.ru" to="pmavirus@jabber.ru/TJabberClient" id="push572903524" type="set"><query xmlns="jabber:iq:roster"><item subscription="none" name="artem-soft@jabber.ru" jid="artem-soft@jabber.ru"><group>Buddies</group></item></query></iq>
Контакт добавляется.

Удаление:
<iq from='pmavirus@jabber.ru/TJabberClient' type='set' id='339656037'><query xmlns='jabber:iq:roster'><item jid='artem-soft@jabber.ru' subscription='remove'/><group>Buddies</group></item></query></iq>
Ответ:
<stream:error><xml-not-well-formed xmlns="urn:ietf:params:xml:ns:xmpp-streams"></xml-not-well-formed></stream:error>

Типа ошибка. Помогите!


11-02-2011 00:03
Добрый день

Дмитрий не могли бы вы еще раз выложить версию для Д2010, файл не доступен.
Либо можте быть кто-то из тех кто скачал выложит.


05-01-2011 03:09
to Дмитрий Кузан.
Возможна ли с Вами связь по электронной почте, icq или jabber? Есть некоторые вопросы, на которые хочется получить ответы. Ваша статья очень помогла, но возникли затруднения.
Очень жду связи.
JID: artist@jabe.info
ICQ: 222212180
e-mail: temproary-a@yandex.ru


10-11-2010 05:56
В статье сказано, что
"realm — JID-domain пользователя"
Это не совсем верно.

Чтобы узнать, что такое realm, надо читать rfc http://tools.ietf.org/html/rfc2831 . Жаббер сервер может указать какие рилмы доступны, и тогда клиент обязан выбрать один из доступных. Как правило сервер не указывает, тогда клиент имеет право выбрать любой понраившийся ему realm. Например QIP испольузет пустую строку. Pidjin подставляет имя сервера (из настроек или из SRV записи). Miranda, вероятно, ведёт себя также как QIP.

Домен, для которого происходит авторизация, указывается ещё в самой первой станзе. А вот realm в общем своём виде не имеет ни какого отношения к домену.


13-08-2010 08:07
сообщение от автора материала
О, мой мозг!!! А какому числу соответствует строчка "0.1.2.3.4.5"?

Можете переделать, будете смеятся но такое тоже возможно, функция просто была выдернута из модуля работы с MapInfo где могут попадатся такие числа в записи координат например 61.12.54 типа 61 град 12 мин 54 сек


30-07-2010 07:51

   Function IsInt(Str : String): Boolean;
   var
     Pos : Integer;
   begin
     Result := True;
     Str := Trim(Str);
     For Pos := 1 To Length(Str) do
     begin
        IF (Str[Pos] <> '0') and (Str[Pos] <> '1') and
           (Str[Pos] <> '2') and (Str[Pos] <> '3') and
           (Str[Pos] <> '4') and (Str[Pos] <> '5') and
           (Str[Pos] <> '6') and (Str[Pos] <> '7') and
           (Str[Pos] <> '8') and (Str[Pos] <> '9') and
           (Str[Pos] <> '.') Then
        Begin
           Result := False;
           Exit;
        end;
     end;
   end;



О, мой мозг!!! А какому числу соответствует строчка "0.1.2.3.4.5"?
 Arch


28-07-2010 23:37
Вот
http://slil.ru/29505314


23-07-2010 19:48
Присоединюсь к двум авторам нижу, если можно новую ссылочку компонент.


20-07-2010 04:48
Может у кого-то есть исходники, которые выкладывал автор 15-03-2010 (для D2010)? Пожалуйста, выложите на файлообменник.


23-05-2010 10:17
Дмитрий, не могли бы вы повторно выложить версию для D2010?
А то ссылки уже нерабочие...

Спасибо!


16-03-2010 23:58
сообщение от автора материала
>> Дмитрий, под d2007 новый компонент работает с заменой pwidechar на pchar, однако коннект к jabber.org до сих пор не проходит. не посмотрели еще на этот счет?

Простая замена pwidechar на pchar на D2007 действительно заставляет новый компонент работать, но помимо этого требуются еще доработки связанные с UTF8 декодированием и преобразованием. Т.к. в D2010 некоторые преобразования решались на уровне самого компилятора, то в D2007 придется делать вручную кое-где. Например после простой замены типов не работают статусы (показываются пустые) и показывается неполный JID т.к. русский ресурс теряется (пустой). Но это мелочи легко исправляются. Дело в том, что сейчас под D2007 все таки лучше использовать старый компонент. Портировать новый под D2010 обратно в старый смысла нет. Фактически новый пока идет параллельно старому и я еще пока не решил буду ли портировать свои проекты в D2010 или оставлю пока на старом компоненте.


16-03-2010 06:41
сообщение от автора материала
Для затравки может кому и пригодится
в 2009 вышла книга

XMPP The Definitive Guide
Peter Saint-Andre, Kevin Smith, and Remko Troncon

саму книгу в PDF можно скачать
тут http://rapidshare.com/files/256284607/OReilly.XMPP.The.Definitive.Guide.May.2009.eBook-BBL.rar
книга на английском, но разобратся при желании труда не составит


16-03-2010 00:57
сообщение от автора материала
>> А Delphi нужна чистая или с какими-нибудь компонентами?? Если нужны, то какие? Спасибо.
NativeXML для последнего компонента только

К сожалению для D7 нет возможности проверить, но уже

_MyFunctions.Strings.pas(399): Operator not applicable to this operand type

for Find in ArrSymbols  do
    begin
        if pos(Find, Str) <> 0 then
           Str := ReplaceSub(Str, Find, ChRepl);
    end;

в D7 не было инструкции for in - достаточно заменить на for to переписав блок и заработает





16-03-2010 00:44
сообщение от автора материала
Дмитрий, под d2007 новый компонент работает с заменой pwidechar на pchar, однако коннект к jabber.org до сих пор не проходит. не посмотрели еще на этот счет?

pwidechar - в OutputDebugString D2010 приходится приводить, в D2007 и ниже там тип действительно PChar

Насчет Jabber.org - я тут попытался qip ом зарегить JID на нем. На что получил ошибку "Соединение потеряно". Поиск в инете дал что с Jabber.org имеются проблемы у многих клиентов.
"Вот уже месяц на старейшем IM сервере XMPP, jabber.org, идет эпопея с переходом на новое программное обеспечение. Большинство наблюдателей уже согласились с тем, что новый поставщик: Isode, конкретно облажался со своим сервером M-Link, но администрация jabber.org упорно продолжает следовать своему выбору. Позади осталась куча проблем с утечками памяти, повреждением профилей пользователей при миграции и т.д. Куда печальнее тот факт, что после перехода с этим сервером перестала работать половина распространенных Jabber клиентов.
Подробнее
http://www.jabber.org/2010/02/service-update-2010-02-16/"

Так как сейчас возможности зарегистрироватся на Jabber.org нет то  увы проверить работу компонента не представляется возможным. Скорее все еще будет введено шифрование SSL принудительно, а клиент увы не поддерживает SSL. ТАк что пока даже и не знаю что сказать


15-03-2010 15:32
А Delphi нужна чистая или с какими-нибудь компонентами?? Если нужны, то какие? Спасибо.
 Tist


15-03-2010 11:24
Дмитрий, под d2007 новый компонент работает с заменой pwidechar на pchar, однако коннект к jabber.org до сих пор не проходит. не посмотрели еще на этот счет?


15-03-2010 06:42
Уважаемый Дмитрий! При попытке скомпилировать последний проект на Delphi 7, появляются те же ошибки , что и были. Я так понимаю, его тока можно запустить на D2010?
 Tist


15-03-2010 02:34
сообщение от автора материала
Ошибся с ссылкой

правильная - http://slil.ru/28796058


15-03-2010 02:34
сообщение от автора материала
Перевел компонент на D2010, заменил также XML парсер на NativeXML, т.к. старый не работает в D2010
теоретически должно работать и в D2007
новая версия тут http://zalil.ru/upload/28796058
для D2010 сделан Jabber_D2010.dpk для упрощения установки в среду





12-03-2010 05:52
Вообщем так, скачал последний проект(http://slil.ru/28740559). Там три папки, скачал все файлы в папку Demo. Затем запускаю _Test.dpr. Нажимаю Run и выдает ошибки:
[Error] _MyFunctions.Strings.pas(399): Operator not applicable to this operand type
[Error] _MyFunctions.Strings.pas(400): Expression expected but 'BEGIN' found
[Fatal Error] JabberClient.pas(26): Could not compile used unit '_MyFunctions.Strings.pas'
При попытки игнорировать эти ошибки появляются новые. Если все время игнорировать, проект все же скомпилировался, но при попытке подключится к серверу, выдает сообщение "Ошибка:Невозможно создать сокет".
Скорей всего это я что-то не так делаю!)
Заранее спасибо за помощь!! Буду Очень благодарен, если поможете решить эту проблему!


08-03-2010 08:24
сообщение от автора материала
>> Народ, а в какой Delphi лучше скомпилировать? А то у меня никак не выходит! Пользуюсь Delphi 7(( Все время какие-то ошибки. Может я че-нить не так делаю
Буду очень благодарен!

Изначально делал в D2007,
Насчет ошибок можно поподробнее


08-03-2010 08:23
сообщение от автора материала
>> Caesar

Проверю насчет Jabber.org


04-03-2010 13:32
Народ, а в какой Delphi лучше скомпилировать? А то у меня никак не выходит! Пользуюсь Delphi 7(( Все время какие-то ошибки. Может я че-нить не так делаю
Буду очень благодарен!


04-03-2010 09:12
спасибо, заметил, к серверу jabber.org компонент больше не полдключается. обмен пакетами прекращается после следующего

Отправлен пакет: размер: 86 байт(а)
<iq type='set' id='bind_2'><session xmlns='urn:ietf:params:xml:ns:xmpp-session'/></iq>

Принят пакет: размер: 49 байт(а)
<iq from="jabber.org" type="result" id="bind_2"/>



03-03-2010 23:18
сообщение от автора материала
Не проблема
http://slil.ru/28740559


03-03-2010 03:31
Дописал в компонент поддержку CRAM-MD5 и PLAIN авторизации, помимо DIGEST-MD5
т.к. некоторые Jabber -сервера не поддерживают DIGEST-MD5
если интересно могу выложить

конечно, Дмитрий, будем рады взглянуть


26-02-2010 03:35
при попытке скомпилить выдает кучу ошибок, причем большинство в Myfunction.string(( Система стоит Windows 7 64x.
Скиньте мне плиз на мыло проект , который нормально компилится. Заранее спасибо! Titoha88@mail.ru


30-01-2010 01:01
2003 без R2


26-01-2010 01:42
сообщение от автора материала
>>Компонент не работает нормально с уникодом тестировал на windows server

Посмотрю что может быть, а WinServer какой ?


22-01-2010 22:41
>> Компонент не работает нормально с уникодом тестировал на windows server?

Да кстати с кириллицей у него проблемы. Тоже на сервер хотел поставить, отображает краказяблы. Пришлось на Windows XP ставить.


25-12-2009 00:36
Прочитав материал я понял, что jabber ни когда не станет популярным среди программистов и как всетаки гениально просто устроен irc, в сравнении с этим монстром ))


21-12-2009 00:32
сообщение от автора материала
>> Компонент не работает нормально с уникодом тестировал на windows server?

Не работает как? Можно поподробнее?


19-12-2009 12:38

   if FProxyResolve then
       // Формируем пакет
       SendStr('CONNECT ' + FDestHost + ':' + IntToStr(FDestPort) + ' HTTP/1.0' + #13#10)
    else
       SendStr('CONNECT ' + WSockAddrToIp(FDestIp) + ':' + IntToStr(FDestPort) + ' HTTP/1.0' + #13#10);

    SendStr('User-Agent: Mozilla/4.08 [en] (WinNT; U ;Nav)' + #13#10);
    if FProxyAuth then
       SendStr('Authorization: Basic ' + EncodeBase64(ProxyUser + ':' + ProxyPass) + #13#10 +
               'Proxy-Authorization: Basic ' + EncodeBase64(ProxyUser + ':' + ProxyPass) + #13#10);

    SendStr(#13#10);

Здесь лучше переделать чтоб пакет одной командой отсылался, а то некоторые прокси сразу дисконнект делают.
Компонент не работает нормально с уникодом тестировал на windows server


08-12-2009 10:46
Беда в том, что в http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1041 не пашет ссылка на исходник...

Исправлено


08-12-2009 07:33
сообщение от автора материала
ExtendedDialogs.pas
http://slil.ru/28312646


08-12-2009 07:08
Доброго времени суток. Опять вопрос по сборке проекта.
Не хватает ExtendedDialogs.pas
Беда в том, что в http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1041 не пашет ссылка на исходник...


08-12-2009 06:47
сообщение от автора материала
Дописал в компонент поддержку CRAM-MD5 и PLAIN авторизации, помимо DIGEST-MD5
т.к. некоторые Jabber -сервера не поддерживают DIGEST-MD5
если интересно могу выложить


01-12-2009 04:45
сообщение от автора материала
Огромное спасибо Yuri-ю Serebrennikov-у за представленную идею обрабатывать входящии пакеты используя предварительный парсер, переделал немного компонент на его идее, стало логичнее и смотрибельней что ли.

Выложил обновление тут.
http://slil.ru/28278366


16-11-2009 11:30
Странность какая то с этим sourceforge или чегото я не допонимаю, положиш файл на раздачу вроде лежит а через некоторе время исчезает. Исходники также можно скачать из репозитория SVN клиентом.



16-11-2009 04:00
сообщение от автора материала
Спасибо, Юрий, будет очень интересно посмотреть Вашу реализацию
правда на соунде не удалось скачать файл
но нашел на торри
http://www.torry.net/vcl/internet/other/TJabberClient.zip


15-11-2009 19:55
Вот еще Delphi компонента для Delphi 2009 http://tjabberclient.sourceforge.net/


09-11-2009 23:21
сообщение от автора материала
>> В чем по мнению автора может быть причина слета на jabberd2?

Даже и не знаю, нужно смотреть какой идет обмен XML пакетами, вполне возможно что что-то необрабатывается корректно.

>> Почему бы не обновить исходники примера, чтобы не кувыркаться желающим потестить его

Да обновление будет, но чуть позже, исправляю мелкие огрехи пока.


02-11-2009 06:48
Доброго времени суток!
Довольно содержательная статья. С некоторыми "приседаниями" даже удалось скомпилировать тестовый клиент. (Почему бы не обновить исходники примера, чтобы не кувыркаться желающим потестить его).
С некоторыми jabber-серверами пример отрабатывает. Пробовал jabber.org, qip.ru.
А вот со своим jabberd2 сервером - никак.
Где-то вылетает ошибка парсера типа: хочу < , но не нахожу и после этого конект завершается.
"Промышленные" клиенты (qip, psi, bombus и другие) с этим сервером нормально работают.
В планах есть желание сделать собственный клиент и статья очень даже хорошее подспорье, хотя моя обычная среда CBuilder.
В чем по мнению автора может быть причина слета на jabberd2?
Недостатки парсера, или отклонения от реализации стандарта XMPP в примере, ну или ...?


23-10-2009 07:57
сообщение от автора материала
>>  Oleg Denisenko

Спасибо, с удовольствием посмотрю Ваше решение.


23-10-2009 07:56
сообщение от автора материала
>>  IMadering

Попробуйте String переименовать к типу AnsiString


15-10-2009 14:32
Возможно я не туда пишу... Но с другой стороны может быть кому-то я хоть чем нибудь помогу.
В общем так. В связи с тем, что я потерял интерес (точнее нет времени) к одному своему проекту - хочу выложить исходные тексты простого Delphi Jabber Bota (djBot)

забрать исходные тексты можно здесь
http://support.lime-systems.com/~tender/board/other/djbot_src.zip

Вопросы задавать, если они будут, конечно можно... Но вот найду ли я время ответить на них - вопрос...

живого в работе бота можно посмотреть, например, здесь leprosorium@conference.jabber.ru



10-10-2009 08:18
Здравствуйте! Дмитрий Кузан ваша статья мне очень помогла написать свой жаббер клиент. Но вот у меня появилась проблемка, которую я не могу решить и прошу помощи у вас и уважаемых пользователей королевства. После того как я перевёл свой проект на delphi 2010 всё работает нормально, но авторизоваться могу только по механизму PLAIN. А вот механизм DigestMD5 пускать не хочет говорит неверный пароль. Так как делфи 2010 аппелирует строками и символами в юникоде я понимаю, что перестала нормально работать функция из вашего примера function GenResponse(UserName, realm, digest_uri, Pass, nonce, cnonce: string): string; Все мои попытки как то снова заставить её работать пока успехом не увенчались. Поэтому прошу помощи у вас! Может кто-то поделиться рабочей функцией авторизации по DigestMD5 в делфи 2009 - 2010 адаптированной под юникод. Заранее благодарен!


24-08-2009 09:26
сообщение от автора материала
Сервер всегда шлет валидный XML, и от Вас он требует того же. Иначе закрывает поток с ошибкой. Все дело, вероятнее всего, в недостаточности знаний ;)
Просто XMPP это не совсем обычный XML, это открытый XML-поток. Т.е. то, что <stream:stream/> не закрыт это фича - он открыт и новые сообщения приходят постепенно. Поэтому и дополнительной проверки на целостность XML при приеме сообщений в общем-то не нужно. Единственное, что нужно сделать, это сделать спец.обработку двух тегов - <?xml ... ?> и <stream:stream>, и изменить алгоритм на:

1. дописываем к буферу (изначально он пустой) содержимое, полученное из сети
2. пытаемся распарсить содержимое в буфере. Тут такой момент, что нужно распарсить все завершенные теги (т.е. из "<x1 attr1="a1">data1</x1><x2/><x3>partial-data" мы должны распарсить теги <x1/> и <x2/>.
3. анализ полученного XML, удаление из буфера того XML, который мы уже обработали
4. и опять на шаг #1

Т.е. читать содержимое потока целыми, законченными фразами.

А так, ждем продолжения про чаты ;) Успехов


Я думал про это если честно. Однако уже долгое время пользуюсь таким вариантом, и заметил, что практически порционные части XML приходят очень редко, если честно то я знаю только один гарантированный случай приходата такого пакета, это когда приходит длинное сообщение по частям. Поэтому я сделал так. Насчет буфера идея то здравая, но требует координального переписывания XML парсера а лучше создание оного с нуля, для работы с такими блоками (что бы не ругался на валидацию XML, текущий ругается), что пока увы не осуществимо да и не востребовано по причине редкости таких пакетов (может я и не прав но за долгое время я не замечал чтоб разрыв XML был сделан так, что начало ноды в первом пакете идет а конец в другом, за исключением передачи длинного текста опять же. Поэтому для примера пойдет, ну а для серьезных вещей конечно еще требует переработки.
А по поводу чатов, работа идет но не так как увы хотелось бы, так как дела рабочии и личные затягивают время написания данной статьи. Но она в планах есть.


24-08-2009 05:02
Sega-Zero>поставьте в таком случае еще защиту от подобных пакетов
нужна скорее не защита, а правильная обработка ;)

Дмитрий Кузан>некоторые в частности  jabber.ru сервера шлют неверные XML пакеты
Сервер всегда шлет валидный XML, и от Вас он требует того же. Иначе закрывает поток с ошибкой. Все дело, вероятнее всего, в недостаточности знаний ;)
Просто XMPP это не совсем обычный XML, это открытый XML-поток. Т.е. то, что <stream:stream/> не закрыт это фича - он открыт и новые сообщения приходят постепенно. Поэтому и дополнительной проверки на целостность XML при приеме сообщений в общем-то не нужно. Единственное, что нужно сделать, это сделать спец.обработку двух тегов - <?xml ... ?> и <stream:stream>, и изменить алгоритм на:

1. дописываем к буферу (изначально он пустой) содержимое, полученное из сети
2. пытаемся распарсить содержимое в буфере. Тут такой момент, что нужно распарсить все завершенные теги (т.е. из "<x1 attr1="a1">data1</x1><x2/><x3>partial-data" мы должны распарсить теги <x1/> и <x2/>.
3. анализ полученного XML, удаление из буфера того XML, который мы уже обработали
4. и опять на шаг #1

Т.е. читать содержимое потока целыми, законченными фразами.

А так, ждем продолжения про чаты ;) Успехов
 fltz


17-08-2009 09:26
Как использовать прокси в вашем компоненте? Перепробовал все ничего не выходит


03-08-2009 03:15
сообщение от автора материала
>> как использовать синтаксис xhtml внутри сообщения?

можно поподробнее, а то как то расплывчито и не понятно, что конкретно вы хотите узнать?


01-08-2009 22:48
как использовать синтаксис xhtml внутри сообщения?


27-07-2009 04:55
сообщение от автора материала
KDSocket попробуйте убрать, его уже давно нет, скорее все просто ссылка осталась


26-07-2009 23:30
При компиляции требует KDSocket.pas, которого в архиве нету. Поделитесь файлом, пожалуйста))


18-07-2009 11:30
Нашел опечатку. В тексте:
Элемент <Subject> определяет тему сообщения. На него действуют те-же правила, что и для <Body>. Множественные экземпляры <Body> могут быть включены для расширения и дополнения смежных тем, но при условии, что каждый экземпляр обладает атрибутом 'xml:lang' с отличным языковым значением.

Наверное, следует читать:
Множественные экземпляры <Subject> могут...


08-07-2009 07:04
скачал компонент, установил, при попытке законнектиться в процедуре
procedure TCustomSocket.Connect;
при вызове FSocket    := WinSock.Socket(PF_INET, SOCK_STREAM, 0)
получаю результат "-1" и ошибку "невозможно создать сокет". что не так?


24-06-2009 17:26
Дмитрий, огромное спасибо, благим делом занимаетесь ;)


21-06-2009 23:45
сообщение от автора материала
Немного доработал компонет.
+ Обработчик OnJabberSentErrorMessage вызывается если по каким либо причинам сообщение не было доставлено адресату и вернулось с ошибкой
+ немного оптимизации и исправления мелких огрех
+ класс переделан в компонент для установки в IDE

Выложил:

http://slil.ru/27778214


06-06-2009 15:28
Не могли бы вы выложить в любом удобном вам месте доработанные исходники. Спасибо


14-05-2009 00:27
сообщение от автора материала
>> Sega-Zero

Спасибо за информацию - проверю.




14-05-2009 00:22
сообщение от автора материала
<x:y/>

Хм, вроде по стандарту XML допускается такое закрытие тега, т.е это эквивалентно записи <x:y></x:y>, по крайней мере парсер проглатывает такие ноды

другое дело вот пример пакета с незакрытым тегом stream:stream


<?xml version='1.0' encoding='UTF-8'?>
<stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" from="komicsm.ru" id="4e672364" xml:lang="en" version="1.0">
<stream:features>
<compression xmlns="http://jabber.org/features/compress">
     <method>zlib</method>
</compression>
<bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/>
<session xmlns="urn:ietf:params:xml:ns:xmpp-session"/>
</stream:features>

причем это на jabber.ru, пришлось проверять и автозакрывать так

<?xml version='1.0' encoding='UTF-8'?>
<stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" from="komicsm.ru" id="4e672364" xml:lang="en" version="1.0"/>
<stream:features>
<compression xmlns="http://jabber.org/features/compress">
     <method>zlib</method>
</compression>
<bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/>
<session xmlns="urn:ietf:params:xml:ns:xmpp-session"/>
</stream:features>



13-05-2009 08:46
поставьте в таком случае еще защиту от подобных пакетов
<message to='%s' type='%s'><x:y/></message>

Одно время такие станзы жестко клинили миранду и инфиум. еще бывает не только незакрытый тег прийдет вот так <x/>, но и парные теги не всегда (<x></x>)

а для тестов рекоммендую сервер jabbim.cz - там полно новых вещей


13-05-2009 02:57
сообщение от автора материала
Вот немного переработал механил подключения, вкратце история такова, старая версия подключалась не ввсегда сразу
из-за склеенных пакетов иногда парсер не отрабатывал, исправил оный люк и сразу нарвался на новый, а именно что
некоторые в частности  jabber.ru сервера шлют неверные XML пакеты, например без закрытых тегов, на которых парсер
просто клинит. Пришлось еще и это отслеживать, зато подключатся стал лучше и стабильнее.
Кому интересно выложу



05-05-2009 00:17
сообщение от автора материала
Как и обещал правка по поводу пустых сообщений

procedure TKDJabberClient.toMessage(Node : TjanXMLNode2);
var
Types, From : WideString;
BodyNode    : TjanXMLNode2;
Body        : UTF8String;
BodyE       : string;
I           : Integer;
begin
{Стандартно так

  <message type="chat" to="кому" id="ид клиента" from="от кого">
     <body>Сообщение</body>
  </message>

  может быть и так с транспорта

  <message from='*********@pyicq.aftar.ru'
  to='****@jabber.ru' id='15358' type='chat'>
     <x xmlns='jabber:x:event'>
        <composing/>
           </x><active xmlns='http://jabber.org/protocol/chatstates'/>
             <body>привет</body>
  </message>.
}

Types := VarToStr( Node.attribute[cType] );
From  := UTF8Decode( Node.attribute[cFrom] );
Body  := '';
for I := 0 to Node.childCount - 1 do
begin
     BodyNode := Node.childNode[I];
     if AnsiCompareStr(BodyNode.name, nodeBody) = 0 then
     begin
        Body := BodyNode.text;
        Break;
     end;
end;

if Trim(Body) <> '' then
begin
    BodyE := UTF8Decode(Body);
    BodyE := StringReplace(BodyE,'<'  ,'<',[rfIgnoreCase]);
    BodyE := StringReplace(BodyE,'>'  ,'>',[rfIgnoreCase]);
    BodyE := StringReplace(BodyE,'&' ,'&',[rfIgnoreCase]);
    BodyE := StringReplace(BodyE,'"','"',[rfIgnoreCase]);
    Body  := UTF8Encode(BodyE);
end;

// Сообщение может разбиватся поэтому перед обработчиком идет проверка на целостность XML
// если XML полный то посылаем сразу а нет так дожидаемся друних пакетов для
// обработки
if Pos('/message>', PacketStr) = 0 then
begin
    isMessageDiv := True; // Говорим что сообщение разрывное
    BufPacketStr := PacketStr;
end
else
begin
    isMessageDiv := False; // Говорим что сообщение НЕ разрывное
    IF Assigned(FOnJabberSentMessage) then
       if Trim(Body) <> '' then
          FOnJabberSentMessage(Self, Types, From, Body);
end;
end;


25-04-2009 06:52
сообщение от автора материала
>>IPWorks поддерживает общение в чате, не подскажете? :)

Нет.


24-04-2009 22:31
IPWorks поддерживает общение в чате, не подскажете? :)


22-04-2009 12:22
Если бы только DLL таскать, так еще и цена в 470 у.е. ))


08-04-2009 04:34
сообщение от автора материала
>>...после нескольких дней борьбы за правое дело все дело закончилось на том, что я наткнулся на пакет Ip*Works!: http://www.componentsource.com/products/ipworks-delphi/summary.html

У IPWorks единственный минус - приходится таскать с собой DLL.


02-04-2009 02:16
сообщение от автора материала
>>
Всем спасибо за ответы, очень помогли, но вот заметил еще одну вещь, сообщения пришедшие от контактов с транспортов не отображаются. Я так понял неправильно происходит парсинг.
Данные которые приходят в этих случаях различаются. Например обычное сообщение:

<message from='******@jabber.ru/QIP'
         to='****@jabber.ru'
         xml:lang='ru' type='chat' id='qip_17'>
  <body>привет</body>
</message>

а сообщение от контакта с транспорта:

<message from='*********@pyicq.aftar.ru'
  to='****@jabber.ru' id='15358' type='chat'>
     <x xmlns='jabber:x:event'>
        <composing/>
           </x><active xmlns='http://jabber.org/protocol/chatstates'/>
             <body>привет</body>
</message>.
как это можно исправить?

В процедуре TKDJabberClient.toMessage в файле JabberClient.pas дописать проверку на такие сообщения
Сам я транспорты не использовал, проверю внесу изменения в код.


31-03-2009 12:56
За статью спасибо.
В результате начал понимать, "что и как".
...
...после нескольких дней борьбы за правое дело все дело закончилось на том, что я наткнулся на пакет Ip*Works!: http://www.componentsource.com/products/ipworks-delphi/summary.html
...
Спасибо еще раз! :)


31-03-2009 08:34
Всем спасибо за ответы, очень помогли, но вот заметил еще одну вещь, сообщения пришедшие от контактов с транспортов не отображаются. Я так понял неправильно происходит парсинг.
Данные которые приходят в этих случаях различаются. Например обычное сообщение:
<message from='******@jabber.ru/QIP' to='****@jabber.ru' xml:lang='ru' type='chat' id='qip_17'><body>привет</body></message>
а сообщение от контакта с транспорта:
<message from='*********@pyicq.aftar.ru' to='****@jabber.ru' id='15358' type='chat'><x xmlns='jabber:x:event'><composing/></x><active xmlns='http://jabber.org/protocol/chatstates'/><body>привет</body></message>.
как это можно исправить?


31-03-2009 07:52
Можно просто убрать галочку Stop on Delphi exceptions из настроек отладчика.


31-03-2009 01:57
>>> запускать не из под компилятора <...>
Долго думал над этой фразой ;-)

Компилятор -- это программа, которая преобразует текст на языке программирования в бинарный код исполняемого модуля (EXE, DLL и т.п.).

Если Вы запускаете программу из среды (IDE) Delphi (например, нажав кнопочку F9), то при этом эта самая среда по умолчанию показывает Вам все происходящие исключения (если в настройках это не изменено). Подразумевается, что программу из среды запускают для отладки. Конечный пользователь запускает готовый EXE-файл безо всякой IDE Delphi. И тогда никакие исключения выскакивать не будут (ну, кроме тех, что прошляпил программист при разработке ;-)).
 Geo


30-03-2009 12:15
То есть это как бы "норма". запускать не из под компилятора и использовать?


30-03-2009 11:43
сообщение от автора материала
>> После запуска скомпилированной программы подключается нормально, а после нажатия "Logging" вылезают 2 раза exception "Expected < when parsing text". но если дальше продолжить исполнение кода всё работает нормально. как это исправить?

Никак, это исключения XML Parserа, возникает из-за того что на вход попадает неправильных XML. Исключение возникает при отладке и работе в среде. В скомпилированном приложении оно закрыто try-except


30-03-2009 11:37
После запуска скомпилированной программы подключается нормально, а после нажатия "Logging" вылезают 2 раза exception "Expected < when parsing text". но если дальше продолжить исполнение кода всё работает нормально. как это исправить?


15-03-2009 01:52
Скиньте пожалуйста готовый к компиляции проект на мыло rus_999@mail.ru.


02-03-2009 00:54
сообщение от автора материала
>>> Могу отдать с полными исходниками на растерзание своего Delphi Jabber бота.
Ядро - Delphi, исполнительный код обработки команд - VBScript/JScript.
Надоело, да и посмотрев исходники опубликованные тут понял, что лучше все переписать.

Уважаемы Oleg.

А можно узнать что вам так надоело. Что вас не устраивает в этом примере. Я понимаю что для нормального рабочего он далек. Так-же не все в нем реализовано так как нужно. Но он работает и для примера вполне годен. Хотелось бы услышать здравую критику, а не высказывания что лучше переписать все с нуля.
Да и ваши исходники выложите если уж обещаете. Я думаю и я и многие с удовольствием их посмотрим. Да и взгляд со стороны не помешает.

С уважением.


02-03-2009 00:31
выходит в моей системе нет поддержки второй версии винсокетов

Странно, потому что последняя версия Windows, в которой не было по умолчанию WinSock 2 - это 95-я.


01-03-2009 15:13
спасибо, Олег, выходит в моей системе нет поддержки второй версии винсокетов...


01-03-2009 12:37
добавить в KDSocket.Custom.pas

var
  WSAData: TWSAData;
  WSAStarted: Boolean;


initialization
  {Use WinSock 1.1}
  if WSAStartup(MAKEWORD(1, 1), WSAData) <> 0 then begin
    {$IFDEF DEBUG}
    MessageBox(0, PChar('Could not start WSA'), 'Error!', MB_ICONERROR);
    {$ENDIF}
    WSAStarted := False;
  end else
    WSAStarted := True;

//  CoInitializeEx(nil, 0);

finalization
  if WSACleanUp <> 0 then begin
    {$IFDEF DEBUG}
    MessageBox(0, PChar('Could not cleanup WSA'), 'Error!', MB_ICONERROR);
    {$ENDIF}
  end;
  WSAStarted := False;
end.



01-03-2009 03:55
Уважаемый Дмитрий, благодарю за прекрасную статью! У меня вопрос по примеру к статье - компилится все удачно, но при попытке подключения не удается создать сокет. Как я не пытался отловить проблему, все тщетно, WinSock.Socket(PF_INET, SOCK_STREAM, 0); выдает ошибку. причем готовый ехе в комплекте с примером подключается на ура. Буду благодарен, если наведете на решение проблемы!


28-02-2009 12:58
Могу отдать с полными исходниками на растерзание своего Delphi Jabber бота.
Ядро - Delphi, исполнительный код обработки команд - VBScript/JScript.
Надоело, да и посмотрев исходники опубликованные тут понял, что лучше все переписать.
Сам бот живет тут leprosorium@conference.jabber.ru


28-02-2009 08:57
сообщение от автора материала
>> Нескромный вопрос: а будет ли продолжение? За бортом остался лакомый кусок возможностей джаббера: общение в конференциях (чатах)...

Да планируется. Пока сейчас разбираюсь с XEP-0045 Multi User Chat. Думаю по итогам будет продолжение.


27-02-2009 21:34
Спасибо :)
Много нового для изучения. Информация не заменит русскоязычное описание протокола, но неплохое представление о нём конечно же даёт!

Нескромный вопрос: а будет ли продолжение? За бортом остался лакомый кусок возможностей джаббера: общение в конференциях (чатах)...


21-02-2009 03:13
Очень пригодилось. Спасибо!


17-02-2009 07:22
сообщение от автора материала
Статья в PDF формате в лучшем оформлении для печати
http://slil.ru/26694099


17-02-2009 04:00
Спасибо за полезную информацию.


17-02-2009 03:37
сообщение от автора материала
Забыл сказать ExtendedDialogs - это файл KdnWins.pas
Владимира Коднянко из статьи
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1041
так уж вышло что я его переименовал, так как он дублировался по названию с каким то файлом из старого проекта.


17-02-2009 03:27
сообщение от автора материала
ExceptionLog - можно свободно убрать, остался от EurekaLog
IcsMD5 действительно взят из Internet Component Suite
выкладываю его отдельно-

http://rapidshare.com/files/199117743/IcsMD5.pas.html

Извините что забыл включить в архив


17-02-2009 03:12
Писал для Mail.ru Agent клента, было забавно, одно время &ML жил.
Вот недавно было желание для pda делать jabber клиент, но все остановилось
когда стал искать русское описание протокола :о)


17-02-2009 01:56
Jabber захватывает умы:) Спасибо за статью


17-02-2009 01:26
Дмитрий, спасибо за статью. Попытался скомпилировать пример, получил ошибки, наверное Вы используете какие-то дополнительные компоненты?
Не найден файл ExceptionLog (первый файл в uses проекта),
в модуле _main - файл ExtendedDialogs,
в модуле JabberClient.Tools - IcsMD5 (наверное Вы используете компоненты ICS).


Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
"Мы с тобой одной крови — ты и я!". Чьи это заветные слова?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.

Оценка содержания
 
Содержит полезные и(или) интересные сведения
 
Ничего особенно нового и интересного
 
Написано неверно (обязательно укажите почему)


Оценка стиля изложения
 
Все понятно, материал читается легко
 
Есть неясности в изложении
 
Непонятно написано, трудно читается

Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования