|
|
|
@ -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); |
|
|
|
} |
|
|
|
} |
|
|
|
|