/* Editor Settings: expandtabs and use 4 spaces for indentation
 * ex: set softtabstop=4 tabstop=8 expandtab shiftwidth=4: *
 * -*- mode: c, c-basic-offset: 4 -*- */

/*
 * Copyright © BeyondTrust Software 2004 - 2019
 * All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * BEYONDTRUST MAKES THIS SOFTWARE AVAILABLE UNDER OTHER LICENSING TERMS AS
 * WELL. IF YOU HAVE ENTERED INTO A SEPARATE LICENSE AGREEMENT WITH
 * BEYONDTRUST, THEN YOU MAY ELECT TO USE THE SOFTWARE UNDER THE TERMS OF THAT
 * SOFTWARE LICENSE AGREEMENT INSTEAD OF THE TERMS OF THE APACHE LICENSE,
 * NOTWITHSTANDING THE ABOVE NOTICE.  IF YOU HAVE QUESTIONS, OR WISH TO REQUEST
 * A COPY OF THE ALTERNATE LICENSING TERMS OFFERED BY BEYONDTRUST, PLEASE CONTACT
 * BEYONDTRUST AT beyondtrust.com/contact
 */

/*
 * Copyright (C) BeyondTrust Software. All rights reserved.
 *
 * Module Name:
 *
 *        dnssock.h
 *
 * Abstract:
 *
 *        BeyondTrust Dynamic DNS Updates (LWDNS)
 * 
 * Authors: Krishna Ganugapati (krishnag@likewisesoftware.com)
 *          Sriram Nambakam (snambakam@likewisesoftware.com)
 */


DWORD
DNSTCPOpen(
	PCSTR    pszNameServer,
	PHANDLE  phDNSServer
	);



DWORD
DNSUDPOpen(
    PCSTR    pszNameServer,
	PHANDLE  phDNSServer
	);



DWORD
DNSTCPClose(HANDLE hBindServer);


DWORD
DNSUDPClose(HANDLE hBindServer);

DWORD
DNSClose(
    HANDLE hDNSServer
    );

DWORD
DNSSendTCPRequest(
	HANDLE hDNSHandle,
	PBYTE pDNSSendBuffer,
	DWORD dwBufferSize,
	PDWORD pdwBytesSent
	);

DWORD
DNSSendUDPRequest(
	HANDLE hDNSHandle,
	PBYTE pDNSSendBuffer,
	DWORD dwBufferSize,
	PDWORD pdwBytesSent
	);


DWORD
DNSTCPReceiveBufferContext(
	HANDLE hDNSHandle,
	HANDLE hDNSRecvBuffer,
	PDWORD pdwBytesRead
	);

DWORD
DNSUDPReceiveBufferContext(
	HANDLE hDNSHandle,
	HANDLE hDNSRecvBuffer,
	PDWORD pdwBytesRead
	);

DWORD
DNSReceiveBufferContext(
	HANDLE hDNSHandle,
	HANDLE hDNSRecvBuffer,
	PDWORD pdwBytesRead
	);


DWORD
DNSCreateSendBuffer(
	HANDLE * phDNSSendBuffer
	);


DWORD
DNSMarshallBuffer(
	HANDLE hDNSSendBuffer,
	PBYTE pDNSSendBuffer,
	DWORD dwBufferSize,
	PDWORD pdwBytesWritten
	);

void
DNSFreeSendBuffer(
	HANDLE hDNSSendBuffer
	);

DWORD
DNSSendBufferContext(
	HANDLE hDNSServer,
	HANDLE hSendBuffer,
	PDWORD pdwBytesSent
	);


DWORD
DNSTCPSendBufferContext(
	HANDLE hDNSServer,
	HANDLE hSendBuffer,
	PDWORD pdwBytesSent
	);


DWORD
DNSUDPSendBufferContext(
	HANDLE hDNSServer,
	HANDLE hSendBuffer,
	PDWORD pdwBytesSent
	);

DWORD
DNSDumpSendBufferContext(
	HANDLE hSendBuffer
	);

DWORD
DNSDumpRecvBufferContext(
	HANDLE hRecvBuffer
	);

DWORD
DNSCreateReceiveBuffer(
	HANDLE * phDNSRecvBuffer
	);

DWORD
DNSUnmarshallBuffer(
	HANDLE hDNSRecvBuffer,
	PBYTE pDNSRecvBuffer,
	DWORD dwBufferSize,
	PDWORD pdwBytesRead
	);

DWORD
DNSReceiveBufferMoveBackIndex(
	HANDLE hRecvBuffer,
	WORD wOffset
	);

VOID
DNSFreeSendBufferContext(
	HANDLE hSendBuffer
	);

VOID
DNSFreeReceiveBufferContext(
	HANDLE hRecvBuffer
	);

DWORD
DNSGetSendBufferContextSize(
	HANDLE hSendBuffer
	);


PBYTE
DNSGetSendBufferContextBuffer(
	HANDLE hSendBuffer
	);


