| 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 505 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 516 enum DtmfFlags { | 516 enum DtmfFlags { |
| 517 DF_PLAY = 0x01, | 517 DF_PLAY = 0x01, |
| 518 DF_SEND = 0x02, | 518 DF_SEND = 0x02, |
| 519 }; | 519 }; |
| 520 | 520 |
| 521 class MediaChannel : public sigslot::has_slots<> { | 521 class MediaChannel : public sigslot::has_slots<> { |
| 522 public: | 522 public: |
| 523 class NetworkInterface { | 523 class NetworkInterface { |
| 524 public: | 524 public: |
| 525 enum SocketType { ST_RTP, ST_RTCP }; | 525 enum SocketType { ST_RTP, ST_RTCP }; |
| 526 virtual bool SendPacket( | 526 virtual bool SendPacket(rtc::Buffer* packet, |
| 527 rtc::Buffer* packet, | 527 const rtc::PacketOptions& options) = 0; |
| 528 rtc::DiffServCodePoint dscp = rtc::DSCP_NO_CHANGE) = 0; | 528 virtual bool SendRtcp(rtc::Buffer* packet, |
| 529 virtual bool SendRtcp( | 529 const rtc::PacketOptions& options) = 0; |
| 530 rtc::Buffer* packet, | |
| 531 rtc::DiffServCodePoint dscp = rtc::DSCP_NO_CHANGE) = 0; | |
| 532 virtual int SetOption(SocketType type, rtc::Socket::Option opt, | 530 virtual int SetOption(SocketType type, rtc::Socket::Option opt, |
| 533 int option) = 0; | 531 int option) = 0; |
| 534 virtual ~NetworkInterface() {} | 532 virtual ~NetworkInterface() {} |
| 535 }; | 533 }; |
| 536 | 534 |
| 537 MediaChannel() : network_interface_(NULL) {} | 535 MediaChannel() : network_interface_(NULL) {} |
| 538 virtual ~MediaChannel() {} | 536 virtual ~MediaChannel() {} |
| 539 | 537 |
| 540 // Sets the abstract interface class for sending RTP/RTCP data. | 538 // Sets the abstract interface class for sending RTP/RTCP data. |
| 541 virtual void SetInterface(NetworkInterface *iface) { | 539 virtual void SetInterface(NetworkInterface *iface) { |
| (...skipping 23 matching lines...) Expand all Loading... |
| 565 // ssrc must be the first SSRC of the media stream if the stream uses | 563 // ssrc must be the first SSRC of the media stream if the stream uses |
| 566 // multiple SSRCs. | 564 // multiple SSRCs. |
| 567 virtual bool RemoveRecvStream(uint32_t ssrc) = 0; | 565 virtual bool RemoveRecvStream(uint32_t ssrc) = 0; |
| 568 | 566 |
| 569 // Returns the absoulte sendtime extension id value from media channel. | 567 // Returns the absoulte sendtime extension id value from media channel. |
| 570 virtual int GetRtpSendTimeExtnId() const { | 568 virtual int GetRtpSendTimeExtnId() const { |
| 571 return -1; | 569 return -1; |
| 572 } | 570 } |
| 573 | 571 |
| 574 // Base method to send packet using NetworkInterface. | 572 // Base method to send packet using NetworkInterface. |
| 575 bool SendPacket(rtc::Buffer* packet) { | 573 bool SendPacket(rtc::Buffer* packet, const rtc::PacketOptions& options) { |
| 576 return DoSendPacket(packet, false); | 574 return DoSendPacket(packet, false, options); |
| 577 } | 575 } |
| 578 | 576 |
| 579 bool SendRtcp(rtc::Buffer* packet) { | 577 bool SendRtcp(rtc::Buffer* packet, const rtc::PacketOptions& options) { |
| 580 return DoSendPacket(packet, true); | 578 return DoSendPacket(packet, true, options); |
| 581 } | 579 } |
| 582 | 580 |
| 583 int SetOption(NetworkInterface::SocketType type, | 581 int SetOption(NetworkInterface::SocketType type, |
| 584 rtc::Socket::Option opt, | 582 rtc::Socket::Option opt, |
| 585 int option) { | 583 int option) { |
| 586 rtc::CritScope cs(&network_interface_crit_); | 584 rtc::CritScope cs(&network_interface_crit_); |
| 587 if (!network_interface_) | 585 if (!network_interface_) |
| 588 return -1; | 586 return -1; |
| 589 | 587 |
| 590 return network_interface_->SetOption(type, opt, option); | 588 return network_interface_->SetOption(type, opt, option); |
| 591 } | 589 } |
| 592 | 590 |
| 593 protected: | 591 protected: |
| 594 // This method sets DSCP |value| on both RTP and RTCP channels. | 592 // This method sets DSCP |value| on both RTP and RTCP channels. |
| 595 int SetDscp(rtc::DiffServCodePoint value) { | 593 int SetDscp(rtc::DiffServCodePoint value) { |
| 596 int ret; | 594 int ret; |
| 597 ret = SetOption(NetworkInterface::ST_RTP, | 595 ret = SetOption(NetworkInterface::ST_RTP, |
| 598 rtc::Socket::OPT_DSCP, | 596 rtc::Socket::OPT_DSCP, |
| 599 value); | 597 value); |
| 600 if (ret == 0) { | 598 if (ret == 0) { |
| 601 ret = SetOption(NetworkInterface::ST_RTCP, | 599 ret = SetOption(NetworkInterface::ST_RTCP, |
| 602 rtc::Socket::OPT_DSCP, | 600 rtc::Socket::OPT_DSCP, |
| 603 value); | 601 value); |
| 604 } | 602 } |
| 605 return ret; | 603 return ret; |
| 606 } | 604 } |
| 607 | 605 |
| 608 private: | 606 private: |
| 609 bool DoSendPacket(rtc::Buffer* packet, bool rtcp) { | 607 bool DoSendPacket(rtc::Buffer* packet, |
| 608 bool rtcp, |
| 609 const rtc::PacketOptions& options) { |
| 610 rtc::CritScope cs(&network_interface_crit_); | 610 rtc::CritScope cs(&network_interface_crit_); |
| 611 if (!network_interface_) | 611 if (!network_interface_) |
| 612 return false; | 612 return false; |
| 613 | 613 |
| 614 return (!rtcp) ? network_interface_->SendPacket(packet) : | 614 return (!rtcp) ? network_interface_->SendPacket(packet, options) |
| 615 network_interface_->SendRtcp(packet); | 615 : network_interface_->SendRtcp(packet, options); |
| 616 } | 616 } |
| 617 | 617 |
| 618 // |network_interface_| can be accessed from the worker_thread and | 618 // |network_interface_| can be accessed from the worker_thread and |
| 619 // from any MediaEngine threads. This critical section is to protect accessing | 619 // from any MediaEngine threads. This critical section is to protect accessing |
| 620 // of network_interface_ object. | 620 // of network_interface_ object. |
| 621 rtc::CriticalSection network_interface_crit_; | 621 rtc::CriticalSection network_interface_crit_; |
| 622 NetworkInterface* network_interface_; | 622 NetworkInterface* network_interface_; |
| 623 }; | 623 }; |
| 624 | 624 |
| 625 enum SendFlags { | 625 enum SendFlags { |
| (...skipping 655 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1281 // Signal when the media channel is ready to send the stream. Arguments are: | 1281 // Signal when the media channel is ready to send the stream. Arguments are: |
| 1282 // writable(bool) | 1282 // writable(bool) |
| 1283 sigslot::signal1<bool> SignalReadyToSend; | 1283 sigslot::signal1<bool> SignalReadyToSend; |
| 1284 // Signal for notifying that the remote side has closed the DataChannel. | 1284 // Signal for notifying that the remote side has closed the DataChannel. |
| 1285 sigslot::signal1<uint32_t> SignalStreamClosedRemotely; | 1285 sigslot::signal1<uint32_t> SignalStreamClosedRemotely; |
| 1286 }; | 1286 }; |
| 1287 | 1287 |
| 1288 } // namespace cricket | 1288 } // namespace cricket |
| 1289 | 1289 |
| 1290 #endif // TALK_MEDIA_BASE_MEDIACHANNEL_H_ | 1290 #endif // TALK_MEDIA_BASE_MEDIACHANNEL_H_ |
| OLD | NEW |