Заранее извиняюсь за объём сообщения, но надеюсь это кому-нибудь поможет.. как помогло мне.
Поставив задачу заставить asterisk сделать счастливым клиента Windows Messenger 5.1 и позволить ему видеть клиентов как online (и соответсвенно без проблем им звонить), перерыв интернет в поисках решения этого вопроса, я взялся за свежие исходники с cvs на тестовом сервере.
Два вечера и многочисленные отладочные сообщения в исходниках позволили частично решить задачу.
Для этого необходимо:
1. Добавить в extensions.conf (или инклуды его) следующие строки для каждого пользователя или peer:
exten => user_exten,hint,SIP/user
тут user_exten - обычный экстеншен, который будут добавлять в контакт лист Windows messenger'а.
SIP/user - канал и соответствующий логин пользователя.
Этим вешается так называемый хинт.. который можно увидеть через show hints (вместе с состоянием)
2. Но и это не поможет.. т.к. есть баг и непонятность со стандартом в исходниках chan_sip.c. Для исправления этого
наложить следующий патч (как обычно, не гарантирую правильность внесённых мной правок, но они для меня работали)
*** channels/chan_sip.c.orig 2005-06-19 17:12:37.000000000 +0400
--- channels/chan_sip.c 2005-06-19 17:11:10.000000000 +0400
***************
*** 9115,9119 ****
--- 9115,9122 ----
/* Handle authentication if this is our first subscribe */
+ /*
res = check_user_full(p, req, SIP_SUBSCRIBE, e, 0, sin, ignore, mailbox, sizeof(mailbox));
+ */
+ res = check_user_full(p, req, SIP_SUBSCRIBE, e, 0, sin, ignore, NULL, 0);
if (res) {
if (res < 0) {
***************
*** 9179,9185 ****
--- 9182,9191 ----
if (p && !ast_test_flag(p, SIP_NEEDDESTROY)) {
if (!(p->expiry = atoi(get_header(req, "Expires")))) {
+ p->expiry = max_expiry;
+ /*
transmit_response(p, "200 OK", req);
ast_set_flag(p, SIP_NEEDDESTROY);
return 0;
+ */
}
/* The next line can be removed if the SNOM200 Expires bug is fixed */
В первой правке вообще странность.. т.к. не находит пользователя, т.к. указан email. В вызывающей функции реализован поиск по email.. а вызывающая по логике желает получить значение email - непонятки.
Во второй правке непонятно кто прав: asterisk, считающий отсутствие expires указанием уничтожения subscribe сразу же (интересно.. зачем его тогда вообще устанавливать?), или Messenger, который не указал его, видимо надеясь, что это означает - не истекает.
Эти два пункта позволили мне подружить в какой-то мере asterisk и Messenger. Но пока есть странности:
1. Не уверен что работает с опцией NAT у клиента.
2. пользователь в контакт-листе почему-то не уходит в offline, хотя должное нотификация уходит (глюк messenger'а?)
3. Неофициальность правок... Не неужели всем в мире пофиг на такой распростанённый клиент как Windows Messenger, который стоит на _каждом_ компе с WindowsXP???
P.S. Патч весь покорёжился.. не вижу как тут отключить смайлы и форматирование.. Особо желающим, могу выслать его почтой.