1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- // Copyright 2014 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_SECURE_CHANNEL_FACTORY_H_
- #define REMOTING_PROTOCOL_SECURE_CHANNEL_FACTORY_H_
- #include <map>
- #include "base/memory/raw_ptr.h"
- #include "net/base/net_errors.h"
- #include "remoting/protocol/stream_channel_factory.h"
- namespace remoting {
- namespace protocol {
- class Authenticator;
- class ChannelAuthenticator;
- // StreamChannelFactory wrapper that authenticates every channel it creates.
- // When CreateChannel() is called it first calls the wrapped
- // StreamChannelFactory to create a channel and then uses the specified
- // Authenticator to secure and authenticate the new channel before returning it
- // to the caller.
- class SecureChannelFactory : public StreamChannelFactory {
- public:
- // Both parameters must outlive the object.
- SecureChannelFactory(StreamChannelFactory* channel_factory,
- Authenticator* authenticator);
- SecureChannelFactory(const SecureChannelFactory&) = delete;
- SecureChannelFactory& operator=(const SecureChannelFactory&) = delete;
- ~SecureChannelFactory() override;
- // StreamChannelFactory interface.
- void CreateChannel(const std::string& name,
- ChannelCreatedCallback callback) override;
- void CancelChannelCreation(const std::string& name) override;
- private:
- typedef std::map<std::string, ChannelAuthenticator*> AuthenticatorMap;
- void OnBaseChannelCreated(const std::string& name,
- ChannelCreatedCallback callback,
- std::unique_ptr<P2PStreamSocket> socket);
- void OnSecureChannelCreated(const std::string& name,
- ChannelCreatedCallback callback,
- int error,
- std::unique_ptr<P2PStreamSocket> socket);
- raw_ptr<StreamChannelFactory> channel_factory_;
- raw_ptr<Authenticator> authenticator_;
- AuthenticatorMap channel_authenticators_;
- };
- } // namespace protocol
- } // namespace remoting
- #endif // REMOTING_PROTOCOL_SECURE_CHANNEL_FACTORY_H_
|