diff --git a/src/common/networking.c b/src/common/networking.c index 92d1b925c..4558f7f8e 100644 --- a/src/common/networking.c +++ b/src/common/networking.c @@ -62,7 +62,7 @@ int ffNetworkingSendHttpRequest(const char* host, const char* path, const char* return sockfd; } -void ffNetworkingRecvHttpResponse(int sockfd, FFstrbuf* buffer) +bool ffNetworkingRecvHttpResponse(int sockfd, FFstrbuf* buffer) { ssize_t received = recv(sockfd, buffer->chars + buffer->length, ffStrbufGetFree(buffer), 0); @@ -73,11 +73,13 @@ void ffNetworkingRecvHttpResponse(int sockfd, FFstrbuf* buffer) } close(sockfd); + return ffStrbufStartsWithS(buffer, "HTTP/1.1 200 OK\r\n"); } -void ffNetworkingGetHttp(const char* host, const char* path, uint32_t timeout, const char* headers, FFstrbuf* buffer) +bool ffNetworkingGetHttp(const char* host, const char* path, uint32_t timeout, const char* headers, FFstrbuf* buffer) { int sockfd = ffNetworkingSendHttpRequest(host, path, headers, timeout); if(sockfd > 0) - ffNetworkingRecvHttpResponse(sockfd, buffer); + return ffNetworkingRecvHttpResponse(sockfd, buffer); + return false; } diff --git a/src/common/networking.h b/src/common/networking.h index cab005902..145493ce7 100644 --- a/src/common/networking.h +++ b/src/common/networking.h @@ -6,7 +6,7 @@ #include "util/FFstrbuf.h" int ffNetworkingSendHttpRequest(const char* host, const char* path, const char* headers, uint32_t timeout); -void ffNetworkingRecvHttpResponse(int sock, FFstrbuf* buffer); -void ffNetworkingGetHttp(const char* host, const char* path, uint32_t timeout, const char* headers, FFstrbuf* buffer); +bool ffNetworkingRecvHttpResponse(int sock, FFstrbuf* buffer); +bool ffNetworkingGetHttp(const char* host, const char* path, uint32_t timeout, const char* headers, FFstrbuf* buffer); #endif diff --git a/src/modules/publicip.c b/src/modules/publicip.c index 513ccb60a..fe77e30f6 100644 --- a/src/modules/publicip.c +++ b/src/modules/publicip.c @@ -47,10 +47,10 @@ void ffPrintPublicIp(FFinstance* instance) FFstrbuf result; ffStrbufInitA(&result, 4096); - ffNetworkingRecvHttpResponse(sockfd, &result); - ffStrbufSubstrAfterFirstS(&result, "\r\n\r\n"); + bool success = ffNetworkingRecvHttpResponse(sockfd, &result); + if(success) ffStrbufSubstrAfterFirstS(&result, "\r\n\r\n"); - if(result.length == 0) + if(!success || result.length == 0) { ffPrintError(instance, FF_PUBLICIP_MODULE_NAME, 0, &instance->config.publicIP, "Failed to receive the server response"); ffStrbufDestroy(&result); diff --git a/src/modules/weather.c b/src/modules/weather.c index c85b429cb..43c1d56fd 100644 --- a/src/modules/weather.c +++ b/src/modules/weather.c @@ -29,10 +29,10 @@ void ffPrintWeather(FFinstance* instance) FFstrbuf result; ffStrbufInitA(&result, 4096); - ffNetworkingRecvHttpResponse(sockfd, &result); - ffStrbufSubstrAfterFirstS(&result, "\r\n\r\n"); + bool success = ffNetworkingRecvHttpResponse(sockfd, &result); + if (success) ffStrbufSubstrAfterFirstS(&result, "\r\n\r\n"); - if(result.length == 0) + if(!success || result.length == 0) { ffPrintError(instance, FF_WEATHER_MODULE_NAME, 0, &instance->config.weather, "Failed to receive the server response"); ffStrbufDestroy(&result);