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

#ifndef _AGENT_H
#define _AGENT_H

5 6 7 8

#include "address.h"


Dafydd Harries's avatar
Dafydd Harries committed
9 10
/*** candidate ***/

Dafydd Harries's avatar
Dafydd Harries committed
11
typedef enum candidate_type CandidateType;
Dafydd Harries's avatar
Dafydd Harries committed
12 13 14 15 16 17 18 19 20 21 22 23 24 25

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
26
  CandidateType type;
Dafydd Harries's avatar
Dafydd Harries committed
27
  guint id;
28 29
  Address addr;
  Address base_addr;
Dafydd Harries's avatar
Dafydd Harries committed
30 31
  guint16 port;
  guint32 priority;
32 33
  guint stream_id;
  guint component_id;
Dafydd Harries's avatar
Dafydd Harries committed
34 35
  // guint generation;
  // gchar *foundation;
36
  UDPSocket sock;
Dafydd Harries's avatar
Dafydd Harries committed
37 38 39
};


40 41 42 43
Candidate *
candidate_new (CandidateType type);
void
candidate_free (Candidate *candidate);
44 45 46 47
gfloat
candidate_jingle_priority (Candidate *candidate);
guint32
candidate_ice_priority (Candidate *candidate);
48 49


Dafydd Harries's avatar
Dafydd Harries committed
50 51 52
/*** event ***/


Dafydd Harries's avatar
Dafydd Harries committed
53 54
typedef enum event_type EventType;

Dafydd Harries's avatar
Dafydd Harries committed
55 56 57 58 59 60 61 62 63 64
enum event_type
{
  EVENT_CANDIDATE_SELECTED,
};


typedef struct _event Event;

struct _event
{
Dafydd Harries's avatar
Dafydd Harries committed
65
  EventType type;
Dafydd Harries's avatar
Dafydd Harries committed
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

  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;
Dafydd Harries's avatar
Dafydd Harries committed
94
  guint next_stream_id;
95
  UDPSocketManager *sockmgr;
Dafydd Harries's avatar
Dafydd Harries committed
96 97
  GSList *local_addresses;
  GSList *local_candidates;
98
  GSList *remote_candidates;
Dafydd Harries's avatar
Dafydd Harries committed
99 100 101 102 103
  GSList *streams;
  GSList *events;
};


104 105 106 107
typedef void (*AgentRecvHandler) (
  Agent *agent, guint stream_id, guint component_id, guint len, gchar *buf);


Dafydd Harries's avatar
Dafydd Harries committed
108
Agent *
109
ice_agent_new (UDPSocketManager *mgr);
Dafydd Harries's avatar
Dafydd Harries committed
110 111 112 113
Event *
ice_agent_pop_event (Agent *agent);
void
ice_agent_add_local_address (Agent *agent, Address *addr);
Dafydd Harries's avatar
Dafydd Harries committed
114
guint
115 116
ice_agent_add_stream (
  Agent *agent,
117
  AgentRecvHandler handle_recv);
Dafydd Harries's avatar
Dafydd Harries committed
118 119
void
ice_agent_free (Agent *agent);
120 121 122 123 124 125
void
ice_agent_add_remote_candidate (
  Agent *agent,
  CandidateType type,
  Address *addr,
  guint port);
Dafydd Harries's avatar
Dafydd Harries committed
126 127 128 129
void
ice_agent_recv (
  Agent *agent,
  guint candidate_id);
Dafydd Harries's avatar
Dafydd Harries committed
130 131 132

#endif /* _AGENT_H */