Встраивание веб-сервера Mongoose в C ++ - PullRequest
2 голосов
/ 08 августа 2011

Я только что встроил веб-сервер Mongoose в мой C ++ dll (только один заголовок и рекомендуется в большинстве потоков переполнения стека) и правильно настроил его на минимальный пример кода.

Однако я с трудом нахожу какие-либо учебные пособия, примеры и т. Д. По настройке самых основных потребностей веб-сервера. Мне нужно выяснить следующее ...

1) Как разрешить просмотр каталогов

2 Можно ли ограничить скорость загрузки файлов?

3) Можно ли иметь динамический список IP-адресов, разрешенных для загрузки файлов?

4) Как разрешить загрузку определенных расширений файлов (в данном случае .bz2) ОТВЕТ

5) Как привязать к определенному IP-адресу ОТВЕТИТЬ

Большая часть информации, которую я нашел, касается использования предварительно скомпилированного двоичного релиза, поэтому я сейчас немного озадачен. Любая помощь будет фантастической!

Ответы [ 2 ]

3 голосов
/ 08 августа 2011

1) опция "enable_directory_listing"

2) Не встроен в Mongoose (по крайней мере, не в той версии, которая у меня есть, которой около 6 месяцев). [РЕДАКТИРОВАТЬ:] Более новые версии поддержки Mongoose поддерживают регулирование скорость загрузки , Из руководства ...

Ограничение скорости загрузки для клиентов. throttle - это список через запятую пар ключ = значение, где ключ может быть:

*                   limit speed for all connections
x.x.x.x/mask        limit speed for specified subnet
uri_prefix_pattern  limit speed for given URIs

Значение является числом байтов в секунду с плавающей точкой, опционально сопровождается символом k или m, что означает килобайт и мегабайт соответственно. Лимит 0 означает неограниченный тариф. Последнее совпадение Правило побеждает. Примеры:

*=1k,10.0.0.0/8=0   limit all accesses to 1 kilobyte per second,
                    but give connections from 10.0.0.0/8 subnet
                    unlimited speed

/downloads/=5k      limit accesses to all URIs in `/downloads/` to
                    5 kilobytes per secods. All other accesses are unlimited

3) опция "access_control_list". В коде accept_new_connection вызывает check_acl, который сравнивает IP-адрес клиента со списком IP-адресов для принятия и / или игнорирования. Из руководства ...

Укажите список контроля доступа (ACL). ACL это список IP через запятую подсети, каждая подсеть добавляется со знаком «-» или «+». Плюс означает разрешить, минус значит отрицать. Если маска подсети опущена, например «-1.2.3.4», тогда это означает один IP-адрес. Маска может варьироваться от 0 до 32 включительно. По каждому запросу просматривается полный список, и выигрывает последний матч. По умолчанию установка разрешить все. Например, чтобы разрешить только 192.168 / 16 подсети подключить, запустить "мангуст" -0.0.0.0 / 0, + 192.168 / 16 ". По умолчанию:" "

http://code.google.com/p/mongoose/wiki/MongooseManual

2 голосов
/ 08 августа 2011

Конечно, как только я сдаюсь и пишу, я обнаруживаю, что большинство ответов были прямо перед моим лицом.Вот варианты для них ...

const char *options[] =
{
    "document_root", "C:/",
    "listening_ports", "127.0.0.1:8080",
    "extra_mime_types", ".bz2=plain/text",
    NULL
};

Однако, я все еще не уверен, как включить просмотр каталогов.Прямо сейчас, моя функция обратного вызова - только основная из примера (как показано ниже).Что мне нужно сделать, чтобы получить список файлов?

static void *callback(enum mg_event event, struct mg_connection *conn, const struct mg_request_info *request_info)
{
    if (event == MG_NEW_REQUEST)
    {
        // Echo requested URI back to the client
        mg_printf(conn, "HTTP/1.1 200 OK\r\n"
            "Content-Type: text/plain\r\n\r\n"
            "%s", request_info->uri);

        return "";  // Mark as processed
    }
    else
    {
        return NULL;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...