123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- #ifndef RTC_BASE_ASYNC_TCP_SOCKET_H_
- #define RTC_BASE_ASYNC_TCP_SOCKET_H_
- #include <stddef.h>
- #include <memory>
- #include "rtc_base/async_packet_socket.h"
- #include "rtc_base/async_socket.h"
- #include "rtc_base/buffer.h"
- #include "rtc_base/constructor_magic.h"
- #include "rtc_base/socket.h"
- #include "rtc_base/socket_address.h"
- namespace rtc {
- class AsyncTCPSocketBase : public AsyncPacketSocket {
- public:
- AsyncTCPSocketBase(AsyncSocket* socket, bool listen, size_t max_packet_size);
- ~AsyncTCPSocketBase() override;
-
- int Send(const void* pv,
- size_t cb,
- const rtc::PacketOptions& options) override = 0;
- virtual void ProcessInput(char* data, size_t* len) = 0;
-
- virtual void HandleIncomingConnection(AsyncSocket* socket) = 0;
- SocketAddress GetLocalAddress() const override;
- SocketAddress GetRemoteAddress() const override;
- int SendTo(const void* pv,
- size_t cb,
- const SocketAddress& addr,
- const rtc::PacketOptions& options) override;
- int Close() override;
- State GetState() const override;
- int GetOption(Socket::Option opt, int* value) override;
- int SetOption(Socket::Option opt, int value) override;
- int GetError() const override;
- void SetError(int error) override;
- protected:
-
-
-
- static AsyncSocket* ConnectSocket(AsyncSocket* socket,
- const SocketAddress& bind_address,
- const SocketAddress& remote_address);
- int FlushOutBuffer();
-
- void AppendToOutBuffer(const void* pv, size_t cb);
-
- bool IsOutBufferEmpty() const { return outbuf_.size() == 0; }
- void ClearOutBuffer() { outbuf_.Clear(); }
- private:
-
- void OnConnectEvent(AsyncSocket* socket);
- void OnReadEvent(AsyncSocket* socket);
- void OnWriteEvent(AsyncSocket* socket);
- void OnCloseEvent(AsyncSocket* socket, int error);
- std::unique_ptr<AsyncSocket> socket_;
- bool listen_;
- Buffer inbuf_;
- Buffer outbuf_;
- size_t max_insize_;
- size_t max_outsize_;
- RTC_DISALLOW_COPY_AND_ASSIGN(AsyncTCPSocketBase);
- };
- class AsyncTCPSocket : public AsyncTCPSocketBase {
- public:
-
-
-
- static AsyncTCPSocket* Create(AsyncSocket* socket,
- const SocketAddress& bind_address,
- const SocketAddress& remote_address);
- AsyncTCPSocket(AsyncSocket* socket, bool listen);
- ~AsyncTCPSocket() override {}
- int Send(const void* pv,
- size_t cb,
- const rtc::PacketOptions& options) override;
- void ProcessInput(char* data, size_t* len) override;
- void HandleIncomingConnection(AsyncSocket* socket) override;
- private:
- RTC_DISALLOW_COPY_AND_ASSIGN(AsyncTCPSocket);
- };
- }
- #endif
|