Exemplo n.º 1
0
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 sec
                                 &callbacks))
  {
    fprintf(stderr, "Error while discovering local network\n");
    exit(42);
  }

  getchar();

  netbios_ns_discover_stop(ns);

  return (0);
}
Exemplo n.º 2
0
Arquivo: sd.c Projeto: ToBeStrong/vlc
int bdsm_SdOpen (vlc_object_t *p_this)
{
    services_discovery_t *p_sd = (services_discovery_t *)p_this;
    services_discovery_sys_t *p_sys = calloc (1, sizeof (*p_sys));
    netbios_ns_discover_callbacks callbacks;

    if( p_sys == NULL )
        return VLC_ENOMEM;

    p_sd->p_sys = p_sys;
    p_sys->p_entry_item_list = vlc_array_new();
    if ( p_sys->p_entry_item_list == NULL )
        return VLC_ENOMEM;

    p_sys->p_ns = netbios_ns_new();
    if( p_sys->p_ns == NULL )
        goto error;

    callbacks.p_opaque = p_sd;
    callbacks.pf_on_entry_added = netbios_ns_discover_on_entry_added;
    callbacks.pf_on_entry_removed = netbios_ns_discover_on_entry_removed;

    if( netbios_ns_discover_start( p_sys->p_ns, BROADCAST_TIMEOUT,
                                   &callbacks) != 0 )
        goto error;

    return VLC_SUCCESS;

    error:
        bdsm_SdClose( p_this );
        return VLC_EGENERIC;
}
Exemplo n.º 3
0
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);
}
Exemplo n.º 4
0
Arquivo: sd.c Projeto: asdlei00/vlc
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;
}
Exemplo n.º 5
0
/*****************************************************************************
 * Open: Initialize module's data structures and libdsm
 *****************************************************************************/
static int Open( vlc_object_t *p_this )
{
    stream_t     *p_access = (stream_t*)p_this;
    access_sys_t *p_sys;
    smb_stat st;

    /* Init p_access */
    p_sys = p_access->p_sys = (access_sys_t*)calloc( 1, sizeof( access_sys_t ) );
    if( p_access->p_sys == NULL )
        return VLC_ENOMEM;

    p_sys->p_ns = netbios_ns_new();
    if( p_sys->p_ns == NULL )
        goto error;

    p_sys->p_session = smb_session_new();
    if( p_sys->p_session == NULL )
        goto error;

    if( vlc_UrlParseFixup( &p_sys->url, p_access->psz_url ) != 0 )
        goto error;

    if( get_address( p_access ) != VLC_SUCCESS )
        goto error;

    msg_Dbg( p_access, "Session: Host name = %s, ip = %s", p_sys->netbios_name,
             inet_ntoa( p_sys->addr ) );

    /* Now that we have the required data, let's establish a session */
    if( smb_session_connect( p_sys->p_session, p_sys->netbios_name,
                             p_sys->addr.s_addr, SMB_TRANSPORT_TCP )
                             != DSM_SUCCESS )
    {
        msg_Err( p_access, "Unable to connect/negotiate SMB session");
        goto error;
    }

    get_path( p_access );

    if( login( p_access ) != VLC_SUCCESS )
    {
        msg_Err( p_access, "Unable to open file with path %s (in share %s)",
                 p_sys->psz_path, p_sys->psz_share );
        goto error;
    }

    /* If there is no shares, browse them */
    if( !p_sys->psz_share )
        return BrowserInit( p_access );

    assert(p_sys->i_fd > 0);

    msg_Dbg( p_access, "Path: Share name = %s, path = %s", p_sys->psz_share,
             p_sys->psz_path );

    st = smb_stat_fd( p_sys->p_session, p_sys->i_fd );
    if( smb_stat_get( st, SMB_STAT_ISDIR ) )
    {
        smb_fclose( p_sys->p_session, p_sys->i_fd );
        return BrowserInit( p_access );
    }

    msg_Dbg( p_access, "Successfully opened smb://%s", p_access->psz_location );

    ACCESS_SET_CALLBACKS( Read, NULL, Control, Seek );
    return VLC_SUCCESS;

    error:
        Close( p_this );
        return VLC_EGENERIC;
}