agent.h 2.38 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 78 79 80
  guint id;
  Address *addr;
  Address *base_addr;
  // guint sock;
  guint16 port;
  guint32 priority;
  // Stream *stream;
  // guint component_id;
  // guint generation;
  // gchar *foundation;
};


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


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


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

Dafydd Harries's avatar
Dafydd Harries committed
92 93 94 95 96 97 98 99 100 101 102 103 104
enum event_type
{
  EVENT_REQUEST_PORT,
  EVENT_LOCAL_CANDIDATES_READY,
  EVENT_REQUEST_STUN_QUERY,
  EVENT_CANDIDATE_SELECTED,
};


typedef struct _event Event;

struct _event
{
Dafydd Harries's avatar
Dafydd Harries committed
105
  EventType type;
Dafydd Harries's avatar
Dafydd Harries committed
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 132 133 134 135

  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;
  GSList *local_addresses;
  GSList *local_candidates;
136
  GSList *remote_candidates;
Dafydd Harries's avatar
Dafydd Harries committed
137 138 139 140 141 142 143 144 145 146 147 148
  GSList *streams;
  GSList *events;
};


Agent *
ice_agent_new ();
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
149
ice_agent_add_stream (Agent *agent, MediaType type);
Dafydd Harries's avatar
Dafydd Harries committed
150 151 152 153
void
ice_agent_set_candidate_port (Agent *agent, guint candidate_id, guint port);
void
ice_agent_free (Agent *agent);
154 155 156 157 158 159
void
ice_agent_add_remote_candidate (
  Agent *agent,
  CandidateType type,
  Address *addr,
  guint port);
Dafydd Harries's avatar
Dafydd Harries committed
160 161 162

#endif /* _AGENT_H */