mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-04-27 03:07:49 +02:00
[windows] add binding exceptions messagebox notifications, update exceptions handling code
Signed-off-by: R4SAS <r4sas@i2pmail.org>
This commit is contained in:
parent
d991cc3b96
commit
42d4781a96
9 changed files with 160 additions and 97 deletions
|
@ -23,6 +23,11 @@
|
|||
#include <syslog.h>
|
||||
#endif
|
||||
|
||||
#ifdef WIN32_APP
|
||||
#include <windows.h>
|
||||
#include "Win32/Win32App.h"
|
||||
#endif
|
||||
|
||||
enum LogLevel
|
||||
{
|
||||
eLogNone = 0,
|
||||
|
@ -197,4 +202,42 @@ void LogPrint (LogLevel level, TArgs&&... args) noexcept
|
|||
log.Append(msg);
|
||||
}
|
||||
|
||||
#ifdef WIN32_APP
|
||||
/**
|
||||
* @brief Show message box for user with message in it
|
||||
* @param level Message level (eLogError, eLogInfo, ...)
|
||||
* @param args Array of message parts
|
||||
*/
|
||||
template<typename... TArgs>
|
||||
void ShowMessageBox (LogLevel level, TArgs&&... args) noexcept
|
||||
{
|
||||
// fold message to single string
|
||||
std::stringstream ss("");
|
||||
|
||||
#if (__cplusplus >= 201703L) // C++ 17 or higher
|
||||
(LogPrint (ss, std::forward<TArgs>(args)), ...);
|
||||
#else
|
||||
LogPrint (ss, std::forward<TArgs>(args)...);
|
||||
#endif
|
||||
|
||||
HWND hWnd = FindWindow (I2PD_WIN32_CLASSNAME, TEXT("i2pd"));
|
||||
if (!hWnd) hWnd = NULL;
|
||||
|
||||
UINT uType;
|
||||
switch (level) {
|
||||
case eLogError :
|
||||
case eLogWarning :
|
||||
uType = MB_ICONWARNING;
|
||||
break;
|
||||
case eLogNone :
|
||||
case eLogInfo :
|
||||
case eLogDebug :
|
||||
default :
|
||||
uType = MB_ICONINFORMATION;
|
||||
break;
|
||||
}
|
||||
MessageBox( hWnd, TEXT(ss.str ().c_str ()), TEXT("i2pd"), uType | MB_TASKMODAL | MB_OK );
|
||||
}
|
||||
#endif // WIN32_APP
|
||||
|
||||
#endif // LOG_H__
|
||||
|
|
|
@ -1195,7 +1195,10 @@ namespace transport
|
|||
}
|
||||
catch ( std::exception & ex )
|
||||
{
|
||||
LogPrint(eLogError, "NTCP2: Failed to bind to v4 port ",address->port, ex.what());
|
||||
LogPrint(eLogError, "NTCP2: Failed to bind to v4 port ", address->port, ex.what());
|
||||
#ifdef WIN32_APP
|
||||
ShowMessageBox (eLogError, "Unable to start IPv4 NTCP2 transport at port ", address->port, ": ", ex.what ());
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -1218,7 +1221,10 @@ namespace transport
|
|||
auto conn = std::make_shared<NTCP2Session> (*this);
|
||||
m_NTCP2V6Acceptor->async_accept(conn->GetSocket (), std::bind (&NTCP2Server::HandleAcceptV6, this, conn, std::placeholders::_1));
|
||||
} catch ( std::exception & ex ) {
|
||||
LogPrint(eLogError, "NTCP2: failed to bind to v6 port ", address->port);
|
||||
LogPrint(eLogError, "NTCP2: failed to bind to v6 port ", address->port, ": ", ex.what());
|
||||
#ifdef WIN32_APP
|
||||
ShowMessageBox (eLogError, "Unable to start IPv6 NTCP2 transport at port ", address->port, ": ", ex.what ());
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -823,7 +823,10 @@ namespace transport
|
|||
LogPrint (eLogInfo, "NTCP: Start listening v6 TCP port ", address->port);
|
||||
} catch ( std::exception & ex ) {
|
||||
/** fail to bind ip4 */
|
||||
LogPrint(eLogError, "NTCP: Failed to bind to v4 port ",address->port, ex.what());
|
||||
LogPrint(eLogError, "NTCP: Failed to bind to v4 port ", address->port, ": ", ex.what());
|
||||
#ifdef WIN32_APP
|
||||
ShowMessageBox (eLogError, "Unable to start IPv4 NTCP transport at port ", address->port, ": ", ex.what ());
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -846,7 +849,10 @@ namespace transport
|
|||
auto conn = std::make_shared<NTCPSession> (*this);
|
||||
m_NTCPV6Acceptor->async_accept(conn->GetSocket (), std::bind (&NTCPServer::HandleAcceptV6, this, conn, std::placeholders::_1));
|
||||
} catch ( std::exception & ex ) {
|
||||
LogPrint(eLogError, "NTCP: failed to bind to v6 port ", address->port);
|
||||
LogPrint(eLogError, "NTCP: failed to bind to v6 port ", address->port, ": ", ex.what());
|
||||
#ifdef WIN32_APP
|
||||
ShowMessageBox (eLogError, "Unable to start IPv6 NTCP transport at port ", address->port, ": ", ex.what ());
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,6 +53,9 @@ namespace transport
|
|||
LogPrint (eLogInfo, "SSU: Start listening v4 port ", m_Endpoint.port());
|
||||
} catch ( std::exception & ex ) {
|
||||
LogPrint (eLogError, "SSU: failed to bind to v4 port ", m_Endpoint.port(), ": ", ex.what());
|
||||
#ifdef WIN32_APP
|
||||
ShowMessageBox (eLogError, "Unable to start IPv4 SSU transport at port ", m_Endpoint.port(), ": ", ex.what ());
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -67,6 +70,9 @@ namespace transport
|
|||
LogPrint (eLogInfo, "SSU: Start listening v6 port ", m_EndpointV6.port());
|
||||
} catch ( std::exception & ex ) {
|
||||
LogPrint (eLogError, "SSU: failed to bind to v6 port ", m_EndpointV6.port(), ": ", ex.what());
|
||||
#ifdef WIN32_APP
|
||||
ShowMessageBox (eLogError, "Unable to start IPv6 SSU transport at port ", m_Endpoint.port(), ": ", ex.what ());
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -197,7 +203,7 @@ namespace transport
|
|||
m_SocketV6.close ();
|
||||
OpenSocketV6 ();
|
||||
ReceiveV6 ();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -580,7 +586,7 @@ namespace transport
|
|||
{
|
||||
return session->GetState () == eSessionStateEstablished && session != excluded;
|
||||
}
|
||||
);
|
||||
);
|
||||
}
|
||||
|
||||
template<typename Filter>
|
||||
|
@ -604,7 +610,7 @@ namespace transport
|
|||
{
|
||||
return session->GetState () == eSessionStateEstablished && session != excluded;
|
||||
}
|
||||
);
|
||||
);
|
||||
}
|
||||
|
||||
std::set<SSUSession *> SSUServer::FindIntroducers (int maxNumIntroducers)
|
||||
|
@ -620,7 +626,7 @@ namespace transport
|
|||
session->GetState () == eSessionStateEstablished &&
|
||||
ts < session->GetCreationTime () + SSU_TO_INTRODUCER_SESSION_DURATION;
|
||||
}
|
||||
);
|
||||
);
|
||||
if (session)
|
||||
{
|
||||
ret.insert (session.get ());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue