Source code of Windows XP (NT5)
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) 1997-1999 Microsoft Corporation
Module Name:
addrgen.cpp
Abstract:
This module provides the definitions for the PORT allocation and release APIs. (Address allocation stuff removed by ZoltanS 6-1-98.)
Author:
B. Rajeev (rajeevb) 17-mar-1997
Revision History:
--*/
#include "stdafx.h"
#include <windows.h>
#include <wtypes.h>
#include <winsock2.h>
#include "addrgen.h"
#include "blbdbg.h"
extern "C" { #include <wincrypt.h>
#include <sclogon.h>
#include <dhcpcapi.h>
}
// these constants represent the port range for corresponding media
const WORD BASE_AUDIO_PORT = 16384; const WORD AUDIO_PORT_MASK = 0x3fff;
const WORD BASE_WHITEBOARD_PORT = 32768; const WORD WHITEBOARD_PORT_MASK = 0x3fff;
const WORD BASE_VIDEO_PORT = 49152; const WORD VIDEO_PORT_MASK = 0x3ffe;
/*++
Routine Description:
This routine is used to reserve as well as renew local ports.
Arguments:
lpScope - Supplies a pointer to structure describing the port group. IsRenewal - Supplies a boolean value that describes whether the allocation call is a renewal attempt or a new allocation request. NumberOfPorts - Supplies the number of ports requested. lpFirstPort - Supplies the first port to be renewed in case of renewal (strictly an IN parameter). Returns the first port allocated otherwise (strictly an OUT parameter).
Return Value:
BOOL - TRUE if successful, FALSE otherwise. Further error information can be obtained by calling GetLastError(). These error codes are -
NO_ERROR - The call was successful. MSA_INVALID_PORT_GROUP - The port group information is invalid (either if the PortType is invalid or the port range is unacceptable) MSA_RENEWAL_FAILED - System unable to renew the given ports. ERROR_INVALID_PARAMETER - One or more parameters is invalid. MSA_INVALID_DATA - One or more parameters has an invalid value.
Remarks:
All values are in host byte order
--*/ ADDRGEN_LIB_API BOOL WINAPI MSAAllocatePorts( IN LPMSA_PORT_GROUP lpPortGroup, IN BOOL IsRenewal, IN WORD NumberOfPorts, IN OUT LPWORD lpFirstPort ) { // check if parameters are valid
// if lpPortGroup or lpFirstPort is NULL - fail
if ( (NULL == lpPortGroup) || (NULL == lpFirstPort) ) { SetLastError(ERROR_INVALID_PARAMETER); return FALSE; }
// check if renewal - fail
if ( IsRenewal ) { SetLastError(MSA_INVALID_DATA); return FALSE; }
//
// PREFIXBUG 49741, 49742 - VLADE
// We should initialize the variables
//
WORD BasePort = 0; WORD Mask = 0;
// determine port range
switch(lpPortGroup->PortType) { case AUDIO_PORT: { BasePort = BASE_AUDIO_PORT; Mask = AUDIO_PORT_MASK; }
break;
case WHITEBOARD_PORT: { BasePort = BASE_WHITEBOARD_PORT; Mask = WHITEBOARD_PORT_MASK; }
break;
case VIDEO_PORT: { BasePort = BASE_VIDEO_PORT; Mask = VIDEO_PORT_MASK; }
break;
case OTHER_PORT: {
WORD StartPort; WORD EndPort; }
break;
default: { SetLastError(MSA_INVALID_PORT_GROUP); return FALSE; } };
// if the desired number of ports are more than the range allows
if ( NumberOfPorts > Mask ) { SetLastError(MSA_NOT_AVAILABLE); return FALSE; }
// choose random port in the range as the start
*lpFirstPort = BasePort + (rand() & (Mask - NumberOfPorts));
SetLastError(NO_ERROR); return TRUE; }
/*++
Routine Description:
This routine is used to release previously allocated multicast ports.
Arguments:
NumberOfPorts - Supplies the number of ports to be released. StartPort - Supplies the starting port of the port range to be released.
Return Value:
BOOL - TRUE if successful, FALSE otherwise. Further error information can be obtained by calling GetLastError(). These error codes are -
NO_ERROR - The call was successful. MSA_NO_SUCH_RESERVATION - There is no such reservation. ERROR_INVALID_PARAMETER - One or more parameters is invalid. MSA_INVALID_DATA - One or more parameters has an invalid value.
Remarks:
if range [a..c] is reserved and the release is attempted on [a..d], the call fails with MSA_NO_SUCH_RESERVATION without releasing [a..c].
All values are in host byte order
++*/ ADDRGEN_LIB_API BOOL WINAPI MSAReleasePorts( IN WORD NumberOfPorts, IN WORD StartPort ) { return TRUE; }
|