blob: bb2a2278208d6f8ecc4d7635b74395c7b915b7af [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_WEBRTC_DATA_STREAM_ADAPTER_H_
#define REMOTING_PROTOCOL_WEBRTC_DATA_STREAM_ADAPTER_H_
#include <memory>
#include <string>
#include "base/callback.h"
#include "base/macros.h"
#include "remoting/protocol/message_pipe.h"
#include "third_party/webrtc/api/peerconnectioninterface.h"
#include "third_party/webrtc/base/refcount.h"
namespace remoting {
namespace protocol {
// WebrtcDataStreamAdapter implements MessagePipe for WebRTC data channels.
class WebrtcDataStreamAdapter : public MessagePipe,
public webrtc::DataChannelObserver {
public:
explicit WebrtcDataStreamAdapter(
rtc::scoped_refptr<webrtc::DataChannelInterface> channel);
~WebrtcDataStreamAdapter() override;
std::string name() { return channel_->label(); }
// MessagePipe interface.
void Start(EventHandler* event_handler) override;
void Send(google::protobuf::MessageLite* message,
const base::Closure& done) override;
private:
enum class State { CONNECTING, OPEN, CLOSED };
// webrtc::DataChannelObserver interface.
void OnStateChange() override;
void OnMessage(const webrtc::DataBuffer& buffer) override;
void OnConnected();
void OnClosed();
rtc::scoped_refptr<webrtc::DataChannelInterface> channel_;
EventHandler* event_handler_ = nullptr;
State state_ = State::CONNECTING;
DISALLOW_COPY_AND_ASSIGN(WebrtcDataStreamAdapter);
};
} // namespace protocol
} // namespace remoting
#endif // REMOTING_PROTOCOL_WEBRTC_DATA_STREAM_ADAPTER_H_