UR3LCM/qrp(p)

Echolink нутрощі (частина перша)

Трохи про будову Echolink та про те, як він працює. Стаття ще не завершена. Нині цікава хіба для програмістів.

Служба адміністрування системи.

... Цей розділ з'явиться дещо пізніше

Сервер обліку
Сервер обліку або Directory Server є окремою підсистемою яка реєструє поточних учасників системи, веде їх облік, та надає дані про зареєстрованих учасників. Сервер обліку виконує функції цілком подібні до функцій служби динамічного DNS, проте використивує власні тривіальні протоколи обміну. Система Echolink підтримуюється за допомогою кількох серверів обліку, які взаємодіють із спільною базою даних. Усі сервери обліку виконуть одні й ті ж функції.
Клієнти приєднуються до сервера обліку через TCP-сполучення, порт сервера 5200.
Кожен зареєстрований учасник може одержати дані про усіх інших учасників, які на цей момент працюють у системі. Доступ до інформації мають лише зареєстровані клієнти. Станція повідомляє для реєстрації свій кличний знак, пароль, стан роботи, місцевий час, опис станції. Коже учасник повторює процедуру реєстрації із періодом 5-6 хв. Якщо станція протягом тривалого часу (десь понад 20 хв.) повторно не реєструється, то сервер обліку вважає, що така станція відімкнулася, і вилучає її із переліку.
Дані про кожного клієнта містять: кличний знак станції; реєстраційний номер станції; стислий опис станції; стан роботи станції; локальний час на момент останньої реєстрації; IP-адресу станції.
Найважливішою частиної є пара значень: кличний знак - IP-адреса станції.
Ці дані дозволяють дізнатися поточну IP-адресу станції і далі встановити безпосереднє IP-сполучення із нею. Впродовж роботи IP-адреса станції може змінюватися. Сервер обліку щоразу поновлює IP-адресу станції, що дозволяє клієнтам користуватися динамічними адресами провайдерів.

Обмін між станціями
У системі Echolink станції обмінюються між собою голосовими даними та текстовими повідомленями беспосередньо, без участі іншої сторони. Для обміну даними між сторонами застосовується два UDP сполучення. Одне через порт 5198, друге через порт 5199. Номери потів фіксовані і однакові в усіх учасників. UDP сполучення через порт 5199 використвовується як канал сигналізації, через який сторони сповіщають одна одну про приєднання, присутність у каналі зв'язку та про від'єднання від нього. Робота каналу сигналізації базується на сеансовому протоколі RTCP, але протокол використовується частково та із певними змінами у ньому.
UDP сполучення через порт 5198 задіюється для обміну зуковими та текстовими даними.
Обмін базується на транспортному протоколі RTP, який також використано частково та зі змінами.
Звук записується та відтворюється із частотою вибірки 8 КГц. Звукові пакети компресують, а далі розкомпресовують з допомогою GSM-кодека. Ефективна розрядність однієї вибірки становить 11 бітів. Для безперебійної передачі звукових пакетів пропускна здатність каналу не повинна бути меншою за 13 Кбітів/с. Поряд із звуковими пакетами передаються пакети із текстовими даними. Текстові пакети містять дані із каналу текстового зв'язку між операторами (т.зв. чату), а також текстові сповіщення від віддаленої системи.
Текстовим повідомленням від операторів передує кличний знак відправника, натомість системні сповіщення такої ознаки не мають.


Протоколи системи Echolink

Протокол обміну із Echolink сервером обліку
Echolink Directory Server Protocol із http://davidmpye.co.uk/

Сполучення із сервером обліку
Щоб зареєструватися у системі, потрібно встановити TCP-сполучення до порта 5200 одного із серверів обліку Echolink, наприклад server1.echolink.org. Перелік серверів обліку та рекомендації щодо їх вибору див. на сайті http://echolink.org
Реєстрація для роботи у системі та припинення роботи
Увійти у систему та вийти із неї дозволяє команда "lпараметри\r" (l -- мала латинська літера ель).
Обмін із сервером ведеться у текстовому режимі.
Поле параметрів містить: кличний знак, пароль, логічний стан роботи, місцевий час, опис станції.
Станція можне знаходитися у одному із трьох логічних станів: OFFLINE, ONLINE, BUSY. Щоб розпочати роботу у системі треба встановити стан ONLINE або стан BUSY. Припинити роботу можна тією ж самою командою "l", але встановивши стан OFFLINE.
Команди, що встановлююсть різний стан роботи станції мають такий формат:
Online: "lcallsign\254\254password\rONLINE3.38(hh:mm)\rdescription\r"
Busy: "lcallsign\254\254password\rBUSY3.40(hh:mm)\rdescription\r"
Offline: "lcallsign\254\254password\rOFF-V3.40\rdescription\r"
де:
l -- код команди;
callsign -- кличний знак;
\254 -- байт із вісімковим значенням 254, або у шіснадцятковому вигляді -- 0xAC;
password -- пароль;
\r -- код повернення каретки;
ONLINE, BUSY або OFF -- стан роботи станціїї;
hh:mm -- місцевий час (ГГ:ХХ);
description -- опис станції не довший як 27 байтів.

Зчитування переліку станцій
Щоб одержати перелік зареєстрованих станцій, необхідно успішно зареєструватися у системі, завершити сполучення і відразу встановити нове. Сервер обліку надалі ідентифікаватиме станцію за IP-адресою.
Далі потрібно надіслати команду "s\r" (s -- мала латинська літера ес). Команда не оброблюватиметься, якщо спершу не зареєструватися.

Сервер має відповісти текстом поділеним на рядки кодом \n -- новий рядок.
Формат відповіді сервера:

@@@
COUNT
CALLSIGN
DATA
ID
IP ADDRESS
+++

де:
Рядок @@@ -- сиґнатура початку переліку
Рядок COUNT -- кількість чотирирядкових блоків опису станцій (CALLSIGN, DATA, ID, IP ADDR).
Рядок CALLSIGN -- кличний знак станції доповнений спеціальними позначеннями:
якщо наприкінці стоїть -L, це линк вузол;
якщо наприкінці стоїть -R, це репітер;
якщо на початку і наприкінці стоять '*', це конференція;
у інших випадках це звичайна станція.

Рядок DATA містить опис станції доповнений наприкінці спеціальним полем у квадратних дужках [STATUS HH:MM], у якому:
STATUS -- стан станції, який може бути ON або BUSY;
HH:MM -- місцевий час.
Рядок IP_ADDR: IP-адреса станції у форматі чотирьох десяткових чисел розділених крапкою;
Рядок +++ -- сиґнатура кінця переліку.

Чотирирядкові блоки можуть містити також інформаційні сповіщення. Якщо довжина кличного знаку лише один символ, то наступний рядок DATA містить сповіщення.
Якщо кличний містить пробіл, то це сповіщення про помилку.
У цих випадках, наступні два рядки не містять даних, і їх можна іґнорувати.

Echolink варіант протоколу RTCP

Встановлення Echolink зв'язку між станціями

Пакет RTCP надсилається віддаленій станції через UDP протокол на порт 5199.
Спершу, у відповідності зі специфікацією, повинен міститися порожній пакет RR.

Сюди також включається пакет SDES, що містить наступні поля:
RTCP_SDES_CNAME CALLSIGN
RTCP_SDES_NAME 'ux1xxx stepan, kyiv'
RTCP_SDES_EMAIL CALLSIGN
RTCP_SDES_PHONE 18:35

Зауважте, що CALLSIGN надсилається як слово CALLSIGN, а не замінюється на кличний знак.
Поле RTCP_SDES_NAME містить кличний знак та текстовий опис, розділені пробілом, а у полі RTCP_SDES_PHONE вказується місцевий час.

Фрагмент Сі коду із якого видно структуру полів:
strcpy(line,"CALLSIGN");
addSDES(RTCP_SDES_CNAME, line);

sprintf(line,"%-15s%s", Callsign, NameQth);
addSDES(RTCP_SDES_NAME, line);

strcpy(line,"CALLSIGN");
addSDES(RTCP_SDES_EMAIL, line);

sprintf(line,"%2.2u:%2.2u", hours, minutes);
addSDES(RTCP_SDES_PHONE, line);

Підтримування Echolink зв'язку між станціями
... Цей розділ з'явиться дещо пізніше

Завершення Echolink зв'язку між станціями
... Цей розділ з'явиться дещо пізніше


Echolink варіант протоколу RTP

Пакети із текстовими даними
... Цей розділ з'явиться дещо пізніше

Пакети із звуковими даними
... Цей розділ з'явиться дещо пізніше

Зважайте! Автор цього сайту у жодному разі не відповідає за зміст інформації на інших сайтах на яку можуть вказувати гіпертекстові вказівники на цій сторінці.

©Ihor Sokorchuk (UR3LCM), 2010-2013

ПОВЕРНИСЬ