| // Copyright 2015 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #ifndef REMOTING_PROTOCOL_P2P_STREAM_SOCKET_H_ | 
 | #define REMOTING_PROTOCOL_P2P_STREAM_SOCKET_H_ | 
 |  | 
 | #include "net/base/completion_once_callback.h" | 
 | #include "net/traffic_annotation/network_traffic_annotation.h" | 
 |  | 
 | namespace net { | 
 | class IOBuffer; | 
 | }  // namespace net | 
 |  | 
 | namespace remoting { | 
 | namespace protocol { | 
 |  | 
 | // Peer-to-peer socket with stream semantics. | 
 | class P2PStreamSocket { | 
 |  public: | 
 |   virtual ~P2PStreamSocket() {}; | 
 |  | 
 |   // Reads data, up to |buf_len| bytes, from the socket. The number of bytes | 
 |   // read is returned, or an error is returned upon failure. ERR_IO_PENDING | 
 |   // is returned if the operation could not be completed synchronously, in which | 
 |   // case the result will be passed to the callback when available. If the | 
 |   // operation is not completed immediately, the socket acquires a reference to | 
 |   // the provided buffer until the callback is invoked or the socket is | 
 |   // closed. If the socket is destroyed before the read completes, the | 
 |   // callback will not be invoked. | 
 |   virtual int Read(const scoped_refptr<net::IOBuffer>& buf, | 
 |                    int buf_len, | 
 |                    net::CompletionOnceCallback callback) = 0; | 
 |  | 
 |   // Writes data, up to |buf_len| bytes, to the socket. Note: data may be | 
 |   // written partially. The number of bytes written is returned, or an error | 
 |   // is returned upon failure. ERR_IO_PENDING is returned if the operation could | 
 |   // not be completed synchronously, in which case the result will be passed to | 
 |   // the callback when available.  If the operation is not completed | 
 |   // immediately, the socket acquires a reference to the provided buffer until | 
 |   // the callback is invoked or the socket is closed. Implementations of this | 
 |   // method should not modify the contents of the actual buffer that is written | 
 |   // to the socket. | 
 |   virtual int Write( | 
 |       const scoped_refptr<net::IOBuffer>& buf, | 
 |       int buf_len, | 
 |       net::CompletionOnceCallback callback, | 
 |       const net::NetworkTrafficAnnotationTag& traffic_annotation) = 0; | 
 | }; | 
 |  | 
 | }  // namespace protocol | 
 | }  // namespace remoting | 
 |  | 
 | #endif  // REMOTING_PROTOCOL_P2P_STREAM_SOCKET_H_ |