home *** CD-ROM | disk | FTP | other *** search
-
- /******************************************************************************\
- * This is a part of the Microsoft Source Code Samples.
- * Copyright 1995 - 1997 Microsoft Corporation.
- * All rights reserved.
- * This source code is only intended as a supplement to
- * Microsoft Development Tools and/or WinHelp documentation.
- * See these sources for detailed information regarding the
- * Microsoft samples programs.
- \******************************************************************************/
-
- /*++
-
- Copyright (c) 1997 Microsoft Corporation
-
- Module Name:
-
- SrvList.c
-
- Abstract:
-
- The server component of Remote. This module
- implements three lists of REMOTE_CLIENT structures,
- for handshaking, connected, and closing clients.
- To simplify the interface items always progress
- through the three lists in order, with list node
- memory being freed as it is removed from the
- closing list.
-
-
- Author:
-
- Dave Hart 30 May 1997
-
- Environment:
-
- Console App. User mode.
-
- Revision History:
-
- --*/
-
- #include <windows.h>
- #include "Remote.h"
- #include "Server.h"
- #include "SrvList.h"
-
-
- VOID
- FASTCALL
- InitializeClientLists(
- VOID
- )
- {
- InitializeCriticalSection( &csHandshakingList );
- InitializeCriticalSection( &csClientList );
- InitializeCriticalSection( &csClosingClientList );
-
- InitializeListHead( &HandshakingListHead );
- InitializeListHead( &ClientListHead );
- InitializeListHead( &ClosingClientListHead );
- }
-
-
- VOID
- FASTCALL
- AddClientToHandshakingList(
- PREMOTE_CLIENT pClient
- )
- {
- EnterCriticalSection( &csHandshakingList );
-
- InsertTailList( &HandshakingListHead, &pClient->Links );
-
- LeaveCriticalSection( &csHandshakingList );
- }
-
-
- VOID
- FASTCALL
- MoveClientToNormalList(
- PREMOTE_CLIENT pClient
- )
- {
- EnterCriticalSection( &csHandshakingList );
-
- RemoveEntryList( &pClient->Links );
-
- LeaveCriticalSection( &csHandshakingList );
-
-
- EnterCriticalSection( &csClientList );
-
- InsertTailList( &ClientListHead, &pClient->Links );
-
- LeaveCriticalSection( &csClientList );
- }
-
-
- VOID
- FASTCALL
- MoveClientToClosingList(
- PREMOTE_CLIENT pClient
- )
- {
- EnterCriticalSection( &csClientList );
-
- RemoveEntryList( &pClient->Links );
-
- LeaveCriticalSection( &csClientList );
-
-
- EnterCriticalSection( &csClosingClientList );
-
- InsertTailList( &ClosingClientListHead, &pClient->Links );
-
- LeaveCriticalSection( &csClosingClientList );
- }
-
-
- PREMOTE_CLIENT
- FASTCALL
- RemoveFirstClientFromClosingList(
- VOID
- )
- {
- PREMOTE_CLIENT pClient;
-
- EnterCriticalSection( &csClosingClientList );
-
- if (IsListEmpty(&ClosingClientListHead)) {
-
- pClient = NULL;
-
- } else {
-
- pClient = (PREMOTE_CLIENT) RemoveHeadList( &ClosingClientListHead );
-
- ZeroMemory( &pClient->Links, sizeof(&pClient->Links) );
-
- }
-
- LeaveCriticalSection( &csClosingClientList );
-
- return pClient;
- }
-