windows-nt/Source/XPSP1/NT/net/tapi/skywalker/cc/inc/arscli.h
2020-09-26 16:20:57 +08:00

433 lines
14 KiB
C

////////////////////////////////////////////////////////////////////////////////
//
// INTEL Corporation Proprietary Information
// Copyright (c) 1995 Intel Corporation
//
// This software is supplied under the terms of a license agreement with INTEL
// Corporation and may not be used, copied, nor disclosed except in accordance
// with the terms of that agreement.
//
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//
// $Workfile: arscli.h $
// $Revision: 1.6 $
// $Modtime: 19 Sep 1996 19:20:44 $
//
// DESCRIPTION:
//
// This header file defines the Address Resolution Service's client
// side interface. This interface is meant to be used by applications
// who have a need to map to dynamically assigned address information
// for a given user (i.e. if the user is connected to the internet via
// a ISP who uses DHCP to hand out IP addresses.
//
// The following exported functions are declared in this file:
//
// ARCreateRegistration()
// ARDestroyRegistration()
// ARCreateCallTargetInfo()
// ARQueryCallTargetInfo()
// ARDestroyCallTargetInfo()
// ARGetConfigVal()
// ARSetConfigVal()
// ARReleaseStringResult()
// ARGetHostByAddr()
//
////////////////////////////////////////////////////////////////////////////////
/****************************************************************************
*
* ARS Client Interface 0.005
*
***************************************************************************/
#ifndef ARSCLIENT_H
#define ARSCLIENT_H
#ifndef DllImport
#define DllImport __declspec( dllimport )
#endif // DllImport
#ifndef DllExport
#define DllExport __declspec( dllexport )
#endif // DllExport
//
// Error Handling Information
//
#include <winerror.h>
#include "apierror.h"
typedef enum AR_TAGS
{
AR_TAG_BADTAG = 0,
AR_TAG_IPADDR,
AR_TAG_PORTNUM,
AR_TAG_APPGUID,
AR_TAG_USERNAME,
AR_TAG_NAPPS,
AR_TAG_QUERYURL,
AR_TAG_USERID,
AR_NUM_TAGS
} ARTag;
typedef enum AR_CONFIGTAGS
{
AR_CONFIG_BADTAG = 0,
AR_CONFIG_PROXY,
AR_CONFIG_PROXYPORT,
AR_CONFIG_SERVERURL,
AR_NUM_CONFIGTAGS
} ARConfigTag;
//This is the base of the server errors,
//All HTTP return codes are added to this
//base error to create the actual return
//value.
#define ERROR_SERVER_ERROR_BASE (ERROR_LOCAL_BASE_ID + 0x200)
#define AR_OLE_FAIL(x) ((HRESULT)MAKE_HRESULT(SEVERITY_ERROR, \
FACILITY_ARSCLIENT, (x)))
#define AR_OLE_SUCCESS(x) ((HRESULT)MAKE_HRESULT(SEVERITY_SUCCESS, \
FACILITY_ARSCLIENT, (x)))
#define AR_OK AR_OLE_SUCCESS(ERROR_SUCCESS)
#define AR_WINSOCK_STARTUP AR_OLE_FAIL(ERROR_DLL_INIT_FAILED)
#define AR_WINSOCK_VERSION AR_OLE_FAIL(ERROR_OLD_WIN_VERSION)
#define AR_ADDRLEN AR_OLE_FAIL(ERROR_BAD_LENGTH)
#define AR_STRING_INVALID AR_OLE_FAIL(ERROR_INTERNAL_ERROR)
#define AR_SOCKERROR AR_OLE_FAIL(ERROR_WRITE_FAULT)
#define AR_INVALID_RESPONSE AR_OLE_FAIL(ERROR_INVALID_DATA)
#define AR_SERVER_ERROR AR_OLE_FAIL(ERROR_SERVER_ERROR_BASE)
#define AR_PEER_UNREACHABLE AR_OLE_FAIL(ERROR_HOST_UNREACHABLE)
#define AR_OUTOFMEMORY AR_OLE_FAIL(ERROR_OUTOFMEMORY)
#define AR_INVALID_PARAMETER AR_OLE_FAIL(ERROR_INVALID_PARAMETER)
#define AR_NOT_IMPLEMENTED AR_OLE_FAIL(ERROR_INVALID_FUNCTION)
#define AR_BAD_TARGET AR_OLE_FAIL(ERROR_OPEN_FAILED)
#define AR_BADCONTEXT AR_OLE_FAIL(ERROR_INVALID_ADDRESS)
//
// Local data types
//
typedef void* ARRegContext;
typedef void* ARCallTargetInfoContext;
typedef char* ARString;
//
// Function prototypes
//
#ifdef __cplusplus
extern "C" { // Assume C declarations for C++.
#endif // __cplusplus
/*----------------------------------------------------------------------------
* ARCreateRegistration
* DLL entry point
*
* Takes server information and registers with that server, creating
* a context which must be used to unregister.
*
* Returns error code indicating success or failure.
*
* Parameters:
*
* regContext Pointer to a registration
* context to be filled (ARRegContext)
* appGUID GUID of application to register
* appName Displayable name of application to register
* appMIME MIME type for the application
* port The application port to register
* ipAddress IP address to register
* if NULL, will be gathered from registry
* userGUID GUID of user to register
* if NULL, will be gathered from registry
* userName Displayable name of user to register
* if NULL, will be gathered from registry
* flags ULS-compatible flags
* ttl Time to live (time between keep-alives)
*
* Returns:
* AR_OK Success
* AR_INVALID_PARAMETER
* AR_NOT_IMPLEMENTED This call has not been implemented.
* AR_OUTOFMEMORY Could not allocate memory for context
* AR_WINSOCK_STARTUP Error initializing WinSock
* AR_WINSOCK_VERSION Invalid WinSock version
* AR_STRING_INVALID Could not parse URL to find address and port
* AR_PEER_UNREACHABLE Could not open TCP socket to server
* AR_SOCKERROR Could not send request over socket
* AR_INVALID_RESPONSE Server's response was not of the proper form
* AR_SERVER_ERROR Server returned an error code
* AR_ADDRLEN The IP address exceeds the maximum length
*-------------------------------------------------------------------------*/
HRESULT DllExport
ARCreateRegistration( const char *appID, // IN
const char *appName, // IN
const char *appMIME, // IN
const LONG port, // IN
const char *ipAddress, // IN
const char *userID, // IN
const char *userName, // IN
const LONG flags, // IN
const LONG ttl, // IN
ARRegContext *regContext); // OUT
/*---------------------------------------------------------------------------
* ARDestroyRegistration
* DLL entry point
*
* Removes the registration associated with the given context and
* destroys the context.
*
* Returns error code indicating success or failure.
*
* Parameters:
*
* regContext Pointer to the ARRegContext to destroy
*
* Returns:
* AR_OK Success
* AR_INVALID_PARAMETER regContext == NULL
* AR_NOT_IMPLEMENTED This call has not been implemented.
* AR_OUTOFMEMORY Could not allocate memory for context
* AR_WINSOCK_STARTUP Error initializing WinSock
* AR_WINSOCK_VERSION Invalid WinSock version
* AR_STRING_INVALID Could not parse URL to find address and port
* AR_PEER_UNREACHABLE Could not open TCP socket to server
* AR_SOCKERROR Could not send request over socket
* AR_INVALID_RESPONSE Server's response was not of the proper form
* AR_SERVER_ERROR Server returned an error code
* AR_ADDRLEN The IP address exceeds the maximum length
*-------------------------------------------------------------------------*/
HRESULT DllExport ARDestroyRegistration(ARRegContext regContext); // IN
/*-------------------------------------------------------------------------
* ARCreateCallTargetInfo
* DLL entry point
*
* Given a string, creates a context object which can be used to
* query fields within a call target delivered by that string
* NOTE: The intention is that a command line be passed, which
* can then be interpreted freely by the DLL in an application-
* independent manner to indicate the call target.
*
* Returns error code indicating success or failure.
*
* Parameters:
*
* rawTarget String to be used to derive call target information
* ctiContext Pointer to a call target information context
* to be filled
*
* Returns:
* AR_OK Success
* AR_INVALID_PARAMETER (ctiContext || rawTarget) == NULL
* AR_BAD_TARGET We could not create the call target info with
* the raw target passed in.
* AR_NOT_IMPLEMENTED This call has not been implemented.
*-------------------------------------------------------------------------*/
HRESULT DllExport
ARCreateCallTargetInfo(const char* rawTarget, // IN
ARCallTargetInfoContext* ctiContext); // OUT
/*---------------------------------------------------------------------------
* ARQueryCallTargetInfo
* DLL entry point
*
* Given a call target information context, will return the value of a
* given tag. Tag names are case insensitive.
*
* Returns error code indicating success or failure.
*
* Parameters:
*
* ctiContext A call target information context to query
* tagField A tag to get the value for.
*
* Valid tags:
*
* AR_TAG_BADTAG = 0 (Place keep for illegal tag value)
* AR_TAG_IPADDR
* AR_TAG_PORTNUM
* AR_TAG_APPGUID
* AR_TAG_USERNAME
* AR_TAG_NAPPS
* AR_TAG_QUERYURL
*
* value Pointer to location to store value.
* Stored as a null-terminated string.
*
* Returns:
* AR_OK Success
* AR_INVALID_PARAMETER (ctiContext || value) == NULL
* tagField == AR_TAG_BADTAG
* AR_INVALID_RESPONSE The call target information is invalid
* for the specified tag.
* AR_NOT_IMPLEMENTED This call has not been implemented.
*-------------------------------------------------------------------------*/
HRESULT DllExport
ARQueryCallTargetInfo(ARCallTargetInfoContext ctiContext, // IN
ARTag tagField, // IN
ARString* value); // OUT
/*---------------------------------------------------------------------------
* ARDestroyCallTargetInfo
* DLL entry point
*
* Destroys a call target information context
*
* Returns error code indicating success or failure.
*
* Parameters:
*
* ctiContext The call target information context to destroy
*
* Returns:
* AR_OK Success
* AR_INVALID_PARAMETER ctiContext == NULL
* AR_NOT_IMPLEMENTED This call has not been implemented.
*-------------------------------------------------------------------------*/
HRESULT DllExport
ARDestroyCallTargetInfo(ARCallTargetInfoContext ctiContext); // IN
/*---------------------------------------------------------------------------
* ARGetConfigVal
* DLL entry point
*
* Obtain specified ARS configuration value
*
* Returns error code indicating success or failure.
*
* Parameters:
*
* tagField A tag to get the value for.
*
* Valid tags:
*
* AR_CONFIG_BADTAG = 0 (Place keep for illegal tag value)
* AR_CONFIG_PROXY
* AR_CONFIG_PROXYPORT
* AR_CONFIG_SERVERURL
*
* value Pointer to location to store pointer to value.
* Stored as a null-terminated string;
* allocated by DLL
*
* Returns:
* AR_OK Success
* AR_INVALID_PARAMETER tagField == AR_TAG_BADTAG
* AR_BAD_TARGET Could not open registry for reading
* AR_NOT_IMPLEMENTED This call has not been implemented.
*-------------------------------------------------------------------------*/
HRESULT DllExport
ARGetConfigVal( ARConfigTag tagField, // IN
ARString* value); // OUT
/*---------------------------------------------------------------------------
* ARSetConfigVal
* DLL entry point
*
* Set specified ARS configuration value
*
* Returns error code indicating success or failure.
*
* Parameters:
*
* tagField A tag to get the value for.
* Valid tags are those valid for ARGetConfigVal
* value Pointer to location to store pointer to value.
* Stored as a null-terminated string;
* allocated by DLL
*
* Returns:
* AR_OK Success
* AR_INVALID_PARAMETER tagField == AR_TAG_BADTAG
* AR_BAD_TARGET Could not open registry for writing
* AR_NOT_IMPLEMENTED This call has not been implemented.
*-------------------------------------------------------------------------*/
HRESULT DllExport
ARSetConfigVal( ARConfigTag tagField, // IN
const char *value); // IN
/*---------------------------------------------------------------------------
* ARReleaseStringResult
* DLL entry point
*
* Destroys a string allocated by ARGetConfigVal or ARQueryCallTargetInfo
*
* Returns error code indicating success or failure.
*
* Parameters:
*
* value The string to destroy
*
* Returns:
* AR_OK Success
* AR_INVALID_PARAMETER value == NULL
*-------------------------------------------------------------------------*/
HRESULT DllExport ARReleaseStringResult(ARString value); // IN
/*---------------------------------------------------------------------------
* ARGetHostByAddr
* DLL entry point
*
* Converts IP addr in dot notation to a host name.
*
* Returns error code indicating success or failure.
*
* Parameters:
*
* lpszAddr ptr to string containing IP addr in dot notation
* pphostName address of ptr to store the host name
*
* Returns:
* AR_OK Success
* AR_INVALID_PARAMETER value == NULL
*-------------------------------------------------------------------------*/
HRESULT DllExport ARGetHostByAddr(const char* lpszAddr, // IN
char** pphostName); // OUT
#ifdef __cplusplus
} // End of extern "C" {
#endif // __cplusplus
/****************************************************************************
*
* $Log: S:\sturgeon\src\include\vcs\arscli.h_v $
*
* Rev 1.6 23 Sep 1996 08:45:14 ENBUSHX
* No change.
*
* Rev 1.5 19 Sep 1996 19:29:52 ENBUSHX
* Fubction to translate from IP DOT to domain name.
*
* Rev 1.4 19 Sep 1996 18:58:34 ENBUSHX
* Added a define for user id field in iii file.
*
* Rev 1.3 11 Jul 1996 18:42:12 rodellx
*
* Fixed bug where HRESULT ids were in violation of Facility and/or Code
* value rules.
*
* Rev 1.2 10 Jul 1996 18:40:52 rodellx
*
* Moved definition of arscli facility to apierror.h.
*
* Rev 1.1 08 Jul 1996 14:50:48 GEHOFFMA
* Don't think any changes were made... just to be sure
*
***************************************************************************/
#endif // ARSCLIENT_H