Browse Source

Improve Errorhandling

JDierkse 10 months ago
parent
commit
cc85c0df3a
2 changed files with 84 additions and 67 deletions
  1. 83 67
      Http/HttpClientImpl.cpp
  2. 1 0
      Makefile.conf

+ 83 - 67
Http/HttpClientImpl.cpp

@@ -176,92 +176,108 @@ std::string HttpClientImpl::PerformOperation(const HttpRequest& request) const
 		Logging::Log(Logging::Severity::Debug, debug.str());
 	debug.str("");
 
+	CURLcode returnValue;
 	long code = 0;
-	curl_easy_perform(curl);
+
+	returnValue = curl_easy_perform(curl);
 	curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &code);
 
-	if (returnType != HttpRequest::ReturnType::Code)
+	if (CURLE_OK == returnValue)
 	{
-		if (code < 100)
-		{
-			// Non-Existent
-			std::stringstream err;
-			err << "Error (" << code << ") encountered while retrieving " << url << "\n";
-			error = err.str();
-		}
-		else if (code < 200)
-		{
-			// Informational
-			std::stringstream info;
-			info << "Informational (" << code << ") encountered while retrieving " << url << "\n";
-			Logging::Log(Logging::Severity::Info, info.str());
-		}
-		else if (code < 300)
+		if (returnType != HttpRequest::ReturnType::Code)
 		{
-			// Success
-			if (code == 202)
-				buffer = PerformOperation(request);
-		}
-		else if (code < 400)
-		{
-			// Redirection
-			if (returnType == HttpRequest::ReturnType::Redirect)
+			if (code < 100)
 			{
-				char* pRedirectUrl;
-				curl_easy_getinfo(curl, CURLINFO_REDIRECT_URL, &pRedirectUrl);
-				buffer = std::string(pRedirectUrl);
+				// Non-Existent
+				std::stringstream err;
+				err << "Error (" << code << ") encountered while retrieving " << url << "\n";
+				error = err.str();
 			}
-			else
+			else if (code < 200)
 			{
-				std::stringstream redirect;
-				redirect << "Redirect (" << code << ") encountered while retrieving " << url << "\n";
-				Logging::Log(Logging::Severity::Info, redirect.str());
+				// Informational
+				std::stringstream info;
+				info << "Informational (" << code << ") encountered while retrieving " << url << "\n";
+				Logging::Log(Logging::Severity::Info, info.str());
 			}
-		}
-		else if (code < 500)
-		{
-			// Client Error
-			std::stringstream err;
-			err << "Client Error (" << code << ") encountered while retrieving " << url << "\n";
-			err << "Response: " << buffer << "\n";
-/*
-			if (code == 429)
+			else if (code < 300)
 			{
-				// Too Many Requests
-				curl_off_t wait = 0;
-				curl_easy_getinfo(curl, CURLINFO_RETRY_AFTER, &wait);
-				err << "Retry after " << wait << " seconds\n";
+				// Success
+				if (code == 202)
+					buffer = PerformOperation(request);
+			}
+			else if (code < 400)
+			{
+				// Redirection
+				if (returnType == HttpRequest::ReturnType::Redirect)
+				{
+					char* pRedirectUrl;
+					curl_easy_getinfo(curl, CURLINFO_REDIRECT_URL, &pRedirectUrl);
+					buffer = std::string(pRedirectUrl);
+				}
+				else
+				{
+					std::stringstream redirect;
+					redirect << "Redirect (" << code << ") encountered while retrieving " << url << "\n";
+					Logging::Log(Logging::Severity::Info, redirect.str());
+				}
+			}
+			else if (code < 500)
+			{
+				// Client Error
+				std::stringstream err;
+				err << "Client Error (" << code << ") encountered while retrieving " << url << "\n";
+				err << "Response: " << buffer << "\n";
+	/*
+				if (code == 429)
+				{
+					// Too Many Requests
+					curl_off_t wait = 0;
+					curl_easy_getinfo(curl, CURLINFO_RETRY_AFTER, &wait);
+					err << "Retry after " << wait << " seconds\n";
+				}
+	*/
+				error = err.str();
+			}
+			else if (code < 600)
+			{
+				// Server Error
+				std::stringstream err;
+				err << "Server Error (" << code << ") encountered while retrieving " << url << "\n";
+				err << "Response: " << buffer << "\n";
+				error = err.str();
+			}
+			else
+			{
+				// Non-Existent
+				std::stringstream err;
+				err << "Error (" << code << ") encountered while retrieving " << url << "\n";
+				err << "Response: " << buffer << "\n";
+				error = err.str();
 			}
-*/
-			error = err.str();
-		}
-		else if (code < 600)
-		{
-			// Server Error
-			std::stringstream err;
-			err << "Server Error (" << code << ") encountered while retrieving " << url << "\n";
-			err << "Response: " << buffer << "\n";
-			error = err.str();
 		}
 		else
 		{
-			// Non-Existent
-			std::stringstream err;
-			err << "Error (" << code << ") encountered while retrieving " << url << "\n";
-			err << "Response: " << buffer << "\n";
-			error = err.str();
+			buffer = std::to_string(code);
 		}
+
+		debug << "Code: " << code << std::endl;
+		if (m_debugLogging)
+			Logging::Log(Logging::Severity::Debug, debug.str());
+		debug.str("");
 	}
-	else
+	else if (CURLE_OPERATION_TIMEDOUT == returnValue)
 	{
-		buffer = std::to_string(code);
+		std::stringstream err;
+		err << "Timeout (" << m_timeout << " seconds) encountered while retrieving " << url << "\n";
+		error = err.str();
+
+		debug << "Operation timed out" << std::endl;
+		if (m_debugLogging)
+			Logging::Log(Logging::Severity::Debug, debug.str());
+		debug.str("");
 	}
 
-	debug << "Code: " << code << std::endl;
-	if (m_debugLogging)
-		Logging::Log(Logging::Severity::Debug, debug.str());
-	debug.str("");
-
 	curl_easy_cleanup(curl);
 
 	if (!error.empty())

+ 1 - 0
Makefile.conf

@@ -5,6 +5,7 @@
 LIBRARIES += Logging
 LIBRARIES += Utilities
 
+CFLAGS += -Wno-deprecated-declarations
 CFLAGS += -I$(ROOTPATH)/Libraries/asio/include
 
 LFLAGS += -pthread