Example #1
0
        SessionStateStoreData Deserialize(HttpContext context, string serializedItems, int timeout)
        {
            MemoryStream ms = null;
            Stream       input;
            BinaryReader reader = null;

#if NET_4_0
            GZipStream gzip = null;
#endif
            try {
                ms = new MemoryStream(Convert.FromBase64String(serializedItems));
                var sessionItems = new SessionStateItemCollection();

                if (ms.Length > 0)
                {
#if NET_4_0
                    if (sessionConfig.CompressionEnabled)
                    {
                        input = gzip = new GZipStream(ms, CompressionMode.Decompress, true);
                    }
                    else
#endif
                    input = ms;

                    reader       = new BinaryReader(input);
                    sessionItems = SessionStateItemCollection.Deserialize(reader);
#if NET_4_0
                    if (gzip != null)
                    {
                        gzip.Close();
                    }
#endif
                    reader.Close();
                }

                return(new SessionStateStoreData(sessionItems, SessionStateUtility.GetSessionStaticObjects(context), timeout));
            } finally {
#if NET_4_0
                if (reader != null)
                {
                    reader.Dispose();
                }
                if (gzip != null)
                {
                    gzip.Dispose();
                }
#else
                if (reader != null)
                {
                    ((IDisposable)reader).Dispose();
                }
#endif
                if (ms != null)
                {
                    ms.Dispose();
                }
            }
        }
Example #2
0
        internal static SessionStateStoreData Deserialize(HttpContext context, Stream stream)
        {
            int timeout;
            SessionStateItemCollection sessionItems;
            bool hasItems;
            bool hasStaticObjects;
            HttpStaticObjectsCollection staticObjects;
            Byte eof;

            Debug.Assert(context != null);

            try {
                BinaryReader reader = new BinaryReader(stream);
                timeout          = reader.ReadInt32();
                hasItems         = reader.ReadBoolean();
                hasStaticObjects = reader.ReadBoolean();

                if (hasItems)
                {
                    sessionItems = SessionStateItemCollection.Deserialize(reader);
                }
                else
                {
                    sessionItems = new SessionStateItemCollection();
                }

                if (hasStaticObjects)
                {
                    staticObjects = HttpStaticObjectsCollection.Deserialize(reader);
                }
                else
                {
                    staticObjects = SessionStateUtility.GetSessionStaticObjects(context);
                }

                eof = reader.ReadByte();
                if (eof != 0xff)
                {
                    throw new HttpException(SR.GetString(SR.Invalid_session_state));
                }
            }
            catch (EndOfStreamException) {
                throw new HttpException(SR.GetString(SR.Invalid_session_state));
            }

            return(new SessionStateStoreData(sessionItems, staticObjects, timeout));
        }
        internal static SessionStateStoreData Deserialize(HttpContext context, Stream stream)
        {
            int num;
            SessionStateItemCollection  items;
            HttpStaticObjectsCollection sessionStaticObjects;

            try
            {
                BinaryReader reader = new BinaryReader(stream);
                num = reader.ReadInt32();
                bool flag  = reader.ReadBoolean();
                bool flag2 = reader.ReadBoolean();
                if (flag)
                {
                    items = SessionStateItemCollection.Deserialize(reader);
                }
                else
                {
                    items = new SessionStateItemCollection();
                }
                if (flag2)
                {
                    sessionStaticObjects = HttpStaticObjectsCollection.Deserialize(reader);
                }
                else
                {
                    sessionStaticObjects = GetSessionStaticObjects(context);
                }
                if (reader.ReadByte() != 0xff)
                {
                    throw new HttpException(System.Web.SR.GetString("Invalid_session_state"));
                }
            }
            catch (EndOfStreamException)
            {
                throw new HttpException(System.Web.SR.GetString("Invalid_session_state"));
            }
            return(new SessionStateStoreData(items, sessionStaticObjects, num));
        }
        SessionStateStoreData GetItemInternal(HttpContext context,
                                              string id,
                                              out bool locked,
                                              out TimeSpan lockAge,
                                              out object lockId,
                                              out SessionStateActions actions,
                                              bool exclusive)
        {
            Trace.WriteLine("SessionStateServerHandler.GetItemInternal");
            Trace.WriteLine("\tid == " + id);
            Trace.WriteLine("\tpath == " + context.Request.FilePath);
            locked  = false;
            lockAge = TimeSpan.MinValue;
            lockId  = Int32.MinValue;
            actions = SessionStateActions.None;

            if (id == null)
            {
                return(null);
            }

            StateServerItem item = stateServer.GetItem(id,
                                                       out locked,
                                                       out lockAge,
                                                       out lockId,
                                                       out actions,
                                                       exclusive);

            if (item == null)
            {
                Trace.WriteLine("\titem is null (locked == " + locked + ", actions == " + actions + ")");
                return(null);
            }
            if (actions == SessionStateActions.InitializeItem)
            {
                Trace.WriteLine("\titem needs initialization");
                return(CreateNewStoreData(context, item.Timeout));
            }
            SessionStateItemCollection  items = null;
            HttpStaticObjectsCollection sobjs = null;
            MemoryStream stream = null;
            BinaryReader reader = null;

            try {
                if (item.CollectionData != null && item.CollectionData.Length > 0)
                {
                    stream = new MemoryStream(item.CollectionData);
                    reader = new BinaryReader(stream);
                    items  = SessionStateItemCollection.Deserialize(reader);
                }
                else
                {
                    items = new SessionStateItemCollection();
                }
                if (item.StaticObjectsData != null && item.StaticObjectsData.Length > 0)
                {
                    sobjs = HttpStaticObjectsCollection.FromByteArray(item.StaticObjectsData);
                }
                else
                {
                    sobjs = new HttpStaticObjectsCollection();
                }
            } catch (Exception ex) {
                throw new HttpException("Failed to retrieve session state.", ex);
            } finally {
                if (reader != null)
                {
                    reader.Close();
                }
            }

            return(new SessionStateStoreData(items,
                                             sobjs,
                                             item.Timeout));
        }
		SessionStateStoreData GetItemInternal (HttpContext context,
						       string id,
						       out bool locked,
						       out TimeSpan lockAge,
						       out object lockId,
						       out SessionStateActions actions,
						       bool exclusive)
		{
			locked = false;
			lockAge = TimeSpan.MinValue;
			lockId = Int32.MinValue;
			actions = SessionStateActions.None;

			if (id == null)
				return null;
			
			StateServerItem item = stateServer.GetItem (id,
								    out locked,
								    out lockAge,
								    out lockId,
								    out actions,
								    exclusive);
			
			if (item == null)
				return null;
			
			if (actions == SessionStateActions.InitializeItem)
				return CreateNewStoreData (context, item.Timeout);
			
			SessionStateItemCollection items = null;
			HttpStaticObjectsCollection sobjs = null;
			MemoryStream stream = null;
			BinaryReader reader = null;
			Stream input = null;
#if NET_4_0
			GZipStream gzip = null;
#endif
			try {
				if (item.CollectionData != null && item.CollectionData.Length > 0) {
					stream = new MemoryStream (item.CollectionData);
#if NET_4_0					
					if (config.CompressionEnabled)
						input = gzip = new GZipStream (stream, CompressionMode.Decompress, true);
					else
#endif
						input = stream;
					reader = new BinaryReader (input);
					items = SessionStateItemCollection.Deserialize (reader);
#if NET_4_0
					if (gzip != null)
						gzip.Close ();
#endif
					reader.Close ();
				} else
					items = new SessionStateItemCollection ();
				if (item.StaticObjectsData != null && item.StaticObjectsData.Length > 0)
					sobjs = HttpStaticObjectsCollection.FromByteArray (item.StaticObjectsData);
				else
					sobjs = new HttpStaticObjectsCollection ();
			} catch (Exception ex) {
				throw new HttpException ("Failed to retrieve session state.", ex);
			} finally {
				if (stream != null)
					stream.Dispose ();
#if NET_4_0
				if (reader != null)
					reader.Dispose ();
				if (gzip != null)
					gzip.Dispose ();
#else
				if (reader != null)
					((IDisposable)reader).Dispose ();
#endif
			}
				
			return new SessionStateStoreData (items,
							  sobjs,
							  item.Timeout);
		}