OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 2013 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
11 #ifndef WEBRTC_API_WEBRTCSESSIONDESCRIPTIONFACTORY_H_ | 11 #ifndef WEBRTC_API_WEBRTCSESSIONDESCRIPTIONFACTORY_H_ |
12 #define WEBRTC_API_WEBRTCSESSIONDESCRIPTIONFACTORY_H_ | 12 #define WEBRTC_API_WEBRTCSESSIONDESCRIPTIONFACTORY_H_ |
13 | 13 |
14 #include <memory> | 14 #include <memory> |
15 | 15 |
16 #include "webrtc/api/dtlsidentitystore.h" | 16 #include "webrtc/api/dtlsidentitystore.h" |
17 #include "webrtc/api/peerconnectioninterface.h" | 17 #include "webrtc/api/peerconnectioninterface.h" |
18 #include "webrtc/base/constructormagic.h" | 18 #include "webrtc/base/constructormagic.h" |
19 #include "webrtc/base/messagehandler.h" | 19 #include "webrtc/base/messagehandler.h" |
20 #include "webrtc/base/rtccertificate.h" | 20 #include "webrtc/base/rtccertificate.h" |
| 21 #include "webrtc/base/rtccertificategenerator.h" |
21 #include "webrtc/p2p/base/transportdescriptionfactory.h" | 22 #include "webrtc/p2p/base/transportdescriptionfactory.h" |
22 #include "webrtc/pc/mediasession.h" | 23 #include "webrtc/pc/mediasession.h" |
23 | 24 |
24 namespace cricket { | 25 namespace cricket { |
25 class ChannelManager; | 26 class ChannelManager; |
26 class TransportDescriptionFactory; | 27 class TransportDescriptionFactory; |
27 } // namespace cricket | 28 } // namespace cricket |
28 | 29 |
29 namespace webrtc { | 30 namespace webrtc { |
30 class CreateSessionDescriptionObserver; | 31 class CreateSessionDescriptionObserver; |
31 class MediaConstraintsInterface; | 32 class MediaConstraintsInterface; |
32 class SessionDescriptionInterface; | 33 class SessionDescriptionInterface; |
33 class WebRtcSession; | 34 class WebRtcSession; |
34 | 35 |
35 // DTLS identity request callback class. | 36 // DTLS certificate request callback class. |
36 class WebRtcIdentityRequestObserver : public DtlsIdentityRequestObserver, | 37 class WebRtcCertificateGeneratorCallback |
37 public sigslot::has_slots<> { | 38 : public rtc::RTCCertificateGeneratorCallback, |
| 39 public sigslot::has_slots<> { |
38 public: | 40 public: |
39 // DtlsIdentityRequestObserver overrides. | 41 // |rtc::RTCCertificateGeneratorCallback| overrides. |
40 void OnFailure(int error) override; | 42 void OnSuccess( |
41 void OnSuccess(const std::string& der_cert, | 43 const rtc::scoped_refptr<rtc::RTCCertificate>& certificate) override; |
42 const std::string& der_private_key) override; | 44 void OnFailure() override; |
43 void OnSuccess(std::unique_ptr<rtc::SSLIdentity> identity) override; | |
44 | 45 |
45 sigslot::signal1<int> SignalRequestFailed; | 46 sigslot::signal0<> SignalRequestFailed; |
46 sigslot::signal1<const rtc::scoped_refptr<rtc::RTCCertificate>&> | 47 sigslot::signal1<const rtc::scoped_refptr<rtc::RTCCertificate>&> |
47 SignalCertificateReady; | 48 SignalCertificateReady; |
48 }; | 49 }; |
49 | 50 |
50 struct CreateSessionDescriptionRequest { | 51 struct CreateSessionDescriptionRequest { |
51 enum Type { | 52 enum Type { |
52 kOffer, | 53 kOffer, |
53 kAnswer, | 54 kAnswer, |
54 }; | 55 }; |
55 | 56 |
56 CreateSessionDescriptionRequest( | 57 CreateSessionDescriptionRequest( |
57 Type type, | 58 Type type, |
58 CreateSessionDescriptionObserver* observer, | 59 CreateSessionDescriptionObserver* observer, |
59 const cricket::MediaSessionOptions& options) | 60 const cricket::MediaSessionOptions& options) |
60 : type(type), | 61 : type(type), |
61 observer(observer), | 62 observer(observer), |
62 options(options) {} | 63 options(options) {} |
63 | 64 |
64 Type type; | 65 Type type; |
65 rtc::scoped_refptr<CreateSessionDescriptionObserver> observer; | 66 rtc::scoped_refptr<CreateSessionDescriptionObserver> observer; |
66 cricket::MediaSessionOptions options; | 67 cricket::MediaSessionOptions options; |
67 }; | 68 }; |
68 | 69 |
69 // This class is used to create offer/answer session description with regards to | 70 // This class is used to create offer/answer session description. Certificates |
70 // the async DTLS identity generation for WebRtcSession. | 71 // for WebRtcSession/DTLS are either supplied at construction or generated |
71 // It queues the create offer/answer request until the DTLS identity | 72 // asynchronously. It queues the create offer/answer request until the |
72 // request has completed, i.e. when OnIdentityRequestFailed or OnIdentityReady | 73 // certificate generation has completed, i.e. when OnCertificateRequestFailed or |
73 // is called. | 74 // OnCertificateReady is called. |
74 class WebRtcSessionDescriptionFactory : public rtc::MessageHandler, | 75 class WebRtcSessionDescriptionFactory : public rtc::MessageHandler, |
75 public sigslot::has_slots<> { | 76 public sigslot::has_slots<> { |
76 public: | 77 public: |
77 // Construct with DTLS disabled. | 78 // If |certificate_generator| is not null, DTLS is enabled and a default |
78 WebRtcSessionDescriptionFactory(rtc::Thread* signaling_thread, | 79 // certificate is generated asynchronously; otherwise DTLS is disabled. |
79 cricket::ChannelManager* channel_manager, | |
80 WebRtcSession* session, | |
81 const std::string& session_id); | |
82 | |
83 // Construct with DTLS enabled using the specified |dtls_identity_store| to | |
84 // generate a certificate. | |
85 WebRtcSessionDescriptionFactory( | 80 WebRtcSessionDescriptionFactory( |
86 rtc::Thread* signaling_thread, | 81 rtc::Thread* signaling_thread, |
87 cricket::ChannelManager* channel_manager, | 82 cricket::ChannelManager* channel_manager, |
88 std::unique_ptr<DtlsIdentityStoreInterface> dtls_identity_store, | |
89 WebRtcSession* session, | 83 WebRtcSession* session, |
90 const std::string& session_id); | 84 const std::string& session_id, |
91 | 85 std::unique_ptr<rtc::RTCCertificateGeneratorInterface> cert_generator); |
92 // Construct with DTLS enabled using the specified (already generated) | 86 // Construct with DTLS enabled using the specified |certificate|. |
93 // |certificate|. | |
94 WebRtcSessionDescriptionFactory( | 87 WebRtcSessionDescriptionFactory( |
95 rtc::Thread* signaling_thread, | 88 rtc::Thread* signaling_thread, |
96 cricket::ChannelManager* channel_manager, | 89 cricket::ChannelManager* channel_manager, |
97 const rtc::scoped_refptr<rtc::RTCCertificate>& certificate, | |
98 WebRtcSession* session, | 90 WebRtcSession* session, |
99 const std::string& session_id); | 91 const std::string& session_id, |
| 92 const rtc::scoped_refptr<rtc::RTCCertificate>& certificate); |
100 virtual ~WebRtcSessionDescriptionFactory(); | 93 virtual ~WebRtcSessionDescriptionFactory(); |
101 | 94 |
102 static void CopyCandidatesFromSessionDescription( | 95 static void CopyCandidatesFromSessionDescription( |
103 const SessionDescriptionInterface* source_desc, | 96 const SessionDescriptionInterface* source_desc, |
104 const std::string& content_name, | 97 const std::string& content_name, |
105 SessionDescriptionInterface* dest_desc); | 98 SessionDescriptionInterface* dest_desc); |
106 | 99 |
107 void CreateOffer( | 100 void CreateOffer( |
108 CreateSessionDescriptionObserver* observer, | 101 CreateSessionDescriptionObserver* observer, |
109 const PeerConnectionInterface::RTCOfferAnswerOptions& options, | 102 const PeerConnectionInterface::RTCOfferAnswerOptions& options, |
(...skipping 13 matching lines...) Expand all Loading... |
123 } | 116 } |
124 | 117 |
125 private: | 118 private: |
126 enum CertificateRequestState { | 119 enum CertificateRequestState { |
127 CERTIFICATE_NOT_NEEDED, | 120 CERTIFICATE_NOT_NEEDED, |
128 CERTIFICATE_WAITING, | 121 CERTIFICATE_WAITING, |
129 CERTIFICATE_SUCCEEDED, | 122 CERTIFICATE_SUCCEEDED, |
130 CERTIFICATE_FAILED, | 123 CERTIFICATE_FAILED, |
131 }; | 124 }; |
132 | 125 |
| 126 // If |certificate_generator| or |certificate| is not null DTLS is enabled, |
| 127 // otherwise DTLS is disabled. |
133 WebRtcSessionDescriptionFactory( | 128 WebRtcSessionDescriptionFactory( |
134 rtc::Thread* signaling_thread, | 129 rtc::Thread* signaling_thread, |
135 cricket::ChannelManager* channel_manager, | 130 cricket::ChannelManager* channel_manager, |
136 std::unique_ptr<DtlsIdentityStoreInterface> dtls_identity_store, | |
137 const rtc::scoped_refptr<WebRtcIdentityRequestObserver>& | |
138 identity_request_observer, | |
139 WebRtcSession* session, | 131 WebRtcSession* session, |
140 const std::string& session_id, | 132 const std::string& session_id, |
141 bool dtls_enabled); | 133 std::unique_ptr<rtc::RTCCertificateGeneratorInterface> cert_generator, |
| 134 const rtc::scoped_refptr<rtc::RTCCertificate>& certificate); |
142 | 135 |
143 // MessageHandler implementation. | 136 // MessageHandler implementation. |
144 virtual void OnMessage(rtc::Message* msg); | 137 virtual void OnMessage(rtc::Message* msg); |
145 | 138 |
146 void InternalCreateOffer(CreateSessionDescriptionRequest request); | 139 void InternalCreateOffer(CreateSessionDescriptionRequest request); |
147 void InternalCreateAnswer(CreateSessionDescriptionRequest request); | 140 void InternalCreateAnswer(CreateSessionDescriptionRequest request); |
148 // Posts failure notifications for all pending session description requests. | 141 // Posts failure notifications for all pending session description requests. |
149 void FailPendingRequests(const std::string& reason); | 142 void FailPendingRequests(const std::string& reason); |
150 void PostCreateSessionDescriptionFailed( | 143 void PostCreateSessionDescriptionFailed( |
151 CreateSessionDescriptionObserver* observer, | 144 CreateSessionDescriptionObserver* observer, |
152 const std::string& error); | 145 const std::string& error); |
153 void PostCreateSessionDescriptionSucceeded( | 146 void PostCreateSessionDescriptionSucceeded( |
154 CreateSessionDescriptionObserver* observer, | 147 CreateSessionDescriptionObserver* observer, |
155 SessionDescriptionInterface* description); | 148 SessionDescriptionInterface* description); |
156 | 149 |
157 void OnIdentityRequestFailed(int error); | 150 void OnCertificateRequestFailed(); |
158 void SetCertificate( | 151 void SetCertificate( |
159 const rtc::scoped_refptr<rtc::RTCCertificate>& certificate); | 152 const rtc::scoped_refptr<rtc::RTCCertificate>& certificate); |
160 | 153 |
161 std::queue<CreateSessionDescriptionRequest> | 154 std::queue<CreateSessionDescriptionRequest> |
162 create_session_description_requests_; | 155 create_session_description_requests_; |
163 rtc::Thread* const signaling_thread_; | 156 rtc::Thread* const signaling_thread_; |
164 cricket::TransportDescriptionFactory transport_desc_factory_; | 157 cricket::TransportDescriptionFactory transport_desc_factory_; |
165 cricket::MediaSessionDescriptionFactory session_desc_factory_; | 158 cricket::MediaSessionDescriptionFactory session_desc_factory_; |
166 uint64_t session_version_; | 159 uint64_t session_version_; |
167 const std::unique_ptr<DtlsIdentityStoreInterface> dtls_identity_store_; | 160 const std::unique_ptr<rtc::RTCCertificateGeneratorInterface> cert_generator_; |
168 const rtc::scoped_refptr<WebRtcIdentityRequestObserver> | |
169 identity_request_observer_; | |
170 // TODO(jiayl): remove the dependency on session once bug 2264 is fixed. | 161 // TODO(jiayl): remove the dependency on session once bug 2264 is fixed. |
171 WebRtcSession* const session_; | 162 WebRtcSession* const session_; |
172 const std::string session_id_; | 163 const std::string session_id_; |
173 CertificateRequestState certificate_request_state_; | 164 CertificateRequestState certificate_request_state_; |
174 | 165 |
175 RTC_DISALLOW_COPY_AND_ASSIGN(WebRtcSessionDescriptionFactory); | 166 RTC_DISALLOW_COPY_AND_ASSIGN(WebRtcSessionDescriptionFactory); |
176 }; | 167 }; |
177 } // namespace webrtc | 168 } // namespace webrtc |
178 | 169 |
179 #endif // WEBRTC_API_WEBRTCSESSIONDESCRIPTIONFACTORY_H_ | 170 #endif // WEBRTC_API_WEBRTCSESSIONDESCRIPTIONFACTORY_H_ |
OLD | NEW |