Функция СобратьПакет_BIND_Transceiver(sequence_number) Экспорт
ИдПользователя = Справочники.СервисыSMSрассылки.Мегафон.Пользователь;
Пароль = Справочники.СервисыSMSрассылки.Мегафон.Пароль;
ДлинаЛогина = СтрДлина(ИдПользователя);
Если ДлинаЛогина + 1 > 16 Тогда
ИдПользователя = Лев(ИдПользователя, 15);
ДлинаЛогина = 15;
СтрокаОшибки = "" + ТекущаяДата() + "
|Длина логина + нулевой символ превышает 16 символов, обрезаем.";
ЗаписьЖурналаРегистрации("ОтправкаСМСМегафон.СобратьПакет_BIND_Transceiver",
УровеньЖурналаРегистрации.Ошибка,
Метаданные.Обработки.РассылкаSMSМегафон, "Метаданные.Обработки.РассылкаSMSМегафон",
СтрокаОшибки);
КонецЕсли;
ДлинаПароля = СтрДлина(Пароль);
Если ДлинаПароля + 1 > 9 Тогда
Пароль = Лев(Пароль, 8);
ДлинаЛогина = 8;
СтрокаОшибки = "" + ТекущаяДата() + "
|Длина пароля + нулевой символ превышает 9 символов, обрезаем.";
ЗаписьЖурналаРегистрации("ОтправкаСМСМегафон.СобратьПакет_BIND_Transceiver",
УровеньЖурналаРегистрации.Ошибка,
Метаданные.Обработки.РассылкаSMSМегафон, "Метаданные.Обработки.РассылкаSMSМегафон",
СтрокаОшибки);
КонецЕсли;
Если Не ЗначениеЗаполнено(sequence_number) Тогда
sequence_number = 1;
КонецЕсли;
system_Тип = "";
Длина_system_Тип = СтрДлина(system_Тип);
interface_version = 4;
addr_ton = 0;
addr_npi = 0;
address_range = "";
Длина_address_range = СтрДлина(address_range);
//Длина header id + zero pass + zero System_Тип + zero interface_version addr_ton addr_npi address_range + zero
ДлинаПакета = 16 + (ДлинаЛогина + 1) + (ДлинаПароля + 1) + (Длина_system_Тип + 1) + 1 + 1 + 1 + Длина_address_range + 1;
Матрица = Новый COMSafeArray("VT_UI1", ДлинаПакета); // было 37
// HEADER
// command_length 4 octets
Матрица.SetValue(0,0);
Матрица.SetValue(1,0);
Матрица.SetValue(2,0);
Матрица.SetValue(3, ДлинаПакета); //command_length
// command_id 4 octets
Матрица.SetValue(4,0);
Матрица.SetValue(5,0);
Матрица.SetValue(6,0);
Матрица.SetValue(7,9); // Operation: BIND Tranceiver (0x00000009)
// command_id 4 octets
Матрица.SetValue(8,0);
Матрица.SetValue(9,0);
Матрица.SetValue(10,0);
Матрица.SetValue(11,0); //Не используется в PDU bind_transceiver.
// sequence_number 4 octets
Матрица.SetValue(12,0);
Матрица.SetValue(13,0);
Матрица.SetValue(14,0);
Матрица.SetValue(15, sequence_number); //уникальный номер последовательности bind_transceiver
Индекс = 16;
// BODY
// system_id COctet String max16
Для НомерСтроки = 1 По ДлинаЛогина Цикл
Матрица.SetValue(Индекс, КодСимвола(ИдПользователя, НомерСтроки));
Индекс = Индекс + 1;
КонецЦикла;
Матрица.SetValue(Индекс,0); // NULL для логина
Индекс = Индекс + 1;
// password COctet String max9
Для НомерСтроки = 1 По ДлинаПароля Цикл
Матрица.SetValue(Индекс, КодСимвола(Пароль, НомерСтроки));
Индекс = Индекс + 1;
КонецЦикла;
Матрица.SetValue(Индекс,0); // NULL для пароля
Индекс = Индекс + 1;
// system_Тип COctet String max13
Если ЗначениеЗаполнено(system_Тип) Тогда
Для НомерСтроки = 1 По Длина_system_Тип Цикл
Матрица.SetValue(Индекс, КодСимвола(system_Тип, НомерСтроки));
Индекс = Индекс + 1;
КонецЦикла;
КонецЕсли;
Матрица.SetValue(Индекс,0); // NULL для system_Тип
Индекс = Индекс + 1;
// interface_version
Матрица.SetValue(Индекс, КодСимвола(interface_version));//interface_version = 4 (версия 4 = 3.4)
Индекс = Индекс + 1;
// addr_ton
Матрица.SetValue(Индекс, addr_ton);
Индекс = Индекс + 1;
// addr_npi
Матрица.SetValue(Индекс, addr_npi);
Индекс = Индекс + 1;
// address_range
Если ЗначениеЗаполнено(address_range) Тогда
Для НомерСтроки = 1 По Длина_address_range Цикл
Матрица.SetValue(Индекс, КодСимвола(address_range, НомерСтроки));
Индекс = Индекс + 1;
КонецЦикла;
КонецЕсли;
Матрица.SetValue(Индекс,0); // NULL для address_range
Индекс = Индекс + 1;
// увеличиваем номер запроса
sequence_number = sequence_number + 1;
Возврат Матрица;
КонецФункции
|