}
}
-static NiceCandidateTransport
-priv_match_transport (NiceCandidateTransport transport)
+NiceCandidateTransport
+conn_check_match_transport (NiceCandidateTransport transport)
{
switch (transport) {
case NICE_CANDIDATE_TRANSPORT_TCP_ACTIVE:
return FALSE;
}
/* note: match pairs only if transport and address family are the same */
- if (local->transport == priv_match_transport (remote->transport) &&
+ if (local->transport == conn_check_match_transport (remote->transport) &&
local->addr.s.addr.sa_family == remote->addr.s.addr.sa_family) {
nice_debug ("Agent %p, Adding check pair between %s and %s", agent,
break;
}
}
+ for (i = component->local_candidates; i; i = i->next) {
+ NiceCandidate *cand = i->data;
+ if (cand->sockptr == nicesock) {
+ local_candidate = cand;
+ break;
+ }
+ }
if (agent->compatibility == NICE_COMPATIBILITY_GOOGLE ||
agent->compatibility == NICE_COMPATIBILITY_MSN ||
gboolean conn_check_handle_inbound_stun (NiceAgent *agent, Stream *stream, Component *component, NiceSocket *udp_socket, const NiceAddress *from, gchar *buf, guint len);
gint conn_check_compare (const CandidateCheckPair *a, const CandidateCheckPair *b);
void conn_check_remote_candidates_set(NiceAgent *agent);
+NiceCandidateTransport conn_check_match_transport (NiceCandidateTransport transport);
#endif /*_NICE_CONNCHECK_H */
Component *component,
guint32 priority,
const NiceAddress *remote_address,
- NiceSocket *udp_socket,
+ NiceSocket *nicesock,
NiceCandidate *local,
NiceCandidate *remote)
{
NiceCandidate *candidate;
- /* XXX: for use compiler */
- (void)udp_socket;
-
candidate = nice_candidate_new (NICE_CANDIDATE_TYPE_PEER_REFLEXIVE);
candidate->addr = *remote_address;
candidate->base_addr = *remote_address;
- candidate->transport = remote->transport;
+ if (remote)
+ candidate->transport = remote->transport;
+ else if (local)
+ candidate->transport = conn_check_match_transport (local->transport);
+ else {
+ if (nicesock->type == NICE_SOCKET_TYPE_UDP_BSD ||
+ nicesock->type == NICE_SOCKET_TYPE_TURN)
+ candidate->transport = NICE_CANDIDATE_TRANSPORT_UDP;
+ else
+ candidate->transport = NICE_CANDIDATE_TRANSPORT_TCP_ACTIVE;
+ }
candidate->stream_id = stream->id;
candidate->component_id = component->id;