summaryrefslogtreecommitdiff
path: root/agent/component.h
blob: 84fa3b8bb8bef76e155dd7c120e8fccc552ca5f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/*
 * This file is part of the Nice GLib ICE library.
 *
 * (C) 2006, 2007 Collabora Ltd.
 *  Contact: Dafydd Harries
 * (C) 2006, 2007 Nokia Corporation. All rights reserved.
 *  Contact: Kai Vehmanen
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is the Nice GLib ICE library.
 *
 * The Initial Developers of the Original Code are Collabora Ltd and Nokia
 * Corporation. All Rights Reserved.
 *
 * Contributors:
 *   Dafydd Harries, Collabora Ltd.
 *   Kai Vehmanen, Nokia
 *
 * Alternatively, the contents of this file may be used under the terms of the
 * the GNU Lesser General Public License Version 2.1 (the "LGPL"), in which
 * case the provisions of LGPL are applicable instead of those above. If you
 * wish to allow use of your version of this file only under the terms of the
 * LGPL and not to allow others to use your version of this file under the
 * MPL, indicate your decision by deleting the provisions above and replace
 * them with the notice and other provisions required by the LGPL. If you do
 * not delete the provisions above, a recipient may use your version of this
 * file under either the MPL or the LGPL.
 */

#ifndef _NICE_COMPONENT_H
#define _NICE_COMPONENT_H

#include <glib.h>

#include "agent.h"
#include "candidate.h"

G_BEGIN_DECLS

/* (ICE-13 ยง4.1.1) For RTP-based media streams, the RTP itself has a component
 * ID of 1, and RTCP a component ID of 2.  If an agent is using RTCP it MUST
 * obtain a candidate for it.  If an agent is using both RTP and RTCP, it
 * would end up with 2*K host candidates if an agent has K interfaces.
 */

typedef enum
{
  COMPONENT_TYPE_RTP,
  COMPONENT_TYPE_RTCP,
} ComponentType;


typedef struct _Component Component;
typedef struct _CandidatePair CandidatePair;

struct _CandidatePair
{
  NiceCandidate *local;
  NiceCandidate *remote;
  guint64 priority;           /**< candidate pair priority */  
};

struct _Component
{
  ComponentType type;
  guint id;
  NiceComponentState state;
  GSList *local_candidates;    /**< list of Candidate objs */
  GSList *remote_candidates;   /**< list of Candidate objs */
  GSList *sockets;             /**< list of NiceUDPSocket objs */
  GSList *gsources;            /**< list of GSource objs */
  CandidatePair selected_pair; /**< independent from checklists, 
				    see ICE 11.1.1 (ID-15) */
  gboolean media_after_tick;   /**< true if media received since last
				    keepalive tick */

  /* XXX: **to be removed**
   * --cut-- 
  GSList *checks;
   * the local candidate that last received a valid connectivity */
  NiceCandidate *active_candidate;
  /* the remote address that the last connectivity check came from */
  NiceAddress peer_addr;
  /* --cut-- */
};

Component *
component_new (
  G_GNUC_UNUSED
  ComponentType type);

void
component_free (Component *cmp);

NiceUDPSocket *
component_find_udp_socket_by_fd (Component *component, guint fd);

G_END_DECLS

#endif /* _NICE_COMPONENT_H */