/*++ Copyright (c) 1994 Microsoft Corporation Module Name: session.h Abstract: Manifests, macros, types, prototypes for session.c Author: Richard L Firth (rfirth) 25-Oct-1994 Revision History: 25-Oct-1994 rfirth Created */ #if defined(__cplusplus) extern "C" { #endif // types // SESSION_INFO - describes a session with a gopher server. We will keep a cache // of these. Only one 'conversation' can be active at any one time with a gopher // server. Threads must wait on the mutex handle typedef struct _SESSION_INFO { // List - SESSION_INFOs are maintained on double-linked list LIST_ENTRY List; // ReferenceCount - used to keep this session alive when there are // concurrent creates/deletes on different threads LONG ReferenceCount; // Handle - identifies this session to the application HANDLE Handle; // Flags - various control flags. See below DWORD Flags; // Host - name of host with which we have a connection LPSTR Host; // Port - port number at which gopher server listens at Host DWORD Port; // FindList - protected, doubly-linked list of VIEW_INFO 'object's generated // by gopher directory requests SERIALIZED_LIST FindList; // FileList - protected, doubly-linked list of VIEW_INFO 'object's generated // by gopher document (file) requests SERIALIZED_LIST FileList; } SESSION_INFO, *LPSESSION_INFO; // SESSION_INFO flags #define SI_GOPHER_PLUS 0x00000001 // gopher server at Host is gopher+ #define SI_CLEANUP 0x00000002 // set by CleanupSession() #define SI_PERSISTENT 0x80000000 // connection to gopher server kept alive // macros #define UNKNOWN_GOPHER(session) ((session)->Flags & (SI_GOPHER_ZERO | SI_GOPHER_PLUS) == 0) // public data extern SERIALIZED_LIST SessionList; DEBUG_DATA_EXTERN(LONG, NumberOfSessions); // prototypes VOID AcquireSessionLock( VOID ); VOID ReleaseSessionLock( VOID ); VOID CleanupSessions( VOID ); LPSESSION_INFO FindOrCreateSession( IN LPSTR Host, IN DWORD Port, OUT LPDWORD Error ); VOID ReferenceSession( IN LPSESSION_INFO SessionInfo ); LPSESSION_INFO DereferenceSession( IN LPSESSION_INFO SessionInfo ); VOID AcquireViewLock( IN LPSESSION_INFO SessionInfo, IN VIEW_TYPE ViewType ); VOID ReleaseViewLock( IN LPSESSION_INFO SessionInfo, IN VIEW_TYPE ViewType ); DWORD GopherTransaction( IN LPVIEW_INFO ViewInfo ); BOOL IsGopherPlusSession( IN LPSESSION_INFO SessionInfo ); DWORD SearchSessionsForAttribute( IN LPSTR Locator, IN LPSTR Attribute, IN LPBYTE Buffer, IN OUT LPDWORD BufferLength ); // macros #if INET_DEBUG #define SESSION_CREATED() ++NumberOfBuffers #define SESSION_DESTROYED() --NumberOfBuffers #define ASSERT_NO_SESSIONS() \ if (NumberOfSessions != 0) { \ INET_ASSERT(FALSE); \ } #else #define SESSION_CREATED() /* NOTHING */ #define SESSION_DESTROYED() /* NOTHING */ #define ASSERT_NO_SESSIONS() /* NOTHING */ #endif #if defined(__cplusplus) } #endif