/*++ Copyright (C) Microsoft Corporation, 2001 Module Name: Cookie.hxx Abstract: HTTP2 Cookie management functions. Author: KamenM 09-18-01 Created Revision History: --*/ #if _MSC_VER >= 1200 #pragma once #endif #ifndef __COOKIE_HXX__ #define __COOKIE_HXX__ class CookieCollection; // forward extern CookieCollection *g_pServerCookieCollection; extern CookieCollection *g_pInProxyCookieCollection; extern CookieCollection *g_pOutProxyCookieCollection; // the CookieCollection. Currently a linked list. Try to make it // more efficient when we have time (especially a reader/writer lock) class CookieCollection { public: CookieCollection ( OUT RPC_STATUS *RpcStatus ) : Mutex (RpcStatus) { RpcpInitializeListHead(&ListHead); } inline void LockCollection ( void ) { Mutex.Request(); } void UnlockCollection ( void ) { Mutex.Clear(); } HTTP2VirtualConnection *FindElement ( IN HTTP2ServerCookie *Cookie ); void AddElement ( IN HTTP2ServerCookie *Cookie ) { Mutex.VerifyOwned(); ASSERT(FindElement(Cookie) == NULL); RpcpfInsertHeadList(&ListHead, &Cookie->ListEntry); } void RemoveElement ( IN HTTP2ServerCookie *Cookie ) { Mutex.VerifyOwned(); ASSERT(FindElement(Cookie) != NULL); RpcpfRemoveEntryList(&Cookie->ListEntry); } inline static RPC_STATUS InitializeServerCookieCollection ( void ) { return InitializeCookieCollection(&g_pServerCookieCollection); } inline static RPC_STATUS InitializeInProxyCookieCollection ( void ) { return InitializeCookieCollection(&g_pInProxyCookieCollection); } inline static RPC_STATUS InitializeOutProxyCookieCollection ( void ) { return InitializeCookieCollection(&g_pOutProxyCookieCollection); } private: static RPC_STATUS InitializeCookieCollection ( IN OUT CookieCollection **CookieCollectionPtr ); MUTEX Mutex; LIST_ENTRY ListHead; }; inline CookieCollection *GetServerCookieCollection (void) { ASSERT(g_pServerCookieCollection != NULL); return g_pServerCookieCollection; } inline CookieCollection *GetInProxyCookieCollection (void) { ASSERT(g_pInProxyCookieCollection != NULL); return g_pInProxyCookieCollection; } inline CookieCollection *GetOutProxyCookieCollection (void) { ASSERT(g_pOutProxyCookieCollection != NULL); return g_pOutProxyCookieCollection; } #endif // __COOKIE_HXX__