| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "jingle/glue/pseudotcp_adapter.h" | 5 #include "jingle/glue/pseudotcp_adapter.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 private: | 73 private: |
| 74 double volume_; | 74 double volume_; |
| 75 double rate_; | 75 double rate_; |
| 76 double level_; | 76 double level_; |
| 77 base::TimeTicks last_update_; | 77 base::TimeTicks last_update_; |
| 78 }; | 78 }; |
| 79 | 79 |
| 80 class FakeSocket : public net::Socket { | 80 class FakeSocket : public net::Socket { |
| 81 public: | 81 public: |
| 82 FakeSocket() | 82 FakeSocket() |
| 83 : read_callback_(NULL), | 83 : old_read_callback_(NULL), |
| 84 rate_limiter_(NULL), | 84 rate_limiter_(NULL), |
| 85 latency_ms_(0) { | 85 latency_ms_(0) { |
| 86 } | 86 } |
| 87 virtual ~FakeSocket() { } | 87 virtual ~FakeSocket() { } |
| 88 | 88 |
| 89 void AppendInputPacket(const std::vector<char>& data) { | 89 void AppendInputPacket(const std::vector<char>& data) { |
| 90 if (rate_limiter_ && rate_limiter_->DropNextPacket()) | 90 if (rate_limiter_ && rate_limiter_->DropNextPacket()) |
| 91 return; // Lose the packet. | 91 return; // Lose the packet. |
| 92 | 92 |
| 93 if (read_callback_) { | 93 if (old_read_callback_ || !read_callback_.is_null()) { |
| 94 int size = std::min(read_buffer_size_, static_cast<int>(data.size())); | 94 int size = std::min(read_buffer_size_, static_cast<int>(data.size())); |
| 95 memcpy(read_buffer_->data(), &data[0], data.size()); | 95 memcpy(read_buffer_->data(), &data[0], data.size()); |
| 96 net::OldCompletionCallback* cb = read_callback_; | 96 if (old_read_callback_) { |
| 97 read_callback_ = NULL; | 97 net::OldCompletionCallback* cb = old_read_callback_; |
| 98 read_buffer_ = NULL; | 98 old_read_callback_ = NULL; |
| 99 cb->Run(size); | 99 read_buffer_ = NULL; |
| 100 cb->Run(size); |
| 101 } else { |
| 102 net::CompletionCallback cb = read_callback_; |
| 103 read_callback_.Reset(); |
| 104 read_buffer_ = NULL; |
| 105 cb.Run(size); |
| 106 } |
| 100 } else { | 107 } else { |
| 101 incoming_packets_.push_back(data); | 108 incoming_packets_.push_back(data); |
| 102 } | 109 } |
| 103 } | 110 } |
| 104 | 111 |
| 105 void Connect(FakeSocket* peer_socket) { | 112 void Connect(FakeSocket* peer_socket) { |
| 106 peer_socket_ = peer_socket; | 113 peer_socket_ = peer_socket; |
| 107 } | 114 } |
| 108 | 115 |
| 109 void set_rate_limiter(RateLimiter* rate_limiter) { | 116 void set_rate_limiter(RateLimiter* rate_limiter) { |
| 110 rate_limiter_ = rate_limiter; | 117 rate_limiter_ = rate_limiter; |
| 111 }; | 118 }; |
| 112 | 119 |
| 113 void set_latency(int latency_ms) { latency_ms_ = latency_ms; }; | 120 void set_latency(int latency_ms) { latency_ms_ = latency_ms; }; |
| 114 | 121 |
| 115 // net::Socket interface. | 122 // net::Socket implementation. |
| 116 virtual int Read(net::IOBuffer* buf, int buf_len, | 123 virtual int Read(net::IOBuffer* buf, int buf_len, |
| 117 net::OldCompletionCallback* callback) { | 124 net::OldCompletionCallback* callback) { |
| 118 CHECK(!read_callback_); | 125 CHECK(!old_read_callback_ && read_callback_.is_null()); |
| 119 CHECK(buf); | 126 CHECK(buf); |
| 120 | 127 |
| 121 if (incoming_packets_.size() > 0) { | 128 if (incoming_packets_.size() > 0) { |
| 129 scoped_refptr<net::IOBuffer> buffer(buf); |
| 130 int size = std::min( |
| 131 static_cast<int>(incoming_packets_.front().size()), buf_len); |
| 132 memcpy(buffer->data(), &*incoming_packets_.front().begin(), size); |
| 133 incoming_packets_.pop_front(); |
| 134 return size; |
| 135 } else { |
| 136 old_read_callback_ = callback; |
| 137 read_buffer_ = buf; |
| 138 read_buffer_size_ = buf_len; |
| 139 return net::ERR_IO_PENDING; |
| 140 } |
| 141 } |
| 142 virtual int Read(net::IOBuffer* buf, int buf_len, |
| 143 const net::CompletionCallback& callback) { |
| 144 CHECK(!old_read_callback_ && read_callback_.is_null()); |
| 145 CHECK(buf); |
| 146 |
| 147 if (incoming_packets_.size() > 0) { |
| 122 scoped_refptr<net::IOBuffer> buffer(buf); | 148 scoped_refptr<net::IOBuffer> buffer(buf); |
| 123 int size = std::min( | 149 int size = std::min( |
| 124 static_cast<int>(incoming_packets_.front().size()), buf_len); | 150 static_cast<int>(incoming_packets_.front().size()), buf_len); |
| 125 memcpy(buffer->data(), &*incoming_packets_.front().begin(), size); | 151 memcpy(buffer->data(), &*incoming_packets_.front().begin(), size); |
| 126 incoming_packets_.pop_front(); | 152 incoming_packets_.pop_front(); |
| 127 return size; | 153 return size; |
| 128 } else { | 154 } else { |
| 129 read_callback_ = callback; | 155 read_callback_ = callback; |
| 130 read_buffer_ = buf; | 156 read_buffer_ = buf; |
| 131 read_buffer_size_ = buf_len; | 157 read_buffer_size_ = buf_len; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 153 return false; | 179 return false; |
| 154 } | 180 } |
| 155 virtual bool SetSendBufferSize(int32 size) OVERRIDE { | 181 virtual bool SetSendBufferSize(int32 size) OVERRIDE { |
| 156 NOTIMPLEMENTED(); | 182 NOTIMPLEMENTED(); |
| 157 return false; | 183 return false; |
| 158 } | 184 } |
| 159 | 185 |
| 160 private: | 186 private: |
| 161 scoped_refptr<net::IOBuffer> read_buffer_; | 187 scoped_refptr<net::IOBuffer> read_buffer_; |
| 162 int read_buffer_size_; | 188 int read_buffer_size_; |
| 163 net::OldCompletionCallback* read_callback_; | 189 net::OldCompletionCallback* old_read_callback_; |
| 190 net::CompletionCallback read_callback_; |
| 164 | 191 |
| 165 std::deque<std::vector<char> > incoming_packets_; | 192 std::deque<std::vector<char> > incoming_packets_; |
| 166 | 193 |
| 167 FakeSocket* peer_socket_; | 194 FakeSocket* peer_socket_; |
| 168 RateLimiter* rate_limiter_; | 195 RateLimiter* rate_limiter_; |
| 169 int latency_ms_; | 196 int latency_ms_; |
| 170 }; | 197 }; |
| 171 | 198 |
| 172 class TCPChannelTester : public base::RefCountedThreadSafe<TCPChannelTester> { | 199 class TCPChannelTester : public base::RefCountedThreadSafe<TCPChannelTester> { |
| 173 public: | 200 public: |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 408 host_pseudotcp_->Connect(&host_connect_cb); | 435 host_pseudotcp_->Connect(&host_connect_cb); |
| 409 client_pseudotcp_->Connect(&client_connect_cb); | 436 client_pseudotcp_->Connect(&client_connect_cb); |
| 410 message_loop_.Run(); | 437 message_loop_.Run(); |
| 411 | 438 |
| 412 ASSERT_EQ(NULL, host_pseudotcp_.get()); | 439 ASSERT_EQ(NULL, host_pseudotcp_.get()); |
| 413 } | 440 } |
| 414 | 441 |
| 415 } // namespace | 442 } // namespace |
| 416 | 443 |
| 417 } // namespace jingle_glue | 444 } // namespace jingle_glue |
| OLD | NEW |