1 /*
2  *  Copyright 2012 The WebRTC Project Authors. All rights reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef WEBRTC_P2P_BASE_TRANSPORTDESCRIPTIONFACTORY_H_
VV12 #define WEBRTC_P2P_BASE_TRANSPORTDESCRIPTIONFACTORY_H_
13 
14 #include "webrtc/p2p/base/transportdescription.h"
15 
16 namespace rtc {
17 class SSLIdentity;
18 }
19 
20 namespace cricket {
21 
22 struct TransportOptions {
U()23   TransportOptions() : ice_restart(false), prefer_passive_role(false) {}
24   bool ice_restart;
25   bool prefer_passive_role;
26 };
27 
~U()28 // Creates transport descriptions according to the supplied configuration.
29 // When creating answers, performs the appropriate negotiation
30 // of the various fields to determine the proper result.
31 class TransportDescriptionFactory {
32  public:
33   // Default ctor; use methods below to set configuration.
34   TransportDescriptionFactory();
35   SecurePolicy secure() const { return secure_; }
36   // The identity to use when setting up DTLS.
37   rtc::SSLIdentity* identity() const { return identity_; }
38 
39   // Specifies the transport protocol to be use.
40   void set_protocol(TransportProtocol protocol) { protocol_ = protocol; }
41   // Specifies the transport security policy to use.
42   void set_secure(SecurePolicy s) { secure_ = s; }
43   // Specifies the identity to use (only used when secure is not SEC_DISABLED).
44   void set_identity(rtc::SSLIdentity* identity) { identity_ = identity; }
45 
46   // Creates a transport description suitable for use in an offer.
47   TransportDescription* CreateOffer(const TransportOptions& options,
48       const TransportDescription* current_description) const;
49   // Create a transport description that is a response to an offer.
50   TransportDescription* CreateAnswer(
51       const TransportDescription* offer,
52       const TransportOptions& options,
53       const TransportDescription* current_description) const;
54 
55  private:
56   bool SetSecurityInfo(TransportDescription* description,
57                        ConnectionRole role) const;
58 
59   TransportProtocol protocol_;
60   SecurePolicy secure_;
61   rtc::SSLIdentity* identity_;
62 };
63 
64 }  // namespace cricket
65 
66 #endif  // WEBRTC_P2P_BASE_TRANSPORTDESCRIPTIONFACTORY_H_
67