| // 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/macros.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() override; | 
 |  | 
 |   // StreamChannelFactory interface. | 
 |   void CreateChannel(const std::string& name, | 
 |                      const ChannelCreatedCallback& callback) override; | 
 |   void CancelChannelCreation(const std::string& name) override; | 
 |  | 
 |  private: | 
 |   typedef std::map<std::string, ChannelAuthenticator*> AuthenticatorMap; | 
 |  | 
 |   void OnBaseChannelCreated(const std::string& name, | 
 |                             const ChannelCreatedCallback& callback, | 
 |                             std::unique_ptr<P2PStreamSocket> socket); | 
 |  | 
 |   void OnSecureChannelCreated(const std::string& name, | 
 |                               const ChannelCreatedCallback& callback, | 
 |                               int error, | 
 |                               std::unique_ptr<P2PStreamSocket> 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_ |