/// <summary> /// Invoked to send the Individualization Request /// </summary> async System.Threading.Tasks.Task<bool> ReactiveIndivRequest(Windows.Media.Protection.PlayReady.PlayReadyIndividualizationServiceRequest IndivRequest, Windows.Media.Protection.MediaProtectionServiceCompletion CompletionNotifier) { bool bResult = false; Exception exception = null; LogMessage("ProtectionManager PlayReady Individualization Service Request in progress..."); try { await IndivRequest.BeginServiceRequest(); } catch (Exception ex) { exception = ex; } finally { if (exception == null) { bResult = true; } else { System.Runtime.InteropServices.COMException comException = exception as System.Runtime.InteropServices.COMException; if (comException != null && comException.HResult == MSPR_E_CONTENT_ENABLING_ACTION_REQUIRED) { IndivRequest.NextServiceRequest(); } } } if (bResult == true) LogMessage("ProtectionManager PlayReady Individualization Service Request successful"); else LogMessage("ProtectionManager PlayReady Individualization Service Request failed"); if (CompletionNotifier != null) CompletionNotifier.Complete(bResult); return bResult; }
/// <summary> /// Invoked to acquire the PlayReady License /// </summary> async System.Threading.Tasks.Task<bool> LicenseAcquisitionRequest(Windows.Media.Protection.PlayReady.PlayReadyLicenseAcquisitionServiceRequest licenseRequest, Windows.Media.Protection.MediaProtectionServiceCompletion CompletionNotifier, string Url, string ChallengeCustomData) { bool bResult = false; string ExceptionMessage = string.Empty; try { if (!string.IsNullOrEmpty(Url)) { LogMessage("ProtectionManager PlayReady Manual License Acquisition Service Request in progress - URL: " + Url); if (!string.IsNullOrEmpty(ChallengeCustomData)) { // disable Base64String encoding //System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); //byte[] b = encoding.GetBytes(ChallengeCustomData); //licenseRequest.ChallengeCustomData = Convert.ToBase64String(b, 0, b.Length); licenseRequest.ChallengeCustomData = ChallengeCustomData; } Windows.Media.Protection.PlayReady.PlayReadySoapMessage soapMessage = licenseRequest.GenerateManualEnablingChallenge(); byte[] messageBytes = soapMessage.GetMessageBody(); Windows.Web.Http.IHttpContent httpContent = new Windows.Web.Http.HttpBufferContent(messageBytes.AsBuffer()); IPropertySet propertySetHeaders = soapMessage.MessageHeaders; foreach (string strHeaderName in propertySetHeaders.Keys) { string strHeaderValue = propertySetHeaders[strHeaderName].ToString(); // The Add method throws an ArgumentException try to set protected headers like "Content-Type" // so set it via "ContentType" property if (strHeaderName.Equals("Content-Type", StringComparison.OrdinalIgnoreCase)) httpContent.Headers.ContentType = Windows.Web.Http.Headers.HttpMediaTypeHeaderValue.Parse(strHeaderValue); else httpContent.Headers.TryAppendWithoutValidation(strHeaderName.ToString(), strHeaderValue); } CommonLicenseRequest licenseAcquision = new CommonLicenseRequest(); Windows.Web.Http.IHttpContent responseHttpContent = await licenseAcquision.AcquireLicense(new Uri(Url), httpContent); if (responseHttpContent != null) { //string res = await responseHttpContent.ReadAsStringAsync(); var buffer = await responseHttpContent.ReadAsBufferAsync(); Exception exResult = licenseRequest.ProcessManualEnablingResponse(buffer.ToArray()); if (exResult != null) { throw exResult; } bResult = true; } else ExceptionMessage = licenseAcquision.GetLastErrorMessage(); } else { LogMessage("ProtectionManager PlayReady License Acquisition Service Request in progress - URL: " + licenseRequest.Uri.ToString()); await licenseRequest.BeginServiceRequest(); bResult = true; } } catch (Exception e) { ExceptionMessage = e.Message; } if (bResult == true) LogMessage(!string.IsNullOrEmpty(Url) ? "ProtectionManager Manual PlayReady License Acquisition Service Request successful" : "ProtectionManager PlayReady License Acquisition Service Request successful"); else LogMessage(!string.IsNullOrEmpty(Url) ? "ProtectionManager Manual PlayReady License Acquisition Service Request failed: " + ExceptionMessage : "ProtectionManager PlayReady License Acquisition Service Request failed: " + ExceptionMessage); if (CompletionNotifier != null) CompletionNotifier.Complete(bResult); return bResult; }