Index: Networking/SqueezeNetwork.pm =================================================================== --- Networking/SqueezeNetwork.pm (revision 32376) +++ Networking/SqueezeNetwork.pm (working copy) @@ -435,6 +435,11 @@ push @headers, 'X-Controlled-By', $controller; } + if ( my $controllerUA = $client->controllerUA ) { + warn "$controllerUA\n"; + push @headers, 'X-Controller-UA', $controllerUA; + } + # Request JSON instead of XML, it is much faster to parse push @headers, 'Accept', 'text/x-json, text/xml'; Index: Player/Client.pm =================================================================== --- Player/Client.pm (revision 32376) +++ Player/Client.pm (working copy) @@ -133,7 +133,7 @@ curDepth lastLetterIndex lastLetterDigit lastLetterTime lastDigitIndex lastDigitTime searchFor syncSelection _playPoint playPoints jiffiesEpoch jiffiesOffsetList - _tempVolume musicInfoTextCache metaTitle languageOverride controlledBy password currentSleepTime + _tempVolume musicInfoTextCache metaTitle languageOverride controlledBy controllerUA password currentSleepTime sleepTime pendingPrefChanges _pluginData alarmData knobData modeStack modeParameterStack playlist chunks @@ -297,6 +297,7 @@ metaTitle => undef, languageOverride => undef, controlledBy => undef, + controllerUA => undef, password => undef, currentSleepTime => 0, sleepTime => 0, Index: Web/Cometd.pm =================================================================== --- Web/Cometd.pm (revision 32376) +++ Web/Cometd.pm (working copy) @@ -195,11 +195,13 @@ last if @errors; # Detect the language Jive wants content returned in - my $lang; + my ($lang, $ua); if ( ref $conn ) { if ( my $al = $conn->[HTTP_RESPONSE]->request->header('Accept-Language') ) { $lang = uc $al; } + + $ua = $conn->[HTTP_RESPONSE]->request->header('X-User-Agent') || $conn->[HTTP_RESPONSE]->request->header('User-Agent'); } # If a client sends any request and we do not have a valid clid record @@ -427,6 +429,7 @@ clid => $responseClid, type => 'subscribe', lang => $lang, + ua => $ua, } ); if ( $result->{error} ) { @@ -540,6 +543,7 @@ clid => $responseClid, type => 'request', lang => $lang, + ua => $ua, } ); if ( $result->{error} ) { @@ -749,6 +753,7 @@ my $type = $params->{type}; my $lang = $params->{lang}; + my $ua = $params->{ua}; my $mac = $cmd->[0]; my $args = $cmd->[1]; @@ -844,11 +849,16 @@ $request->setLanguageOverride($lang); } + if ( $ua && $client ) { + $client->controllerUA($ua); + } + # Finish is called when request is done to reset language and controlledBy my $finish = sub { if ( $client ) { $client->languageOverride(undef); $client->controlledBy(undef); + $client->controllerUA(undef); } }; Index: Web/JSONRPC.pm =================================================================== --- Web/JSONRPC.pm (revision 32376) +++ Web/JSONRPC.pm (working copy) @@ -185,6 +185,10 @@ my @parts = split(/[,-]/, $lang); $context->{lang} = uc $parts[0] if $parts[0]; } + + if ( my $ua = ( $httpResponse->request->header('X-User-Agent') || $httpResponse->request->header('User-Agent') ) ) { + $context->{ua} = $ua; + } # Check our operational mode using our X-Jive header # We must be delaing with a 1.1 client because X-Jive uses chunked transfers @@ -363,6 +367,7 @@ # Set language override for this request my $lang = $context->{lang}; + my $ua = $context->{ua}; my $finish; @@ -373,11 +378,16 @@ $finish = sub { $client->languageOverride(undef); $client->controlledBy(undef); + $client->controllerUA(undef); }; } elsif ( $lang ) { $request->setLanguageOverride($lang); } + + if ( $ua && $client ) { + $client->controllerUA($ua); + } # fix the encoding and/or manage charset param $request->fixEncoding();