| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #ifndef JINGLE_GLUE_CHANNEL_SOCKET_ADAPTER_H_ | |
| 6 #define JINGLE_GLUE_CHANNEL_SOCKET_ADAPTER_H_ | |
| 7 | |
| 8 #include "base/callback_forward.h" | |
| 9 #include "base/compiler_specific.h" | |
| 10 #include "net/socket/socket.h" | |
| 11 #include "third_party/webrtc/base/asyncpacketsocket.h" | |
| 12 #include "third_party/webrtc/base/sigslot.h" | |
| 13 #include "third_party/webrtc/base/socketaddress.h" | |
| 14 | |
| 15 namespace base { | |
| 16 class MessageLoop; | |
| 17 } | |
| 18 | |
| 19 namespace cricket { | |
| 20 class TransportChannel; | |
| 21 } // namespace cricket | |
| 22 | |
| 23 namespace jingle_glue { | |
| 24 | |
| 25 // TransportChannelSocketAdapter implements net::Socket interface on | |
| 26 // top of libjingle's TransportChannel. It is used by | |
| 27 // JingleChromotocolConnection to provide net::Socket interface for channels. | |
| 28 class TransportChannelSocketAdapter : public net::Socket, | |
| 29 public sigslot::has_slots<> { | |
| 30 public: | |
| 31 // TransportChannel object is always owned by the corresponding session. | |
| 32 explicit TransportChannelSocketAdapter(cricket::TransportChannel* channel); | |
| 33 ~TransportChannelSocketAdapter() override; | |
| 34 | |
| 35 // Sets callback that should be called when the adapter is being | |
| 36 // destroyed. The callback is not allowed to touch the adapter, but | |
| 37 // can do anything else, e.g. destroy the TransportChannel. | |
| 38 void SetOnDestroyedCallback(const base::Closure& callback); | |
| 39 | |
| 40 // Closes the stream. |error_code| specifies error code that will | |
| 41 // be returned by Read() and Write() after the stream is closed. | |
| 42 // Must be called before the session and the channel are destroyed. | |
| 43 void Close(int error_code); | |
| 44 | |
| 45 // Socket implementation. | |
| 46 int Read(net::IOBuffer* buf, | |
| 47 int buf_len, | |
| 48 const net::CompletionCallback& callback) override; | |
| 49 int Write(net::IOBuffer* buf, | |
| 50 int buf_len, | |
| 51 const net::CompletionCallback& callback) override; | |
| 52 | |
| 53 int SetReceiveBufferSize(int32 size) override; | |
| 54 int SetSendBufferSize(int32 size) override; | |
| 55 | |
| 56 private: | |
| 57 void OnNewPacket(cricket::TransportChannel* channel, | |
| 58 const char* data, | |
| 59 size_t data_size, | |
| 60 const rtc::PacketTime& packet_time, | |
| 61 int flags); | |
| 62 void OnWritableState(cricket::TransportChannel* channel); | |
| 63 void OnChannelDestroyed(cricket::TransportChannel* channel); | |
| 64 | |
| 65 base::MessageLoop* message_loop_; | |
| 66 | |
| 67 cricket::TransportChannel* channel_; | |
| 68 | |
| 69 base::Closure destruction_callback_; | |
| 70 | |
| 71 net::CompletionCallback read_callback_; | |
| 72 scoped_refptr<net::IOBuffer> read_buffer_; | |
| 73 int read_buffer_size_; | |
| 74 | |
| 75 net::CompletionCallback write_callback_; | |
| 76 scoped_refptr<net::IOBuffer> write_buffer_; | |
| 77 int write_buffer_size_; | |
| 78 | |
| 79 int closed_error_code_; | |
| 80 | |
| 81 DISALLOW_COPY_AND_ASSIGN(TransportChannelSocketAdapter); | |
| 82 }; | |
| 83 | |
| 84 } // namespace jingle_glue | |
| 85 | |
| 86 #endif // JINGLE_GLUE_CHANNEL_SOCKET_ADAPTER_H_ | |
| OLD | NEW |