| 1706 | |
| 1707 | |
| 1708 | static int |
| 1709 | extract_mediainfo(str *body, str *mediaport, str *payload_types) |
| 1710 | { |
| 1711 | char *cp, *cp1; |
| 1712 | int len, i; |
| 1713 | str ptype; |
| 1714 | |
| 1715 | cp1 = NULL; |
| 1716 | for (cp = body->s; (len = body->s + body->len - cp) > 0;) { |
| 1717 | cp1 = l_memmem(cp, "m=", len, 2); |
| 1718 | if (cp1 == NULL || cp1[-1] == '\n' || cp1[-1] == '\r') |
| 1719 | break; |
| 1720 | cp = cp1 + 2; |
| 1721 | } |
| 1722 | if (cp1 == NULL) { |
| 1723 | LM_ERR("no `m=' in SDP\n"); |
| 1724 | return -1; |
| 1725 | } |
| 1726 | mediaport->s = cp1 + 2; /* skip `m=' */ |
| 1727 | mediaport->len = eat_line(mediaport->s, body->s + body->len - |
| 1728 | mediaport->s) - mediaport->s; |
| 1729 | trim_len(mediaport->len, mediaport->s, *mediaport); |
| 1730 | |
| 1731 | /* Skip media supertype and spaces after it */ |
| 1732 | cp = eat_token_end(mediaport->s, mediaport->s + mediaport->len); |
| 1733 | mediaport->len -= cp - mediaport->s; |
| 1734 | if (mediaport->len <= 0 || cp == mediaport->s) { |
| 1735 | LM_ERR("no port in `m='\n"); |
| 1736 | return -1; |
| 1737 | } |
| 1738 | mediaport->s = cp; |
| 1739 | cp = eat_space_end(mediaport->s, mediaport->s + mediaport->len); |
| 1740 | mediaport->len -= cp - mediaport->s; |
| 1741 | if (mediaport->len <= 0 || cp == mediaport->s) { |
| 1742 | LM_ERR("no port in `m='\n"); |
| 1743 | return -1; |
| 1744 | } |
| 1745 | /* Extract port */ |
| 1746 | mediaport->s = cp; |
| 1747 | cp = eat_token_end(mediaport->s, mediaport->s + mediaport->len); |
| 1748 | ptype.len = mediaport->len - (cp - mediaport->s); |
| 1749 | if (ptype.len <= 0 || cp == mediaport->s) { |
| 1750 | LM_ERR("no port in `m='\n"); |
| 1751 | return -1; |
| 1752 | } |
| 1753 | ptype.s = cp; |
| 1754 | mediaport->len = cp - mediaport->s; |
| 1755 | /* Skip spaces after port */ |
| 1756 | cp = eat_space_end(ptype.s, ptype.s + ptype.len); |
| 1757 | ptype.len -= cp - ptype.s; |
| 1758 | if (ptype.len <= 0 || cp == ptype.s) { |
| 1759 | LM_ERR("no protocol type in `m='\n"); |
| 1760 | return -1; |
| 1761 | } |
| 1762 | /* Extract protocol type */ |
| 1763 | ptype.s = cp; |
| 1764 | cp = eat_token_end(ptype.s, ptype.s + ptype.len); |
| 1765 | if (cp == ptype.s) { |
no test coverage detected