cNetwork: Added error message to error callbacks.
This commit is contained in:
parent
00253403b3
commit
64855ed340
@ -53,7 +53,7 @@ void cHostnameLookup::Callback(int a_ErrCode, evutil_addrinfo * a_Addr, void * a
|
|||||||
// If an error has occurred, notify the error callback:
|
// If an error has occurred, notify the error callback:
|
||||||
if (a_ErrCode != 0)
|
if (a_ErrCode != 0)
|
||||||
{
|
{
|
||||||
Self->m_Callbacks->OnError(a_ErrCode);
|
Self->m_Callbacks->OnError(a_ErrCode, evutil_socket_error_to_string(a_ErrCode));
|
||||||
cNetworkSingleton::Get().RemoveHostnameLookup(Self);
|
cNetworkSingleton::Get().RemoveHostnameLookup(Self);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -91,7 +91,7 @@ void cHostnameLookup::Callback(int a_ErrCode, evutil_addrinfo * a_Addr, void * a
|
|||||||
// If only unsupported families were reported, call the Error handler:
|
// If only unsupported families were reported, call the Error handler:
|
||||||
if (!HasResolved)
|
if (!HasResolved)
|
||||||
{
|
{
|
||||||
Self->m_Callbacks->OnError(DNS_ERR_NODATA);
|
Self->m_Callbacks->OnError(DNS_ERR_NODATA, "The name does not resolve to any known address.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -78,7 +78,7 @@ void cIPLookup::Callback(int a_Result, char a_Type, int a_Count, int a_Ttl, void
|
|||||||
if ((a_Result != 0) || (a_Addresses == nullptr))
|
if ((a_Result != 0) || (a_Addresses == nullptr))
|
||||||
{
|
{
|
||||||
// An error has occurred, notify the error callback:
|
// An error has occurred, notify the error callback:
|
||||||
Self->m_Callbacks->OnError(a_Result);
|
Self->m_Callbacks->OnError(a_Result, evutil_socket_error_to_string(a_Result));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -34,7 +34,7 @@ public:
|
|||||||
virtual void OnRemoteClosed(cTCPLink & a_Link) = 0;
|
virtual void OnRemoteClosed(cTCPLink & a_Link) = 0;
|
||||||
|
|
||||||
/** Called when an error is detected on the connection. */
|
/** Called when an error is detected on the connection. */
|
||||||
virtual void OnError(cTCPLink & a_Link, int a_ErrorCode) = 0;
|
virtual void OnError(cTCPLink & a_Link, int a_ErrorCode, const AString & a_ErrorMsg) = 0;
|
||||||
};
|
};
|
||||||
typedef SharedPtr<cCallbacks> cCallbacksPtr;
|
typedef SharedPtr<cCallbacks> cCallbacksPtr;
|
||||||
|
|
||||||
@ -127,7 +127,7 @@ public:
|
|||||||
virtual void OnSuccess(cTCPLink & a_Link) = 0;
|
virtual void OnSuccess(cTCPLink & a_Link) = 0;
|
||||||
|
|
||||||
/** Called when the Connect call fails. */
|
/** Called when the Connect call fails. */
|
||||||
virtual void OnError(int a_ErrorCode) = 0;
|
virtual void OnError(int a_ErrorCode, const AString & a_ErrorMsg) = 0;
|
||||||
};
|
};
|
||||||
typedef SharedPtr<cConnectCallbacks> cConnectCallbacksPtr;
|
typedef SharedPtr<cConnectCallbacks> cConnectCallbacksPtr;
|
||||||
|
|
||||||
@ -163,7 +163,7 @@ public:
|
|||||||
|
|
||||||
/** Called when an error is encountered while resolving.
|
/** Called when an error is encountered while resolving.
|
||||||
If an error is reported, the OnFinished() callback is not called. */
|
If an error is reported, the OnFinished() callback is not called. */
|
||||||
virtual void OnError(int a_ErrorCode) = 0;
|
virtual void OnError(int a_ErrorCode, const AString & a_ErrorMsg) = 0;
|
||||||
|
|
||||||
/** Called when all the addresses resolved have been reported via the OnNameResolved() callback.
|
/** Called when all the addresses resolved have been reported via the OnNameResolved() callback.
|
||||||
Only called if there was no error reported. */
|
Only called if there was no error reported. */
|
||||||
|
@ -173,7 +173,7 @@ bool cServerHandleImpl::Listen(UInt16 a_Port)
|
|||||||
if (bind(MainSock, reinterpret_cast<const sockaddr *>(&name), sizeof(name)) != 0)
|
if (bind(MainSock, reinterpret_cast<const sockaddr *>(&name), sizeof(name)) != 0)
|
||||||
{
|
{
|
||||||
m_ErrorCode = EVUTIL_SOCKET_ERROR();
|
m_ErrorCode = EVUTIL_SOCKET_ERROR();
|
||||||
Printf(m_ErrorMsg, "Cannot bind IPv6 socket to port %d: %s", a_Port, evutil_socket_error_to_string(m_ErrorCode));
|
Printf(m_ErrorMsg, "Cannot bind IPv6 socket to port %d: %d (%s)", a_Port, m_ErrorCode, evutil_socket_error_to_string(m_ErrorCode));
|
||||||
evutil_closesocket(MainSock);
|
evutil_closesocket(MainSock);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -181,14 +181,14 @@ bool cServerHandleImpl::Listen(UInt16 a_Port)
|
|||||||
if (evutil_make_socket_nonblocking(MainSock) != 0)
|
if (evutil_make_socket_nonblocking(MainSock) != 0)
|
||||||
{
|
{
|
||||||
m_ErrorCode = EVUTIL_SOCKET_ERROR();
|
m_ErrorCode = EVUTIL_SOCKET_ERROR();
|
||||||
Printf(m_ErrorMsg, "Cannot make socket on port %d non-blocking: %s", a_Port, evutil_socket_error_to_string(m_ErrorCode));
|
Printf(m_ErrorMsg, "Cannot make socket on port %d non-blocking: %d (%s)", a_Port, m_ErrorCode, evutil_socket_error_to_string(m_ErrorCode));
|
||||||
evutil_closesocket(MainSock);
|
evutil_closesocket(MainSock);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (listen(MainSock, 0) != 0)
|
if (listen(MainSock, 0) != 0)
|
||||||
{
|
{
|
||||||
m_ErrorCode = EVUTIL_SOCKET_ERROR();
|
m_ErrorCode = EVUTIL_SOCKET_ERROR();
|
||||||
Printf(m_ErrorMsg, "Cannot listen on port %d: %s", a_Port, evutil_socket_error_to_string(m_ErrorCode));
|
Printf(m_ErrorMsg, "Cannot listen on port %d: %d (%s)", a_Port, m_ErrorCode, evutil_socket_error_to_string(m_ErrorCode));
|
||||||
evutil_closesocket(MainSock);
|
evutil_closesocket(MainSock);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -215,6 +215,7 @@ bool cServerHandleImpl::Listen(UInt16 a_Port)
|
|||||||
err = EVUTIL_SOCKET_ERROR();
|
err = EVUTIL_SOCKET_ERROR();
|
||||||
LOGD("evutil_make_socket_nonblocking() failed for secondary socket: %d, %s", err, evutil_socket_error_to_string(err));
|
LOGD("evutil_make_socket_nonblocking() failed for secondary socket: %d, %s", err, evutil_socket_error_to_string(err));
|
||||||
evutil_closesocket(SecondSock);
|
evutil_closesocket(SecondSock);
|
||||||
|
return true; // Report as success, the primary socket is working
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bind to all IPv4 interfaces:
|
// Bind to all IPv4 interfaces:
|
||||||
@ -227,7 +228,7 @@ bool cServerHandleImpl::Listen(UInt16 a_Port)
|
|||||||
err = EVUTIL_SOCKET_ERROR();
|
err = EVUTIL_SOCKET_ERROR();
|
||||||
LOGD("Cannot bind secondary socket to port %d: %d (%s)", a_Port, err, evutil_socket_error_to_string(err));
|
LOGD("Cannot bind secondary socket to port %d: %d (%s)", a_Port, err, evutil_socket_error_to_string(err));
|
||||||
evutil_closesocket(SecondSock);
|
evutil_closesocket(SecondSock);
|
||||||
return true;
|
return true; // Report as success, the primary socket is working
|
||||||
}
|
}
|
||||||
|
|
||||||
if (listen(SecondSock, 0) != 0)
|
if (listen(SecondSock, 0) != 0)
|
||||||
@ -235,7 +236,7 @@ bool cServerHandleImpl::Listen(UInt16 a_Port)
|
|||||||
err = EVUTIL_SOCKET_ERROR();
|
err = EVUTIL_SOCKET_ERROR();
|
||||||
LOGD("Cannot listen on on secondary socket on port %d: %d (%s)", a_Port, err, evutil_socket_error_to_string(err));
|
LOGD("Cannot listen on on secondary socket on port %d: %d (%s)", a_Port, err, evutil_socket_error_to_string(err));
|
||||||
evutil_closesocket(SecondSock);
|
evutil_closesocket(SecondSock);
|
||||||
return false;
|
return true; // Report as success, the primary socket is working
|
||||||
}
|
}
|
||||||
|
|
||||||
m_SecondaryConnListener = evconnlistener_new(cNetworkSingleton::Get().GetEventBase(), Callback, this, LEV_OPT_CLOSE_ON_FREE | LEV_OPT_REUSEABLE, 0, SecondSock);
|
m_SecondaryConnListener = evconnlistener_new(cNetworkSingleton::Get().GetEventBase(), Callback, this, LEV_OPT_CLOSE_ON_FREE | LEV_OPT_REUSEABLE, 0, SecondSock);
|
||||||
|
@ -177,13 +177,19 @@ void cTCPLinkImpl::EventCallback(bufferevent * a_BufferEvent, short a_What, void
|
|||||||
if (a_What & BEV_EVENT_ERROR)
|
if (a_What & BEV_EVENT_ERROR)
|
||||||
{
|
{
|
||||||
// Choose the proper callback to call based on whether we were waiting for connection or not:
|
// Choose the proper callback to call based on whether we were waiting for connection or not:
|
||||||
|
int err = EVUTIL_SOCKET_ERROR();
|
||||||
if (Self->m_ConnectCallbacks != nullptr)
|
if (Self->m_ConnectCallbacks != nullptr)
|
||||||
{
|
{
|
||||||
Self->m_ConnectCallbacks->OnError(EVUTIL_SOCKET_ERROR());
|
if (err == 0)
|
||||||
|
{
|
||||||
|
// This could be a DNS failure
|
||||||
|
err = bufferevent_socket_get_dns_error(a_BufferEvent);
|
||||||
|
}
|
||||||
|
Self->m_ConnectCallbacks->OnError(err, evutil_socket_error_to_string(err));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Self->m_Callbacks->OnError(*Self, EVUTIL_SOCKET_ERROR());
|
Self->m_Callbacks->OnError(*Self, err, evutil_socket_error_to_string(err));
|
||||||
if (Self->m_Server == nullptr)
|
if (Self->m_Server == nullptr)
|
||||||
{
|
{
|
||||||
cNetworkSingleton::Get().RemoveLink(Self);
|
cNetworkSingleton::Get().RemoveLink(Self);
|
||||||
|
@ -60,9 +60,9 @@ class cEchoLinkCallbacks:
|
|||||||
LOGD("%p (%s:%d): Remote has closed the connection.", &a_Link, a_Link.GetRemoteIP().c_str(), a_Link.GetRemotePort());
|
LOGD("%p (%s:%d): Remote has closed the connection.", &a_Link, a_Link.GetRemoteIP().c_str(), a_Link.GetRemotePort());
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void OnError(cTCPLink & a_Link, int a_ErrorCode) override
|
virtual void OnError(cTCPLink & a_Link, int a_ErrorCode, const AString & a_ErrorMsg) override
|
||||||
{
|
{
|
||||||
LOGD("%p (%s:%d): Error %d in the cEchoLinkCallbacks.", &a_Link, a_Link.GetRemoteIP().c_str(), a_Link.GetRemotePort(), a_ErrorCode);
|
LOGD("%p (%s:%d): Error %d in the cEchoLinkCallbacks: %s", &a_Link, a_Link.GetRemoteIP().c_str(), a_Link.GetRemotePort(), a_ErrorCode, a_ErrorMsg.c_str());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -27,9 +27,9 @@ class cHTTPConnectCallbacks:
|
|||||||
LOGD("HTTP GET queued.");
|
LOGD("HTTP GET queued.");
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void OnError(int a_ErrorCode) override
|
virtual void OnError(int a_ErrorCode, const AString & a_ErrorMsg) override
|
||||||
{
|
{
|
||||||
LOGD("Error while connecting HTTP: %d", a_ErrorCode);
|
LOGD("Error while connecting HTTP: %d (%s)", a_ErrorCode, a_ErrorMsg.c_str());
|
||||||
m_Event.Set();
|
m_Event.Set();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,9 +64,9 @@ class cDumpCallbacks:
|
|||||||
m_Event.Set();
|
m_Event.Set();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void OnError(cTCPLink & a_Link, int a_ErrorCode) override
|
virtual void OnError(cTCPLink & a_Link, int a_ErrorCode, const AString & a_ErrorMsg) override
|
||||||
{
|
{
|
||||||
LOGD("Error in the cDumpCallbacks.");
|
LOGD("Error %d (%s) in the cDumpCallbacks.", a_ErrorCode, a_ErrorMsg.c_str());
|
||||||
m_Event.Set();
|
m_Event.Set();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,9 +22,9 @@ class cFinishLookupCallbacks:
|
|||||||
LOGD("%s resolves to IP %s", a_Name.c_str(), a_IP.c_str());
|
LOGD("%s resolves to IP %s", a_Name.c_str(), a_IP.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void OnError(int a_ErrorCode) override
|
virtual void OnError(int a_ErrorCode, const AString & a_ErrorMsg) override
|
||||||
{
|
{
|
||||||
LOGD("Error %d while performing lookup!", a_ErrorCode);
|
LOGD("Error %d (%s) while performing lookup!", a_ErrorCode, a_ErrorMsg.c_str());
|
||||||
exit(a_ErrorCode);
|
exit(a_ErrorCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user