Обновление SIP-подписки

В настоящее время я пытаюсь создать приложение с использованием Jain-Sip, и у меня возникают трудности с реализацией функции, которая будет повторно подписываться на контакты, от которых я хочу продолжать получать обновления присутствия. В настоящее время я пытаюсь сделать это с помощью диалогов, как в следующем руководстве: http://www.oracle.com/technetwork/articles/entarch/introduction-jain-sip2-085495.html

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

javax.sip.SipException: диалоговое окно (диалоговое окно) еще не установлено или завершено Завершенный диалог

Если бы вы могли указать мне правильное направление, я был бы очень благодарен, Адам


person user3279210    schedule 28.05.2014    source источник


Ответы (1)


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

person Vladimir Ralev    schedule 28.05.2014
comment
Спасибо, что связались со мной, Владимир, не уверен, что вы видели мое предыдущее сообщение о проблеме, которая возникла у меня с продолжительностью подписки. Мне удалось получить лучший журнал отладки. - person user3279210; 28.05.2014
comment
Также на самом деле возможно ПОДПИСАТЬСЯ на несколько человек, а затем сохранить копию диалога, а затем обратиться к сохраненному диалогу позже, когда вы захотите обновить подписку. Извините за все эти вопросы, действительно ли важно, чтобы запрос использовался для обновления подписки в диалоговом окне? - person user3279210; 28.05.2014
comment
Я не могу найти логи ни в одном сообщении? Что касается JAIN SIP, да, можно подписаться на нескольких человек, это зависит от другой стороны, будет ли вам разрешено. Иногда вы можете подписаться оптом с сервером присутствия. Вам нужно увидеть, какие RFC вы реализуете. - person Vladimir Ralev; 29.05.2014
comment
Извините, я должен был дать ссылку на него. Вот: . Спасибо, я просматриваю RFC 3261 и 3265. В частности, я пытаюсь реализовать это. Если подписчик хочет повторно подписаться на состояние, он делает это, составляя несвязанный первоначальный запрос SUBSCRIBE со свежесгенерированным Call-ID. и новый уникальный тег From (см. раздел 3.1.4.1.) для включения функции повторной подписки. Моя проблема в том, что я получаю следующую ошибку при попытке повторно подписаться на человека, используя диалоговое окно с первой подписки. Диалог еще не установлен или завершен Завершенный диалог - person user3279210; 29.05.2014
comment
Это журнал, о котором я говорил: dropbox.com/s/3covgxqwmhe9yrz/applicationDebugLog.log. - person user3279210; 29.05.2014
comment
Короче говоря, сейчас я делаю следующее (см. отправку сообщений в диалоговом окне): oracle.com/technetwork/articles/entarch/ Но иметь диалоговое окно для каждого человека, на которого я подписываюсь, а затем использовать диалоговое окно для этого человека, когда я хочу повторно подписаться . - person user3279210; 29.05.2014
comment
Я забыл сказать, я также просматриваю RFC 3856 и пытаюсь реализовать это, а не что-то еще. отправка обновления SUBSCRIBE в том же диалоговом окне, установленном первоначальной SUBSCRIBE. Этот SUBSCRIBE почти идентичен исходному, но содержит тег в поле заголовка To, более высокое значение поля заголовка CSeq и, возможно, набор значений поля заголовка Route, которые определяют путь прокси, который должен пройти запрос. - person user3279210; 29.05.2014
comment
Я не вижу SipException в этих журналах. Есть много исключений приложений, таких как этот проект.ctiapp2.SipConnectionListener.subscribeToPeople(SipConnectionListener.java:606) В остальном все выглядит нормально. Вероятно, вам следует изменить теги from, чтобы избежать некоторых проблем с сопоставлением диалогов. - person Vladimir Ralev; 29.05.2014
comment
Да, все верно, нет уведомления о том, что в приложении что-то изменилось. Все, что я действительно могу сказать, по какой-то причине программа перестает показывать обновления присутствия. Странно то, что это происходит до истечения таймера истечения срока действия. - person user3279210; 29.05.2014
comment
Кроме того, сейчас я пытаюсь работать с одним диалогом для всех людей, на которых я подписан, на мой взгляд, это немного менее чисто, но мне нужно поработать над другими вещами. - person user3279210; 29.05.2014
comment
В первом сообщении упоминается SipException. Если это решено и с исключениями приложения все в порядке, ответственность за доставку NOTIFY лежит на удаленной стороне. Вы знаете, посылает ли что-нибудь удаленная сторона? - person Vladimir Ralev; 29.05.2014
comment
Я полагаю, что есть некоторая путаница, журнал, который я отправил вам, относился к более ранней проблеме, с которой вы мне помогали, другой месяц, когда вы просили меня предоставить вам журнал, и касался программы, не отображающей изменения присутствия до истечения срока действия. закончился. Ничто не предупреждает меня о том, что заставляет программу делать это. Также бывает, что после этого Wireshark не показывает никаких уведомлений. - person user3279210; 29.05.2014
comment
Если удаленная сторона не отправляет сообщения NOTIFY, вам следует просмотреть их журналы. Я не очень хорошо понимаю ваше приложение. ИМХО, вы должны исправить исключения и предоставить чистый журнал. Также взгляните на Jitsi, я думаю, что они поддерживают присутствие p2p так, как вы пытаетесь реализовать его с помощью JSIP. - person Vladimir Ralev; 29.05.2014
comment
Извините, что продолжаю беспокоить вас, кажется, что эта область разработки программного обеспечения, хотя и активная, является небольшой нишей. Поэтому найти помощь в решении ваших проблем может быть немного сложно. Честно говоря, я не стал объяснять, что делает приложение, просто подробно рассказал о проблемах. Проблема с исключениями заключается в том, что я вообще не вижу их появления во время работы программы, ничего не пишется в stderr. Кроме того, я бы предпочел остаться с JSIP, я считаю, что он подходит для того, чего я пытаюсь достичь, но, возможно, на более низком уровне. - person user3279210; 30.05.2014
comment
Кроме того, могу ли я задать вам еще один вопрос, если это не слишком сложно, как правильно использовать диалоги SIP при подписке. Я даю запросу уникальный тег в заголовке to и уникальный тег в заголовке from, в результате чего Wireshark сообщает, что подписка находится в диалоговом окне, но мой сервер отклоняет подписку. Приложение продолжает пытаться подписаться, а затем я получаю тайм-аут. - person user3279210; 30.05.2014
comment
На самом деле это не намного проще, чем JSIP :) Изменение тегов и идентификатора вызова должно быть достаточным для любого сервера, чтобы он воспринимался как новый идентификатор диалога. Когда вы говорите, что время подписки истекло, это означает, что сервер вообще не отвечает. Если ваш сервер не отвечает кодом ошибки на подписку, обязательно поймите, почему. Если этот сервер просто отбрасывает запросы без ответа, вероятно, это плохой сервер. Запишите несколько рабочих примеров и повторите их. Также следите за обновлениями CSeq. JSIP позаботится об этом, если вы ведете диалог с состоянием, но все равно следите за этим. - person Vladimir Ralev; 30.05.2014
comment
Спасибо за вашу помощь, мне удалось решить эту проблему, получив диалоговое окно из событий ответа каждой из первых подписок, а затем используя его для последующих подписок. Если есть лучший способ сделать это, это было бы здорово. - person user3279210; 02.06.2014