2011-08-08 60 views
2

Mongoose WebサーバーをC++のdll(単なるヘッダーで、スタックオーバーフロースレッドの大部分で推奨)に埋め込んだので、非常に最小限のサンプルコードで正しく実行しています。Mongoose WebサーバーをC++に埋め込む

しかし、私は、Webサーバーの非常に基本的な必要性を構成する上で、チュートリアルやサンプルなどを見つけるのに時間が掛かります。私は、ディレクトリの参照

2は、ファイルにダウンロード速度を制限することが可能ですできるようにする方法)

1 ...次のことを把握する必要がありますか?

3)ファイルをダウンロードできるIPアドレスの動的リストを持つことは可能ですか?がどのように

に答え特定のIPアドレスにバインドする

5) に答え)この場合、特定のファイル拡張子のダウンロード(.bz2を許可する方法

4) 私が見つけた情報の大部分は、事前コンパイルされたバイナリリリースの使用に関するものなので、今はちょっと困っています。どんな助けも素晴らしいだろう!

答えて

3

1))(マングースに約6ヶ月で、私が持っている、少なくともいないバージョンを、構築されていないオプション

2) "enable_directory_listing"。 [編集:]最新バージョンのマングースサポートthrottlingダウンロード速度。マニュアルから...

クライアントのダウンロード速度を制限します。 AKまたはM文字、意味キロバイト続く浮動小数点秒当たりのバイト数、必要に応じて

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

値であるスロットルキーがあってもよいkey = valueのペアのカンマ区切りリスト ありますメガバイトはそれぞれ です。 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では、クライアントのIPと受諾および/または無視するIPのリストを比較するcheck_aclが呼び出されます。マニュアルから...

アクセス制御リスト(ACL)を指定します。ACLはIP サブネットのコンマで区切られたリストで、各サブネットの前に ' - 'または '+'記号が付いています。プラスの意味は、 の許可、マイナスの拒否です。サブネットマスクが省略されている場合、「-1.2.3.4」のように、 は単一のIPアドレスを意味します。マスクは0から32の範囲で変化します。 リクエストごとに、完全なリストがトラバースされ、最後の試合が勝利します。デフォルトの はすべてを許可する設定です。たとえば、192.168/16サブネット のみを接続するには、「mongoose -0.0.0.0/0、+ 192.168/16」を実行します。デフォルト:「」

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

+0

優秀、ありがとう! –

2

もちろん、私が諦めて投稿すると、答えのほとんどは私の顔の前にあった。ここにそれらのオプションがあります...

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

あなたのコールバックはディレクトリ要求を含め、要求ごとに呼び出され、非NULLを返すことによって処理されたとして、それをマークしています。ディレクトリが要求されている場合は、NULLを返す必要があります。 "enable_directory_listing"オプションが "no"に設定されていない限り、Mongooseはディレクトリを表示します。最も単純な場合、 if(!strcmp(request_info-> uri、 "/")){ return NULL; } – valenok

関連する問題