merged Sys.Web.Services 2.0 support in my branch:
[mono.git] / mcs / class / System.Web / System.Web.SessionState / SessionInProcHandler.jvm.cs
1 //
2 // System.Web.SessionState.SesionInProchandler.jvm.cs
3 //
4 // Authors:
5 //  Ilya Kharmatsky (ilyak@mainsoft.com)
6 //  Alon Gazit
7 //  Pavel Sandler
8 //
9 // (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
10 //
11
12 //
13 // Permission is hereby granted, free of charge, to any person obtaining
14 // a copy of this software and associated documentation files (the
15 // "Software"), to deal in the Software without restriction, including
16 // without limitation the rights to use, copy, modify, merge, publish,
17 // distribute, sublicense, and/or sell copies of the Software, and to
18 // permit persons to whom the Software is furnished to do so, subject to
19 // the following conditions:
20 //
21 // The above copyright notice and this permission notice shall be
22 // included in all copies or substantial portions of the Software.
23 //
24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 //
32 #if !NET_2_0
33 using System;
34 using System.IO;
35 using System.Collections;
36 using System.Web;
37 using System.Web.Hosting;
38 using System.Web.Configuration;
39
40 namespace System.Web.SessionState
41 {
42
43         class SessionInProcHandler : ISessionHandler
44         {
45
46 #if NET_2_0
47                 SessionStateSection config;
48 #else
49                 SessionConfig config;
50 #endif
51
52                 public void Dispose () { }
53
54                 public void Init (SessionStateModule module, HttpApplication context,
55 #if NET_2_0
56                         SessionStateSection config
57 #else
58                         SessionConfig config
59 #endif
60 )
61                 {
62                         this.config = config;
63                 }
64
65                 public void UpdateHandler (HttpContext context, SessionStateModule module) { }
66
67                 public HttpSessionState UpdateContext (HttpContext context, SessionStateModule module,
68                                                         bool required, bool read_only, ref bool isNew)
69                 {
70
71                         if (!required)
72                                 return null;
73
74                         ServletWorkerRequest worker = (ServletWorkerRequest)context.Request.WorkerRequest;
75                         javax.servlet.http.HttpSession javaSession = worker.ServletRequest.getSession(false);
76                         HttpSessionState state;
77                         if (javaSession != null) 
78                         {
79                                 state = (HttpSessionState) javaSession.getAttribute("GH_SESSION_STATE");
80                             return state;
81                         }
82                         
83                         // We create a new session.
84                         javaSession = worker.ServletRequest.getSession(true);
85                         string sessionID = javaSession.getId();
86                         state = new HttpSessionState (sessionID, // unique identifier
87                                         new SessionDictionary(), // dictionary
88                                         HttpApplicationFactory.ApplicationState.SessionObjects,
89 #if NET_2_0
90                                         (int)config.Timeout.TotalMinutes, // XXX is this right?  we lose some precision here, but since the timeout is in minutes *anyway*...
91 #else
92                                         config.Timeout, //lifetime before death.
93 #endif
94                                         true, //new session
95                                         false, // is cookieless
96                                         SessionStateMode.J2ee,
97                                         read_only); //readonly
98                                         
99                         javaSession.setAttribute("GH_SESSION_STATE", state);
100                         
101                         isNew = true;
102                         return state;
103                 }
104         }
105 }
106
107 #endif