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.
211 lines
5.4 KiB
211 lines
5.4 KiB
/*++
|
|
|
|
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;
|
|
}
|
|
|