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.
149 lines
3.0 KiB
149 lines
3.0 KiB
/*++
|
|
|
|
Copyright (c) 1999 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
socket.c
|
|
|
|
Abstract:
|
|
|
|
This module implements the user mode DAV miniredir routines pertaining to
|
|
initialization and closing of the socket data structures.
|
|
|
|
Author:
|
|
|
|
Rohan Kumar [RohanK] 27-May-1999
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include "pch.h"
|
|
#pragma hdrstop
|
|
|
|
#include "ntumrefl.h"
|
|
#include "usrmddav.h"
|
|
#include "global.h"
|
|
|
|
//
|
|
// Implementation of functions begins here.
|
|
//
|
|
|
|
//
|
|
// Data structure that is to receive details of the WinSock implementation.
|
|
//
|
|
WSADATA g_wsaData;
|
|
BOOLEAN g_socketinit = FALSE;
|
|
|
|
ULONG
|
|
InitializeTheSocketInterface(
|
|
VOID
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This routine initializes the socket interface. This has to be done before
|
|
any WinSock calls can be made.
|
|
|
|
Arguments:
|
|
|
|
none.
|
|
|
|
Return Value:
|
|
|
|
The return status for the operation
|
|
|
|
--*/
|
|
{
|
|
ULONG WStatus = ERROR_SUCCESS;
|
|
int err;
|
|
WORD VersionRequested;
|
|
|
|
//
|
|
// Request version 2.0.
|
|
//
|
|
VersionRequested = MAKEWORD(2, 0);
|
|
|
|
//
|
|
// The WSAStartup function must be the first Windows Sockets function
|
|
// called.
|
|
//
|
|
err = WSAStartup(VersionRequested, &g_wsaData);
|
|
if (err != 0) {
|
|
//
|
|
// We could not find a suitable Winsock lib.
|
|
//
|
|
DavPrint((DEBUG_ERRORS,
|
|
"InitializeTheSocketInterface/WSAStartup: Error Val = %d.\n",
|
|
err));
|
|
WStatus = (ULONG)err;
|
|
goto EXIT_THE_FUNCTION;
|
|
}
|
|
|
|
//
|
|
// Confirm that the lib supports version 2.0. Only Winsock versions 1.1 or
|
|
// higher support the GetHostByName call.
|
|
//
|
|
if (LOBYTE(g_wsaData.wVersion) != 2 || HIBYTE(g_wsaData.wVersion) != 0) {
|
|
DavPrint((DEBUG_ERRORS,
|
|
"InitializeTheSocketInterface/WSAStartup: Ver not supported.\n"));
|
|
//
|
|
// Cleanup and return error.
|
|
//
|
|
err = WSACleanup();
|
|
if (err == SOCKET_ERROR) {
|
|
WStatus = (ULONG)WSAGetLastError();
|
|
DavPrint((DEBUG_ERRORS,
|
|
"InitializeTheSocketInterface/WSACleanup: Error Val = "
|
|
"%08lx.\n", WStatus));
|
|
}
|
|
WStatus = ERROR_NOT_SUPPORTED;
|
|
goto EXIT_THE_FUNCTION;
|
|
}
|
|
|
|
EXIT_THE_FUNCTION:
|
|
|
|
if (WStatus == ERROR_SUCCESS) {
|
|
g_socketinit = TRUE;
|
|
}
|
|
|
|
return WStatus;
|
|
}
|
|
|
|
|
|
NTSTATUS
|
|
CleanupTheSocketInterface(
|
|
VOID
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This routine cleansup the data structures created during the initialization
|
|
of the socket interface.
|
|
|
|
Arguments:
|
|
|
|
none.
|
|
|
|
Return Value:
|
|
|
|
The return status for the operation
|
|
|
|
--*/
|
|
{
|
|
ULONG WStatus = ERROR_SUCCESS;
|
|
int err;
|
|
|
|
err = WSACleanup();
|
|
if (err == SOCKET_ERROR) {
|
|
WStatus = (ULONG)WSAGetLastError();
|
|
DavPrint((DEBUG_ERRORS,
|
|
"CleanupTheSocketInterface/WSACleanup: Error Val = "
|
|
"%08lx.\n", WStatus));
|
|
}
|
|
|
|
return WStatus;
|
|
}
|