#ifndef MBGL_STORAGE_HTTP_REQUEST #define MBGL_STORAGE_HTTP_REQUEST #include #include #include #include #include #include typedef struct uv_loop_s uv_loop_t; typedef struct uv_timer_s uv_timer_t; namespace mbgl { struct CacheRequestBaton; struct HTTPRequestBaton; struct CacheEntry; class SQLiteStore; class HTTPRequest : public BaseRequest { public: HTTPRequest(ResourceType type, const std::string &path, uv_loop_t *loop, util::ptr store); ~HTTPRequest(); void cancel(); void retryImmediately(); private: void startCacheRequest(); void handleCacheResponse(std::unique_ptr &&response); void startHTTPRequest(std::unique_ptr &&res); void handleHTTPResponse(HTTPResponseType responseType, std::unique_ptr &&response); void retryHTTPRequest(std::unique_ptr &&res, uint64_t timeout); void removeCacheBaton(); void removeHTTPBaton(); void removeBackoffTimer(); private: const unsigned long thread_id; uv_loop_t *const loop; CacheRequestBaton *cache_baton = nullptr; util::ptr http_baton; uv_timer_t *backoff_timer = nullptr; util::ptr store; const ResourceType type; uint8_t attempts = 0; friend struct HTTPRequestBaton; }; } #endif