mirror of
https://github.com/Xahau/xahaud.git
synced 2025-11-25 13:05:49 +00:00
* Fix warnings * Port cmake scripts to linux * Add command line options for running test suites * Add examples to CMakeLists * Return std::uint64_t from writer::content_length * basic_parser::write takes asio::const_buffer instead of pointer and size * Turn message test back on now that it passes * Rename to http::headers, use std::allocator, remove http_headers * http::message::method is now a string * Refactor to_string for ConstBufferSequence * Remove chunk_encode from the public interface * Initialize members for default constructed iterators * Disallow default construction for dependent buffer sequences Refactor http::message serialization: * Serialization no longer creates a copy of the headers and modifies them * New function prepare(), sets Connection, Transfer-Encoding, Content-Length based on the body attributes and caller options. Callers can use prepare() to have the fields set automatically, or they can set the fields manually. * Use write for operator<< * Tests for serialization
82 lines
2.8 KiB
C++
82 lines
2.8 KiB
C++
//------------------------------------------------------------------------------
|
|
/*
|
|
This file is part of Beast: https://github.com/vinniefalco/Beast
|
|
Copyright 2013, Vinnie Falco <vinnie.falco@gmail.com>
|
|
|
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
purpose with or without fee is hereby granted, provided that the above
|
|
copyright notice and this permission notice appear in all copies.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
*/
|
|
//==============================================================================
|
|
|
|
#include "http_async_server.hpp"
|
|
#include "http_sync_server.hpp"
|
|
#include "sig_wait.hpp"
|
|
|
|
#include <boost/program_options.hpp>
|
|
|
|
#include <iostream>
|
|
|
|
int main(int ac, char const* av[])
|
|
{
|
|
using namespace beast::http;
|
|
namespace po = boost::program_options;
|
|
po::options_description desc("Options");
|
|
|
|
desc.add_options()
|
|
("root,r", po::value<std::string>()->implicit_value("."),
|
|
"Set the root directory for serving files")
|
|
("port,p", po::value<std::uint16_t>()->implicit_value(8080),
|
|
"Set the port number for the server")
|
|
("ip", po::value<std::string>()->implicit_value("0.0.0.0"),
|
|
"Set the IP address to bind to, \"0.0.0.0\" for all")
|
|
("threads,n", po::value<std::size_t>()->implicit_value(4),
|
|
"Set the number of threads to use")
|
|
("sync,s", "Launch a synchronous server")
|
|
;
|
|
po::variables_map vm;
|
|
po::store(po::parse_command_line(ac, av, desc), vm);
|
|
|
|
std::string root = ".";
|
|
if(vm.count("root"))
|
|
root = vm["root"].as<std::string>();
|
|
|
|
std::uint16_t port = 8080;
|
|
if(vm.count("port"))
|
|
port = vm["port"].as<std::uint16_t>();
|
|
|
|
std::string ip = "0.0.0.0";
|
|
if(vm.count("ip"))
|
|
ip = vm["ip"].as<std::string>();
|
|
|
|
std::size_t threads = 4;
|
|
if(vm.count("threads"))
|
|
threads = vm["threads"].as<std::size_t>();
|
|
|
|
bool sync = vm.count("sync") > 0;
|
|
|
|
using endpoint_type = boost::asio::ip::tcp::endpoint;
|
|
using address_type = boost::asio::ip::address;
|
|
|
|
endpoint_type ep{address_type::from_string(ip), port};
|
|
|
|
if(sync)
|
|
{
|
|
http_sync_server server(ep, root);
|
|
sig_wait();
|
|
}
|
|
else
|
|
{
|
|
http_async_server server(ep, threads, root);
|
|
sig_wait();
|
|
}
|
|
}
|