bool MediaServerList::addServer( MediaServerDesc* desc ) { input_item_t* p_input_item = NULL; if ( getServer( desc->UDN ) ) return false; msg_Dbg( m_sd, "Adding server '%s' with uuid '%s'", desc->friendlyName.c_str(), desc->UDN.c_str() ); if ( desc->isSatIp ) { p_input_item = input_item_NewDirectory( desc->location.c_str(), desc->friendlyName.c_str(), ITEM_NET ); input_item_SetSetting( p_input_item, SATIP_SERVER_DEVICE_TYPE ); char *psz_playlist_option; if (asprintf( &psz_playlist_option, "satip-host=%s", desc->satIpHost.c_str() ) >= 0 ) { input_item_AddOption( p_input_item, psz_playlist_option, 0 ); free( psz_playlist_option ); } } else { char* psz_mrl; // We might already have some options specified in the location. char opt_delim = desc->location.find( '?' ) == 0 ? '?' : '&'; if( asprintf( &psz_mrl, "upnp://%s%cObjectID=0", desc->location.c_str(), opt_delim ) < 0 ) return false; p_input_item = input_item_NewDirectory( psz_mrl, desc->friendlyName.c_str(), ITEM_NET ); input_item_SetSetting( p_input_item, MEDIA_SERVER_DEVICE_TYPE ); free( psz_mrl ); } if ( !p_input_item ) return false; if ( desc->iconUrl.empty() == false ) input_item_SetArtworkURL( p_input_item, desc->iconUrl.c_str() ); desc->inputItem = p_input_item; input_item_SetDescription( p_input_item, desc->UDN.c_str() ); services_discovery_AddItem( m_sd, p_input_item, NULL ); m_list.push_back( desc ); return true; }
bool MediaServer::addContainer( IXML_Element* containerElement ) { char* psz_url; const char* objectID = ixmlElement_getAttribute( containerElement, "id" ); if ( !objectID ) return false; const char* title = xml_getChildElementValue( containerElement, "dc:title" ); if ( !title ) return false; if( asprintf( &psz_url, "upnp://%s?ObjectID=%s", m_psz_root, objectID ) < 0 ) return false; input_item_t* p_item = input_item_NewDirectory( psz_url, title, ITEM_NET ); free( psz_url); if ( !p_item ) return false; input_item_CopyOptions( p_item, m_node->p_item ); input_item_node_AppendItem( m_node, p_item ); input_item_Release( p_item ); return true; }
static void netbios_ns_discover_on_entry_added( void *p_opaque, netbios_ns_entry *p_entry ) { services_discovery_t *p_sd = (services_discovery_t *)p_opaque; char type = netbios_ns_entry_type( p_entry ); if( type == NETBIOS_FILESERVER ) { input_item_t *p_item; char *psz_mrl; const char *name = netbios_ns_entry_name( p_entry ); if( asprintf(&psz_mrl, "smb://%s", name) < 0 ) return; p_item = input_item_NewDirectory( psz_mrl, name, ITEM_NET ); msg_Dbg( p_sd, "Adding item %s", psz_mrl ); free(psz_mrl); entry_item_append( p_sd, p_entry, p_item ); vlc_gc_decref( p_item ); } }