void HandlePlayRequest() { LogHelper.Debug(Tag, "handlePlayRequest: mState=" + playback.State); delayedStopHandler.RemoveCallbacksAndMessages(null); if (!serviceStarted) { LogHelper.Verbose(Tag, "Starting service"); // The MusicService needs to keep running even after the calling MediaBrowser // is disconnected. Call startService(Intent) and then stopSelf(..) when we no longer // need to play media. StartService(new Intent(ApplicationContext, typeof(MusicService))); serviceStarted = true; } if (!session.Active) { session.Active = true; } if (QueueHelper.isIndexPlayable(currentIndexOnQueue, playingQueue)) { UpdateMetadata(); playback.Play(playingQueue [currentIndexOnQueue]); } }
public bool IsCallerAllowed(Context context, string callingPackage, int callingUid) { if (Process.SystemUid == callingUid || Process.MyUid() == callingUid) { return(true); } var packageManager = context.PackageManager; PackageInfo packageInfo; try { packageInfo = packageManager.GetPackageInfo( callingPackage, PackageInfoFlags.Signatures); } catch (PackageManager.NameNotFoundException e) { LogHelper.Warn(Tag, e, "Package manager can't find package: ", callingPackage); return(false); } if (packageInfo.Signatures.Count != 1) { LogHelper.Warn(Tag, "Caller has more than one signature certificate!"); return(false); } var signature = Base64.EncodeToString( packageInfo.Signatures[0].ToByteArray(), Base64Flags.NoWrap); var validCallers = mValidCertificates[signature]; if (validCallers == null) { LogHelper.Verbose(Tag, "Signature for caller ", callingPackage, " is not valid: \n" , signature); if (mValidCertificates.Count == 0) { LogHelper.Warn(Tag, "The list of valid certificates is empty. Either your file ", "res/xml/allowed_media_browser_callers.xml is empty or there was an error ", "while reading it. Check previous log messages."); } return(false); } // Check if the package name is valid for the certificate: var expectedPackages = new StringBuilder(); foreach (var info in validCallers) { if (callingPackage == info.PackageName) { LogHelper.Verbose(Tag, "Valid caller: ", info.Name, " package=", info.PackageName, " release=", info.Release); return(true); } expectedPackages.Append(info.PackageName).Append(' '); } LogHelper.Info(Tag, "Caller has a valid certificate, but its package doesn't match any ", "expected package for the given certificate. Caller's package is ", callingPackage, ". Expected packages as defined in res/xml/allowed_media_browser_callers.xml are (", expectedPackages, "). This caller's certificate is: \n", signature); return(false); }
Dictionary <string, List <CallerInfo> > ReadValidCertificates(XmlReader parser) { var validCertificates = new Dictionary <string, List <CallerInfo> >(); try { while (parser.Read()) { if (parser.IsStartElement() && parser.Name == "signing_certificate") { var name = parser[0]; var packageName = parser[2]; var isRelease = Convert.ToBoolean(parser[1]); var certificate = parser.ReadString(); if (certificate != null) { certificate = certificate.Replace("\\s|\\n", ""); } var info = new CallerInfo(name, packageName, isRelease, certificate); List <CallerInfo> infos; validCertificates.TryGetValue(certificate, out infos); if (infos == null) { infos = new List <CallerInfo>(); validCertificates.Add(certificate, infos); } LogHelper.Verbose(Tag, "Adding allowed caller: ", info.Name, " package=", info.PackageName, " release=", info.Release, " certificate=", certificate); infos.Add(info); } } } catch (XmlException e) { LogHelper.Error(Tag, e, "Could not read allowed callers from XML."); } catch (IOException e) { LogHelper.Error(Tag, e, "Could not read allowed callers from XML."); } return(validCertificates); }