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.
 
 
 
 
 
 

121 lines
2.8 KiB

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1996 - 1999
//
// File: hgttran.c
//
//--------------------------------------------------------------------------
#include <windows.h>
#include <memory.h>
#include <assert.h>
#include <malloc.h>
#include "gttran.h"
#include "ihgttran.h"
DWORD __stdcall GTOpen(HGT * phTran, const TCHAR * szLibrary, const TCHAR * tszBinding, DWORD fOpen) {
IGTS * pIGTS;
DWORD err = ERROR_SUCCESS;
assert(phTran != NULL);
assert(szLibrary != NULL);
// initialize the return handle
*phTran = 0;
// make a data structure for the handle
if( (pIGTS = (IGTS *) malloc(sizeof(IGTS))) == NULL)
return(ERROR_NOT_ENOUGH_MEMORY);
memset(pIGTS, 0, sizeof(IGTS));
// load the dynamic library
if( (pIGTS->hLib = LoadLibrary(szLibrary)) == NULL ) {
free(pIGTS);
return(ERROR_DLL_NOT_FOUND);
}
// now get all of the proc addres
if( (pIGTS->PfnOpen = (PFNOpen) GetProcAddress(pIGTS->hLib, "Open")) == NULL )
err = ERROR_PROC_NOT_FOUND;
if( (pIGTS->PfnSend = (PFNSend) GetProcAddress(pIGTS->hLib, "Send")) == NULL )
err = ERROR_PROC_NOT_FOUND;
if( (pIGTS->PfnFree = (PFNFree) GetProcAddress(pIGTS->hLib, "Free")) == NULL )
err = ERROR_PROC_NOT_FOUND;
if( (pIGTS->PfnReceive = (PFNReceive) GetProcAddress(pIGTS->hLib, "Receive")) == NULL )
err = ERROR_PROC_NOT_FOUND;
if( (pIGTS->PfnClose = (PFNClose) GetProcAddress(pIGTS->hLib, "Close")) == NULL )
err = ERROR_PROC_NOT_FOUND;
if(err != ERROR_SUCCESS) {
FreeLibrary(pIGTS->hLib );
free(pIGTS);
return(err);
}
// ok, open the file
err = pIGTS->PfnOpen(&pIGTS->hTran, tszBinding, fOpen);
if(err != ERROR_SUCCESS) {
FreeLibrary(pIGTS->hLib );
free(pIGTS);
return(err);
}
// return the handle
*phTran = (HGT) pIGTS;
return(err);
}
DWORD __stdcall GTSend(HGT hTran, DWORD dwEncoding, DWORD cbSendBuff, const BYTE * pbSendBuff) {
IGTS * pIGTS;
assert(hTran != 0);
pIGTS = (IGTS *) hTran;
return(pIGTS->PfnSend(pIGTS->hTran, dwEncoding, cbSendBuff, pbSendBuff));
}
DWORD __stdcall GTFree(HGT hTran, BYTE * pb) {
IGTS * pIGTS;
assert(hTran != 0);
pIGTS = (IGTS *) hTran;
return(pIGTS->PfnFree(pIGTS->hTran, pb));
}
DWORD __stdcall GTReceive(HGT hTran, DWORD * pdwEncoding, DWORD * pcbReceiveBuff, BYTE ** ppbReceiveBuff) {
IGTS * pIGTS;
assert(hTran != 0);
pIGTS = (IGTS *) hTran;
return(pIGTS->PfnReceive(pIGTS->hTran, pdwEncoding, pcbReceiveBuff, ppbReceiveBuff));
}
DWORD __stdcall GTClose(HGT hTran) {
IGTS * pIGTS;
assert(hTran != 0);
pIGTS = (IGTS *) hTran;
// close and free all ofthe junk
pIGTS->PfnClose(pIGTS->hTran);
FreeLibrary(pIGTS->hLib );
free(pIGTS);
return(ERROR_SUCCESS);
}