blob: 10e39da759eb2fcee71d77c64222e82fc1bf35dc [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_DATAGRAM_SOCKET_H_
#define REMOTING_PROTOCOL_P2P_DATAGRAM_SOCKET_H_
#include "net/base/completion_repeating_callback.h"
namespace net {
class IOBuffer;
} // namespace net
namespace remoting {
namespace protocol {
// Peer-to-peer socket with datagram semantics.
class P2PDatagramSocket {
public:
virtual ~P2PDatagramSocket() {}
// Receives a packet, up to |buf_len| bytes, from the socket. Size of the
// incoming packet is returned in case of success. If the packet is larger
// than |buf_len| then it is truncated, i.e. only the first |buf_len| bytes
// are stored in the buffer. In case of failure a net error code is returned.
// 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 Recv(const scoped_refptr<net::IOBuffer>& buf,
int buf_len,
const net::CompletionRepeatingCallback& callback) = 0;
// Sends a packet. Returns |buf_len| to indicate success, otherwise a net
// error code is returned. 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 Send(const scoped_refptr<net::IOBuffer>& buf,
int buf_len,
const net::CompletionRepeatingCallback& callback) = 0;
};
} // namespace protocol
} // namespace remoting
#endif // REMOTING_PROTOCOL_P2P_DATAGRAM_SOCKET_H_