blob: e415d647b60c5ef5e9101833e2b4e173b2055309 [file]
// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef REMOTING_PROTOCOL_SESSION_PLUGIN_H_
#define REMOTING_PROTOCOL_SESSION_PLUGIN_H_
#include <memory>
#include <optional>
namespace remoting {
struct Attachment;
} // namespace remoting
namespace remoting::protocol {
// Interface for Session plugins. Plugins allow to send and receive optional
// information that is not essential for session handshake. Messages generated
// by the plugins on one end of a connection are attached to the session
// handshake messages and passed to the plugins on the other end. Plugins are
// optional, i.e. Session doesn't need any plugins to connect successfully.
class SessionPlugin {
public:
SessionPlugin() = default;
virtual ~SessionPlugin() = default;
// Returns an Attachment if the SessionPlugin has something to attach to the
// outgoing message.
// TODO: crbug.com/359620500 - Use a specific attachment type for plugins.
virtual std::optional<Attachment> GetNextMessage() = 0;
// Handles messages in |attachment|.
virtual void OnIncomingMessage(const Attachment& attachment) = 0;
};
} // namespace remoting::protocol
#endif // REMOTING_PROTOCOL_SESSION_PLUGIN_H_