int main() { struct in_addr addr; smb_session *session; smb_tid tid; smb_fd fd; session = smb_session_new(); if (session == NULL) exit(1); inet_aton("127.0.0.1", &addr.sin_addr); if (smb_session_connect(session, "MYNAME", addr.sin_addr.s_addr, SMB_TRANSPORT_TCP)) { printf("Unable to connect to host\n"); exit(2); } smb_session_set_creds(session, "MYNAME", "login", "password"); if (smb_session_login(session)) { if (session->guest) printf("Logged in as GUEST \n"); else printf("Successfully logged in\n"); } else { printf("Auth failed\n"); exit(3); } tid = smb_tree_connect(session, "MyShare"); if (!tid) { printf("Unable to connect to share\n"); exit(4); } fd = smb_fopen(session, tid, "\\My\\File"); if (!fd) { printf("Unable to open file\n"); exit(5); } char buffer[512]; smb_fread(session, fd, buffer, 512); /* Use data */ smb_fclose(session, fd); smb_tree_disconnect(session, tid); smb_session_destroy(session); return(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; }