    GEOBAZA

    Модуль GEOBAZA предназначен для быстрого получения географических данных, таких
    как страна, область или штат, город, а также географических координат, по которым
    зарегистрирован IP-адрес. Информация предоставляется на трех языках: русском,
    английском, а также языке страны, в которой зарегистрирован IP-адрес.

    В некоторых случаях точное определение географической привязки IP-адреса
    невозможно. Например, пользователь выходит в интернет через GPRS Московского
    оператора сотовой связи, находясь при этом в Петербурге.

    Модуль Geobaza5 состоит из файлов базы данных: "geobaza.dat", "geobaza.csv",
    и нескольких модулей API на языках: PHP, Perl, C. Подробные примеры использования
    API можно посмотреть в примерах на вышеуказанных языках программирования.

    Файл "geobaza.dat" является бинарным файлом и используется в классе Geobaza.

    Файл "geobaza.csv" в текстовом виде предоставляет информацию, хранящуюся в
    бинарном файле "geobaza.dat". В классе Geobaza не используется, но может быть
    полезен пользователям. Формат записей данного файла:
        *	IP начала диапазона в текстовом виде
        *	IP конца диапазона в текстовом виде
        *	IP начала диапазона в виде 32-битного целого
        *	Размер диапазона (конец-начало+1)
        *	TLD страны
        *	Иерархический идентификатор географического объекта (город, регион, страна)
    	Данный идентификатор может меняться от версии к версии! "Жесткая" привязка
    	к нему может в последствии вызвать неудобства.
        *	Подробное описание географического объекта в формате JSON.

    GEOBAZA Lite

    GEOBAZA Lite предоставляет тот же функционал, что и Geobaza, за одним исключением:
    точность определения географического объекта ограничивается до региона. Без
    ограничений определяются лишь города в Новгородской области.

    Для проверки корректности внедрения Geobaza можно проверить один из адресов,
    принадлежащих городам в Новгородской области, например, 85.142.15.255.

    PHP API

    В случае, если PHP собран без встроенной поддержки формата JSON, можно использовать
    наши включаемый файл для работы с JSON: include "json-dirty.php". Однако, это является
    "грязным" хаком, поэтому рекомендуем пересобрать PHP для встроенной поддержки JSON.

    КЛАСС Geobaza

    Метод is_valid() - возвращает true, если экземпляр класса Geobaza успешно
    загрузил требуемые базы данных и false в противном случае. Если экземпляр не смог
    загрузить базы данных, то нижеуказанные методы будут возвращать false.

    Метод get_error() - возвращает текстовое значение ошибки, если экземпляр был
    создан с ошибкой.

    Метод get_headers() - возвращает массив служебных заголовков файла данных:
        'api_version' => 5
        'build_date' => дата и время сборки файла
        'build_timestamp' => дата и время сборки файла, секунды с 1970 года.

    Метод lookup($ip4) - возвращает массив.
    * В случае, если адрес соответствует специальному диапазону, то
        array('special'=>[ Описание специального диапазона ])
    * Если адрес соответствует выделенной сети, то array('items'=>array of items)
        где array of items - упорядоченный массив описаний географического объекта.
        Первый элемент - наиболее детализированное описание объекта (город).
        Последний элемент - обычно страна.
        Каждый элемент является ассоциативным массивом:
        'id' => иерархический идентификатор объекта;
        'type' => тип (world, country, region, city);
        'lang' => государственный язык;
        'lat' => широта;
        'lon' => долгота;
        'population' => численность населения;
        'name' => ассоциативный массив значений 'язык'=>'название'. Для каждого объекта
    	поддерживаются название на русском (RU), английском (EN) и национальном языке,
    	если он отличен от RU и EN;
        'name_official' => то же, что и 'name', но вместо общеупотребительных названий
    	(Россия, Беларусь) используются официальные (Российская Федерация, Республика
    	Беларусь).

    Все данные, возвращаемые методом, представлены в кодировке UTF-8.

    PERL API

    Идеологически то же самое, что и PHP API. Различия только в синтаксисе языков.

    C API

    Все функции возвращают 0 при успешном завершении и не 0 - при неудаче.

    int geobaza_open(GEOBAZA *geobaza, char *filename)
        Открывает на чтение бинарный файл и инициализирует структуру данных geobaza.
        Данную структуру можно использовать для неограниченного числа последующих вызовов lookup.

    int geobaza_close(GEOBAZA *geobaza)
        Закрывает структуру geobaza.

    int geobaza_lookup(GEOBAZA *geobaza, u_int32_t ipv4, GEOBAZA_PLACE **ref_to_place)
        Выполняет поиск ip-адреса в формате 32-битного целого по структуре geobaza. Для хранения
        результата передается ссылка на неинициализированный указатель ref_to_place.
        В случае успешного поиска функция сама выделит память под результат.

        Указатель ref_to_place будет ссылаться на структуру, описывающую максимально возможный
        распознанный географический объект (город). Если значение поля parent не равно null, то
        оно указывает более высокий объект, следующий в иерархии (регион, страна).

    int geobaza_free_result(GEOBAZA_PLACE **ref_to_place)
        Освобождает все динамически выделенные под результат области памяти.

    int geobaza_aton(char *ipv4_as_text, u_int32_t *ipv4_as_32bit)
        Преобразует ip-адрес из текстового вида aaa.bbb.ccc.ddd в 32-битное беззнаковое целое.