О деактивации форума Eltex

Уважаемые коллеги! В связи с потерей актуальности данного ресурса, нами было принято решение о частичной деактивации форума Eltex. Мы отключили функции регистрации и создания новых тем, а также возможность оставлять сообщения. Форум продолжит работу в "режиме чтения", так как за долгие годы работы здесь накопилось много полезной информации и ответов на часто встречающиеся вопросы.

Мы активно развиваем другие каналы коммуникаций, которые позволяют более оперативно и адресно консультировать наших клиентов. Если у вас возникли вопросы по работе оборудования, вы можете обратиться в техническую поддержку Eltex, воспользовавшись формой обращения на сайте компании или оставить заявку в системе Service Desk. По иным вопросам проконсультируют наши менеджеры коммерческого отдела: eltex@eltex-co.ru.

Cтруктура описании ленты

Для вопросов возникших к нашей компании
Мерей
Сообщения: 38
Зарегистрирован: 10 фев 2011 11:10
Reputation: 0
Откуда: Казахстан, Атырау

Cтруктура описании ленты

Сообщение Мерей » 12 июл 2011 12:46

Здравствуйте, всем! Можете предоставить структуру описании ленты(записи) трафика станции МС-240.

Алексей Сергеев
Сообщения: 321
Зарегистрирован: 13 янв 2005 20:45
Reputation: 0
Откуда: Компания Элтекс
Контактная информация:

Re: Cтруктура описании ленты

Сообщение Алексей Сергеев » 13 июл 2011 15:01

Мерей писал(а):Здравствуйте, всем! Можете предоставить структуру описании ленты(записи) трафика станции МС-240.

У нас это называется формат бинарных данных биллинга.
Приведу полное описание, так как часто спрашивают.


== ЦПв3 (ЦПЕ) ==========

typedef struct {
WORD slot; // shelf:slot
WORD cell;
}XPORT;

typedef struct
{
BYTE day, month, hour,min; // дата и время начала разговора
// (год не пишется, ставится текущий, если месяц больше текущего то год -1)
WORD duration; // длительность (максимально 18 часов)
BYTE type; // тип разговора (см. расшифровку ниже)
BYTE sec; // секунды
XPORT portA; // порт А
BYTE caller[10]; // номер вызывающего, упакован
XPORT portB; // порт В
BYTE dialnum[15]; // набранный номер, упакован
BYTE trunkA; // номер транк группы А, 255 - локальный абонент
BYTE trunkB; // номер транк группы В, 255 - локальный абонент
BYTE Alen; // длина номера А
BYTE Blen; // длина номера В
BYTE catCID; // категория абонента А (в аscii)
WORD cont_talk; // индекс порезанного разговора =xFFFF для не порезаного
BYTE rsv2[2];
}

общая длина записи 50 байт.

типы записей
switch(record.type & 3)
{
case 0: str = "Локальный"; break;
case 1: str = "Входящий"; break;
case 2: str = "Исходящий"; break;
case 3: str = "Транзит"; break;
}
if(record.type>=0xF0) str = "***Метка***";
else if(record.type==0x80) str = "Метка-переадресации1";
else if(record.type==0x81) str = "Метка-переадресации2";
else if(record.type & 0x04) str+= "-переадресация";


cont_talk = индекс порезанной записи, если установлен флаг 0x8000, то это последний кусок.
если разговор не является частью другого то = 0xFFFF

строка портов (XPORT port)

int slot = port.slot & 0x0FFF;
switch(port.slot & 0xF000)
{
case 0x0000: // port
if(slot>999) slot = -1;
str.Format("%i.%i", slot, (port.cell>999) ? -1 : port.cell);
break;
case 0x1000: // CAS C4E1 port
if(slot>999) slot = -1;
str.Format("%i.%icas", slot, (port.cell>999) ? -1 : port.cell);
break;
case 0x2000: // SS7 C4E1 port
if(slot>999) slot = -1;
str.Format("%i.%iss7", slot, (port.cell>999) ? -1 : port.cell);
break;
case 0x4000: // PRI C4E1 port
if(slot>999) slot = -1;
str.Format("%i.%ipri", slot, (port.cell>999) ? -1 : port.cell);
break;
case 0x8000: // resource
if(port.slot==0x8000) // V5L_SLOT
{
str.Format("vid.%i", port.cell);
}
break;
}

== ЦКП (БКП) ==========

typedef struct
{
BYTE day, month, hour,min;
WORD duration;
BYTE type;
BYTE sec;
XPORT portA;
BYTE caller[15];
XPORT portB;
BYTE dialnum[15];
BYTE trunkA;
BYTE trunkB;
BYTE catCID;
BYTE rsv2[6];
}

typedef struct {
BYTE type;
BYTE slot;
BYTE stream;
BYTE port;
}XPORT;

формирование строки (XPORT port)
if(port.type == 0x05)
{
WORD index;
index = port.port;
index += (port.stream<<8);
str.Format("VA.%i", index);
}else{
str.Format("%i.%02i.%02i",
(port.slot>MAX_CARD) ? -1 : port.slot,
(port.stream>15) ? -1 : port.stream,
(port.port>40) ? -1 : port.port
);
}

тип такой же как для ЦПЕ.

==========
номера в упакованом формате:

const char DialChar[] = {
0,'1','2','3','4','5','6','7','8','9','0', '*', '#', ',', '?', 0, // pulse
0,'1','2','3','4','5','6','7','8','9','0', '*', '#', ',', '?', 0}; // DTMF

void UnpackDial(CString& str, BYTE* b, int b_len)
{
char c;

str.Empty();
for( int i=0; i<b_len; i++)
{
if( (c = DialChar[b[i]&0x0f]) == 0) break;
str += c;

if( (c = DialChar[b[i]>>4]) == 0) break;
str += c;
}
}


Вернуться в «Общие вопросы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 70 гостей