1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/at_exit.h" 6 #include "base/command_line.h" 7 #include "base/memory/singleton.h" 8 #include "base/message_loop.h" 9 #include "base/metrics/stats_counters.h" 10 #include "net/base/completion_callback.h" 11 #include "net/base/io_buffer.h" 12 #include "net/base/net_errors.h" 13 #include "net/base/winsock_init.h" 14 #include "net/http/http_network_layer.h" 15 #include "net/http/http_request_info.h" 16 #include "net/http/http_transaction.h" 17 #include "net/proxy/proxy_service.h" 18 #include "net/tools/fetch/http_server.h" 19 20 void usage(const char* program_name) { 21 printf("usage: %s\n", program_name); 22 exit(-1); 23 } 24 25 int main(int argc, char**argv) { 26 base::AtExitManager exit; 27 base::StatsTable table("fetchserver", 50, 1000); 28 table.set_current(&table); 29 30 #if defined(OS_WIN) 31 net::EnsureWinsockInit(); 32 #endif // defined(OS_WIN) 33 34 CommandLine::Init(0, NULL); 35 const CommandLine& parsed_command_line = *CommandLine::ForCurrentProcess(); 36 37 // Do work here. 38 MessageLoop loop; 39 HttpServer server("", 80); // TODO(mbelshe): make port configurable 40 MessageLoop::current()->Run(); 41 42 if (parsed_command_line.HasSwitch("stats")) { 43 // Dump the stats table. 44 printf("<stats>\n"); 45 int counter_max = table.GetMaxCounters(); 46 for (int index=0; index < counter_max; index++) { 47 std::string name(table.GetRowName(index)); 48 if (name.length() > 0) { 49 int value = table.GetRowValue(index); 50 printf("%s:\t%d\n", name.c_str(), value); 51 } 52 } 53 printf("</stats>\n"); 54 } 55 56 } 57