// // clicnct.h - the Rome/Shuttle Client Connection API // // initial version - July 1995 - t-alexwe // // This file lives in both the Shuttle and MOS SLM trees. In shuttle it // belongs in \mos\h\clicnct.h. In MOS it belongs in \mos\include\mos. // #ifndef _CLICNCT_H_ #define _CLICNCT_H_ #include // // this has the event codes in it // #include "moscl.h" #ifdef __cplusplus extern "C" { #endif #ifndef DllExport #define DllExport __declspec(dllexport) #endif // DllExport // // Client Connection API error codes // // win32 error code - customer bit set, error bits set, facility 0x300 // #define PROXYERR_BASE 0xE3000000 #define PROXYERR_INVALID_STATE (PROXYERR_BASE+0) #define PROXYERR_UNSUPPORTED_VER (PROXYERR_BASE+1) #define PROXYERR_INVALID_PACKET (PROXYERR_BASE+2) #define PROXYERR_HOSTNAME_TOO_LONG (PROXYERR_BASE+3) #define PROXYERR_TOO_MANY_SOCKOPTS (PROXYERR_BASE+4) #define PROXYERR_AUTH_ERROR (PROXYERR_BASE+5) // // this is the callback function that will be called with event progress. // it uses the events above // // possible events: // typedef void (WINAPI *EVENT_CALLBACK)(DWORD obj, DWORD event, DWORD errcode); typedef void (WINAPI *ERRORLOG_CALLBACK)(DWORD obj, PSTR psz, DWORD dw); // // structure for passing socket options in ProxyConnectOpen(). Each element // has the same purpose as the similarily named parameter in setsockopt(). // typedef struct { int level; int optname; const char FAR *optval; int optlen; } *PSOCKOPT, SOCKOPT; // Init and Deinit functions because launching and killing threads in DLLMain // causes major grief DllExport void WINAPI ProxyDllStartup(void); DllExport void WINAPI ProxyDllShutdown(void); typedef void (WINAPI *LPFNPROXYDLLSTARTUP)(void); typedef void (WINAPI *LPFNPROXYDLLSHUTDOWN)(void); // // Synopsis // API takes a DialParams string in the form below // dials up primary/backup phone number as configured in registry // // Parameters: // pszDialParams - :: // phEventHandle - returned: an event handle that is signalled when // the dialing is complete (or an error has occured). // lpfnEventCb - fn ptr to post events & errors // lpfnErrorCb - fn ptr to log (for stats/debugging) errors // dwLogParam - magic cookie passed into lpfnEventCb, lpfnErrorCb // pdwDialId - returned: a dialing ID that can be used by // ProxyDialClose() and ProxyDialGetResult(). // // Returns: // Success - ERROR_SUCCESS (0) // Failure - NT or WinSock error code // DllExport DWORD WINAPI ProxyDialOpen(PSTR lpszDialParams, // [in] EVENT_CALLBACK lpfnEventCb, // [in] ERRORLOG_CALLBACK lpfnErrLogCb, // [in] DWORD dwLogParam, // [in] PHANDLE phEventHandle, // [out] PDWORD pdwDialId ); // [out] typedef DWORD (WINAPI *LPFNPROXYDIALOPEN)(PSTR, EVENT_CALLBACK, ERRORLOG_CALLBACK, DWORD, PHANDLE, PDWORD); // // Synopsis: // Closes a dial connection started by ProxyDialOpen(). // Cancels dial if still in progress. // // Parameters: // dwConnectId - the dial ID returned by ProxyDialOpen() // // Returns: // Success - ERROR_SUCCESS(0) // Failure - NT or WinSock error code // // Notes: // This should always succeed unless passed in invalid parameters. // DllExport DWORD WINAPI ProxyDialClose(DWORD dwConnectId); // [in] typedef DWORD (WINAPI *LPFNPROXYDIALCLOSE)(DWORD); // // Synopsis: // Gets dial completion status a dial started by ProxyDialOpen(). // // Parameters: // dwConnectId - the dial ID returned by ProxyDialOpen() // // Returns: // Success - ERROR_SUCCESS(0) // Failure - NT or WinSock error code // DllExport DWORD WINAPI ProxyDialGetResult(DWORD dwConnectId); // [in] typedef DWORD (WINAPI *LPFNPROXYDIALGETRESULT)(DWORD); // // Synopsis: // Gets dial error-log string in specific format // applicable only to TCPCONN.DLL. Other proxy DLLs // should _not_ implement this entry point!! // // Parameters: // dwConnectId - the dial ID returned by ProxyDialOpen() // pszErrStr - buffer to write result into // dwLen - length of buffer // // Returns: // Success - ERROR_SUCCESS(0) // Failure - NT or WinSock error code // DllExport DWORD WINAPI ProxyDialGetErrorLogString(DWORD dwConnectId, PSTR pszStr, DWORD dwLen); // [in] typedef DWORD (WINAPI *LPFNPROXYDIALGETERRORLOGSTRING)(DWORD, PSTR, DWORD); //===================================================== // // Synopsis // API takes a hostname for MSN and socket options for the socket to // be created and returns immediatly with an event handle and a // connection ID. The calling process should wait on the event // handle for completion. The connection ID is used for CancelConnect() // and ProxyConnectGetResult(). // // Parameters: // pszDNSName0 - the PRIMARY hostname to connect to // pszDNSName1 - the BACKUP hostname to connect to // wPort - the TCP/IP port to connect to // pSockopts - the socket options to use on the socket // cSockopts - the number of socket options in pSockopts // lpfnEventCb - fn ptr to post events & errors // lpfnErrorCb - fn ptr to log (for stats/debugging) errors // dwLogParam - magic cookie passed into lpfnEventCb, lpfnErrorCb // phEventHandle - returned: an event handle that is signalled when // the connection is complete (or an error has occured). // pdwConnectId - returned: a connection ID that can be used by // ProxyConnectClose() and ProxyConnectGetResult(). // // Returns: // Success - ERROR_SUCCESS (0) // Failure - NT or WinSock error code // DllExport DWORD WINAPI ProxyConnectOpen(PSTR pszDNSName0, // [in] PSTR pszDNSName1, // [in] WORD wPort, // [in] PSOCKOPT pSockopts, // [in] DWORD cSockopts, // [in] EVENT_CALLBACK lpfnEventCb, // [in] ERRORLOG_CALLBACK lpfnErrLogCb, // [in] DWORD dwLogParam, // [in] PHANDLE phEventHandle, // [out] PDWORD pdwConnectId ); // [out] typedef DWORD (WINAPI *LPFNPROXYCONNECTOPEN)(PSTR, PSTR, WORD, PSOCKOPT, DWORD, EVENT_CALLBACK, ERRORLOG_CALLBACK, DWORD, PHANDLE, PDWORD); // // Synopsis: // Closes a connection opened by ProxyConnectOpen(). // Cancels a connection attempt if in progress. // // Parameters: // dwConnectId - the connection ID returned by ProxyConnectOpen() // // Returns: // Success - ERROR_SUCCESS(0) // Failure - NT or WinSock error code // // Notes: // This should always succeed unless passed in invalid parameters. // DllExport DWORD WINAPI ProxyConnectClose(DWORD dwConnectId ); // [in] typedef DWORD (WINAPI *LPFNPROXYCONNECTCLOSE)(DWORD); // // Synopsis: // Gets a connected socket handle from a connection started by // ProxyConnectOpen(). // // Parameters: // hEventHandle - the event handle returned by ProxyConnectOpen() // dwConnectId - the connection ID returned by ProxyConnectOpen() // phSocket - returned: the socket handle // // Returns: // Success - ERROR_SUCCESS(0) // Failure - NT or WinSock error code // DllExport DWORD WINAPI ProxyConnectGetResult(DWORD dwConnectId, // [in] PHANDLE phSocket ); // [out] typedef DWORD (WINAPI *LPFNPROXYCONNECTGETRESULT)(DWORD, PHANDLE); // // Synopsis: // Gets the set of local IP addres in a string in specific format // applicable only to TCPCONN.DLL. Other proxy DLLs // should _not_ implement this entry point!! // // Parameters: // dwConnectId - the dial ID returned by ProxyConnectOpen() // // Returns: // Success - string ptr (LocalAlloc'd string) // Failure - NULL // DllExport PSTR WINAPI ProxyConnectGetMyIPAddrs(DWORD dwConnectId); // [in] typedef PSTR (WINAPI *LPFNPROXYCONNECTGETMYIPADDRS)(DWORD); typedef struct { HINSTANCE hinst; LPFNPROXYDLLSTARTUP lpfnProxyDllStartup; LPFNPROXYDLLSHUTDOWN lpfnProxyDllShutdown; LPFNPROXYDIALOPEN lpfnProxyDialOpen; LPFNPROXYDIALCLOSE lpfnProxyDialClose; LPFNPROXYDIALGETRESULT lpfnProxyDialGetResult; LPFNPROXYCONNECTOPEN lpfnProxyConnectOpen; LPFNPROXYCONNECTCLOSE lpfnProxyConnectClose; LPFNPROXYCONNECTGETRESULT lpfnProxyConnectGetResult; LPFNPROXYCONNECTGETMYIPADDRS lpfnProxyConnectGetMyIPAddrs; LPFNPROXYDIALGETERRORLOGSTRING lpfnProxyDialGetErrorLogString; } PROXYDLLPTRS, *PPROXYDLLPTRS; #define SZPROXYDLLSTARTUP "ProxyDllStartup" #define SZPROXYDLLSHUTDOWN "ProxyDllShutdown" #define SZPROXYDIALOPEN "ProxyDialOpen" #define SZPROXYDIALCLOSE "ProxyDialClose" #define SZPROXYDIALGETRESULT "ProxyDialGetResult" #define SZPROXYCONNECTOPEN "ProxyConnectOpen" #define SZPROXYCONNECTCLOSE "ProxyConnectClose" #define SZPROXYCONNECTGETRESULT "ProxyConnectGetResult" #define SZPROXYCONNECTGETMYIPADDRS "ProxyConnectGetMyIPAddrs" #define SZPROXYDIALGETERRORLOGSTRING "ProxyDialGetErrorLogString" #ifdef __cplusplus } #endif #endif