LINUX.ORG.RU

XMPP (Jabber) Как точно определить адрес сервера?


0

0

Поидее имя домена берётся из JID. Но обнаружил, что это не всегда верно. Так, например, если в Psi задать JID с доменом ya.ru (например user@ya.ru), то он соединяется не с ya.ru:5222, а с xmpp.yandex.ru:5222 (IP у них, если что, тоже разные). То же самое с аккаунтами на gmail.com, соединение идёт с talk.google.com. В спецификации по XMPP (rfc3920), по этому вопросу ничего найти не смог.

Кто-нибуть в курсе - есть ли этому научное объяснение или это произвол владельцев Яндекса и Google?

Это не нарушение стандарта. А вполне себе общепринятая практика. JID - это только уникальное имя, он совершенно не обязан быть привязан к доменному имени сервера... Допустим, захочет компания мощно забашлять гуглу, чтоб ее жаббер сервер хостился тоже на talks.google.com - и ничего, все будет работать, а JIDs будут john@thecompany.com. Я, разумеется, имею в виду техническую сторону дела, не бизнес.

svu ★★★★★
()
Ответ на: комментарий от Deleted

Спасибо. Не знал про такую штуку. Если всё правильно понял для определния адреса нужно использовать функцию

getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res);

Только мне не удалось заставить её работать. В параметр node я так понял надо передавать имя домена (то что после @, например gmail.com). А что нужно передавать в параметр service? Гугль внятного ответа не дал. Пробовал "xmpp-client", "xmpp", "jabber" но функция завершается с ошибкой. Если передавать номер порта ("5222"), то функция выдаёт адрес gmail.com.

Подскажите плиз кто знает - что должно быть в параметре service?

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

значения для service можно подсматривать в /etc/services
как-то так:

struct addrinfo * result;
struct addrinfo hints;
int error;

memset(&hints, 0, sizeof(hints));
hints.ai_family = PF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
error = getaddrinfo("gmail.com","xmpp-server", &hints, &result);

iSage ★★★★
()

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

а для мыла даже спецальная запись есть MX в отличие от всяких xmpp и sip

dimon555 ★★★★★
()

А не лучше ли воспользоваться готовой реализацией протокола? Хотя, если тут дело в исследовательском интересе...

Zenom ★★★
()

iSage, это не работает. Там нужно особый DNS запрос делать. Для этого есть либы http://www.dns.net/dnsrd/programming.html, http://freshmeat.net/projects/librascal, http://freshmeat.net/projects/dns_c и другие. Вначале был порыв самому DNS запрос слать, но почитав про то как это делать - желание пропало.

dimon555, нет. Хотя даже если бы это было и так - разве я признался бы? :)

Zenom, скорее всего буду использовать готовую реализацию.

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