diff --git a/SOCKS.txt b/SOCKS.txt index 4c7d527b639..2ef4bc93a79 100644 --- a/SOCKS.txt +++ b/SOCKS.txt @@ -1,7 +1,7 @@ SSH tunnel with port forwarding allows per port TCP/UDP traffic to be "forwarded" from one end to the tunnel to the other and appear like it was initiated from the remote end of tunnel. For example all traffic send to -port 5000 on the local machine can be forwared to a remote machine, on port +port 5000 on the local machine can be forwarded to a remote machine, on port 25000 and will appear to any client on the remote side as if it was locally coming from port 25000 @@ -13,22 +13,31 @@ This tunneling is not a all-or-nothing tunnel an allow each TCP request to be selectively forwarding or not You must first either use a public SOCKS server or create your own SOCKS/SSH -pair in which ase you must have a local SOCKS server, a local SSH client and -a remote SSH server. On Linux openssh does everything, one local instance with +pair in which case you must have a local SOCKS server, a local SSH client and +a remote SSH server. On Linux, openssh does everything, one local instance with dynamic port forwarding (-D) and a remote instance to a friend's network does the job. On Windows, you can use Bitvise Client & Server. There is plenty of internet litterature on SOCKS/SSH that explain the concept much better than anything I could write :-) + HTTP request ------> SOCKS client ------||-----> SOCKS server ------> www.google.com + >www.google.com >some.socks.com || >www.google.com >5000 + >5000 >1080 || >5000 (from some.socks.com) + + HTTP request ------> SOCKS client ----> SOCKS relay (encrypted) SOCKS server -----> www.google.com + >www.google.com >192.168.0.1 >SSH client -----||----> >SSH server 5000 + >5000 >1080 >some.ssh.com || >www.google.com + >23 || >5000 (from some.ssh.com) + One thing to notice with SOCKS5 is the lack of proper authentication mechanism which means that if you have a username/password, they will be sent in clear to the server. SOCKS4 does not require authentication. That's why I prefer to have a local SOCKS server that creates a SSH tunnel to a remote end but this means you must have a SSH remote end. -To use socks proxy to your HTTP requests, set the SOCKS parameter in LMS and -simply passed a hash named "socks" to SimpleAsyncHTTP::new or Async::HTP::new -with the following content (see IO::Socket::Socks) +To use socks proxy to your HTTP requests, simply passed a hash named "socks" +to SimpleAsyncHTTP::new or Async::HTTP::new with the following content. See +also IO::Socket::Socks) my $http = Slim::Networking::SimpleAsyncHTTP->new( sub { # succes CB }, @@ -69,7 +78,4 @@ are set and to 4 otherwise. ProxyPort can be omitted and will be set to 1080. If 'socks' hash is set but ProxyAddr is missing, a regular SimpleAsync or Async call will be made - - - - \ No newline at end of file + \ No newline at end of file diff --git a/Slim/Buttons/Playlist.pm b/Slim/Buttons/Playlist.pm index 4437f1a0140..0256fa3418c 100644 --- a/Slim/Buttons/Playlist.pm +++ b/Slim/Buttons/Playlist.pm @@ -169,7 +169,7 @@ sub init { } else { Slim::Buttons::Common::pushModeLeft($client, 'trackinfo', { - 'track' => Slim::Player::Playlist::song($client, browseplaylistindex($client)), + 'track' => Slim::Player::Playlist::track($client, browseplaylistindex($client)), 'current' => browseplaylistindex($client) == Slim::Player::Source::playingSongIndex($client) }); } @@ -200,7 +200,7 @@ sub init { # rec button deletes an entry if you are browsing the playlist... my $songtitle = Slim::Music::Info::standardTitle($client, - Slim::Player::Playlist::song($client, browseplaylistindex($client)) + Slim::Player::Playlist::track($client, browseplaylistindex($client)) ); $client->execute(["playlist", "delete", browseplaylistindex($client)]); @@ -424,26 +424,26 @@ sub lines { Slim::Player::Playlist::count($client); } - my $song = Slim::Player::Playlist::song($client, browseplaylistindex($client) ); + my $track = Slim::Player::Playlist::track($client, browseplaylistindex($client) ); my $title; my $meta; # Get remote metadata for other tracks in the playlist if available - if ( $song->isRemoteURL ) { - my $handler = Slim::Player::ProtocolHandlers->handlerForURL($song->url); + if ( $track->isRemoteURL ) { + my $handler = Slim::Player::ProtocolHandlers->handlerForURL($track->url); if ( $handler && $handler->can('getMetadataFor') ) { - $meta = $handler->getMetadataFor( $client, $song->url ); + $meta = $handler->getMetadataFor( $client, $track->url ); if ( $meta->{title} ) { - $title = Slim::Music::Info::getCurrentTitle( $client, $song->url, 0, $meta ); + $title = Slim::Music::Info::getCurrentTitle( $client, $track->url, 0, $meta ); } } } if ( !$title ) { - $title = Slim::Music::Info::standardTitle($client, $song); + $title = Slim::Music::Info::standardTitle($client, $track); } $parts = { @@ -453,21 +453,21 @@ sub lines { if ($client->display->showExtendedText()) { - if ($song && !($song->isRemoteURL)) { + if ($track && !($track->isRemoteURL)) { $parts->{'screen2'} = { 'line' => [ - Slim::Music::Info::displayText($client, $song, 'ALBUM'), - Slim::Music::Info::displayText($client, $song, 'ARTIST'), + Slim::Music::Info::displayText($client, $track, 'ALBUM'), + Slim::Music::Info::displayText($client, $track, 'ARTIST'), ] }; - } elsif ($song && $meta) { + } elsif ($track && $meta) { $parts->{'screen2'} = { 'line' => [ - Slim::Music::Info::displayText($client, $song, 'ALBUM', $meta), - Slim::Music::Info::displayText($client, $song, 'ARTIST', $meta), + Slim::Music::Info::displayText($client, $track, 'ALBUM', $meta), + Slim::Music::Info::displayText($client, $track, 'ARTIST', $meta), ] }; diff --git a/Slim/Control/Commands.pm b/Slim/Control/Commands.pm index cf230cce1c2..0a15ebde94e 100644 --- a/Slim/Control/Commands.pm +++ b/Slim/Control/Commands.pm @@ -1174,7 +1174,7 @@ sub playlistSaveCommand { if ($prefs->get('saveShuffled')) { for my $shuffleitem (@{Slim::Player::Playlist::shuffleList($client)}) { - push @$annotatedList, Slim::Player::Playlist::song($client, $shuffleitem, 0, 0); + push @$annotatedList, Slim::Player::Playlist::track($client, $shuffleitem, 0, 0); } } else { @@ -1842,7 +1842,7 @@ sub playlistZapCommand { my $zapped = $client->string('ZAPPED_SONGS'); my $zapindex = defined $index ? $index : Slim::Player::Source::playingSongIndex($client); - my $zapsong = Slim::Player::Playlist::song($client, $zapindex); + my $zaptrack = Slim::Player::Playlist::track($client, $zapindex); # Remove from current playlist if (Slim::Player::Playlist::count($client) > 0) { @@ -1863,7 +1863,7 @@ sub playlistZapCommand { }, }); - $playlistObj->appendTracks([ $zapsong ]); + $playlistObj->appendTracks([ $zaptrack ]); $playlistObj->update; Slim::Player::Playlist::scheduleWriteOfPlaylist($client, $playlistObj); diff --git a/Slim/Control/Jive.pm b/Slim/Control/Jive.pm index d9db15edd94..21d61d4d642 100644 --- a/Slim/Control/Jive.pm +++ b/Slim/Control/Jive.pm @@ -2504,10 +2504,10 @@ sub jivePresetsMenu { # if playlist_index is sent, that's for the current NP track, derive everything you need from it my $playlist_index = $request->getParam('playlist_index'); if ( defined($playlist_index) ) { - my $song = Slim::Player::Playlist::song( $client, $playlist_index ); - $url = $song->url; + my $track = Slim::Player::Playlist::track( $client, $playlist_index ); + $url = $track->url; $type = 'audio'; - $title = $song->title; + $title = $track->title; } # preset needs to be saved as either a playlist or default to audio @@ -2624,10 +2624,10 @@ sub jiveFavoritesCommand { # if playlist_index is sent, that's for the current NP track, derive everything you need from it my $playlist_index = $request->getParam('playlist_index'); if ( defined($playlist_index) ) { - my $song = Slim::Player::Playlist::song( $client, $playlist_index ); - $url = $song->url; + my $track = Slim::Player::Playlist::track( $client, $playlist_index ); + $url = $track->url; $type = 'audio'; - $title = $song->title; + $title = $track->title; } # favorite needs to be saved as either a playlist or default to audio diff --git a/Slim/Control/Queries.pm b/Slim/Control/Queries.pm index dbb2f791a75..585789d03dd 100644 --- a/Slim/Control/Queries.pm +++ b/Slim/Control/Queries.pm @@ -2508,7 +2508,7 @@ sub playlistXQuery { my $songData = _songData( $request, - Slim::Player::Playlist::song($client, $index), + Slim::Player::Playlist::track($client, $index), 'dalgN', # tags needed for our entities ); @@ -3883,7 +3883,7 @@ sub statusQuery { my $track; if (!$totalOnly) { - $track = Slim::Player::Playlist::song($client, $playlist_cur_index, $refreshTrack); + $track = Slim::Player::Playlist::track($client, $playlist_cur_index, $refreshTrack); if ($track->remote) { $tags .= "B" unless $totalOnly; # include button remapping @@ -4007,7 +4007,7 @@ sub statusQuery { for ($idx = $start; $idx <= $end; $idx++){ _addSong($request, $loop, $count, - Slim::Player::Playlist::song($client, $idx, $refreshTrack), $tags, + Slim::Player::Playlist::track($client, $idx, $refreshTrack), $tags, 'playlist index', $idx ); diff --git a/Slim/Display/Transporter.pm b/Slim/Display/Transporter.pm index 7a38fc13d53..7b9eda77215 100644 --- a/Slim/Display/Transporter.pm +++ b/Slim/Display/Transporter.pm @@ -308,7 +308,7 @@ sub showVisualizer { my $display = shift; # turn off visualizer if we're playing a digital input - if ( Slim::Music::Info::isDigitalInput(Slim::Player::Playlist::song($display->client)) ) { + if ( Slim::Music::Info::isDigitalInput(Slim::Player::Playlist::track($display->client)) ) { return 0; } diff --git a/Slim/Menu/TrackInfo.pm b/Slim/Menu/TrackInfo.pm index c8b8545cec4..98a106fdd20 100644 --- a/Slim/Menu/TrackInfo.pm +++ b/Slim/Menu/TrackInfo.pm @@ -1345,9 +1345,9 @@ sub cliQuery { # special case-- playlist_index given but no trackId if (defined($playlist_index) && ! $trackId ) { - if (my $song = Slim::Player::Playlist::song( $client, $playlist_index )) { - $trackId = $song->id; - $url = $song->url; + if (my $track = Slim::Player::Playlist::track( $client, $playlist_index )) { + $trackId = $track->id; + $url = $track->url; $request->addParam('track_id', $trackId); $request->addParam('url', $url); } @@ -1376,7 +1376,7 @@ sub cliQuery { # sometimes we get a $trackId which wouldn't return a valid track object # try the song based on the playlist_index instead - if ( !$feed && $playlist_index && (my $song = Slim::Player::Playlist::song( $client, $playlist_index )) ) { + if ( !$feed && $playlist_index && (my $song = Slim::Player::Playlist::track( $client, $playlist_index )) ) { $feed = Slim::Menu::TrackInfo->menu( $client, $song->url, $song, $tags, \%filter ); } diff --git a/Slim/Networking/SliMP3/Stream.pm b/Slim/Networking/SliMP3/Stream.pm index 96b5a93831e..dfc6e43ae28 100644 --- a/Slim/Networking/SliMP3/Stream.pm +++ b/Slim/Networking/SliMP3/Stream.pm @@ -522,7 +522,7 @@ sub gotAck { main::INFOLOG && $log->info($client->id, " Buffer full, starting playback"); - $client->currentplayingsong(Slim::Player::Playlist::song($client)); + $client->currentplayingsong(Slim::Player::Playlist::track($client)); $client->remoteStreamStartTime(time()); $client->bufferReady(1); diff --git a/Slim/Player/Player.pm b/Slim/Player/Player.pm index 6b3b2e1e8c8..6856b22e87e 100644 --- a/Slim/Player/Player.pm +++ b/Slim/Player/Player.pm @@ -304,7 +304,7 @@ sub power { $client->execute(["playlist","jump", 0, 1, 1]); } - if ($resumeOn =~ /Play/ && Slim::Player::Playlist::song($client) + if ($resumeOn =~ /Play/ && Slim::Player::Playlist::track($client) && $prefs->client($client)->get('playingAtPowerOff')) { # play even if current playlist item is a remote url (bug 7426) # but only if we were playing at power-off (bug 7061) @@ -567,19 +567,19 @@ sub currentSongLines { } } - my $song = Slim::Player::Playlist::song($client); + my $track = Slim::Player::Playlist::track($client); my $currentTitle; my $imgKey; my $artwork; my $remoteMeta; - if ( $song->isRemoteURL ) { - my $handler = Slim::Player::ProtocolHandlers->handlerForURL($song->url); + if ( $track->isRemoteURL ) { + my $handler = Slim::Player::ProtocolHandlers->handlerForURL($track->url); if ( $handler && $handler->can('getMetadataFor') ) { - $remoteMeta = $handler->getMetadataFor( $client, $song->url ); + $remoteMeta = $handler->getMetadataFor( $client, $track->url ); if ( $remoteMeta->{cover} ) { $imgKey = 'icon'; @@ -591,12 +591,12 @@ sub currentSongLines { } # Format remote metadata according to title format - $currentTitle = Slim::Music::Info::getCurrentTitle( $client, $song->url, 0, $remoteMeta ); + $currentTitle = Slim::Music::Info::getCurrentTitle( $client, $track->url, 0, $remoteMeta ); } # If that didn't return anything, use default title if ( !$currentTitle ) { - $currentTitle = Slim::Music::Info::getCurrentTitle( $client, $song->url ); + $currentTitle = Slim::Music::Info::getCurrentTitle( $client, $track->url ); } if ( !$artwork ) { @@ -605,9 +605,9 @@ sub currentSongLines { } } else { - $currentTitle = Slim::Music::Info::getCurrentTitle( $client, $song->url ); + $currentTitle = Slim::Music::Info::getCurrentTitle( $client, $track->url ); - if ( my $album = $song->album ) { + if ( my $album = $track->album ) { $imgKey = 'icon-id'; $artwork = $album->artwork || 0; } @@ -622,9 +622,9 @@ sub currentSongLines { my ($s2line1, $s2line2); - if ($song && $song->isRemoteURL) { + if ($track && $track->isRemoteURL) { - my $title = Slim::Music::Info::displayText($client, $song, 'TITLE'); + my $title = Slim::Music::Info::displayText($client, $track, 'TITLE'); if ( ($currentTitle || '') ne ($title || '') && !Slim::Music::Info::isURL($title) ) { @@ -632,14 +632,14 @@ sub currentSongLines { } elsif ($remoteMeta) { - $s2line1 = Slim::Music::Info::displayText($client, $song, 'ALBUM', $remoteMeta); - $s2line2 = Slim::Music::Info::displayText($client, $song, 'ARTIST', $remoteMeta); + $s2line1 = Slim::Music::Info::displayText($client, $track, 'ALBUM', $remoteMeta); + $s2line2 = Slim::Music::Info::displayText($client, $track, 'ARTIST', $remoteMeta); } } else { - $s2line1 = Slim::Music::Info::displayText($client, $song, 'ALBUM'); - $s2line2 = Slim::Music::Info::displayText($client, $song, 'ARTIST'); + $s2line1 = Slim::Music::Info::displayText($client, $track, 'ALBUM'); + $s2line2 = Slim::Music::Info::displayText($client, $track, 'ARTIST'); } $screen2 = { @@ -649,10 +649,10 @@ sub currentSongLines { $jive = { 'type' => 'icon', - 'text' => [ $status, $song ? $song->title : undef ], + 'text' => [ $status, $track ? $track->title : undef ], 'style' => $jiveIconStyle, 'play-mode' => $playmode, - 'is-remote' => $song->isRemoteURL, + 'is-remote' => $track->isRemoteURL, }; if ( $imgKey ) { diff --git a/Slim/Player/Playlist.pm b/Slim/Player/Playlist.pm index d61dfab5212..f45a577eadb 100644 --- a/Slim/Player/Playlist.pm +++ b/Slim/Player/Playlist.pm @@ -59,6 +59,7 @@ sub song { } sub track { + my ($client, $index, $refresh, $useShuffled) = @_; $refresh ||= 0; $useShuffled = 1 unless defined $useShuffled; diff --git a/Slim/Player/ReplayGain.pm b/Slim/Player/ReplayGain.pm index e7dbf160199..9f9acf9d899 100644 --- a/Slim/Player/ReplayGain.pm +++ b/Slim/Player/ReplayGain.pm @@ -108,10 +108,10 @@ sub findTracksByIndex { } # Get the track objects - my $current_url = Slim::Player::Playlist::song($client, $current_index); + my $current_url = Slim::Player::Playlist::track($client, $current_index); my $current_track = Slim::Schema->objectForUrl({ 'url' => $current_url, 'create' => 1, 'readTags' => 1 }); - my $compare_url = Slim::Player::Playlist::song($client, $compare_index); + my $compare_url = Slim::Player::Playlist::track($client, $compare_index); my $compare_track = Slim::Schema->objectForUrl({ 'url' => $compare_url, 'create' => 1, 'readTags' => 1 }); return ($current_track, $compare_track); diff --git a/Slim/Player/Song.pm b/Slim/Player/Song.pm index 2509c3404b9..d62d6e8de4f 100644 --- a/Slim/Player/Song.pm +++ b/Slim/Player/Song.pm @@ -81,7 +81,7 @@ sub new { my $client = $owner->master(); - my $objOrUrl = Slim::Player::Playlist::song($client, $index) || return undef; + my $objOrUrl = Slim::Player::Playlist::track($client, $index) || return undef; # Bug: 3390 - reload the track if it's changed. my $url = blessed($objOrUrl) && $objOrUrl->can('url') ? $objOrUrl->url : $objOrUrl; diff --git a/Slim/Plugin/DigitalInput/Plugin.pm b/Slim/Plugin/DigitalInput/Plugin.pm index 8ded2411ca9..7f83ca100db 100644 --- a/Slim/Plugin/DigitalInput/Plugin.pm +++ b/Slim/Plugin/DigitalInput/Plugin.pm @@ -339,10 +339,10 @@ sub handleWebList { if ($client) { - my $song = Slim::Player::Playlist::song($client); + my $track = Slim::Player::Playlist::track($client); - if ($song) { - $url = $song->url; + if ($track) { + $url = $track->url; my $name; diff --git a/Slim/Plugin/xPL/Plugin.pm b/Slim/Plugin/xPL/Plugin.pm index e1fb8d6bbe6..40d3538ff4c 100644 --- a/Slim/Plugin/xPL/Plugin.pm +++ b/Slim/Plugin/xPL/Plugin.pm @@ -321,7 +321,7 @@ sub sendXplHBeatMsg { $playmode = "playing"; my $track = Slim::Schema->objectForUrl({ - 'url' => Slim::Player::Playlist::song($client), + 'url' => Slim::Player::Playlist::track($client), 'create' => 1, 'readTags' => 1, }); diff --git a/Slim/Web/Graphics.pm b/Slim/Web/Graphics.pm index bd6f5e954c9..e4d750a090a 100644 --- a/Slim/Web/Graphics.pm +++ b/Slim/Web/Graphics.pm @@ -150,7 +150,7 @@ sub artworkRequest { # Special case: # /music/current/cover.jpg (mentioned in CLI docs) if ( $id eq 'current' && $client ) { - my $trackObj = Slim::Player::Playlist::song($client); + my $trackObj = Slim::Player::Playlist::track($client); if ( $trackObj && blessed $trackObj ) { $id = $trackObj->coverid; diff --git a/Slim/Web/HTTP.pm b/Slim/Web/HTTP.pm index 1390f3f1163..7004ae1c0e1 100644 --- a/Slim/Web/HTTP.pm +++ b/Slim/Web/HTTP.pm @@ -835,7 +835,7 @@ sub processURL { # Bug 4795 # If the player has an existing playlist, start playing it without # requiring the user to press Play in the web UI - if ( Slim::Player::Playlist::song($client) && + if ( Slim::Player::Playlist::track($client) && !Slim::Music::Info::isRemoteURL( Slim::Player::Playlist::url($client) ) ) { # play if current playlist item is not a remote url diff --git a/Slim/Web/Pages/Status.pm b/Slim/Web/Pages/Status.pm index 69b96423ef4..170f9a7a290 100644 --- a/Slim/Web/Pages/Status.pm +++ b/Slim/Web/Pages/Status.pm @@ -125,7 +125,7 @@ sub status { $params->{'currentsong'} = Slim::Player::Source::playingSongIndex($client) + 1; $params->{'thissongnum'} = Slim::Player::Source::playingSongIndex($client); $params->{'songcount'} = $songcount; - Slim::Player::Playlist::song($client)->displayAsHTML($params); + Slim::Player::Playlist::track($client)->displayAsHTML($params); Slim::Web::Pages::Common->addSongInfo($client, $params, 1);