Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Side by Side Diff: talk/session/media/srtpfilter.h

Issue 1362503003: Use suffixed {uint,int}{8,16,32,64}_t types. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: rebase + revert basictypes.h (to be landed separately just in case of a revert due to unexpected us… Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « talk/session/media/planarfunctions_unittest.cc ('k') | talk/session/media/srtpfilter.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * libjingle 2 * libjingle
3 * Copyright 2009 Google Inc. 3 * Copyright 2009 Google Inc.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright notice, 8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice, 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 // answer_params should contain the negotiated parameters, which may be none, 98 // answer_params should contain the negotiated parameters, which may be none,
99 // if crypto was not desired or could not be negotiated (and not required). 99 // if crypto was not desired or could not be negotiated (and not required).
100 // This must be called after SetOffer. If crypto negotiation completes 100 // This must be called after SetOffer. If crypto negotiation completes
101 // successfully, this will advance the filter to the active state. 101 // successfully, this will advance the filter to the active state.
102 bool SetAnswer(const std::vector<CryptoParams>& answer_params, 102 bool SetAnswer(const std::vector<CryptoParams>& answer_params,
103 ContentSource source); 103 ContentSource source);
104 104
105 // Just set up both sets of keys directly. 105 // Just set up both sets of keys directly.
106 // Used with DTLS-SRTP. 106 // Used with DTLS-SRTP.
107 bool SetRtpParams(const std::string& send_cs, 107 bool SetRtpParams(const std::string& send_cs,
108 const uint8* send_key, int send_key_len, 108 const uint8_t* send_key,
109 int send_key_len,
109 const std::string& recv_cs, 110 const std::string& recv_cs,
110 const uint8* recv_key, int recv_key_len); 111 const uint8_t* recv_key,
112 int recv_key_len);
111 bool SetRtcpParams(const std::string& send_cs, 113 bool SetRtcpParams(const std::string& send_cs,
112 const uint8* send_key, int send_key_len, 114 const uint8_t* send_key,
115 int send_key_len,
113 const std::string& recv_cs, 116 const std::string& recv_cs,
114 const uint8* recv_key, int recv_key_len); 117 const uint8_t* recv_key,
118 int recv_key_len);
115 119
116 // Encrypts/signs an individual RTP/RTCP packet, in-place. 120 // Encrypts/signs an individual RTP/RTCP packet, in-place.
117 // If an HMAC is used, this will increase the packet size. 121 // If an HMAC is used, this will increase the packet size.
118 bool ProtectRtp(void* data, int in_len, int max_len, int* out_len); 122 bool ProtectRtp(void* data, int in_len, int max_len, int* out_len);
119 // Overloaded version, outputs packet index. 123 // Overloaded version, outputs packet index.
120 bool ProtectRtp(void* data, int in_len, int max_len, int* out_len, 124 bool ProtectRtp(void* data,
121 int64* index); 125 int in_len,
126 int max_len,
127 int* out_len,
128 int64_t* index);
122 bool ProtectRtcp(void* data, int in_len, int max_len, int* out_len); 129 bool ProtectRtcp(void* data, int in_len, int max_len, int* out_len);
123 // Decrypts/verifies an invidiual RTP/RTCP packet. 130 // Decrypts/verifies an invidiual RTP/RTCP packet.
124 // If an HMAC is used, this will decrease the packet size. 131 // If an HMAC is used, this will decrease the packet size.
125 bool UnprotectRtp(void* data, int in_len, int* out_len); 132 bool UnprotectRtp(void* data, int in_len, int* out_len);
126 bool UnprotectRtcp(void* data, int in_len, int* out_len); 133 bool UnprotectRtcp(void* data, int in_len, int* out_len);
127 134
128 // Returns rtp auth params from srtp context. 135 // Returns rtp auth params from srtp context.
129 bool GetRtpAuthParams(uint8** key, int* key_len, int* tag_len); 136 bool GetRtpAuthParams(uint8_t** key, int* key_len, int* tag_len);
130 137
131 // Update the silent threshold (in ms) for signaling errors. 138 // Update the silent threshold (in ms) for signaling errors.
132 void set_signal_silent_time(uint32 signal_silent_time_in_ms); 139 void set_signal_silent_time(uint32_t signal_silent_time_in_ms);
133 140
134 sigslot::repeater3<uint32, Mode, Error> SignalSrtpError; 141 sigslot::repeater3<uint32_t, Mode, Error> SignalSrtpError;
135 142
136 protected: 143 protected:
137 bool ExpectOffer(ContentSource source); 144 bool ExpectOffer(ContentSource source);
138 bool StoreParams(const std::vector<CryptoParams>& params, 145 bool StoreParams(const std::vector<CryptoParams>& params,
139 ContentSource source); 146 ContentSource source);
140 bool ExpectAnswer(ContentSource source); 147 bool ExpectAnswer(ContentSource source);
141 bool DoSetAnswer(const std::vector<CryptoParams>& answer_params, 148 bool DoSetAnswer(const std::vector<CryptoParams>& answer_params,
142 ContentSource source, 149 ContentSource source,
143 bool final); 150 bool final);
144 void CreateSrtpSessions(); 151 void CreateSrtpSessions();
145 bool NegotiateParams(const std::vector<CryptoParams>& answer_params, 152 bool NegotiateParams(const std::vector<CryptoParams>& answer_params,
146 CryptoParams* selected_params); 153 CryptoParams* selected_params);
147 bool ApplyParams(const CryptoParams& send_params, 154 bool ApplyParams(const CryptoParams& send_params,
148 const CryptoParams& recv_params); 155 const CryptoParams& recv_params);
149 bool ResetParams(); 156 bool ResetParams();
150 static bool ParseKeyParams(const std::string& params, uint8* key, int len); 157 static bool ParseKeyParams(const std::string& params, uint8_t* key, int len);
151 158
152 private: 159 private:
153 enum State { 160 enum State {
154 ST_INIT, // SRTP filter unused. 161 ST_INIT, // SRTP filter unused.
155 ST_SENTOFFER, // Offer with SRTP parameters sent. 162 ST_SENTOFFER, // Offer with SRTP parameters sent.
156 ST_RECEIVEDOFFER, // Offer with SRTP parameters received. 163 ST_RECEIVEDOFFER, // Offer with SRTP parameters received.
157 ST_SENTPRANSWER_NO_CRYPTO, // Sent provisional answer without crypto. 164 ST_SENTPRANSWER_NO_CRYPTO, // Sent provisional answer without crypto.
158 // Received provisional answer without crypto. 165 // Received provisional answer without crypto.
159 ST_RECEIVEDPRANSWER_NO_CRYPTO, 166 ST_RECEIVEDPRANSWER_NO_CRYPTO,
160 ST_ACTIVE, // Offer and answer set. 167 ST_ACTIVE, // Offer and answer set.
161 // SRTP filter is active but new parameters are offered. 168 // SRTP filter is active but new parameters are offered.
162 // When the answer is set, the state transitions to ST_ACTIVE or ST_INIT. 169 // When the answer is set, the state transitions to ST_ACTIVE or ST_INIT.
163 ST_SENTUPDATEDOFFER, 170 ST_SENTUPDATEDOFFER,
164 // SRTP filter is active but new parameters are received. 171 // SRTP filter is active but new parameters are received.
165 // When the answer is set, the state transitions back to ST_ACTIVE. 172 // When the answer is set, the state transitions back to ST_ACTIVE.
166 ST_RECEIVEDUPDATEDOFFER, 173 ST_RECEIVEDUPDATEDOFFER,
167 // SRTP filter is active but the sent answer is only provisional. 174 // SRTP filter is active but the sent answer is only provisional.
168 // When the final answer is set, the state transitions to ST_ACTIVE or 175 // When the final answer is set, the state transitions to ST_ACTIVE or
169 // ST_INIT. 176 // ST_INIT.
170 ST_SENTPRANSWER, 177 ST_SENTPRANSWER,
171 // SRTP filter is active but the received answer is only provisional. 178 // SRTP filter is active but the received answer is only provisional.
172 // When the final answer is set, the state transitions to ST_ACTIVE or 179 // When the final answer is set, the state transitions to ST_ACTIVE or
173 // ST_INIT. 180 // ST_INIT.
174 ST_RECEIVEDPRANSWER 181 ST_RECEIVEDPRANSWER
175 }; 182 };
176 State state_; 183 State state_;
177 uint32 signal_silent_time_in_ms_; 184 uint32_t signal_silent_time_in_ms_;
178 std::vector<CryptoParams> offer_params_; 185 std::vector<CryptoParams> offer_params_;
179 rtc::scoped_ptr<SrtpSession> send_session_; 186 rtc::scoped_ptr<SrtpSession> send_session_;
180 rtc::scoped_ptr<SrtpSession> recv_session_; 187 rtc::scoped_ptr<SrtpSession> recv_session_;
181 rtc::scoped_ptr<SrtpSession> send_rtcp_session_; 188 rtc::scoped_ptr<SrtpSession> send_rtcp_session_;
182 rtc::scoped_ptr<SrtpSession> recv_rtcp_session_; 189 rtc::scoped_ptr<SrtpSession> recv_rtcp_session_;
183 CryptoParams applied_send_params_; 190 CryptoParams applied_send_params_;
184 CryptoParams applied_recv_params_; 191 CryptoParams applied_recv_params_;
185 }; 192 };
186 193
187 // Class that wraps a libSRTP session. 194 // Class that wraps a libSRTP session.
188 class SrtpSession { 195 class SrtpSession {
189 public: 196 public:
190 SrtpSession(); 197 SrtpSession();
191 ~SrtpSession(); 198 ~SrtpSession();
192 199
193 // Configures the session for sending data using the specified 200 // Configures the session for sending data using the specified
194 // cipher-suite and key. Receiving must be done by a separate session. 201 // cipher-suite and key. Receiving must be done by a separate session.
195 bool SetSend(const std::string& cs, const uint8* key, int len); 202 bool SetSend(const std::string& cs, const uint8_t* key, int len);
196 // Configures the session for receiving data using the specified 203 // Configures the session for receiving data using the specified
197 // cipher-suite and key. Sending must be done by a separate session. 204 // cipher-suite and key. Sending must be done by a separate session.
198 bool SetRecv(const std::string& cs, const uint8* key, int len); 205 bool SetRecv(const std::string& cs, const uint8_t* key, int len);
199 206
200 // Encrypts/signs an individual RTP/RTCP packet, in-place. 207 // Encrypts/signs an individual RTP/RTCP packet, in-place.
201 // If an HMAC is used, this will increase the packet size. 208 // If an HMAC is used, this will increase the packet size.
202 bool ProtectRtp(void* data, int in_len, int max_len, int* out_len); 209 bool ProtectRtp(void* data, int in_len, int max_len, int* out_len);
203 // Overloaded version, outputs packet index. 210 // Overloaded version, outputs packet index.
204 bool ProtectRtp(void* data, int in_len, int max_len, int* out_len, 211 bool ProtectRtp(void* data,
205 int64* index); 212 int in_len,
213 int max_len,
214 int* out_len,
215 int64_t* index);
206 bool ProtectRtcp(void* data, int in_len, int max_len, int* out_len); 216 bool ProtectRtcp(void* data, int in_len, int max_len, int* out_len);
207 // Decrypts/verifies an invidiual RTP/RTCP packet. 217 // Decrypts/verifies an invidiual RTP/RTCP packet.
208 // If an HMAC is used, this will decrease the packet size. 218 // If an HMAC is used, this will decrease the packet size.
209 bool UnprotectRtp(void* data, int in_len, int* out_len); 219 bool UnprotectRtp(void* data, int in_len, int* out_len);
210 bool UnprotectRtcp(void* data, int in_len, int* out_len); 220 bool UnprotectRtcp(void* data, int in_len, int* out_len);
211 221
212 // Helper method to get authentication params. 222 // Helper method to get authentication params.
213 bool GetRtpAuthParams(uint8** key, int* key_len, int* tag_len); 223 bool GetRtpAuthParams(uint8_t** key, int* key_len, int* tag_len);
214 224
215 // Update the silent threshold (in ms) for signaling errors. 225 // Update the silent threshold (in ms) for signaling errors.
216 void set_signal_silent_time(uint32 signal_silent_time_in_ms); 226 void set_signal_silent_time(uint32_t signal_silent_time_in_ms);
217 227
218 // Calls srtp_shutdown if it's initialized. 228 // Calls srtp_shutdown if it's initialized.
219 static void Terminate(); 229 static void Terminate();
220 230
221 sigslot::repeater3<uint32, SrtpFilter::Mode, SrtpFilter::Error> 231 sigslot::repeater3<uint32_t, SrtpFilter::Mode, SrtpFilter::Error>
222 SignalSrtpError; 232 SignalSrtpError;
223 233
224 private: 234 private:
225 bool SetKey(int type, const std::string& cs, const uint8* key, int len); 235 bool SetKey(int type, const std::string& cs, const uint8_t* key, int len);
226 // Returns send stream current packet index from srtp db. 236 // Returns send stream current packet index from srtp db.
227 bool GetSendStreamPacketIndex(void* data, int in_len, int64* index); 237 bool GetSendStreamPacketIndex(void* data, int in_len, int64_t* index);
228 238
229 static bool Init(); 239 static bool Init();
230 void HandleEvent(const srtp_event_data_t* ev); 240 void HandleEvent(const srtp_event_data_t* ev);
231 static void HandleEventThunk(srtp_event_data_t* ev); 241 static void HandleEventThunk(srtp_event_data_t* ev);
232 242
233 static std::list<SrtpSession*>* sessions(); 243 static std::list<SrtpSession*>* sessions();
234 244
235 srtp_ctx_t* session_; 245 srtp_ctx_t* session_;
236 int rtp_auth_tag_len_; 246 int rtp_auth_tag_len_;
237 int rtcp_auth_tag_len_; 247 int rtcp_auth_tag_len_;
238 rtc::scoped_ptr<SrtpStat> srtp_stat_; 248 rtc::scoped_ptr<SrtpStat> srtp_stat_;
239 static bool inited_; 249 static bool inited_;
240 static rtc::GlobalLockPod lock_; 250 static rtc::GlobalLockPod lock_;
241 int last_send_seq_num_; 251 int last_send_seq_num_;
242 RTC_DISALLOW_COPY_AND_ASSIGN(SrtpSession); 252 RTC_DISALLOW_COPY_AND_ASSIGN(SrtpSession);
243 }; 253 };
244 254
245 // Class that collects failures of SRTP. 255 // Class that collects failures of SRTP.
246 class SrtpStat { 256 class SrtpStat {
247 public: 257 public:
248 SrtpStat(); 258 SrtpStat();
249 259
250 // Report RTP protection results to the handler. 260 // Report RTP protection results to the handler.
251 void AddProtectRtpResult(uint32 ssrc, int result); 261 void AddProtectRtpResult(uint32_t ssrc, int result);
252 // Report RTP unprotection results to the handler. 262 // Report RTP unprotection results to the handler.
253 void AddUnprotectRtpResult(uint32 ssrc, int result); 263 void AddUnprotectRtpResult(uint32_t ssrc, int result);
254 // Report RTCP protection results to the handler. 264 // Report RTCP protection results to the handler.
255 void AddProtectRtcpResult(int result); 265 void AddProtectRtcpResult(int result);
256 // Report RTCP unprotection results to the handler. 266 // Report RTCP unprotection results to the handler.
257 void AddUnprotectRtcpResult(int result); 267 void AddUnprotectRtcpResult(int result);
258 268
259 // Get silent time (in ms) for SRTP statistics handler. 269 // Get silent time (in ms) for SRTP statistics handler.
260 uint32 signal_silent_time() const { return signal_silent_time_; } 270 uint32_t signal_silent_time() const { return signal_silent_time_; }
261 // Set silent time (in ms) for SRTP statistics handler. 271 // Set silent time (in ms) for SRTP statistics handler.
262 void set_signal_silent_time(uint32 signal_silent_time) { 272 void set_signal_silent_time(uint32_t signal_silent_time) {
263 signal_silent_time_ = signal_silent_time; 273 signal_silent_time_ = signal_silent_time;
264 } 274 }
265 275
266 // Sigslot for reporting errors. 276 // Sigslot for reporting errors.
267 sigslot::signal3<uint32, SrtpFilter::Mode, SrtpFilter::Error> 277 sigslot::signal3<uint32_t, SrtpFilter::Mode, SrtpFilter::Error>
268 SignalSrtpError; 278 SignalSrtpError;
269 279
270 private: 280 private:
271 // For each different ssrc and error, we collect statistics separately. 281 // For each different ssrc and error, we collect statistics separately.
272 struct FailureKey { 282 struct FailureKey {
273 FailureKey() 283 FailureKey()
274 : ssrc(0), 284 : ssrc(0),
275 mode(SrtpFilter::PROTECT), 285 mode(SrtpFilter::PROTECT),
276 error(SrtpFilter::ERROR_NONE) { 286 error(SrtpFilter::ERROR_NONE) {
277 } 287 }
278 FailureKey(uint32 in_ssrc, SrtpFilter::Mode in_mode, 288 FailureKey(uint32_t in_ssrc,
289 SrtpFilter::Mode in_mode,
279 SrtpFilter::Error in_error) 290 SrtpFilter::Error in_error)
280 : ssrc(in_ssrc), 291 : ssrc(in_ssrc), mode(in_mode), error(in_error) {}
281 mode(in_mode),
282 error(in_error) {
283 }
284 bool operator <(const FailureKey& key) const { 292 bool operator <(const FailureKey& key) const {
285 return 293 return
286 (ssrc < key.ssrc) || 294 (ssrc < key.ssrc) ||
287 (ssrc == key.ssrc && mode < key.mode) || 295 (ssrc == key.ssrc && mode < key.mode) ||
288 (ssrc == key.ssrc && mode == key.mode && error < key.error); 296 (ssrc == key.ssrc && mode == key.mode && error < key.error);
289 } 297 }
290 uint32 ssrc; 298 uint32_t ssrc;
291 SrtpFilter::Mode mode; 299 SrtpFilter::Mode mode;
292 SrtpFilter::Error error; 300 SrtpFilter::Error error;
293 }; 301 };
294 // For tracing conditions for signaling, currently we only use 302 // For tracing conditions for signaling, currently we only use
295 // last_signal_time. Wrap this as a struct so that later on, if we need any 303 // last_signal_time. Wrap this as a struct so that later on, if we need any
296 // other improvements, it will be easier. 304 // other improvements, it will be easier.
297 struct FailureStat { 305 struct FailureStat {
298 FailureStat() 306 FailureStat()
299 : last_signal_time(0) { 307 : last_signal_time(0) {
300 } 308 }
301 explicit FailureStat(uint32 in_last_signal_time) 309 explicit FailureStat(uint32_t in_last_signal_time)
302 : last_signal_time(in_last_signal_time) { 310 : last_signal_time(in_last_signal_time) {}
303 }
304 void Reset() { 311 void Reset() {
305 last_signal_time = 0; 312 last_signal_time = 0;
306 } 313 }
307 uint32 last_signal_time; 314 uint32_t last_signal_time;
308 }; 315 };
309 316
310 // Inspect SRTP result and signal error if needed. 317 // Inspect SRTP result and signal error if needed.
311 void HandleSrtpResult(const FailureKey& key); 318 void HandleSrtpResult(const FailureKey& key);
312 319
313 std::map<FailureKey, FailureStat> failures_; 320 std::map<FailureKey, FailureStat> failures_;
314 // Threshold in ms to silent the signaling errors. 321 // Threshold in ms to silent the signaling errors.
315 uint32 signal_silent_time_; 322 uint32_t signal_silent_time_;
316 323
317 RTC_DISALLOW_COPY_AND_ASSIGN(SrtpStat); 324 RTC_DISALLOW_COPY_AND_ASSIGN(SrtpStat);
318 }; 325 };
319 326
320 } // namespace cricket 327 } // namespace cricket
321 328
322 #endif // TALK_SESSION_MEDIA_SRTPFILTER_H_ 329 #endif // TALK_SESSION_MEDIA_SRTPFILTER_H_
OLDNEW
« no previous file with comments | « talk/session/media/planarfunctions_unittest.cc ('k') | talk/session/media/srtpfilter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698