Windows2003-3790/inetcore/wininet/gopher/session.h
2020-09-30 16:53:55 +02:00

205 lines
3.4 KiB
C

/*++
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