Skip to content

Commit a699dec

Browse files
committed
generate local candidates for later use
1 parent 4003278 commit a699dec

File tree

6 files changed

+48
-0
lines changed

6 files changed

+48
-0
lines changed

python/crtcdc.pxd

+3
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ cdef extern from "rtcdc.h":
4545
char * \
4646
rtcdc_generate_offer_sdp(rtcdc_peer_connection *peer)
4747

48+
char * \
49+
rtcdc_generate_local_candidate_sdp(rtcdc_peer_connection *peer)
50+
4851
int \
4952
rtcdc_parse_offer_sdp(rtcdc_peer_connection *peer, const char *offer)
5053

python/pyrtcdc.pyx

+3
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,9 @@ cdef class PeerConnectionBase:
147147
def generate_offer(self):
148148
return crtcdc.rtcdc_generate_offer_sdp(self._peer)
149149

150+
def generate_local_candidates(self):
151+
return crtcdc.rtcdc_generate_local_candidate_sdp(self._peer)
152+
150153
def parse_offer(self, char *offer):
151154
return crtcdc.rtcdc_parse_offer_sdp(self._peer, offer)
152155

src/rtcdc.c

+13
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,19 @@ rtcdc_generate_offer_sdp(struct rtcdc_peer_connection *peer)
172172
return generate_local_sdp(peer->transport, client);
173173
}
174174

175+
char *
176+
rtcdc_generate_local_candidate_sdp(struct rtcdc_peer_connection *peer)
177+
{
178+
if (peer == NULL)
179+
return NULL;
180+
181+
if (peer->transport == NULL) {
182+
if (create_rtcdc_transport(peer, RTCDC_PEER_ROLE_CLIENT) < 0)
183+
return NULL;
184+
}
185+
return generate_local_candidate_sdp(peer->transport);
186+
}
187+
175188
int
176189
rtcdc_parse_offer_sdp(struct rtcdc_peer_connection *peer, const char *offer)
177190
{

src/rtcdc.h

+3
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,9 @@ rtcdc_destroy_peer_connection(struct rtcdc_peer_connection *peer);
101101
char *
102102
rtcdc_generate_offer_sdp(struct rtcdc_peer_connection *peer);
103103

104+
char *
105+
rtcdc_generate_local_candidate_sdp(struct rtcdc_peer_connection *peer);
106+
104107
int
105108
rtcdc_parse_offer_sdp(struct rtcdc_peer_connection *peer, const char *offer);
106109

src/sdp.c

+23
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,29 @@ generate_local_sdp(struct rtcdc_transport *transport, int client)
6565
return strndup(buf, pos);
6666
}
6767

68+
char *
69+
generate_local_candidate_sdp(struct rtcdc_transport *transport)
70+
{
71+
if (transport == NULL || transport->ice == NULL)
72+
return NULL;
73+
74+
char buf[BUFFER_SIZE];
75+
memset(buf, 0, sizeof buf);
76+
77+
gchar *lsdp = nice_agent_generate_local_sdp(transport->ice->agent);
78+
gchar **lines = g_strsplit(lsdp, "\n", 0);
79+
g_free(lsdp);
80+
int pos = 0;
81+
for (int i = 0; lines && lines[i]; ++i) {
82+
if (g_str_has_prefix(lines[i], "a=candidate:")) {
83+
pos += sprintf(buf + pos, "%s\r\n", lines[i]);
84+
}
85+
}
86+
g_strfreev(lines);
87+
88+
return strndup(buf, pos);
89+
}
90+
6891
int
6992
parse_remote_sdp(struct ice_transport *ice, const char *rsdp)
7093
{

src/sdp.h

+3
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ struct ice_transport;
1515
char *
1616
generate_local_sdp(struct rtcdc_transport *transport, int client);
1717

18+
char *
19+
generate_local_candidate_sdp(struct rtcdc_transport *transport);
20+
1821
int
1922
parse_remote_sdp(struct ice_transport *ice, const char *rsdp);
2023

0 commit comments

Comments
 (0)