SocketStreamHandle.h [plain text]
#ifndef SocketStreamHandle_h
#define SocketStreamHandle_h
#include "SocketStreamHandleBase.h"
#if USE(SOUP)
#include "SessionID.h"
#include <wtf/RefCounted.h>
#include <wtf/glib/GRefPtr.h>
namespace WebCore {
class NetworkingContext;
class SocketStreamError;
class SocketStreamHandleClient;
class SocketStreamHandle final : public RefCounted<SocketStreamHandle>, public SocketStreamHandleBase {
public:
static Ref<SocketStreamHandle> create(const URL& url, SocketStreamHandleClient& client, NetworkingContext&, SessionID) { return adoptRef(*new SocketStreamHandle(url, client)); }
static Ref<SocketStreamHandle> create(GSocketConnection* socketConnection, SocketStreamHandleClient& client) { return adoptRef(*new SocketStreamHandle(socketConnection, client)); }
virtual ~SocketStreamHandle();
private:
SocketStreamHandle(const URL&, SocketStreamHandleClient&);
SocketStreamHandle(GSocketConnection*, SocketStreamHandleClient&);
int platformSend(const char* data, int length) override;
void platformClose() override;
void beginWaitingForSocketWritability();
void stopWaitingForSocketWritability();
static void connectedCallback(GSocketClient*, GAsyncResult*, SocketStreamHandle*);
static void readReadyCallback(GInputStream*, GAsyncResult*, SocketStreamHandle*);
static gboolean writeReadyCallback(GPollableOutputStream*, SocketStreamHandle*);
void connected(GRefPtr<GSocketConnection>&&);
void readBytes(gssize);
void didFail(SocketStreamError&&);
void writeReady();
GRefPtr<GSocketConnection> m_socketConnection;
GRefPtr<GInputStream> m_inputStream;
GRefPtr<GPollableOutputStream> m_outputStream;
GRefPtr<GSource> m_writeReadySource;
GRefPtr<GCancellable> m_cancellable;
std::unique_ptr<char[]> m_readBuffer;
};
}
#endif
#endif // SocketStreamHandle_h