Tamkovich.com: Телеком/VoIP блог
Современные технологии: Asterisk, SIP, Kamailio, Linux, Cisco, Linksys
Asterisk realtime теперь различает NULL и пустые строки
2 января, 2010 by Сергей Тамкович
Asterisk, Программирование MySQLНовогодние каникулы — отличное время для обновления вашей системы. Есть время подумать, взвесить все «за» и «против» и внимательно накатить необходимые обновления. Не стали исключением и эти праздники.
Неприятный сюрприз ждал меня в модуле res_config_mysql из Asterisk-addons. 4 декабря, в него был добавлен сомнительный патч:
/* Encode NULL values separately from blank values, for the Realtime API */ if (row[i] == NULL) { row[i] = ""; } else if (ast_strlen_zero(row[i])) { row[i] = " "; } |
Этот гениальный код, означает, что теперь поле, имеющее значение NULL в MySQL, видно в Asterisk, как пустая строка. А пустая строка в MySQL, в Asterisk, волшебным образом превращается в строку с одним пробелом. Представьте, что все ваши пустые строки, превратились в строку с одним пробелом! Т.е. если вы, использовали пустые строки и не использовали NULL — ваши настройки больше невалидны! Проблемы вылезут на каждом углу, например вот такие ошибки, при звонке на Cisco AS5350: SIP/2.0 400 Bad Request — ‘Malformed/Missing FROM: field’. Эта ошибка вызвана тем, что пустые строки в полях fromuser и fromdomain превратились в непустые. В результате заголовок From выглядит вот так:
From: "1000" <SIP: @ >;tag=as3e28b5d2
Остаётся только гадать, как подобный патч мог быть включен в стабильную ветку Asterisk.
- 0016138: [patch] realtime function does not return pair when database value is null
- Diff of /branches/1.6.0/res/res_config_mysql.c
- Мой багрепорт на issues.asterisk.org
Asterisk, Программирование MySQL
Очень сомнительный патч. Ладно интерпретировать NULL как пустую строку, но добавлять лишний пробел. Индийский код: исправлять следствия, а не причины.
IgorG, присоединяйся:
https://issues.asterisk.org/view.php?id=16533