Opened 6 years ago
#282 new баг
Избавиться от передачи данных как "хэш в хэше"
Reported by: | alx | Owned by: | alx |
---|---|---|---|
Priority: | средний | Milestone: | 1 очередь |
Component: | any | Keywords: | |
Cc: |
Description
Сейчас некоторые конфигурационные данные передаются от SW-01 в VE-01 в форме "хэш в хэше" с двойным кодированием, то есть один хэш (JSON-объект) кодируется в строку и помещается в другой хэш как строка. В настоящее время так передаются список групп вызова и маршруты SIP.
Такое двойное кодирование плохо тем, что внутренний хэш содержит кавычки ("), которые дополняются обратным слэшем при кодировании внешнего хэша, что увеличивает размер строки и может привести к тому, что результат не поместится в пакет для передачи плате. В результате VE-01 не получит список групп вызова и/или маршрутов.
Предлагается изменить способ передачи плате VE-01 подобных списков: передавать список по элементам, предполагая, что один элемент (одна группа вызова и/или один маршрут) гарантированно поместятся в один пакет. Для определения начала и конца списка передаваемый хэш дополняется ключами "start" или "end" (подобно тому, как это делается при передаче списка пользователей).
Для обратной совместимости (старая прошивка SW-01 и новая прошивка VE-01) плата VE-01 должна проверять ключ "data", наличие которого будет говорить о том, что данные передаются старым способом.
Для прямой совместимости (старая прошивка VE-01 и новая прошивка SW-01) SW-01 должна проверять, поддерживает ли VE-01 новый метод передачи списков. Сделать это можно:
- проверкой флага FEATURES (но нужна гарантия, что эти флаги будут получены платой SW-01);
- проверкой наличия какой-то переменной в MIB платы VE-01 после его получения;
- чтением какой-то переменной (например ревизии прошивки);
- запросом ревизии прошивки сообщением типа 3 командой 1.
В качсетве workaround уменьшить максимальный размер передаваемого фрагмента данных с 900 до 450 байт - такой фрагмент должен поместиться в буфер пакета даже если он целиком состоит из кавычек, и поэтому перед каждым символом будет добавлен "\".