mirror of
https://github.com/matrix-construct/construct
synced 2024-11-17 23:40:57 +01:00
91 lines
2.9 KiB
C++
91 lines
2.9 KiB
C++
/*
|
|
* charybdis: standing on the shoulders of giant build times
|
|
*
|
|
* Copyright (C) 2017 Charybdis Development Team
|
|
* Copyright (C) 2017 Jason Volk <jason@zemos.net>
|
|
*
|
|
* 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 is present in all copies.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
|
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#pragma once
|
|
#define HAVE_IRCD_ASIO_H
|
|
|
|
///
|
|
/// Boost library
|
|
///
|
|
/// It is better to add a boost header which we have omitted here rather than
|
|
/// in your definition file, and then #include <ircd/asio.h>. This is because
|
|
/// we can compose a precompiled header for your definition file much easier
|
|
/// this way.
|
|
///
|
|
/// Note that there is no precompile for this header right now, only the
|
|
/// standard headers. That still significantly improves compile times of these
|
|
/// boost headers for the time being...
|
|
///
|
|
|
|
#include <boost/asio.hpp>
|
|
#include <boost/asio/ssl.hpp>
|
|
#include <boost/asio/steady_timer.hpp>
|
|
#include <boost/asio/spawn.hpp>
|
|
#include <boost/asio/io_service.hpp>
|
|
|
|
namespace ircd
|
|
{
|
|
std::exception_ptr make_eptr(const boost::system::error_code &ec);
|
|
|
|
string_view string(const mutable_buffer &, const boost::system::error_code &);
|
|
string_view string(const mutable_buffer &, const boost::system::system_error &);
|
|
std::string string(const boost::system::error_code &);
|
|
std::string string(const boost::system::system_error &);
|
|
}
|
|
|
|
struct ircd::strand
|
|
:asio::io_service::strand
|
|
{
|
|
using handler = std::function<void ()>;
|
|
|
|
operator const asio::io_service &() const;
|
|
operator asio::io_service &();
|
|
|
|
strand(asio::io_service &ios)
|
|
:asio::io_service::strand{ios}
|
|
{}
|
|
};
|
|
|
|
///
|
|
/// The following IRCd headers are not included in the main stdinc.h list of
|
|
/// includes because they require boost directly or symbols which we cannot
|
|
/// forward declare. You should include this in your definition file if you
|
|
/// need these low-level interfaces.
|
|
///
|
|
|
|
#include <ircd/ctx/continuation.h>
|
|
#include <ircd/net/asio.h>
|
|
#include <ircd/net/socket.h>
|
|
|
|
inline ircd::strand::operator
|
|
asio::io_service &()
|
|
{
|
|
return get_io_service();
|
|
}
|
|
|
|
inline ircd::strand::operator
|
|
const asio::io_service &()
|
|
const
|
|
{
|
|
return const_cast<strand *>(this)->get_io_service();
|
|
}
|