| Index: webrtc/base/asynctcpsocket.cc
|
| diff --git a/webrtc/base/asynctcpsocket.cc b/webrtc/base/asynctcpsocket.cc
|
| index 8e83cd1ea28db85613bc1611113c9f6ea6f3c500..7ec6dc8bc284053bab81782c0c7d235504c57f2f 100644
|
| --- a/webrtc/base/asynctcpsocket.cc
|
| +++ b/webrtc/base/asynctcpsocket.cc
|
| @@ -13,6 +13,7 @@
|
| #include <string.h>
|
|
|
| #include "webrtc/base/byteorder.h"
|
| +#include "webrtc/base/checks.h"
|
| #include "webrtc/base/common.h"
|
| #include "webrtc/base/logging.h"
|
|
|
| @@ -56,10 +57,13 @@ AsyncTCPSocketBase::AsyncTCPSocketBase(AsyncSocket* socket, bool listen,
|
| inpos_(0),
|
| outsize_(max_packet_size),
|
| outpos_(0) {
|
| - inbuf_ = new char[insize_];
|
| - outbuf_ = new char[outsize_];
|
| + if (!listen_) {
|
| + // Listening sockets don't send/receive data, so they don't need buffers.
|
| + inbuf_.reset(new char[insize_]);
|
| + outbuf_.reset(new char[outsize_]);
|
| + }
|
|
|
| - ASSERT(socket_.get() != NULL);
|
| + RTC_DCHECK(socket_.get() != NULL);
|
| socket_->SignalConnectEvent.connect(
|
| this, &AsyncTCPSocketBase::OnConnectEvent);
|
| socket_->SignalReadEvent.connect(this, &AsyncTCPSocketBase::OnReadEvent);
|
| @@ -73,10 +77,7 @@ AsyncTCPSocketBase::AsyncTCPSocketBase(AsyncSocket* socket, bool listen,
|
| }
|
| }
|
|
|
| -AsyncTCPSocketBase::~AsyncTCPSocketBase() {
|
| - delete [] inbuf_;
|
| - delete [] outbuf_;
|
| -}
|
| +AsyncTCPSocketBase::~AsyncTCPSocketBase() {}
|
|
|
| SocketAddress AsyncTCPSocketBase::GetLocalAddress() const {
|
| return socket_->GetLocalAddress();
|
| @@ -103,7 +104,7 @@ AsyncTCPSocket::State AsyncTCPSocketBase::GetState() const {
|
| case Socket::CS_CONNECTED:
|
| return STATE_CONNECTED;
|
| default:
|
| - ASSERT(false);
|
| + RTC_NOTREACHED();
|
| return STATE_CLOSED;
|
| }
|
| }
|
| @@ -131,7 +132,7 @@ int AsyncTCPSocketBase::SendTo(const void *pv, size_t cb,
|
| if (addr == remote_address)
|
| return Send(pv, cb, options);
|
| // Remote address may be empty if there is a sudden network change.
|
| - ASSERT(remote_address.IsNil());
|
| + RTC_DCHECK(remote_address.IsNil());
|
| socket_->SetError(ENOTCONN);
|
| return -1;
|
| }
|
| @@ -142,32 +143,35 @@ int AsyncTCPSocketBase::SendRaw(const void * pv, size_t cb) {
|
| return -1;
|
| }
|
|
|
| - memcpy(outbuf_ + outpos_, pv, cb);
|
| + RTC_DCHECK(outbuf_.get());
|
| + memcpy(outbuf_.get() + outpos_, pv, cb);
|
| outpos_ += cb;
|
|
|
| return FlushOutBuffer();
|
| }
|
|
|
| int AsyncTCPSocketBase::FlushOutBuffer() {
|
| - int res = socket_->Send(outbuf_, outpos_);
|
| + RTC_DCHECK(outbuf_.get());
|
| + int res = socket_->Send(outbuf_.get(), outpos_);
|
| if (res <= 0) {
|
| return res;
|
| }
|
| if (static_cast<size_t>(res) <= outpos_) {
|
| outpos_ -= res;
|
| } else {
|
| - ASSERT(false);
|
| + RTC_NOTREACHED();
|
| return -1;
|
| }
|
| if (outpos_ > 0) {
|
| - memmove(outbuf_, outbuf_ + res, outpos_);
|
| + memmove(outbuf_.get(), outbuf_.get() + res, outpos_);
|
| }
|
| return res;
|
| }
|
|
|
| void AsyncTCPSocketBase::AppendToOutBuffer(const void* pv, size_t cb) {
|
| - ASSERT(outpos_ + cb < outsize_);
|
| - memcpy(outbuf_ + outpos_, pv, cb);
|
| + RTC_DCHECK(outpos_ + cb < outsize_);
|
| + RTC_DCHECK(outbuf_.get());
|
| + memcpy(outbuf_.get() + outpos_, pv, cb);
|
| outpos_ += cb;
|
| }
|
|
|
| @@ -176,7 +180,7 @@ void AsyncTCPSocketBase::OnConnectEvent(AsyncSocket* socket) {
|
| }
|
|
|
| void AsyncTCPSocketBase::OnReadEvent(AsyncSocket* socket) {
|
| - ASSERT(socket_.get() == socket);
|
| + RTC_DCHECK(socket_.get() == socket);
|
|
|
| if (listen_) {
|
| rtc::SocketAddress address;
|
| @@ -193,7 +197,8 @@ void AsyncTCPSocketBase::OnReadEvent(AsyncSocket* socket) {
|
| // Prime a read event in case data is waiting.
|
| new_socket->SignalReadEvent(new_socket);
|
| } else {
|
| - int len = socket_->Recv(inbuf_ + inpos_, insize_ - inpos_);
|
| + RTC_DCHECK(inbuf_.get());
|
| + int len = socket_->Recv(inbuf_.get() + inpos_, insize_ - inpos_);
|
| if (len < 0) {
|
| // TODO: Do something better like forwarding the error to the user.
|
| if (!socket_->IsBlocking()) {
|
| @@ -204,18 +209,18 @@ void AsyncTCPSocketBase::OnReadEvent(AsyncSocket* socket) {
|
|
|
| inpos_ += len;
|
|
|
| - ProcessInput(inbuf_, &inpos_);
|
| + ProcessInput(inbuf_.get(), &inpos_);
|
|
|
| if (inpos_ >= insize_) {
|
| LOG(LS_ERROR) << "input buffer overflow";
|
| - ASSERT(false);
|
| + RTC_NOTREACHED();
|
| inpos_ = 0;
|
| }
|
| }
|
| }
|
|
|
| void AsyncTCPSocketBase::OnWriteEvent(AsyncSocket* socket) {
|
| - ASSERT(socket_.get() == socket);
|
| + RTC_DCHECK(socket_.get() == socket);
|
|
|
| if (outpos_ > 0) {
|
| FlushOutBuffer();
|
|
|