diff options
| -rw-r--r-- | td/mtproto/RawConnection.cpp | 13 | ||||
| -rw-r--r-- | tdnet/td/net/DarwinHttp.h | 7 | ||||
| -rw-r--r-- | tdnet/td/net/DarwinHttp.mm | 13 |
3 files changed, 21 insertions, 12 deletions
diff --git a/td/mtproto/RawConnection.cpp b/td/mtproto/RawConnection.cpp index f67ec791f..2615bb9b6 100644 --- a/td/mtproto/RawConnection.cpp +++ b/td/mtproto/RawConnection.cpp @@ -284,7 +284,7 @@ class RawConnectionHttp final : public RawConnection { RawConnectionHttp(IPAddress ip_address, unique_ptr<StatsCallback> stats_callback) : ip_address_(std::move(ip_address)), stats_callback_(std::move(stats_callback)) { LOG(DEBUG) << "Create raw connection " << this; - answers_ = std::make_shared<MpscPollableQueue<Result<BufferSlice>>>(); + answers_ = std::make_shared<MpscPollableQueue<Result<std::pair<int32, BufferSlice>>>>(); answers_->init(); } @@ -370,7 +370,7 @@ class RawConnectionHttp final : public RawConnection { unique_ptr<StatsCallback> stats_callback_; ConnectionManager::ConnectionToken connection_token_; - std::shared_ptr<MpscPollableQueue<Result<BufferSlice>>> answers_; + std::shared_ptr<MpscPollableQueue<Result<std::pair<int32, BufferSlice>>>> answers_; std::vector<BufferSlice> to_send_; void on_read(size_t size, Callback &callback) { @@ -397,7 +397,9 @@ class RawConnectionHttp final : public RawConnection { break; } for (int i = 0; i < packets_n; i++) { - TRY_RESULT(packet, answers_->reader_get_unsafe()); + TRY_RESULT(answer, answers_->reader_get_unsafe()); + auto error_code = answer.first; + auto packet = std::move(answer.second); on_read(packet.size(), callback); CHECK(mode_ == Receive); mode_ = Send; @@ -405,11 +407,10 @@ class RawConnectionHttp final : public RawConnection { PacketInfo packet_info; packet_info.version = 2; - TRY_RESULT(read_result, Transport::read(packet.as_mutable_slice(), 0, auth_key, &packet_info)); + TRY_RESULT(read_result, Transport::read(packet.as_mutable_slice(), error_code, auth_key, &packet_info)); switch (read_result.type()) { - case Transport::ReadResult::Quickack: { + case Transport::ReadResult::Quickack: break; - } case Transport::ReadResult::Error: { TRY_STATUS(on_read_mtproto_error(read_result.error())); break; diff --git a/tdnet/td/net/DarwinHttp.h b/tdnet/td/net/DarwinHttp.h index 1f71e1316..7e13a8437 100644 --- a/tdnet/td/net/DarwinHttp.h +++ b/tdnet/td/net/DarwinHttp.h @@ -7,15 +7,18 @@ #pragma once #include "td/utils/buffer.h" +#include "td/utils/common.h" #include "td/utils/Promise.h" #include "td/utils/Slice.h" +#include <utility> + namespace td { class DarwinHttp { public: - static void get(CSlice url, Promise<BufferSlice> promise); - static void post(CSlice url, Slice data, Promise<BufferSlice> promise); + static void get(CSlice url, Promise<std::pair<int32, BufferSlice>> promise); + static void post(CSlice url, Slice data, Promise<std::pair<int32, BufferSlice>> promise); }; } // namespace td diff --git a/tdnet/td/net/DarwinHttp.mm b/tdnet/td/net/DarwinHttp.mm index 03e9cf69d..d570112c4 100644 --- a/tdnet/td/net/DarwinHttp.mm +++ b/tdnet/td/net/DarwinHttp.mm @@ -52,7 +52,7 @@ auto http_post(CSlice url, Slice data) { return request; } -void http_send(NSURLRequest *request, Promise<BufferSlice> promise) { +void http_send(NSURLRequest *request, Promise<std::pair<int32, BufferSlice>> promise) { __block auto callback = std::move(promise); NSURLSessionDataTask *dataTask = [getSession() @@ -60,7 +60,12 @@ void http_send(NSURLRequest *request, Promise<BufferSlice> promise) { completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error) { if (error == nil) { - callback.set_value(BufferSlice(Slice((const char *)([data bytes]), [data length]))); + int32 statusCode = 0; + if ([response isKindOfClass:[NSHTTPURLResponse class]]) { + NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; + statusCode = static_cast<int32>(httpResponse.statusCode); + } + callback.set_value(std::make_pair(statusCode, BufferSlice(Slice((const char *)([data bytes]), [data length])))); } else { callback.set_error(static_cast<int32>([error code]), "HTTP request failed"); } @@ -69,11 +74,11 @@ void http_send(NSURLRequest *request, Promise<BufferSlice> promise) { } } // namespace -void DarwinHttp::get(CSlice url, Promise<BufferSlice> promise) { +void DarwinHttp::get(CSlice url, Promise<std::pair<int32, BufferSlice>> promise) { return http_send(http_get(url), std::move(promise)); } -void DarwinHttp::post(CSlice url, Slice data, Promise<BufferSlice> promise) { +void DarwinHttp::post(CSlice url, Slice data, Promise<std::pair<int32, BufferSlice>> promise) { return http_send(http_post(url, data), std::move(promise)); } |
