MeetMe + Realtime
ошибка на voip-info.org
Откуда: Санкт-Петербург
Сообщений: 931
|
MeetMe + Realtime
Итак, собственно в ходе сегодняшнего действа эмпирически доказал, по-крайней мере себе, что на voip-info.org допущена ошибка в структуре таблицы, используемой для хранения конфигурации MeetMe.
1. Поля username и domain допустимы в таблице, но должны располагаться после pin-кодов (Если делать, как на voip-info.org, pin-код не учитывался).
2. Дополнительные поля в таблице сваливали мой * в корку.
Т.О. структура таблицы (работает у меня):
CREATE TABLE `meetme` (
`confno` varchar(80) DEFAULT '0' NOT NULL,
`pin` varchar(20) NULL,
`adminpin` varchar(20) NULL,
`members` integer DEFAULT 0 NOT NULL,
PRIMARY KEY (confno)
);
Дополнительные поля вынес в отдельную таблицу.
Asterisk 1.4.26-rc4
Asterisk-addons 1.4.8
mysql Ver 14.12 Distrib 5.0.26, for pc-linux-gnu (i686) using readline 5.2
UPD: Нифига, это ошибка в коде где-то сидит!
ast_load_realtime("meetme", "confno", confno, NULL);
в качестве имен полей после 2го поля возвращает имя таблицы.
Создам аварийную ситуацию. Дорого. На долго =)
|
Откуда: Санкт-Петербург
Сообщений: 931
|
Re: MeetMe + Realtime
Господа-товарищи! Кто может посмотреть, как тянет эта процедура данные?
Создам аварийную ситуацию. Дорого. На долго =)
|
Сообщений: 866
|
Re: MeetMe + Realtime
фигня это.
все реатлайм таблицы обрабатываются также как будто это из конфиг-файла параметры сolumnname=value прочитаны. И порядок полей там не важен.
Что же касается app_meetme, то он вообще берет только поля pin и adminpin:
var = ast_load_realtime("meetme", "confno", confno, NULL);
if (!var)
return NULL;
save = var;
while (var) {
if (!strcasecmp(var->name, "pin")) {
pin = ast_strdupa(var->value);
} else if (!strcasecmp(var->name, "adminpin")) {
pinadmin = ast_strdupa(var->value);
}
var = var->next;
}
ast_variables_destroy(save);
о каком domain и username вообще может быть речь? Что это, кстати, за поля вообще? app_meetme их не использует и кому они нужны - непонятно. У меня таблица без них.
PS: это 1.4.26
|
Откуда: Санкт-Петербург
Сообщений: 931
|
Re: MeetMe + Realtime
У меня после 2х вызовов var->next в var->name возвращается имя таблицы! При этом var->value приходит нормально!
UPD: А этот кусок кода я уже успел изучить =) Именно поэтому и говорю о бажности!
Создам аварийную ситуацию. Дорого. На долго =)
|
Сообщений: 866
|
Re: MeetMe + Realtime
тем не менее, вопрос номер один - что вообзе на username+domain? зачем они в таблице и нафига нужны?
|
Откуда: Санкт-Петербург
Сообщений: 931
|
Re: MeetMe + Realtime
dimas, это не существенный вопрос. Но тем не менее отвечу.
В ссылке на voip-info.org из первого поста до моих коррективов значился формат таблицы именно такой, как я привел выше.
Жду вопроса №2. А лучше ответа.
Создам аварийную ситуацию. Дорого. На долго =)
|
Сообщений: 866
|
Re: MeetMe + Realtime
ну могу только повторить что у меня таблица для meetme содержит дополнительные поля которые нужны лично мне и все работает нормально. То же самое относится и к остальным реалтайм таблицам - у меня дофига своих полей.
У меня, кстати, res_config_odbc, не mysql... (но база под ним - mysql).
Поскольку в чудеса я не оособо верю, предлагаю вам посмотреть на все что приходит из ast_load_realtime добавив ast_log(LOG_NOTICE,"<< %s=%s\n", var->name, var->value);
сразу после while(var). Я так понимаю, вы примерно это уже и сделали. Интересно посмотреть.... Ну и еще что возвращает сам mysql если ему сказать SELECT * FROM meetme WHERE confno=XXXXXX
- где XXXXX это _та самая_ конференция с которой проблемы.
|
Откуда: Санкт-Петербург
Сообщений: 931
|
Re: MeetMe + Realtime
Начну с конца.
1. Мускуль возвращает обычные значения:
mysql> select * from meetme where confno="9409";
+--------+-------+----------+---------+
| confno | pin | adminpin | members |
+--------+-------+----------+---------+
| 9409 | 97629 | 34320 | 0 |
+--------+-------+----------+---------+
1 row in set (0.00 sec)
2. Да, именно так я и сделал (только уровень выбирал WARNING):
-- Executing [4@default:4] MeetMe("SIP/out_call-08893470", "9409|sM") in new stack
[Jul 2 13:20:14] WARNING[2351]: app_meetme.c:2567 find_conf: No meetme.conf file :(
[Jul 2 13:20:14] WARNING[2351]: app_meetme.c:2493 find_conf_realtime: Got VALUE: confno - 9409!
[Jul 2 13:20:14] WARNING[2351]: app_meetme.c:2493 find_conf_realtime: Got VALUE: pin - 97629!
[Jul 2 13:20:14] WARNING[2351]: app_meetme.c:2493 find_conf_realtime: Got VALUE: meetme - 34320!
[Jul 2 13:20:14] WARNING[2351]: app_meetme.c:2493 find_conf_realtime: Got VALUE: meetme - 0!
[Jul 2 13:20:14] WARNING[2351]: channel.c:3388 ast_request: No channel type registered for 'DAHDI'
-- Created MeetMe conference 1023 for conference '9409'
-- <SIP/out_call-08893470> Playing 'conf-getpin' (language 'ru')
[Jul 2 13:20:20] WARNING[2351]: app_meetme.c:2854 conf_exec: Got PIN: 34320! When ADMIN PIN: and PIN: 97629!
-- <SIP/out_call-08893470> Playing 'conf-invalidpin' (language 'ru')
в выделенной строке после ADMIN PIN: должно быть значение, но, как видно выше, вместо пары "adminpin - 34320" я получаю "meetme - 34320" (meetme - имя таблицы), из-за чего значение не проходит условие, по которому парсится конфиг.
Создам аварийную ситуацию. Дорого. На долго =)
|
Сообщений: 866
|
Re: MeetMe + Realtime
ну да, что-то как-то не очень выглядит :)
но тут никаких вариантов кроме как ползти глубже и добавлять отладочный вывод в код который в базу лезет и смотрет ьчто там...
Если используется res_config_odbc, то это res/res_config_odbc.c функция realtime_odbc (а районе ее конца цикл который колонки загружает).
Еслт же это res_config_mmysql - то где-то в аналогичном месте но видимо в аддонсах. Я его не использую так что у меня и сорсов нет :)
|
Откуда: Санкт-Петербург
Сообщений: 931
|
Re: MeetMe + Realtime
ок, ладно, буду копать... Если у кого-то будет, что добавить или убавить - буду рад услышать! Спасибо dimas за диалог - решение не нашли, но в голове все разложилось :)
Создам аварийную ситуацию. Дорого. На долго =)
|
|