ladybird/Libraries/LibCore/CNetworkJob.h
Andreas Kling bdf23a3d23 LibCore: Make it possible to cancel pending CNetworkJobs
Subclasses of CNetworkJob handle this by overriding shutdown().
This patch implements it for CHttpJob by simply tearing down the
underlying socket.

We also automatically call shutdown() after the job finishes,
regardless of success or failure. :^)
2019-09-21 17:32:26 +02:00

47 lines
1.1 KiB
C++

#pragma once
#include <AK/Function.h>
#include <LibCore/CObject.h>
class CNetworkResponse;
class CNetworkJob : public CObject {
C_OBJECT(CNetworkJob)
public:
enum class Error {
None,
ConnectionFailed,
TransmissionFailed,
ProtocolFailed,
Cancelled,
};
virtual ~CNetworkJob() override;
Function<void(bool success)> on_finish;
bool is_cancelled() const { return m_error == Error::Cancelled; }
bool has_error() const { return m_error != Error::None; }
Error error() const { return m_error; }
CNetworkResponse* response() { return m_response.ptr(); }
const CNetworkResponse* response() const { return m_response.ptr(); }
virtual void start() = 0;
virtual void shutdown() = 0;
void cancel()
{
shutdown();
m_error = Error::Cancelled;
}
protected:
CNetworkJob();
void did_finish(NonnullRefPtr<CNetworkResponse>&&);
void did_fail(Error);
private:
RefPtr<CNetworkResponse> m_response;
Error m_error { Error::None };
};
const char* to_string(CNetworkJob::Error);