예제 #1
0
        public static string[] DecodeContinuationToken(string continuationToken, List <ContinuationTokenVersion> supportedVersions, bool isOriginalVersionSupported, out ContinuationTokenVersion continuationTokenVersion)
        {
            string[] strArrays;
            if (supportedVersions == null || supportedVersions.Count <= 0)
            {
                throw new ArgumentException("The supported versions cannot be null and must contain at least one version.", "supportedVersions");
            }
            if (string.IsNullOrEmpty(continuationToken))
            {
                throw new ArgumentException("The continuation token cannot be null or empty.", "continuationToken");
            }
            continuationTokenVersion = ContinuationTokenVersion.None;
            try
            {
                if (Regex.IsMatch(continuationToken, "^(\\d+)!(\\d+)!"))
                {
                    char[]   chrArray   = new char[] { '!' };
                    string[] strArrays1 = continuationToken.Split(chrArray, 3, StringSplitOptions.None);
                    if ((int)strArrays1.Length != 3)
                    {
                        throw new ContinuationTokenParserException(string.Format("Did find expected number of tokens ({0}).", 3), "continuationToken");
                    }
                    continuationTokenVersion = (ContinuationTokenVersion)Convert.ToInt32(strArrays1[0]);
                    if (!supportedVersions.Contains((ContinuationTokenVersion)((int)continuationTokenVersion)))
                    {
                        string str = "[";
                        int    num = 0;
                        foreach (ContinuationTokenVersion supportedVersion in supportedVersions)
                        {
                            str = string.Concat(str, supportedVersion.ToString());
                            if (num < supportedVersions.Count - 1)
                            {
                                str = string.Concat(str, ", ");
                            }
                            num++;
                        }
                        str = string.Concat(str, "]");
                        throw new ContinuationTokenParserException(string.Format("The version found ({0}) is not in the list of supported versions; supported versions = {1}.", (ContinuationTokenVersion)((int)continuationTokenVersion), str));
                    }
                    switch ((int)continuationTokenVersion)
                    {
                    case 1:
                    {
                        strArrays = ContinuationTokenParser.DecodeContinuationTokenV1(strArrays1);
                        return(strArrays);
                    }

                    case 2:
                    {
                        strArrays = ContinuationTokenParser.DecodeContinuationTokenV2(strArrays1);
                        return(strArrays);
                    }
                    }
                    object[] objArray = new object[] { (ContinuationTokenVersion)((int)continuationTokenVersion) };
                    NephosAssertionException.Fail("Internal error: Version {0} is invalid.", objArray);
                    strArrays = null;
                }
                else
                {
                    if (!isOriginalVersionSupported)
                    {
                        throw new ContinuationTokenParserException("Proper header format not found.", "continuationToken");
                    }
                    Logger <IRestProtocolHeadLogger> .Instance.Verbose.Log("Received continuation token in original PDC2008 format. Token = '{0}'", new object[] { continuationToken });

                    strArrays = new string[] { continuationToken };
                }
            }
            catch (ContinuationTokenParserException continuationTokenParserException1)
            {
                ContinuationTokenParserException continuationTokenParserException = continuationTokenParserException1;
                IStringDataEventStream           error = Logger <IRestProtocolHeadLogger> .Instance.Error;
                object[] objArray1 = new object[] { (ContinuationTokenVersion)((int)continuationTokenVersion), continuationToken };
                error.Log("Error decoding continuation token with version {0} and value {1}", objArray1);
                throw new ContinuationTokenParserException(string.Format("Caught an exception when decoding a {0} continuation token. Continuation token = '{1}'.", (ContinuationTokenVersion)((int)continuationTokenVersion), continuationToken), continuationTokenParserException);
            }
            return(strArrays);
        }
예제 #2
0
 public static string[] DecodeContinuationToken(string continuationToken, List <ContinuationTokenVersion> supportedVersions, out ContinuationTokenVersion continuationTokenVersion)
 {
     return(ContinuationTokenParser.DecodeContinuationToken(continuationToken, supportedVersions, true, out continuationTokenVersion));
 }