[vlc-devel] [PATCH 2/6] microdns: Regroup chromecast TXT records analysis
Hugo Beauzée-Luyssen
hugo at beauzee.fr
Fri Jun 26 17:11:08 CEST 2020
While the md= and ic= where not specific to chromecast but to any
renderers, chromecast is the only renderer we currently support.
---
modules/services_discovery/microdns.c | 40 ++++++++++++---------------
1 file changed, 18 insertions(+), 22 deletions(-)
diff --git a/modules/services_discovery/microdns.c b/modules/services_discovery/microdns.c
index 6899185b5b..370667ae3f 100644
--- a/modules/services_discovery/microdns.c
+++ b/modules/services_discovery/microdns.c
@@ -109,6 +109,8 @@ struct srv
{
const char *psz_protocol;
char * psz_device_name;
+ char * psz_model;
+ char * psz_icon;
uint16_t i_port;
int i_renderer_flags;
};
@@ -272,7 +274,11 @@ items_clear( struct discovery_sys *p_sys )
static void clear_srvs( struct srv *p_srvs, unsigned int i_nb_srv )
{
for( unsigned int i = 0; i < i_nb_srv; ++i )
+ {
free( p_srvs[i].psz_device_name );
+ free( p_srvs[i].psz_model );
+ free( p_srvs[i].psz_icon );
+ }
free( p_srvs );
}
@@ -357,6 +363,16 @@ parse_entries( const struct rr_entry *p_entries, bool b_renderer,
if ( ( ca & 0x04 ) != 0 )
p_srv->i_renderer_flags |= VLC_RENDERER_CAN_AUDIO;
}
+ else if( !strncmp("md=", p_txt->txt, 3) )
+ {
+ free( p_srv->psz_model );
+ p_srv->psz_model = strdup( p_txt->txt + 3 );
+ }
+ else if( !strncmp("ic=", p_txt->txt, 3) )
+ {
+ free( p_srv->psz_icon );
+ p_srv->psz_icon = strdup( p_txt->txt + 3 );
+ }
}
}
}
@@ -477,26 +493,6 @@ new_entries_rd_cb( void *p_this, int i_status, const struct rr_entry *p_entries
&psz_ip, &b_ipv6 ) != VLC_SUCCESS )
return;
- const char *psz_model = NULL;
- const char *psz_icon = NULL;
- for( const struct rr_entry *p_entry = p_entries;
- p_entry != NULL && ( psz_model == NULL || psz_icon == NULL );
- p_entry = p_entry->next )
- {
- if( p_entry->type == RR_TXT )
- {
- const struct rr_data_txt *p_txt = p_entry->data.TXT;
- while( p_txt && ( psz_model == NULL || psz_icon == NULL ) )
- {
- if( !strncmp("md=", p_txt->txt, 3) )
- psz_model = p_txt->txt + 3;
- else if( !strncmp("ic=", p_txt->txt, 3) )
- psz_icon = p_txt->txt + 3;
- p_txt = p_txt->next;
- }
- }
- }
-
/* send new input items (if they don't already exist) */
for( unsigned int i = 0; i < i_nb_srv; ++i )
{
@@ -515,8 +511,8 @@ new_entries_rd_cb( void *p_this, int i_status, const struct rr_entry *p_entries
continue;
}
- if( psz_icon != NULL
- && asprintf( &psz_icon_uri, "http://%s:8008%s", psz_ip, psz_icon )
+ if( p_srv->psz_icon != NULL
+ && asprintf( &psz_icon_uri, "http://%s:8008%s", psz_ip, p_srv->psz_icon )
== -1 )
{
free( psz_uri );
--
2.20.1
More information about the vlc-devel
mailing list