X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fsocket.h;h=1ea1332e277eab80ea2a231fc5d649127e325ec8;hb=635cb9d65f6d7f6758ae8ed874da00c8d94b6e39;hp=aec06b526e53c849120747e3a2c90b0dea7276b9;hpb=124c17e14134a4999afc1a5e981ab7c75b3694b9;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/socket.h b/include/socket.h index aec06b526..1ea1332e2 100644 --- a/include/socket.h +++ b/include/socket.h @@ -1,12 +1,16 @@ /* * InspIRCd -- Internet Relay Chat Daemon * - * Copyright (C) 2009 Daniel De Graaf - * Copyright (C) 2005-2007 Craig Edwards + * Copyright (C) 2013, 2015-2016 Attila Molnar + * Copyright (C) 2012-2013, 2017-2019 Sadie Powell + * Copyright (C) 2012 Robby + * Copyright (C) 2012 ChrisTX + * Copyright (C) 2012 Adam + * Copyright (C) 2009-2010 Daniel De Graaf + * Copyright (C) 2008 Pippijn van Steenhoven + * Copyright (C) 2007-2008 Robin Burchell * Copyright (C) 2007 Dennis Friis - * Copyright (C) 2007 Robin Burchell - * Copyright (C) 2006 Oliver Lupton - * Copyright (C) 2006 William Pitcock + * Copyright (C) 2006, 2008, 2010 Craig Edwards * * This file is part of InspIRCd. InspIRCd is free software: you can * redistribute it and/or modify it under the terms of the GNU General Public @@ -32,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -59,6 +64,9 @@ namespace irc struct sockaddr sa; struct sockaddr_in in4; struct sockaddr_in6 in6; + struct sockaddr_un un; + /** Return the family of the socket (e.g. AF_INET). */ + int family() const; /** Return the size of the structure for syscall passing */ socklen_t sa_size() const; /** Return port number or -1 if invalid */ @@ -116,13 +124,47 @@ namespace irc * @return true if the conversion was successful, false if not. */ CoreExport bool aptosa(const std::string& addr, int port, irc::sockets::sockaddrs& sa); + + /** Convert a UNIX socket path to a binary sockaddr. + * @param path The path to the UNIX socket. + * @param sa The structure to place the result in. Will be zeroed prior to conversion. + * @return True if the conversion was successful; otherwise, false. + */ + CoreExport bool untosa(const std::string& path, irc::sockets::sockaddrs& sa); + + /** Determines whether the specified file is a UNIX socket. + * @param file The path to the file to check. + * @return True if the file is a UNIX socket; otherwise, false. + */ + CoreExport bool isunix(const std::string& file); } } +/** Represents information about a failed port binding. */ +struct CoreExport FailedPort +{ + /** The error which happened during binding. */ + int error; + + /** The endpoint on which we were attempting to bind. */ + irc::sockets::sockaddrs sa; + + /** The config tag that the listener was created from. */ + ConfigTag* tag; + + FailedPort(int err, irc::sockets::sockaddrs& ep, ConfigTag* cfg) + : error(err) + , sa(ep) + , tag(cfg) + { + } +}; + /** A list of failed port bindings, used for informational purposes on startup */ -typedef std::vector > FailedPortList; +typedef std::vector FailedPortList; #include "socketengine.h" + /** This class handles incoming connections on client ports. * It will create a new User for every valid connection * and assign it a file descriptor.