Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
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
|