aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/http/fetch/httpfetcher.h
diff options
context:
space:
mode:
authorleo <leo@yandex-team.ru>2022-02-10 16:46:40 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:46:40 +0300
commit99609724f661f7e21d1cb08e8d80e87c3632fdb3 (patch)
tree49e222ea1c5804306084bb3ae065bb702625360f /library/cpp/http/fetch/httpfetcher.h
parent980edcd3304699edf9d4e4d6a656e585028e2a72 (diff)
downloadydb-99609724f661f7e21d1cb08e8d80e87c3632fdb3.tar.gz
Restoring authorship annotation for <leo@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'library/cpp/http/fetch/httpfetcher.h')
-rw-r--r--library/cpp/http/fetch/httpfetcher.h212
1 files changed, 106 insertions, 106 deletions
diff --git a/library/cpp/http/fetch/httpfetcher.h b/library/cpp/http/fetch/httpfetcher.h
index 1c5b94a678..7fc251afd2 100644
--- a/library/cpp/http/fetch/httpfetcher.h
+++ b/library/cpp/http/fetch/httpfetcher.h
@@ -1,22 +1,22 @@
#pragma once
-
-#ifdef _MSC_VER
+
+#ifdef _MSC_VER
#include <io.h>
-#endif
-
+#endif
+
#include <library/cpp/http/misc/httpdate.h>
-
-#include "httpagent.h"
-#include "httpparser.h"
-
-struct TFakeBackup {
+
+#include "httpagent.h"
+#include "httpparser.h"
+
+struct TFakeBackup {
int Write(void* /*buf*/, size_t /*size*/) {
return 0;
}
-};
-
-template <size_t bufsize = 5000>
-struct TFakeAlloc {
+};
+
+template <size_t bufsize = 5000>
+struct TFakeAlloc {
void Shrink(void* /*buf*/, size_t /*size*/) {
}
void* Grab(size_t /*min*/, size_t* real) {
@@ -24,17 +24,17 @@ struct TFakeAlloc {
return buf;
}
char buf[bufsize];
-};
-
+};
+
template <typename TAlloc = TFakeAlloc<>,
typename TCheck = TFakeCheck<>,
- typename TWriter = TFakeBackup,
+ typename TWriter = TFakeBackup,
typename TAgent = THttpAgent<>>
class THttpFetcher: public THttpParser<TCheck>, public TAlloc, public TWriter, public TAgent {
-public:
- static const size_t TCP_MIN = 1500;
- static int TerminateNow;
-
+public:
+ static const size_t TCP_MIN = 1500;
+ static int TerminateNow;
+
THttpFetcher()
: THttpParser<TCheck>()
, TAlloc()
@@ -47,54 +47,54 @@ public:
}
int Fetch(THttpHeader* header, const char* path, const char* const* headers, int persistent, bool head_request = false) {
- int ret = 0;
- int fetcherr = 0;
-
- THttpParser<TCheck>::Init(header, head_request);
+ int ret = 0;
+ int fetcherr = 0;
+
+ THttpParser<TCheck>::Init(header, head_request);
const char* scheme = HttpUrlSchemeKindToString((THttpURL::TSchemeKind)TAgent::GetScheme());
size_t schemelen = strlen(scheme);
- if (*path == '/') {
+ if (*path == '/') {
header->base = TStringBuf(scheme, schemelen);
header->base += TStringBuf("://", 3);
header->base += TStringBuf(TAgent::pHostBeg, TAgent::pHostEnd - TAgent::pHostBeg);
header->base += path;
- } else {
+ } else {
if (strlen(path) >= FETCHER_URL_MAX) {
header->error = HTTP_URL_TOO_LARGE;
return 0;
}
header->base = path;
- }
-
- if ((ret = TAgent::RequestGet(path, headers, persistent, head_request))) {
- header->error = (i16)ret;
- return 0;
- }
-
- bool inheader = 1;
+ }
+
+ if ((ret = TAgent::RequestGet(path, headers, persistent, head_request))) {
+ header->error = (i16)ret;
+ return 0;
+ }
+
+ bool inheader = 1;
void *bufptr = nullptr, *buf = nullptr, *parsebuf = nullptr;
- ssize_t got;
- size_t buffree = 0, bufsize = 0, buflen = 0;
- size_t maxsize = TCheck::GetMaxHeaderSize();
- do {
- if (buffree < TCP_MIN) {
- if (buf) {
- TAlloc::Shrink(buf, buflen - buffree);
- if (TWriter::Write(buf, buflen - buffree) < 0) {
+ ssize_t got;
+ size_t buffree = 0, bufsize = 0, buflen = 0;
+ size_t maxsize = TCheck::GetMaxHeaderSize();
+ do {
+ if (buffree < TCP_MIN) {
+ if (buf) {
+ TAlloc::Shrink(buf, buflen - buffree);
+ if (TWriter::Write(buf, buflen - buffree) < 0) {
buf = nullptr;
- ret = EIO;
- break;
- }
- }
- if (!(buf = TAlloc::Grab(TCP_MIN, &buflen))) {
- ret = ENOMEM;
- break;
- }
- bufptr = buf;
- buffree = buflen;
- }
- if ((got = TAgent::read(bufptr, buffree)) < 0) {
- fetcherr = errno;
+ ret = EIO;
+ break;
+ }
+ }
+ if (!(buf = TAlloc::Grab(TCP_MIN, &buflen))) {
+ ret = ENOMEM;
+ break;
+ }
+ bufptr = buf;
+ buffree = buflen;
+ }
+ if ((got = TAgent::read(bufptr, buffree)) < 0) {
+ fetcherr = errno;
if (errno == EINTR)
header->error = HTTP_INTERRUPTED;
else if (errno == ETIMEDOUT)
@@ -102,43 +102,43 @@ public:
else
header->error = HTTP_CONNECTION_LOST;
- break;
- }
-
- parsebuf = bufptr;
- bufptr = (char*)bufptr + got;
- bufsize += got;
- buffree -= got;
-
- THttpParser<TCheck>::Parse(parsebuf, got);
-
- if (header->error)
+ break;
+ }
+
+ parsebuf = bufptr;
+ bufptr = (char*)bufptr + got;
+ bufsize += got;
+ buffree -= got;
+
+ THttpParser<TCheck>::Parse(parsebuf, got);
+
+ if (header->error)
break; //if ANY error ocurred we will stop download that file or will have unprognosed stream position until MAX size reached
-
- if (inheader && THttpParser<TCheck>::GetState() != THttpParser<TCheck>::hp_in_header) {
- inheader = 0;
- if (TCheck::Check(header))
- break;
- if (header->header_size > (long)maxsize) {
- header->error = HTTP_HEADER_TOO_LARGE;
- break;
- }
+
+ if (inheader && THttpParser<TCheck>::GetState() != THttpParser<TCheck>::hp_in_header) {
+ inheader = 0;
+ if (TCheck::Check(header))
+ break;
+ if (header->header_size > (long)maxsize) {
+ header->error = HTTP_HEADER_TOO_LARGE;
+ break;
+ }
}
if (!inheader) {
- maxsize = TCheck::GetMaxBodySize(header);
- }
- if (header->http_status >= HTTP_EXTENDED)
- break;
- if (bufsize > maxsize) {
- header->error = inheader ? HTTP_HEADER_TOO_LARGE : HTTP_BODY_TOO_LARGE;
- break;
- }
- if (TerminateNow) {
- header->error = HTTP_INTERRUPTED;
- break;
- }
- } while (THttpParser<TCheck>::GetState() > THttpParser<TCheck>::hp_eof);
-
+ maxsize = TCheck::GetMaxBodySize(header);
+ }
+ if (header->http_status >= HTTP_EXTENDED)
+ break;
+ if (bufsize > maxsize) {
+ header->error = inheader ? HTTP_HEADER_TOO_LARGE : HTTP_BODY_TOO_LARGE;
+ break;
+ }
+ if (TerminateNow) {
+ header->error = HTTP_INTERRUPTED;
+ break;
+ }
+ } while (THttpParser<TCheck>::GetState() > THttpParser<TCheck>::hp_eof);
+
i64 Adjustment = 0;
if (!header->error) {
if (header->transfer_chunked) {
@@ -150,22 +150,22 @@ public:
Adjustment = 0;
}
- if (buf) {
+ if (buf) {
TAlloc::Shrink(buf, buflen - buffree + Adjustment);
- if (TWriter::Write(buf, buflen - buffree) < 0)
- ret = EIO;
- }
- TCheck::CheckEndDoc(header);
- if (ret || header->error || header->http_status >= HTTP_EXTENDED || header->connection_closed) {
- TAgent::Disconnect();
- if (!fetcherr)
- fetcherr = errno;
- }
- errno = fetcherr;
- return ret;
- }
-};
-
-template <typename TAlloc, typename TCheck, typename TWriter, typename TAgent>
-int THttpFetcher<TAlloc, TCheck, TWriter, TAgent>::TerminateNow = 0;
+ if (TWriter::Write(buf, buflen - buffree) < 0)
+ ret = EIO;
+ }
+ TCheck::CheckEndDoc(header);
+ if (ret || header->error || header->http_status >= HTTP_EXTENDED || header->connection_closed) {
+ TAgent::Disconnect();
+ if (!fetcherr)
+ fetcherr = errno;
+ }
+ errno = fetcherr;
+ return ret;
+ }
+};
+
+template <typename TAlloc, typename TCheck, typename TWriter, typename TAgent>
+int THttpFetcher<TAlloc, TCheck, TWriter, TAgent>::TerminateNow = 0;