private StartUserSessionRequest BuildRequest(string swid, RSAParameters rsaParameters) { long sessionGroupId = database.GetSessionGroupId(); string publicKeyExponent = Convert.ToBase64String(rsaParameters.Exponent); string publicKeyModulus = Convert.ToBase64String(rsaParameters.Modulus); StartUserSessionRequest startUserSessionRequest = new StartUserSessionRequest(); startUserSessionRequest.PublicKeyExponent = publicKeyExponent; startUserSessionRequest.PublicKeyModulus = publicKeyModulus; startUserSessionRequest.SessionGroupId = sessionGroupId; startUserSessionRequest.UserId = swid; startUserSessionRequest.ProtocolVersion = 3; return startUserSessionRequest; }
private void Start(string swid, string guestControllerAccessToken, RSAParameters rsaParameters, Action<MixSessionStartResult> successCallback, Action failureCallback) { try { ISessionRefresher sessionRefresher = sessionRefresherFactory.Create(this); IMixWebCallFactory mixWebCallFactory = mixWebCallFactoryFactory.Create(sessionStartEncryptor, swid, guestControllerAccessToken, sessionRefresher); StartUserSessionRequest request = BuildRequest(swid, rsaParameters); IWebCall<StartUserSessionRequest, StartUserSessionResponse> webCall = mixWebCallFactory.SessionUserPut(request); webCall.OnResponse += delegate(object sender, WebCallEventArgs<StartUserSessionResponse> e) { StartUserSessionResponse response = e.Response; if (!ValidateResponse(response)) { logger.Critical("Error parsing the session start response: " + JsonParser.ToJson(response)); failureCallback(); } else { long sessionId = response.SessionId.Value; byte[] ciphertext = Convert.FromBase64String(response.EncryptedSymmetricKey); byte[] symmetricKey = rsaEncryptor.Decrypt(ciphertext, rsaParameters); keychain.PushNotificationKey = symmetricKey; database.UpdateSessionDocument(swid, delegate(SessionDocument doc) { doc.PreviousSymmetricEncryptionKey = doc.CurrentSymmetricEncryptionKey; doc.CurrentSymmetricEncryptionKey = symmetricKey; doc.SessionId = sessionId; doc.LatestNotificationSequenceNumber = 0L; }); IWebCallEncryptor webCallEncryptor = webCallEncryptorFactory.Create(symmetricKey, sessionId); MixSessionStartResult obj = new MixSessionStartResult(webCallEncryptor); successCallback(obj); } }; webCall.OnError += delegate { failureCallback(); }; webCall.Execute(force: true); } catch (Exception ex) { logger.Critical("Unhandled exception: " + ex); failureCallback(); } }
public IWebCall <StartUserSessionRequest, StartUserSessionResponse> SessionUserPut(StartUserSessionRequest request) { return(CreateWebCall <StartUserSessionRequest, StartUserSessionResponse>(HttpMethod.PUT, new Uri(host + "/session/user"), request)); }