private static unsafe void RefreshAccessTokenCallback(IntPtr userHandlePtr, IntPtr sessionHandlePtr, sbyte *urlBuffer, IntPtr urlLength)
        {
            var userHandle = new SyncUserHandle();

            userHandle.SetHandle(userHandlePtr);
            var user = new User(userHandle);

            var sessionHandle = new SessionHandle();

            sessionHandle.SetHandle(sessionHandlePtr);

            var realmUri = new Uri(new string(urlBuffer, 0, (int)urlLength, System.Text.Encoding.UTF8));

            user.RefreshAccessToken(realmUri.AbsolutePath)
            .ContinueWith(t =>
            {
                if (t.IsFaulted)
                {
                    // TODO: raise error event on the session
                }
                else
                {
                    sessionHandle.RefreshAccessToken(t.Result.Item1, t.Result.Item2);
                }
            });
        }