blob: 7f841e1d9ce96e6ff965dc9f2326236a7f1e988e [file] [log] [blame]
// 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_callback.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,
const net::CompletionCallback& 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,
const net::CompletionCallback& callback) = 0;
};
} // namespace protocol
} // namespace remoting
#endif // REMOTING_PROTOCOL_P2P_STREAM_SOCKET_H_