1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen/* 2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * libjingle 3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * Copyright 2004--2010, Google Inc. 4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * Redistribution and use in source and binary forms, with or without 6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * modification, are permitted provided that the following conditions are met: 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * 1. Redistributions of source code must retain the above copyright notice, 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * this list of conditions and the following disclaimer. 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * 2. Redistributions in binary form must reproduce the above copyright notice, 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * this list of conditions and the following disclaimer in the documentation 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * and/or other materials provided with the distribution. 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * 3. The name of the author may not be used to endorse or promote products 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * derived from this software without specific prior written permission. 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen */ 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#ifndef TALK_SESSION_PHONE_RTCPMUXFILTER_H_ 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#define TALK_SESSION_PHONE_RTCPMUXFILTER_H_ 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "talk/base/basictypes.h" 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "talk/p2p/base/sessiondescription.h" 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace cricket { 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// RTCP Muxer, as defined in RFC 5761 (http://tools.ietf.org/html/rfc5761) 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass RtcpMuxFilter { 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen RtcpMuxFilter(); 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Whether the filter is active, i.e. has RTCP mux been properly negotiated. 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool IsActive() const; 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Specifies whether the offer indicates the use of RTCP mux. 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool SetOffer(bool offer_enable, ContentSource src); 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Specifies whether the answer indicates the use of RTCP mux. 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool SetAnswer(bool answer_enable, ContentSource src); 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Determines whether the specified packet is RTCP. 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool DemuxRtcp(const char* data, int len); 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen enum State { ST_INIT, ST_SENTOFFER, ST_RECEIVEDOFFER, ST_ACTIVE }; 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen State state_; 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool offer_enable_; 57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} // namespace cricket 60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif // TALK_SESSION_PHONE_RTCPMUXFILTER_H_ 62