agent.h 2.29 KB
Newer Older
Dafydd Harries's avatar
Dafydd Harries committed
1 2 3 4

#ifndef _AGENT_H
#define _AGENT_H

Dafydd Harries's avatar
Dafydd Harries committed
5 6
typedef enum media_type MediaType;

Dafydd Harries's avatar
Dafydd Harries committed
7 8 9 10 11 12 13 14 15 16
enum media_type
{
  MEDIA_TYPE_AUDIO,
  MEDIA_TYPE_VIDEO,
};


/*** address ***/


17 18 19 20 21 22 23 24
typedef enum address_type AddressType;

enum address_type
{
  ADDRESS_TYPE_IPV4,
  ADDRESS_TYPE_IPV6,
};

Dafydd Harries's avatar
Dafydd Harries committed
25 26
typedef struct _address Address;

27 28 29 30 31 32 33 34 35 36
/* XXX: need access to fields to convert to sockaddr_in */
struct _address
{
  AddressType type;
  union
  {
    guint32 addr_ipv4;
    guchar addr_ipv6[16];
  };
};
Dafydd Harries's avatar
Dafydd Harries committed
37

38 39
Address *
address_new_ipv4 (guint32 addr_ipv4);
Dafydd Harries's avatar
Dafydd Harries committed
40 41 42 43
Address *
address_new_ipv4_from_string (gchar *str);
gboolean
address_equal (Address *a, Address *b);
44 45
gchar *
address_to_string (Address *addr);
Dafydd Harries's avatar
Dafydd Harries committed
46 47 48 49 50 51
void
address_free (Address *addr);


/*** candidate ***/

Dafydd Harries's avatar
Dafydd Harries committed
52
typedef enum candidate_type CandidateType;
Dafydd Harries's avatar
Dafydd Harries committed
53 54 55 56 57 58 59 60 61 62 63 64 65 66

enum candidate_type
{
  CANDIDATE_TYPE_HOST,
  CANDIDATE_TYPE_SERVER_REFLEXIVE,
  CANDIDATE_TYPE_PEER_REFLEXIVE,
  CANDIDATE_TYPE_RELAYED,
};


typedef struct _candidate Candidate;

struct _candidate
{
Dafydd Harries's avatar
Dafydd Harries committed
67
  CandidateType type;
Dafydd Harries's avatar
Dafydd Harries committed
68 69 70 71 72 73 74 75 76 77
  guint id;
  Address *addr;
  Address *base_addr;
  // guint sock;
  guint16 port;
  guint32 priority;
  // Stream *stream;
  // guint component_id;
  // guint generation;
  // gchar *foundation;
78
  UDPSocket sock;
Dafydd Harries's avatar
Dafydd Harries committed
79 80 81
};


82 83 84 85 86 87
Candidate *
candidate_new (CandidateType type);
void
candidate_free (Candidate *candidate);


Dafydd Harries's avatar
Dafydd Harries committed
88 89 90
/*** event ***/


Dafydd Harries's avatar
Dafydd Harries committed
91 92
typedef enum event_type EventType;

Dafydd Harries's avatar
Dafydd Harries committed
93 94 95 96 97 98 99 100 101 102
enum event_type
{
  EVENT_CANDIDATE_SELECTED,
};


typedef struct _event Event;

struct _event
{
Dafydd Harries's avatar
Dafydd Harries committed
103
  EventType type;
Dafydd Harries's avatar
Dafydd Harries committed
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131

  union {
    struct {
      Address *addr;
      guint candidate_id;
    } request_port;
    struct {
      Address *from;
      guint from_port;
      Address *to;
      guint to_port;
    } request_stun_query;
  };
};


void
event_free (Event *ev);


/*** agent ***/


typedef struct _agent Agent;

struct _agent
{
  guint next_candidate_id;
132
  UDPSocketManager *sockmgr;
Dafydd Harries's avatar
Dafydd Harries committed
133 134
  GSList *local_addresses;
  GSList *local_candidates;
135
  GSList *remote_candidates;
Dafydd Harries's avatar
Dafydd Harries committed
136 137 138 139 140 141
  GSList *streams;
  GSList *events;
};


Agent *
142
ice_agent_new (UDPSocketManager *mgr);
Dafydd Harries's avatar
Dafydd Harries committed
143 144 145 146 147
Event *
ice_agent_pop_event (Agent *agent);
void
ice_agent_add_local_address (Agent *agent, Address *addr);
void
Dafydd Harries's avatar
Dafydd Harries committed
148
ice_agent_add_stream (Agent *agent, MediaType type);
Dafydd Harries's avatar
Dafydd Harries committed
149 150
void
ice_agent_free (Agent *agent);
151 152 153 154 155 156
void
ice_agent_add_remote_candidate (
  Agent *agent,
  CandidateType type,
  Address *addr,
  guint port);
Dafydd Harries's avatar
Dafydd Harries committed
157 158 159

#endif /* _AGENT_H */