| OLD | NEW |
| 1 /* | 1 /* |
| 2 * libjingle | 2 * libjingle |
| 3 * Copyright 2004 Google Inc. | 3 * Copyright 2004 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 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 137 bool RemoveRecvStream(uint32 ssrc); | 137 bool RemoveRecvStream(uint32 ssrc); |
| 138 bool AddSendStream(const StreamParams& sp); | 138 bool AddSendStream(const StreamParams& sp); |
| 139 bool RemoveSendStream(uint32 ssrc); | 139 bool RemoveSendStream(uint32 ssrc); |
| 140 | 140 |
| 141 // Monitoring | 141 // Monitoring |
| 142 void StartConnectionMonitor(int cms); | 142 void StartConnectionMonitor(int cms); |
| 143 void StopConnectionMonitor(); | 143 void StopConnectionMonitor(); |
| 144 // For ConnectionStatsGetter, used by ConnectionMonitor | 144 // For ConnectionStatsGetter, used by ConnectionMonitor |
| 145 bool GetConnectionStats(ConnectionInfos* infos) override; | 145 bool GetConnectionStats(ConnectionInfos* infos) override; |
| 146 | 146 |
| 147 void set_srtp_signal_silent_time(uint32 silent_time) { | |
| 148 srtp_filter_.set_signal_silent_time(silent_time); | |
| 149 } | |
| 150 | |
| 151 BundleFilter* bundle_filter() { return &bundle_filter_; } | 147 BundleFilter* bundle_filter() { return &bundle_filter_; } |
| 152 | 148 |
| 153 const std::vector<StreamParams>& local_streams() const { | 149 const std::vector<StreamParams>& local_streams() const { |
| 154 return local_streams_; | 150 return local_streams_; |
| 155 } | 151 } |
| 156 const std::vector<StreamParams>& remote_streams() const { | 152 const std::vector<StreamParams>& remote_streams() const { |
| 157 return remote_streams_; | 153 return remote_streams_; |
| 158 } | 154 } |
| 159 | 155 |
| 160 sigslot::signal2<BaseChannel*, bool> SignalDtlsSetupFailure; | 156 sigslot::signal2<BaseChannel*, bool> SignalDtlsSetupFailure; |
| 161 void SignalDtlsSetupFailure_w(bool rtcp); | 157 void SignalDtlsSetupFailure_w(bool rtcp); |
| 162 void SignalDtlsSetupFailure_s(bool rtcp); | 158 void SignalDtlsSetupFailure_s(bool rtcp); |
| 163 | 159 |
| 164 // Used for latency measurements. | 160 // Used for latency measurements. |
| 165 sigslot::signal1<BaseChannel*> SignalFirstPacketReceived; | 161 sigslot::signal1<BaseChannel*> SignalFirstPacketReceived; |
| 166 | 162 |
| 167 // Made public for easier testing. | 163 // Made public for easier testing. |
| 168 void SetReadyToSend(bool rtcp, bool ready); | 164 void SetReadyToSend(bool rtcp, bool ready); |
| 169 | 165 |
| 170 // Only public for unit tests. Otherwise, consider protected. | 166 // Only public for unit tests. Otherwise, consider protected. |
| 171 virtual int SetOption(SocketType type, rtc::Socket::Option o, int val); | 167 virtual int SetOption(SocketType type, rtc::Socket::Option o, int val); |
| 172 | 168 |
| 169 SrtpFilter* srtp_filter() { return &srtp_filter_; } |
| 170 |
| 173 protected: | 171 protected: |
| 174 virtual MediaChannel* media_channel() const { return media_channel_; } | 172 virtual MediaChannel* media_channel() const { return media_channel_; } |
| 175 // Sets the |transport_channel_| (and |rtcp_transport_channel_|, if |rtcp_| is | 173 // Sets the |transport_channel_| (and |rtcp_transport_channel_|, if |rtcp_| is |
| 176 // true). Gets the transport channels from |transport_controller_|. | 174 // true). Gets the transport channels from |transport_controller_|. |
| 177 bool SetTransport_w(const std::string& transport_name); | 175 bool SetTransport_w(const std::string& transport_name); |
| 178 void set_transport_channel(TransportChannel* transport); | 176 void set_transport_channel(TransportChannel* transport); |
| 179 void set_rtcp_transport_channel(TransportChannel* transport); | 177 void set_rtcp_transport_channel(TransportChannel* transport); |
| 180 bool was_ever_writable() const { return was_ever_writable_; } | 178 bool was_ever_writable() const { return was_ever_writable_; } |
| 181 void set_local_content_direction(MediaContentDirection direction) { | 179 void set_local_content_direction(MediaContentDirection direction) { |
| 182 local_content_direction_ = direction; | 180 local_content_direction_ = direction; |
| 183 } | 181 } |
| 184 void set_remote_content_direction(MediaContentDirection direction) { | 182 void set_remote_content_direction(MediaContentDirection direction) { |
| 185 remote_content_direction_ = direction; | 183 remote_content_direction_ = direction; |
| 186 } | 184 } |
| 187 void set_secure_required(bool secure_required) { | 185 void set_secure_required(bool secure_required) { |
| 188 secure_required_ = secure_required; | 186 secure_required_ = secure_required; |
| 189 } | 187 } |
| 190 bool IsReadyToReceive() const; | 188 bool IsReadyToReceive() const; |
| 191 bool IsReadyToSend() const; | 189 bool IsReadyToSend() const; |
| 192 rtc::Thread* signaling_thread() { | 190 rtc::Thread* signaling_thread() { |
| 193 return transport_controller_->signaling_thread(); | 191 return transport_controller_->signaling_thread(); |
| 194 } | 192 } |
| 195 SrtpFilter* srtp_filter() { return &srtp_filter_; } | |
| 196 bool rtcp_transport_enabled() const { return rtcp_transport_enabled_; } | 193 bool rtcp_transport_enabled() const { return rtcp_transport_enabled_; } |
| 197 | 194 |
| 198 void ConnectToTransportChannel(TransportChannel* tc); | 195 void ConnectToTransportChannel(TransportChannel* tc); |
| 199 void DisconnectFromTransportChannel(TransportChannel* tc); | 196 void DisconnectFromTransportChannel(TransportChannel* tc); |
| 200 | 197 |
| 201 void FlushRtcpMessages(); | 198 void FlushRtcpMessages(); |
| 202 | 199 |
| 203 // NetworkInterface implementation, called by MediaEngine | 200 // NetworkInterface implementation, called by MediaEngine |
| 204 virtual bool SendPacket(rtc::Buffer* packet, | 201 virtual bool SendPacket(rtc::Buffer* packet, |
| 205 rtc::DiffServCodePoint dscp); | 202 rtc::DiffServCodePoint dscp); |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 382 | 379 |
| 383 void StartAudioMonitor(int cms); | 380 void StartAudioMonitor(int cms); |
| 384 void StopAudioMonitor(); | 381 void StopAudioMonitor(); |
| 385 bool IsAudioMonitorRunning() const; | 382 bool IsAudioMonitorRunning() const; |
| 386 sigslot::signal2<VoiceChannel*, const AudioInfo&> SignalAudioMonitor; | 383 sigslot::signal2<VoiceChannel*, const AudioInfo&> SignalAudioMonitor; |
| 387 | 384 |
| 388 int GetInputLevel_w(); | 385 int GetInputLevel_w(); |
| 389 int GetOutputLevel_w(); | 386 int GetOutputLevel_w(); |
| 390 void GetActiveStreams_w(AudioInfo::StreamList* actives); | 387 void GetActiveStreams_w(AudioInfo::StreamList* actives); |
| 391 | 388 |
| 392 // Signal errors from VoiceMediaChannel. Arguments are: | |
| 393 // ssrc(uint32), and error(VoiceMediaChannel::Error). | |
| 394 sigslot::signal3<VoiceChannel*, uint32, VoiceMediaChannel::Error> | |
| 395 SignalMediaError; | |
| 396 | |
| 397 private: | 389 private: |
| 398 // overrides from BaseChannel | 390 // overrides from BaseChannel |
| 399 virtual void OnChannelRead(TransportChannel* channel, | 391 virtual void OnChannelRead(TransportChannel* channel, |
| 400 const char* data, size_t len, | 392 const char* data, size_t len, |
| 401 const rtc::PacketTime& packet_time, | 393 const rtc::PacketTime& packet_time, |
| 402 int flags); | 394 int flags); |
| 403 virtual void ChangeState(); | 395 virtual void ChangeState(); |
| 404 virtual const ContentInfo* GetFirstContent(const SessionDescription* sdesc); | 396 virtual const ContentInfo* GetFirstContent(const SessionDescription* sdesc); |
| 405 virtual bool SetLocalContent_w(const MediaContentDescription* content, | 397 virtual bool SetLocalContent_w(const MediaContentDescription* content, |
| 406 ContentAction action, | 398 ContentAction action, |
| 407 std::string* error_desc); | 399 std::string* error_desc); |
| 408 virtual bool SetRemoteContent_w(const MediaContentDescription* content, | 400 virtual bool SetRemoteContent_w(const MediaContentDescription* content, |
| 409 ContentAction action, | 401 ContentAction action, |
| 410 std::string* error_desc); | 402 std::string* error_desc); |
| 411 void HandleEarlyMediaTimeout(); | 403 void HandleEarlyMediaTimeout(); |
| 412 bool InsertDtmf_w(uint32 ssrc, int event, int duration, int flags); | 404 bool InsertDtmf_w(uint32 ssrc, int event, int duration, int flags); |
| 413 bool SetOutputScaling_w(uint32 ssrc, double left, double right); | 405 bool SetOutputScaling_w(uint32 ssrc, double left, double right); |
| 414 bool GetStats_w(VoiceMediaInfo* stats); | 406 bool GetStats_w(VoiceMediaInfo* stats); |
| 415 | 407 |
| 416 virtual void OnMessage(rtc::Message* pmsg); | 408 virtual void OnMessage(rtc::Message* pmsg); |
| 417 virtual void GetSrtpCryptoSuiteNames(std::vector<std::string>* ciphers) const; | 409 virtual void GetSrtpCryptoSuiteNames(std::vector<std::string>* ciphers) const; |
| 418 virtual void OnConnectionMonitorUpdate( | 410 virtual void OnConnectionMonitorUpdate( |
| 419 ConnectionMonitor* monitor, const std::vector<ConnectionInfo>& infos); | 411 ConnectionMonitor* monitor, const std::vector<ConnectionInfo>& infos); |
| 420 virtual void OnMediaMonitorUpdate( | 412 virtual void OnMediaMonitorUpdate( |
| 421 VoiceMediaChannel* media_channel, const VoiceMediaInfo& info); | 413 VoiceMediaChannel* media_channel, const VoiceMediaInfo& info); |
| 422 void OnAudioMonitorUpdate(AudioMonitor* monitor, const AudioInfo& info); | 414 void OnAudioMonitorUpdate(AudioMonitor* monitor, const AudioInfo& info); |
| 423 void OnVoiceChannelError(uint32 ssrc, VoiceMediaChannel::Error error); | |
| 424 void SendLastMediaError(); | |
| 425 void OnSrtpError(uint32 ssrc, SrtpFilter::Mode mode, SrtpFilter::Error error); | |
| 426 | 415 |
| 427 static const int kEarlyMediaTimeout = 1000; | 416 static const int kEarlyMediaTimeout = 1000; |
| 428 MediaEngineInterface* media_engine_; | 417 MediaEngineInterface* media_engine_; |
| 429 bool received_media_; | 418 bool received_media_; |
| 430 rtc::scoped_ptr<VoiceMediaMonitor> media_monitor_; | 419 rtc::scoped_ptr<VoiceMediaMonitor> media_monitor_; |
| 431 rtc::scoped_ptr<AudioMonitor> audio_monitor_; | 420 rtc::scoped_ptr<AudioMonitor> audio_monitor_; |
| 432 | 421 |
| 433 // Last AudioSendParameters sent down to the media_channel() via | 422 // Last AudioSendParameters sent down to the media_channel() via |
| 434 // SetSendParameters. | 423 // SetSendParameters. |
| 435 AudioSendParameters last_send_params_; | 424 AudioSendParameters last_send_params_; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 474 sigslot::signal2<VideoChannel*, const std::vector<ConnectionInfo>&> | 463 sigslot::signal2<VideoChannel*, const std::vector<ConnectionInfo>&> |
| 475 SignalConnectionMonitor; | 464 SignalConnectionMonitor; |
| 476 | 465 |
| 477 void StartMediaMonitor(int cms); | 466 void StartMediaMonitor(int cms); |
| 478 void StopMediaMonitor(); | 467 void StopMediaMonitor(); |
| 479 sigslot::signal2<VideoChannel*, const VideoMediaInfo&> SignalMediaMonitor; | 468 sigslot::signal2<VideoChannel*, const VideoMediaInfo&> SignalMediaMonitor; |
| 480 sigslot::signal2<uint32, rtc::WindowEvent> SignalScreencastWindowEvent; | 469 sigslot::signal2<uint32, rtc::WindowEvent> SignalScreencastWindowEvent; |
| 481 | 470 |
| 482 bool SendIntraFrame(); | 471 bool SendIntraFrame(); |
| 483 bool RequestIntraFrame(); | 472 bool RequestIntraFrame(); |
| 484 sigslot::signal3<VideoChannel*, uint32, VideoMediaChannel::Error> | |
| 485 SignalMediaError; | |
| 486 | 473 |
| 487 // Configure sending media on the stream with SSRC |ssrc| | 474 // Configure sending media on the stream with SSRC |ssrc| |
| 488 // If there is only one sending stream SSRC 0 can be used. | 475 // If there is only one sending stream SSRC 0 can be used. |
| 489 bool SetVideoSend(uint32 ssrc, bool enable, const VideoOptions* options); | 476 bool SetVideoSend(uint32 ssrc, bool enable, const VideoOptions* options); |
| 490 | 477 |
| 491 private: | 478 private: |
| 492 typedef std::map<uint32, VideoCapturer*> ScreencastMap; | 479 typedef std::map<uint32, VideoCapturer*> ScreencastMap; |
| 493 struct ScreencastDetailsData; | 480 struct ScreencastDetailsData; |
| 494 | 481 |
| 495 // overrides from BaseChannel | 482 // overrides from BaseChannel |
| (...skipping 18 matching lines...) Expand all Loading... |
| 514 virtual void GetSrtpCryptoSuiteNames(std::vector<std::string>* ciphers) const; | 501 virtual void GetSrtpCryptoSuiteNames(std::vector<std::string>* ciphers) const; |
| 515 virtual void OnConnectionMonitorUpdate( | 502 virtual void OnConnectionMonitorUpdate( |
| 516 ConnectionMonitor* monitor, const std::vector<ConnectionInfo>& infos); | 503 ConnectionMonitor* monitor, const std::vector<ConnectionInfo>& infos); |
| 517 virtual void OnMediaMonitorUpdate( | 504 virtual void OnMediaMonitorUpdate( |
| 518 VideoMediaChannel* media_channel, const VideoMediaInfo& info); | 505 VideoMediaChannel* media_channel, const VideoMediaInfo& info); |
| 519 virtual void OnScreencastWindowEvent(uint32 ssrc, | 506 virtual void OnScreencastWindowEvent(uint32 ssrc, |
| 520 rtc::WindowEvent event); | 507 rtc::WindowEvent event); |
| 521 virtual void OnStateChange(VideoCapturer* capturer, CaptureState ev); | 508 virtual void OnStateChange(VideoCapturer* capturer, CaptureState ev); |
| 522 bool GetLocalSsrc(const VideoCapturer* capturer, uint32* ssrc); | 509 bool GetLocalSsrc(const VideoCapturer* capturer, uint32* ssrc); |
| 523 | 510 |
| 524 void OnVideoChannelError(uint32 ssrc, VideoMediaChannel::Error error); | |
| 525 void OnSrtpError(uint32 ssrc, SrtpFilter::Mode mode, SrtpFilter::Error error); | |
| 526 | |
| 527 VideoRenderer* renderer_; | 511 VideoRenderer* renderer_; |
| 528 ScreencastMap screencast_capturers_; | 512 ScreencastMap screencast_capturers_; |
| 529 rtc::scoped_ptr<VideoMediaMonitor> media_monitor_; | 513 rtc::scoped_ptr<VideoMediaMonitor> media_monitor_; |
| 530 | 514 |
| 531 rtc::WindowEvent previous_we_; | 515 rtc::WindowEvent previous_we_; |
| 532 | 516 |
| 533 // Last VideoSendParameters sent down to the media_channel() via | 517 // Last VideoSendParameters sent down to the media_channel() via |
| 534 // SetSendParameters. | 518 // SetSendParameters. |
| 535 VideoSendParameters last_send_params_; | 519 VideoSendParameters last_send_params_; |
| 536 // Last VideoRecvParameters sent down to the media_channel() via | 520 // Last VideoRecvParameters sent down to the media_channel() via |
| (...skipping 20 matching lines...) Expand all Loading... |
| 557 void StopMediaMonitor(); | 541 void StopMediaMonitor(); |
| 558 | 542 |
| 559 // Should be called on the signaling thread only. | 543 // Should be called on the signaling thread only. |
| 560 bool ready_to_send_data() const { | 544 bool ready_to_send_data() const { |
| 561 return ready_to_send_data_; | 545 return ready_to_send_data_; |
| 562 } | 546 } |
| 563 | 547 |
| 564 sigslot::signal2<DataChannel*, const DataMediaInfo&> SignalMediaMonitor; | 548 sigslot::signal2<DataChannel*, const DataMediaInfo&> SignalMediaMonitor; |
| 565 sigslot::signal2<DataChannel*, const std::vector<ConnectionInfo>&> | 549 sigslot::signal2<DataChannel*, const std::vector<ConnectionInfo>&> |
| 566 SignalConnectionMonitor; | 550 SignalConnectionMonitor; |
| 567 sigslot::signal3<DataChannel*, uint32, DataMediaChannel::Error> | |
| 568 SignalMediaError; | |
| 569 sigslot::signal3<DataChannel*, | 551 sigslot::signal3<DataChannel*, |
| 570 const ReceiveDataParams&, | 552 const ReceiveDataParams&, |
| 571 const rtc::Buffer&> | 553 const rtc::Buffer&> |
| 572 SignalDataReceived; | 554 SignalDataReceived; |
| 573 // Signal for notifying when the channel becomes ready to send data. | 555 // Signal for notifying when the channel becomes ready to send data. |
| 574 // That occurs when the channel is enabled, the transport is writable, | 556 // That occurs when the channel is enabled, the transport is writable, |
| 575 // both local and remote descriptions are set, and the channel is unblocked. | 557 // both local and remote descriptions are set, and the channel is unblocked. |
| 576 sigslot::signal1<bool> SignalReadyToSendData; | 558 sigslot::signal1<bool> SignalReadyToSendData; |
| 577 // Signal for notifying that the remote side has closed the DataChannel. | 559 // Signal for notifying that the remote side has closed the DataChannel. |
| 578 sigslot::signal1<uint32> SignalStreamClosedRemotely; | 560 sigslot::signal1<uint32> SignalStreamClosedRemotely; |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 639 virtual void GetSrtpCryptoSuiteNames(std::vector<std::string>* ciphers) const; | 621 virtual void GetSrtpCryptoSuiteNames(std::vector<std::string>* ciphers) const; |
| 640 virtual void OnConnectionMonitorUpdate( | 622 virtual void OnConnectionMonitorUpdate( |
| 641 ConnectionMonitor* monitor, const std::vector<ConnectionInfo>& infos); | 623 ConnectionMonitor* monitor, const std::vector<ConnectionInfo>& infos); |
| 642 virtual void OnMediaMonitorUpdate( | 624 virtual void OnMediaMonitorUpdate( |
| 643 DataMediaChannel* media_channel, const DataMediaInfo& info); | 625 DataMediaChannel* media_channel, const DataMediaInfo& info); |
| 644 virtual bool ShouldSetupDtlsSrtp() const; | 626 virtual bool ShouldSetupDtlsSrtp() const; |
| 645 void OnDataReceived( | 627 void OnDataReceived( |
| 646 const ReceiveDataParams& params, const char* data, size_t len); | 628 const ReceiveDataParams& params, const char* data, size_t len); |
| 647 void OnDataChannelError(uint32 ssrc, DataMediaChannel::Error error); | 629 void OnDataChannelError(uint32 ssrc, DataMediaChannel::Error error); |
| 648 void OnDataChannelReadyToSend(bool writable); | 630 void OnDataChannelReadyToSend(bool writable); |
| 649 void OnSrtpError(uint32 ssrc, SrtpFilter::Mode mode, SrtpFilter::Error error); | |
| 650 void OnStreamClosedRemotely(uint32 sid); | 631 void OnStreamClosedRemotely(uint32 sid); |
| 651 | 632 |
| 652 rtc::scoped_ptr<DataMediaMonitor> media_monitor_; | 633 rtc::scoped_ptr<DataMediaMonitor> media_monitor_; |
| 653 // TODO(pthatcher): Make a separate SctpDataChannel and | 634 // TODO(pthatcher): Make a separate SctpDataChannel and |
| 654 // RtpDataChannel instead of using this. | 635 // RtpDataChannel instead of using this. |
| 655 DataChannelType data_channel_type_; | 636 DataChannelType data_channel_type_; |
| 656 bool ready_to_send_data_; | 637 bool ready_to_send_data_; |
| 657 | 638 |
| 658 // Last DataSendParameters sent down to the media_channel() via | 639 // Last DataSendParameters sent down to the media_channel() via |
| 659 // SetSendParameters. | 640 // SetSendParameters. |
| 660 DataSendParameters last_send_params_; | 641 DataSendParameters last_send_params_; |
| 661 // Last DataRecvParameters sent down to the media_channel() via | 642 // Last DataRecvParameters sent down to the media_channel() via |
| 662 // SetRecvParameters. | 643 // SetRecvParameters. |
| 663 DataRecvParameters last_recv_params_; | 644 DataRecvParameters last_recv_params_; |
| 664 }; | 645 }; |
| 665 | 646 |
| 666 } // namespace cricket | 647 } // namespace cricket |
| 667 | 648 |
| 668 #endif // TALK_SESSION_MEDIA_CHANNEL_H_ | 649 #endif // TALK_SESSION_MEDIA_CHANNEL_H_ |
| OLD | NEW |