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.
 
 
 
 
 
 

75 lines
1.7 KiB

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation
//
// File: queue.h
//
//--------------------------------------------------------------------------
#if !defined( _QUEUE_H_ )
#define _QUEUE_H_
#define SMALL_STRING 64
#include <tchar.h>
#include <cmnhdr.h>
#include <windows.h>
#include <winsock2.h>
#include <TlntUtils.h>
#include <Telnetd.h>
class CQueue;
typedef char IP_ADDR;
typedef struct Q_LIST_ENTRY {
struct Q_LIST_ENTRY *pQPrev;
struct Q_LIST_ENTRY *pQNext;
IP_ADDR chIPAddr[SMALL_STRING];
DWORD dwPid;
HANDLE hWritePipe;
} Q_LIST_ENTRY, *PQ_LIST_ENTRY;
class CQueue
{
PQ_LIST_ENTRY m_pHead;
PQ_LIST_ENTRY m_pTail;
CRITICAL_SECTION m_csQModification;
public:
DWORD m_dwNumOfUnauthenticatedConnections;
DWORD m_dwMaxUnauthenticatedConnections;
DWORD m_dwMaxIPLimit;
// constructor
CQueue();
// destructor
~CQueue();
bool IsQFull();
// Allocates memory for an entry and adds it in the queue.
bool Push(DWORD dwPid, HANDLE *phWritePipe, IP_ADDR *pchIPAddr);
// Frees a head entry in the queue.
bool Pop(HANDLE *phWritePipe);
// Frees a particular entry in the queue.
bool FreeEntry(DWORD dwPid);
//See if allowed to add to the queue.
bool OkToProceedWithThisClient(IP_ADDR *pchIPAddr);
//Check whether the client was added to our queue or not
bool WasTheClientAdded(DWORD dwPid, IP_ADDR *pchIPAddr, HANDLE *phWritePipe, bool *pbSendMessage);
//See if per IP limit is reached
bool IsIPLimitReached(IP_ADDR *pchIPAddr);
};
#endif