@ -489,6 +489,9 @@ static bool parse_address(struct network_address *address) {
# define EXTRACT_NETWORK_ADDRESS(field) \
# define EXTRACT_NETWORK_ADDRESS(field) \
do { EXTRACT_NETWORK_ADDRESS_NP ( field ) ; \
do { EXTRACT_NETWORK_ADDRESS_NP ( field ) ; \
if ( ! parse_address ( & output - > field ) ) return - 1 ; } while ( 0 )
if ( ! parse_address ( & output - > field ) ) return - 1 ; } while ( 0 )
# define EXTRACT_NETWORK_ADDRESS_ATTR(field) \
do { EXTRACT_NETWORK_ADDRESS_NP ( field ) ; \
if ( ! parse_address ( & output - > field ) ) goto error ; } while ( 0 )
# define EXTRACT_NETWORK_ADDRESS_NF(field) \
# define EXTRACT_NETWORK_ADDRESS_NF(field) \
do { EXTRACT_NETWORK_ADDRESS_NP ( field ) ; \
do { EXTRACT_NETWORK_ADDRESS_NP ( field ) ; \
if ( ! parse_address ( & output - > field ) ) { \
if ( ! parse_address ( & output - > field ) ) { \
@ -735,26 +738,26 @@ error:
static int parse_attribute_rtcp ( struct sdp_attribute * output ) {
static int parse_attribute_rtcp ( struct sdp_attribute * output ) {
if ( ! output - > strs . value . s )
if ( ! output - > strs . value . s )
goto err ;
goto error ;
output - > attr = ATTR_RTCP ;
output - > attr = ATTR_RTCP ;
PARSE_INIT ;
PARSE_INIT ;
str portnum ;
str portnum ;
if ( ! str_token_sep ( & portnum , value_str , ' ' ) )
if ( ! str_token_sep ( & portnum , value_str , ' ' ) )
goto err ;
goto error ;
output - > rtcp . port_num = str_to_i ( & portnum , 0 ) ;
output - > rtcp . port_num = str_to_i ( & portnum , 0 ) ;
if ( output - > rtcp . port_num < = 0 | | output - > rtcp . port_num > 0xffff ) {
if ( output - > rtcp . port_num < = 0 | | output - > rtcp . port_num > 0xffff ) {
output - > rtcp . port_num = 0 ;
output - > rtcp . port_num = 0 ;
goto err ;
goto error ;
}
}
if ( value_str - > len )
if ( value_str - > len )
EXTRACT_NETWORK_ADDRESS ( rtcp . address ) ;
EXTRACT_NETWORK_ADDRESS_ATTR ( rtcp . address ) ;
return 0 ;
return 0 ;
err :
error :
ilog ( LOG_WARN , " Failed to parse a=rtcp attribute, ignoring " ) ;
ilog ( LOG_WARN , " Failed to parse a=rtcp attribute, ignoring " ) ;
output - > attr = ATTR_IGNORE ;
output - > attr = ATTR_IGNORE ;
return - 1 ;
return - 1 ;