diff options
Diffstat (limited to 'remoting/protocol/secure_channel_factory.h')
-rw-r--r-- | remoting/protocol/secure_channel_factory.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/remoting/protocol/secure_channel_factory.h b/remoting/protocol/secure_channel_factory.h new file mode 100644 index 0000000..8f8e12e --- /dev/null +++ b/remoting/protocol/secure_channel_factory.h @@ -0,0 +1,60 @@ +// 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/basictypes.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); + virtual ~SecureChannelFactory(); + + // StreamChannelFactory interface. + virtual void CreateChannel(const std::string& name, + const ChannelCreatedCallback& callback) OVERRIDE; + virtual void CancelChannelCreation(const std::string& name) OVERRIDE; + + private: + typedef std::map<std::string, ChannelAuthenticator*> AuthenticatorMap; + + void OnBaseChannelCreated(const std::string& name, + const ChannelCreatedCallback& callback, + scoped_ptr<net::StreamSocket> socket); + + void OnSecureChannelCreated(const std::string& name, + const ChannelCreatedCallback& callback, + int error, + scoped_ptr<net::StreamSocket> socket); + + StreamChannelFactory* channel_factory_; + Authenticator* authenticator_; + + AuthenticatorMap channel_authenticators_; + + DISALLOW_COPY_AND_ASSIGN(SecureChannelFactory); +}; + +} // namespace protocol +} // namespace remoting + +#endif // REMOTING_PROTOCOL_SECURE_CHANNEL_FACTORY_H_ |