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