2011-08-08 5 views
2

Je viens d'intégrer le serveur Web Mongoose dans ma DLL C++ (un seul en-tête et recommandé dans la plupart des threads de débordement de pile) et je l'ai correctement exécuté avec le code exemple minimal.Incorporation de Mongoose Web Server en C++

Cependant, j'ai du mal à trouver des tutoriels, des exemples, etc. sur la configuration des besoins de base d'un serveur Web. Je dois comprendre ce qui suit ...

1) Comment permettre l'exploration de répertoire

2 Est-il possible de limiter la vitesse de téléchargement sur les fichiers?

3) Est-il possible d'avoir une liste dynamique d'adresses IP autorisées à télécharger des fichiers?

4) Comment permettre le téléchargement des extensions de fichiers spécifiques (.bz2 dans ce cas) RÉPONDU

5) Comment lier à une adresse IP spécifique REPONDU

La plupart des informations que j'ai trouvées concernent l'utilisation de la version binaire précompilée, donc je suis un peu perplexe en ce moment. Toute aide serait fantastique!

Répondre

3

1) "enable_directory_listing option"

2) Non intégré dans Mongoose (au moins pas la version que j'ai, ce qui est d'environ 6 mois). [EDIT:] Nouvelles versions de support de Mongoose throttling vitesse de téléchargement. À partir du manuel ...

Limite de téléchargement pour les clients. l'accélérateur est une paires liste de clé = valeur séparées par des virgules, où la clé peut être:

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

La valeur est un nombre d'octets à virgule flottante par seconde, éventuellement suivie caractère ak ou m, ce qui signifie kilobytes et mégaoctets respectivement. Une limite de 0 signifie un taux illimité. La dernière règle gagnée gagne. Exemples: l'option

*=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) "de access_control_list". Dans le code accept_new_connection appelle check_acl qui compare l'adresse IP du client à une liste d'adresses IP à accepter et/ou à ignorer. À partir du manuel ...

Spécifiez la liste de contrôle d'accès (ACL).ACL est une liste de sous-réseaux IP séparés par des virgules, chaque sous-réseau est précédé d'un signe '-' ou '+'. Plus signifie permettre, moins signifie refuser. Si le masque de sous-réseau est omis, comme "-1.2.3.4", , cela signifie une adresse IP unique. Le masque peut varier de 0 à 32 inclusivement. A chaque requête, la liste complète est parcourue et la dernière correspondance est gagnante. Le paramètre par défaut est de permettre à tous. Par exemple, pour autoriser uniquement le sous-réseau 192.168/16 à se connecter, exécutez "mongoose -0.0.0.0/0, + 192.168/16". Valeur par défaut: « »

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

+0

Excellent, merci beaucoup! –

2

Bien sûr, dès que j'abandonne et que je poste, je trouve que la plupart des réponses étaient devant moi. Voici les options pour les ...

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

Cependant, je ne suis toujours pas sûr de savoir comment faire activer la navigation de répertoire. En ce moment, ma fonction de rappel est juste la base de l'exemple (voir ci-dessous). Que devrais-je faire pour l'obtenir afin que les fichiers soient listés?

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; 
    } 
} 
+0

Votre rappel est appelée pour chaque demande, y compris la demande d'annuaire, et il marque comme traitées en retournant non NULL. Vous devez renvoyer NULL si un répertoire a été demandé. Mongoose affiche alors le répertoire, sauf si l'option "enable_directory_listing" est définie sur "no". Dans le cas le plus simple, if (! Strcmp (request_info-> uri, "/")) { retourne NULL; } – valenok

Questions connexes