int main(int ac, char **av) { netbios_ns *ns; struct in_addr addr; const char *name; ns = netbios_ns_new(); if (ac != 2) { fprintf(stderr, "%s usage: %s a.b.c.d\n", av[0], av[0]); fprintf(stderr, "Print the netbios name for this IP address\n"); exit(1); } inet_aton(av[1], &addr); if ((name = netbios_ns_inverse(ns, addr.s_addr)) == NULL) { fprintf(stderr, "Unable to perform inverse name resolution for %s\n", av[1]); exit(42); } printf("%s\n", name); netbios_ns_destroy(ns); return (0); }
void bdsm_SdClose (vlc_object_t *p_this) { services_discovery_t *sd = (services_discovery_t *)p_this; services_discovery_sys_t *p_sys = sd->p_sys; if( p_sys == NULL ) return; if( p_sys->p_ns ) { netbios_ns_discover_stop( p_sys->p_ns ); netbios_ns_destroy( p_sys->p_ns ); } if( p_sys->p_entry_item_list ) { for ( int i = 0; i < vlc_array_count( p_sys->p_entry_item_list ); i++ ) { struct entry_item *p_entry_item; p_entry_item = vlc_array_item_at_index( p_sys->p_entry_item_list, i ); vlc_gc_decref( p_entry_item->p_item ); free( p_entry_item ); } vlc_array_destroy( p_sys->p_entry_item_list ); } free( p_sys ); }
int main() { netbios_ns *ns; netbios_ns_discover_callbacks callbacks; ns = netbios_ns_new(); callbacks.p_opaque = (void*)0x42; callbacks.pf_on_entry_added = on_entry_added; callbacks.pf_on_entry_removed = on_entry_removed; printf("Discovering...\nPress Enter to quit\n"); if (netbios_ns_discover_start(ns, 4, // broadcast every 4 seconds &callbacks)) { fprintf(stderr, "Error while discovering local network\n"); exit(42); } getchar(); netbios_ns_discover_stop(ns); netbios_ns_destroy(ns); return 0; }
void SdClose (vlc_object_t *p_this) { services_discovery_t *sd = (services_discovery_t *)p_this; services_discovery_sys_t *p_sys = sd->p_sys; if( p_sys == NULL ) return; if( p_sys->ns != NULL ) netbios_ns_destroy( p_sys->ns ); }
int SdOpen (vlc_object_t *p_this) { services_discovery_t *p_sd = (services_discovery_t *)p_this; services_discovery_sys_t *p_sys = malloc (sizeof (*p_sys)); if( p_sys == NULL ) return VLC_ENOMEM; p_sd->p_sys = p_sys; /* Let's create a NETBIOS name service object */ p_sys->ns = netbios_ns_new(); if( p_sys->ns == NULL ) goto error; if( !netbios_ns_discover( p_sys->ns ) ) goto error; for( ssize_t i = 0; i < netbios_ns_entry_count( p_sys->ns ); i++ ) { netbios_ns_entry *p_entry = netbios_ns_entry_at( p_sys->ns, i ); if( p_entry->type == 0x20 ) { input_item_t *p_item; char *psz_mrl; if( asprintf(&psz_mrl, "smb://%s", p_entry->name) < 0 ) goto error; p_item = input_item_NewWithType( psz_mrl, p_entry->name, 0, NULL, 0, -1, ITEM_TYPE_NODE ); msg_Dbg( p_sd, "Adding item %s", psz_mrl ); services_discovery_AddItem( p_sd, p_item, NULL ); free( psz_mrl ); } } return VLC_SUCCESS; error: if( p_sys->ns != NULL ) netbios_ns_destroy( p_sys->ns ); free( p_sys ); p_sd->p_sys = NULL; return VLC_EGENERIC; }
/***************************************************************************** * Close: free unused data structures *****************************************************************************/ static void Close( vlc_object_t *p_this ) { stream_t *p_access = (stream_t*)p_this; access_sys_t *p_sys = p_access->p_sys; if( p_sys->p_ns ) netbios_ns_destroy( p_sys->p_ns ); if( p_sys->i_fd ) smb_fclose( p_sys->p_session, p_sys->i_fd ); if( p_sys->p_session ) smb_session_destroy( p_sys->p_session ); vlc_UrlClean( &p_sys->url ); free( p_sys->psz_fullpath ); free( p_sys ); }
/***************************************************************************** * Close: free unused data structures *****************************************************************************/ static void Close( vlc_object_t *p_this ) { access_t *p_access = (access_t*)p_this; access_sys_t *p_sys = p_access->p_sys; if( p_sys->p_ns ) netbios_ns_destroy( p_sys->p_ns ); if( p_sys->i_fd ) smb_fclose( p_sys->p_session, p_sys->i_fd ); if( p_sys->p_session ) smb_session_destroy( p_sys->p_session ); vlc_UrlClean( &p_sys->url ); if( p_sys->shares ) smb_share_list_destroy( p_sys->shares ); if( p_sys->files ) smb_stat_list_destroy( p_sys->files ); free( p_sys->psz_user_opt ); free( p_sys->psz_pwd_opt ); free( p_sys->psz_domain_opt ); free( p_sys->psz_share ); free( p_sys->psz_path ); free( p_sys ); }