on master help sign in
enabling both single-use and multiple-use.
commit4bbdf93f21c3970294dccae25ab432fe320fd9ae authorKazu Yamamoto <kazu@iij.ad.jp> dateFri 30 Jun 2017, 14:53 (9 years ago) parent2327c7e
1 file changed+10−6
tls-session-manager/Network/TLS/SessionManager.hs+10−6
tls-session-manager/Network/TLS/SessionManager.hs+10−6
@@ -48,6 +48,7 @@ type DB = OrdPSQ SessionID UTCTime Value
4848type Item = (SessionID, UTCTime, Value, Operation)
4949
5050data Operation = Add | Del
51+data Use = SingleUse | MultipleUse
5152data Availability = Fresh | Used
5253
5354----------------------------------------------------------------
@@ -65,7 +66,7 @@ newSessionManager conf = do
6566 , reaperDelay = pruningDelay conf * 1000000
6667 }
6768 return SessionManager {
68− sessionResume = resume reaper
69+ sessionResume = resume reaper MultipleUse
6970 , sessionEstablish = establish reaper lifetime
7071 , sessionInvalidate = invalidate reaper
7172 }
@@ -101,16 +102,19 @@ establish reaper lifetime k sd = do
101102 let !v = (sd,ref)
102103 reaperAdd reaper (k,p,v,Add)
103104
104−resume :: Reaper DB Item
105+resume :: Reaper DB Item -> Use
105106 -> SessionID -> IO (Maybe SessionData)
106−resume reaper k = do
107+resume reaper use k = do
107108 db <- reaperRead reaper
108109 case Q.lookup k db of
109110 Nothing -> return Nothing
110111 Just (p,v@(sd,ref)) -> do
111− available <- atomicModifyIORef' ref check
112− reaperAdd reaper (k,p,v,Del)
113− return $ if available then Just sd else Nothing
112+ case use of
113+ SingleUse -> do
114+ available <- atomicModifyIORef' ref check
115+ reaperAdd reaper (k,p,v,Del)
116+ return $ if available then Just sd else Nothing
117+ MultipleUse -> return $ Just sd
114118 where
115119 check Fresh = (Used,True)
116120 check Used = (Used,False)