Скачать архив здесь: mega360.tar.gz . Состав архива: | |
mega_gps.h | описание структур данных и объявления переменных |
gg300.c | собственно программа |
gg300.conf | файл конфигурации сервера |
make | скрипт для компиляции |
make_mysql | скрипт для компиляции с поддержкой mysql |
soft | папка с обновлениями прошивки распространенных версий трекеров |
Программа представляет собой простой сервер сбора данных с GPS трекеров MEGA-GPS. Включена поддержка трекеров с устаревшими прошивками (от 3.01 и выше), возможность обновления прошивки до последней версии. Архив треков сохраняется в виде суточных бинарных файлов для каждого трекера (32 байта на точку трека) При запуске на сервере с CPU Intel Atom 1.6GHz при приеме данных от 1000 трекеров сердняя загрузка CPU не превышает 4%. |
1.1. Обмен даннымим между GPS трекером и сервером происходит через Интернет UDP пакетами |
1.2. Для идентификации на сервере трекер передает свой IMEI либо в каждом пакете данных (а), либо только в пакете авторизации для установления сессии (б) |
1.2.а. Передача IMEI в каждом пакете упрощает процесс идентификации, но увеличивает объем передаваемых трекером данных и ослабляет безопасность протокола передачи данных. Опция отключена по умолчанию и может быть включена в ответе на пакет авторизации (см. ниже) |
1.2.б. НЕ РЕКОМЕНДУЕТСЯ. В случае однократной передачи IMEI при авторизации трекера серверное программное обеспечение должно сохранить IP:PORT трекера в массиве или в базе данных для дальнейшей идентификации принимаемых UDP пакетов с данными по IP:PORT отправителя. В этом случае IP:PORT будет являться параметром сессии |
1.2.в. РЕКОМЕНДУЕТСЯ. Для упрощения идентификации принимаемых UDP пакетов серверное ПО при авторизации может передать трекеру параметр сессии (например, его индекс в массиве или базе данных). После этого трекер будет включать этот индекс в каждый последующий отправляемый пакет. |
1.3. Соединение трекера с сервером рекомендуется считать разорванным, если с момента получения последнего пакета от трекера прошло более 90 сек |
1.4. На каждый отправленный UDP пакет трекер ждет UDP пакет от сервера, если ответ не пришел в течение 8 секунд,
трекер повторяет передачу. |
1.5. Трекер анализирует принятые пакеты только с IP:PORT сервера |
1.6. Данные различных типов упаковываются в UDP пакет в виде бинарных тэгов, один UDP пакет может содержать 1 и более тэгов |
1.7. Независимо от количества тэгов в запросе трекера, UDP ответ сервера может содержать 1 и более тэгов |
1.8. Трекер одинаково анализирует принятые от сервера UDP пакеты-подтверждения передачи и внеочередные пакеты, таким образом, в любой момент после установления сессии можно выполнить USSD запрос или изменить состояние выходов трекера. |
1.9. В случае отсутствия связи с сервером трекер сохраняет данные трека в архиве в энергонезависимой памяти. После восстановления связи данные трека передаются в хронологическом порядке. Во время передачи архива трекер может присылать внеочередные данные (текущие координаты и т.п.). Однако эти данные помечаются особым образом (см. ниже). |
Длина поля, байты | Назначение
1 | Тип тэга
| 1 | Длина данных тэга
| 0..255 | Данные тэга
| |
Тип | Длина | Данные
Трекер, запрос Init
| 0x02 | 2 | Sequence Number - порядковый номер пакета
| 0x30 | 4 | Random - случайное число
| Сервер, ответ на Init
| 0x03 | 2 | Sequence Number, присланный трекером
| 0x43 | 4 | Unix timestamp
| 0x41 | 4 | Random - случайное число
| Трекер, авторизация (запрос сессии)
| 0x02 | 2 | Sequence Number - порядковый номер пакета
| 0x31 | 15 | IMEI
| 0x32 | 4 | Версия ПО
| 0x33 | 4 | подпись - анализировать не нужно
| 0x34 | 0..32 | Собственный номер из SIM
| 0x39 | 19 | SIM ICCID (серийный номер, начинается на 89)
| 0x35 | 4 | Версия оборудования
| 0x38 | 16 | Структура BOOTINFO (необязательно)
| Сервер, ответ в случае ошибки авторизации или устарения сессии, | После этого Трекер должен запросить новую сессию 0xFF | 0 | -
| Сервер, ответ при успешной авторизации
| 0x03 | 2 | Sequence Number, присланный трекером
| необязательные тэги
| 0x45 | 1 | IMEI flag, 0x01 - трекер будет присылать IMEI в каждом пакете данных, 0x00 - отключить опцию
| 0x04 | 4 | ID трекера на сервере, если указать - трекер тогда будет присылать такой же тэг в каждом пакете данных
| 0x44 | 1 | Состояние выходов маячка
| Трекер, передача пакета с точками трека
| 0x02 | 2 | Sequence Number - порядковый номер пакета
| 0x31 | 15 | IMEI, по умолчанию не включается в пакет (см. выше)
| 0x04 | 4 | ID трекера на сервере, по умолчанию не включается в пакет (см. выше)
| 0x3D | 30 | структура данных MEGA_GPS_355, текущие данные при пустом архиве трекера или | данные из архива трекера в хронологическом порядке, запись в архив на серевере разрешена в одном UDP пакете может быть до от 1 до 16 таких пакетов 0x3C | 30 | структура данных MEGA_GPS_355 текущие (внеочередные) данные при непустом архиве трекера, | запись в архив на сервере запрещена, иначе будет нарушена хронология в архиве в UDP пакете может быть только один такой пакет Сервер, ответ-подтверждение приема пакета
| 0x03 | 2 | Sequence Number, присланный трекером
| Трекер, передача ответа на USSD (после запроса сервера или USSD по умолчанию)
| 0x02 | 2 | Sequence Number - порядковый номер пакета
| 0x31 | 15 | IMEI, по умолчанию не включается в пакет (см. выше)
| 0x04 | 4 | ID трекера на сервере, по умолчанию не включается в пакет (см. выше)
| 0x36 | 1..32 | текст запроса USSD
| 0x37 | 1..255 | текст ответа USSD
| Сервер, ответ-подтверждение приема пакета
| 0x03 | 2 | Sequence Number, присланный трекером
| Сервер, запрос USSD
| 0x46 | 1..32 | текст запроса USSD
| Трекер, запрос SOFTWARE UPDATE
| 0x02 | 2 | Sequence Number - порядковый номер пакета
| 0x31 | 15 | IMEI, по умолчанию не включается в пакет (см. выше)
| 0x04 | 4 | ID трекера на сервере, по умолчанию не включается в пакет (см. выше)
| 0x3A | 16 | структура MEGA_GPS_UPDATE_HEADER
| Сервер, ответ SOFTWARE UPDATE
| 0x03 | 2 | Sequence Number, присланный трекером
| 0x4A | 16 | структура MEGA_GPS_UPDATE_HEADER, отказать в обновлении 16 байтов 0x00 | |