Browse Source

better ICE priority calc for non-RFC clients

pull/11/head
Richard Fuchs 12 years ago
parent
commit
2a38b51a7f
1 changed files with 21 additions and 3 deletions
  1. +21
    -3
      daemon/sdp.c

+ 21
- 3
daemon/sdp.c View File

@ -1442,7 +1442,13 @@ strip:
}
INLINE unsigned long prio_calc(unsigned int pref, unsigned int tpref) {
return (1 << 24) * tpref + (1 << 8) * pref + 256 * 1;
return (1 << 24) * tpref + (1 << 8) * pref + (256 - 1);
}
INLINE unsigned long pref_from_prio(unsigned int prio) {
return (prio & 0xffff00) >> 8;
}
INLINE unsigned long type_from_prio(unsigned int prio) {
return (prio & 0xff000000) >> 24;
}
static unsigned long new_priority(struct sdp_media *media, int relay) {
@ -1471,8 +1477,20 @@ static unsigned long new_priority(struct sdp_media *media, int relay) {
for (l = cands->head; l; l = l->next) {
a = l->data;
c = &a->u.candidate;
while (c->priority >= prio && pref >= 1) {
pref--;
if (c->priority <= prio && !str_cmp(&c->type_str, "host")) {
/* tpref should come out as 126 here, unless the client isn't following
* the RFC, in which case we must adapt */
tpref = type_from_prio(c->priority);
pref = pref_from_prio(c->priority);
if (pref)
pref--;
else {
/* we must deviate from the RFC recommended values */
if (tpref)
tpref--;
pref = 65535;
}
prio = prio_calc(pref, tpref);
}
}


Loading…
Cancel
Save