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 байт - такой фрагмент должен поместиться в буфер пакета даже если он целиком состоит из кавычек, и поэтому перед каждым символом будет добавлен "\".

Change History (0)

Note: See TracTickets for help on using tickets.