2012-06-10 16:50:54 +00:00
|
|
|
/*
|
2024-09-17 19:00:25 +00:00
|
|
|
* Deskflow -- mouse and keyboard sharing utility
|
2025-05-25 05:53:30 +00:00
|
|
|
* SPDX-FileCopyrightText: (C) 2025 Deskflow Developers
|
2025-01-24 00:11:17 +00:00
|
|
|
* SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd.
|
|
|
|
|
* SPDX-FileCopyrightText: (C) 2002 Chris Schoeneman
|
|
|
|
|
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
|
2012-06-10 16:50:54 +00:00
|
|
|
*/
|
|
|
|
|
|
2014-02-28 12:36:45 +00:00
|
|
|
#pragma once
|
2012-06-10 16:50:54 +00:00
|
|
|
|
2025-03-19 22:11:47 +00:00
|
|
|
#include "common/Common.h"
|
2025-03-20 23:35:21 +00:00
|
|
|
|
|
|
|
|
#include <stdexcept>
|
2025-01-06 03:47:11 +00:00
|
|
|
#include <string>
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! Generic thread exception
|
|
|
|
|
/*!
|
|
|
|
|
Exceptions derived from this class are used by the multithreading
|
|
|
|
|
library to perform stack unwinding when a thread terminates. These
|
|
|
|
|
exceptions must always be rethrown by clients when caught.
|
|
|
|
|
*/
|
2025-05-25 05:57:35 +00:00
|
|
|
class XThread : public std::exception
|
2024-10-17 18:04:35 +00:00
|
|
|
{
|
|
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! Thread exception to cancel
|
|
|
|
|
/*!
|
|
|
|
|
Thrown to cancel a thread. Clients must not throw this type, but
|
|
|
|
|
must rethrow it if caught (by XThreadCancel, XThread, or ...).
|
|
|
|
|
*/
|
2024-10-17 18:04:35 +00:00
|
|
|
class XThreadCancel : public XThread
|
|
|
|
|
{
|
|
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\def RETHROW_XTHREAD
|
|
|
|
|
Convenience macro to rethrow an XThread exception but ignore other
|
|
|
|
|
exceptions. Put this in your catch (...) handler after necessary
|
|
|
|
|
cleanup but before leaving or returning from the handler.
|
|
|
|
|
*/
|
2024-10-17 18:04:35 +00:00
|
|
|
#define RETHROW_XTHREAD \
|
|
|
|
|
try { \
|
|
|
|
|
throw; \
|
|
|
|
|
} catch (XThread &) { \
|
|
|
|
|
throw; \
|
|
|
|
|
} catch (...) { \
|
2024-07-02 19:07:06 +00:00
|
|
|
}
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! Generic network exception
|
|
|
|
|
/*!
|
|
|
|
|
Exceptions derived from this class are used by the networking
|
|
|
|
|
library to indicate various errors.
|
|
|
|
|
*/
|
2025-05-25 06:13:57 +00:00
|
|
|
class XArchNetwork : public std::runtime_error
|
2025-05-25 05:53:30 +00:00
|
|
|
{
|
2025-05-25 06:13:57 +00:00
|
|
|
using std::runtime_error::runtime_error;
|
2025-05-25 05:53:30 +00:00
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! Operation was interrupted
|
2025-05-25 05:53:30 +00:00
|
|
|
class XArchNetworkInterrupted : public XArchNetwork
|
|
|
|
|
{
|
|
|
|
|
using XArchNetwork::XArchNetwork;
|
|
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! Network insufficient permission
|
2025-05-25 05:53:30 +00:00
|
|
|
class XArchNetworkAccess : public XArchNetwork
|
|
|
|
|
{
|
|
|
|
|
using XArchNetwork::XArchNetwork;
|
|
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! Network insufficient resources
|
2025-05-25 05:53:30 +00:00
|
|
|
class XArchNetworkResource : public XArchNetwork
|
|
|
|
|
{
|
|
|
|
|
using XArchNetwork::XArchNetwork;
|
|
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! No support for requested network resource/service
|
2025-05-25 05:53:30 +00:00
|
|
|
class XArchNetworkSupport : public XArchNetwork
|
|
|
|
|
{
|
|
|
|
|
using XArchNetwork::XArchNetwork;
|
|
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! Network I/O error
|
2025-05-25 05:53:30 +00:00
|
|
|
class XArchNetworkIO : public XArchNetwork
|
|
|
|
|
{
|
|
|
|
|
using XArchNetwork::XArchNetwork;
|
|
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! Network address is unavailable or not local
|
2025-05-25 05:53:30 +00:00
|
|
|
class XArchNetworkNoAddress : public XArchNetwork
|
|
|
|
|
{
|
|
|
|
|
using XArchNetwork::XArchNetwork;
|
|
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! Network address in use
|
2025-05-25 05:53:30 +00:00
|
|
|
class XArchNetworkAddressInUse : public XArchNetwork
|
|
|
|
|
{
|
|
|
|
|
using XArchNetwork::XArchNetwork;
|
|
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! No route to address
|
2025-05-25 05:53:30 +00:00
|
|
|
class XArchNetworkNoRoute : public XArchNetwork
|
|
|
|
|
{
|
|
|
|
|
using XArchNetwork::XArchNetwork;
|
|
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! Socket not connected
|
2025-05-25 05:53:30 +00:00
|
|
|
class XArchNetworkNotConnected : public XArchNetwork
|
|
|
|
|
{
|
|
|
|
|
using XArchNetwork::XArchNetwork;
|
|
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! Remote read end of socket has closed
|
2025-05-25 05:53:30 +00:00
|
|
|
class XArchNetworkShutdown : public XArchNetwork
|
|
|
|
|
{
|
|
|
|
|
using XArchNetwork::XArchNetwork;
|
|
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! Remote end of socket has disconnected
|
2025-05-25 05:53:30 +00:00
|
|
|
class XArchNetworkDisconnected : public XArchNetwork
|
|
|
|
|
{
|
|
|
|
|
using XArchNetwork::XArchNetwork;
|
|
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! Remote end of socket refused connection
|
2025-05-25 05:53:30 +00:00
|
|
|
class XArchNetworkConnectionRefused : public XArchNetwork
|
|
|
|
|
{
|
|
|
|
|
using XArchNetwork::XArchNetwork;
|
|
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! Remote end of socket is not responding
|
2025-05-25 05:53:30 +00:00
|
|
|
class XArchNetworkTimedOut : public XArchNetwork
|
|
|
|
|
{
|
|
|
|
|
using XArchNetwork::XArchNetwork;
|
|
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! Generic network name lookup erros
|
2025-05-25 05:53:30 +00:00
|
|
|
class XArchNetworkName : public XArchNetwork
|
|
|
|
|
{
|
|
|
|
|
using XArchNetwork::XArchNetwork;
|
|
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! The named host is unknown
|
2025-05-25 05:53:30 +00:00
|
|
|
class XArchNetworkNameUnknown : public XArchNetworkName
|
|
|
|
|
{
|
|
|
|
|
using XArchNetworkName::XArchNetworkName;
|
|
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! The named host is known but has no address
|
2025-05-25 05:53:30 +00:00
|
|
|
class XArchNetworkNameNoAddress : public XArchNetworkName
|
|
|
|
|
{
|
|
|
|
|
using XArchNetworkName::XArchNetworkName;
|
|
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! Non-recoverable name server error
|
2025-05-25 05:53:30 +00:00
|
|
|
class XArchNetworkNameFailure : public XArchNetworkName
|
|
|
|
|
{
|
|
|
|
|
using XArchNetworkName::XArchNetworkName;
|
|
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! Temporary name server error
|
2025-05-25 05:53:30 +00:00
|
|
|
class XArchNetworkNameUnavailable : public XArchNetworkName
|
|
|
|
|
{
|
|
|
|
|
using XArchNetworkName::XArchNetworkName;
|
|
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! The named host is known but no supported address
|
2025-05-25 05:53:30 +00:00
|
|
|
class XArchNetworkNameUnsupported : public XArchNetworkName
|
|
|
|
|
{
|
|
|
|
|
using XArchNetworkName::XArchNetworkName;
|
|
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! Generic daemon exception
|
|
|
|
|
/*!
|
|
|
|
|
Exceptions derived from this class are used by the daemon
|
|
|
|
|
library to indicate various errors.
|
|
|
|
|
*/
|
2025-05-25 06:13:57 +00:00
|
|
|
class XArchDaemon : public std::runtime_error
|
2025-05-25 05:53:30 +00:00
|
|
|
{
|
2025-05-25 06:13:57 +00:00
|
|
|
using std::runtime_error::runtime_error;
|
2025-05-25 05:53:30 +00:00
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! Could not daemonize
|
2025-05-25 05:53:30 +00:00
|
|
|
class XArchDaemonFailed : public XArchDaemon
|
|
|
|
|
{
|
|
|
|
|
using XArchDaemon::XArchDaemon;
|
|
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! Could not install daemon
|
2025-05-25 05:53:30 +00:00
|
|
|
class XArchDaemonInstallFailed : public XArchDaemon
|
|
|
|
|
{
|
|
|
|
|
using XArchDaemon::XArchDaemon;
|
|
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! Could not uninstall daemon
|
2025-05-25 05:53:30 +00:00
|
|
|
class XArchDaemonUninstallFailed : public XArchDaemon
|
|
|
|
|
{
|
|
|
|
|
using XArchDaemon::XArchDaemon;
|
|
|
|
|
};
|
2012-06-10 16:50:54 +00:00
|
|
|
|
|
|
|
|
//! Attempted to uninstall a daemon that was not installed
|
2025-05-25 05:53:30 +00:00
|
|
|
class XArchDaemonUninstallNotInstalled : public XArchDaemonFailed
|
|
|
|
|
{
|
|
|
|
|
using XArchDaemonFailed::XArchDaemonFailed;
|
|
|
|
|
};
|