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 486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
497 enum DtmfFlags { | 497 enum DtmfFlags { |
498 DF_PLAY = 0x01, | 498 DF_PLAY = 0x01, |
499 DF_SEND = 0x02, | 499 DF_SEND = 0x02, |
500 }; | 500 }; |
501 | 501 |
502 class MediaChannel : public sigslot::has_slots<> { | 502 class MediaChannel : public sigslot::has_slots<> { |
503 public: | 503 public: |
504 class NetworkInterface { | 504 class NetworkInterface { |
505 public: | 505 public: |
506 enum SocketType { ST_RTP, ST_RTCP }; | 506 enum SocketType { ST_RTP, ST_RTCP }; |
507 virtual bool SendPacket( | 507 virtual bool SendPacket(rtc::Buffer* packet, |
508 rtc::Buffer* packet, | 508 const rtc::PacketOptions& options) = 0; |
509 rtc::DiffServCodePoint dscp = rtc::DSCP_NO_CHANGE) = 0; | 509 virtual bool SendRtcp(rtc::Buffer* packet, |
510 virtual bool SendRtcp( | 510 const rtc::PacketOptions& options) = 0; |
511 rtc::Buffer* packet, | |
512 rtc::DiffServCodePoint dscp = rtc::DSCP_NO_CHANGE) = 0; | |
513 virtual int SetOption(SocketType type, rtc::Socket::Option opt, | 511 virtual int SetOption(SocketType type, rtc::Socket::Option opt, |
514 int option) = 0; | 512 int option) = 0; |
515 virtual ~NetworkInterface() {} | 513 virtual ~NetworkInterface() {} |
516 }; | 514 }; |
517 | 515 |
518 MediaChannel() : network_interface_(NULL) {} | 516 MediaChannel() : network_interface_(NULL) {} |
519 virtual ~MediaChannel() {} | 517 virtual ~MediaChannel() {} |
520 | 518 |
521 // Sets the abstract interface class for sending RTP/RTCP data. | 519 // Sets the abstract interface class for sending RTP/RTCP data. |
522 virtual void SetInterface(NetworkInterface *iface) { | 520 virtual void SetInterface(NetworkInterface *iface) { |
(...skipping 23 matching lines...) Expand all Loading... |
546 // ssrc must be the first SSRC of the media stream if the stream uses | 544 // ssrc must be the first SSRC of the media stream if the stream uses |
547 // multiple SSRCs. | 545 // multiple SSRCs. |
548 virtual bool RemoveRecvStream(uint32_t ssrc) = 0; | 546 virtual bool RemoveRecvStream(uint32_t ssrc) = 0; |
549 | 547 |
550 // Returns the absoulte sendtime extension id value from media channel. | 548 // Returns the absoulte sendtime extension id value from media channel. |
551 virtual int GetRtpSendTimeExtnId() const { | 549 virtual int GetRtpSendTimeExtnId() const { |
552 return -1; | 550 return -1; |
553 } | 551 } |
554 | 552 |
555 // Base method to send packet using NetworkInterface. | 553 // Base method to send packet using NetworkInterface. |
556 bool SendPacket(rtc::Buffer* packet) { | 554 bool SendPacket(rtc::Buffer* packet, const rtc::PacketOptions& options) { |
557 return DoSendPacket(packet, false); | 555 return DoSendPacket(packet, false, options); |
558 } | 556 } |
559 | 557 |
560 bool SendRtcp(rtc::Buffer* packet) { | 558 bool SendRtcp(rtc::Buffer* packet, const rtc::PacketOptions& options) { |
561 return DoSendPacket(packet, true); | 559 return DoSendPacket(packet, true, options); |
562 } | 560 } |
563 | 561 |
564 int SetOption(NetworkInterface::SocketType type, | 562 int SetOption(NetworkInterface::SocketType type, |
565 rtc::Socket::Option opt, | 563 rtc::Socket::Option opt, |
566 int option) { | 564 int option) { |
567 rtc::CritScope cs(&network_interface_crit_); | 565 rtc::CritScope cs(&network_interface_crit_); |
568 if (!network_interface_) | 566 if (!network_interface_) |
569 return -1; | 567 return -1; |
570 | 568 |
571 return network_interface_->SetOption(type, opt, option); | 569 return network_interface_->SetOption(type, opt, option); |
572 } | 570 } |
573 | 571 |
574 protected: | 572 protected: |
575 // This method sets DSCP |value| on both RTP and RTCP channels. | 573 // This method sets DSCP |value| on both RTP and RTCP channels. |
576 int SetDscp(rtc::DiffServCodePoint value) { | 574 int SetDscp(rtc::DiffServCodePoint value) { |
577 int ret; | 575 int ret; |
578 ret = SetOption(NetworkInterface::ST_RTP, | 576 ret = SetOption(NetworkInterface::ST_RTP, |
579 rtc::Socket::OPT_DSCP, | 577 rtc::Socket::OPT_DSCP, |
580 value); | 578 value); |
581 if (ret == 0) { | 579 if (ret == 0) { |
582 ret = SetOption(NetworkInterface::ST_RTCP, | 580 ret = SetOption(NetworkInterface::ST_RTCP, |
583 rtc::Socket::OPT_DSCP, | 581 rtc::Socket::OPT_DSCP, |
584 value); | 582 value); |
585 } | 583 } |
586 return ret; | 584 return ret; |
587 } | 585 } |
588 | 586 |
589 private: | 587 private: |
590 bool DoSendPacket(rtc::Buffer* packet, bool rtcp) { | 588 bool DoSendPacket(rtc::Buffer* packet, |
| 589 bool rtcp, |
| 590 const rtc::PacketOptions& options) { |
591 rtc::CritScope cs(&network_interface_crit_); | 591 rtc::CritScope cs(&network_interface_crit_); |
592 if (!network_interface_) | 592 if (!network_interface_) |
593 return false; | 593 return false; |
594 | 594 |
595 return (!rtcp) ? network_interface_->SendPacket(packet) : | 595 return (!rtcp) ? network_interface_->SendPacket(packet, options) |
596 network_interface_->SendRtcp(packet); | 596 : network_interface_->SendRtcp(packet, options); |
597 } | 597 } |
598 | 598 |
599 // |network_interface_| can be accessed from the worker_thread and | 599 // |network_interface_| can be accessed from the worker_thread and |
600 // from any MediaEngine threads. This critical section is to protect accessing | 600 // from any MediaEngine threads. This critical section is to protect accessing |
601 // of network_interface_ object. | 601 // of network_interface_ object. |
602 rtc::CriticalSection network_interface_crit_; | 602 rtc::CriticalSection network_interface_crit_; |
603 NetworkInterface* network_interface_; | 603 NetworkInterface* network_interface_; |
604 }; | 604 }; |
605 | 605 |
606 enum SendFlags { | 606 enum SendFlags { |
(...skipping 653 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1260 // Signal when the media channel is ready to send the stream. Arguments are: | 1260 // Signal when the media channel is ready to send the stream. Arguments are: |
1261 // writable(bool) | 1261 // writable(bool) |
1262 sigslot::signal1<bool> SignalReadyToSend; | 1262 sigslot::signal1<bool> SignalReadyToSend; |
1263 // Signal for notifying that the remote side has closed the DataChannel. | 1263 // Signal for notifying that the remote side has closed the DataChannel. |
1264 sigslot::signal1<uint32_t> SignalStreamClosedRemotely; | 1264 sigslot::signal1<uint32_t> SignalStreamClosedRemotely; |
1265 }; | 1265 }; |
1266 | 1266 |
1267 } // namespace cricket | 1267 } // namespace cricket |
1268 | 1268 |
1269 #endif // TALK_MEDIA_BASE_MEDIACHANNEL_H_ | 1269 #endif // TALK_MEDIA_BASE_MEDIACHANNEL_H_ |
OLD | NEW |