Logo Search packages:      
Sourcecode: gsoap version File versions

gsoapWinInet.h

/*
 * File:    gsoapWinInet2.h
 *
 * Authors: 26 May 2003: Jack Kustanowitz (jackk@atomica.com)
 *          Original version
 *
 *          29 September 2003: Brodie Thiesfield (bt@jellycan.com)
 *          Rewritten as C plugin for gsoap. Bugs fixed and features added.
 *
 *          14 January 2004: Brodie Thiesfield (bt@jellycan.com)
 *          Bug fix.
 *
 * Purpose: Allow gsoap clients (not servers) to direct all communications 
 *          through the WinInet API. This automatically provides all of the 
 *          proxy and authentication features supported by the control panel 
 *          'Internet Options' dialog to the client. As these options are 
 *          shared by IE, this means that "if IE works, gsoap works."
 *
 * Features:
 *          + gsoap plugin - extremely easy to use
 *          + complete support for:
 *              - HTTP/1.0 and HTTP/1.1
 *              - HTTPS (no extra libraries are required)
 *              - HTTP authentication
 *              - Proxy servers (simple, automatic discovery, etc)
 *              - Proxy authentication (basic, NTLM, etc)
 *          + authentication prompts and HTTPS warnings (e.g. invalid HTTPS CA) 
 *              can be resolved by the user via standard system dialog boxes.
 *          + message size is limited only by available memory
 *          + connect, receive and send timeouts are used 
 *          + supports all SOAP_IO types (see limitations)
 *          + written completely in C, can be used in C, C++, and MFC projects
 *              without modification (anywhere that gsoap is used)
 *          + can be used in both MBCS and UNICODE projects
 *          + compiles cleanly at warning level 4 (if gsoap uses SOAP_SOCKET
 *              for the definition of sockets instead of int, it will also
 *              compile without win64 warnings).
 *          + all debug trace goes to the gsoap TEST.log file 
 *          + supports multiple threads (all plugin data is stored in the 
 *              soap structure - no static variables)
 *
 * Limitations:
 *          - DIME attachments are not supported
 *          - may internally buffer the entire outgoing message before sending
 *              (if the serialized message is larger then SOAP_BUFLEN, or if 
 *              SOAP_IO_CHUNK mode is being used then the entire message will 
 *              be buffered)
 *
 * Usage:   Add the gsoapWinInet2.h and gsoapWinInet2.cpp files to your project 
 *          (if you have a C project, rename gsoapWinInet2.cpp to .c and use
 *          it as is). Ensure that you turn off precompiled headers for the 
 *          .cpp file.
 *
 *          In your source, just after calling soap_init(), register this 
 *          plugin with soap_register_plugin( soap, wininet_plugin ). 
 *
 *          e.g.
 *              struct soap soap;
 *              soap_init( &soap );
 *              soap_register_plugin( &soap, wininet_plugin );
 *              soap.connect_timeout = 5; // this will be used by wininet too
 *              ...
 *              soap_done(&soap);
 *
 * Notes:   For extra control, you may also register this plugin using the 
 *          soap_register_plugin_arg() function, and supply as the argument 
 *          flags which you wished to be passed to HttpOpenRequest. 
 *
 *          e.g.
 *              struct soap soap;
 *              soap_init( &soap );
 *              soap_register_plugin_arg( &soap, wininet_plugin,
 *                  (void*) INTERNET_FLAG_IGNORE_CERT_CN_INVALID );
 *
 *          See the MSDN documentation on HttpOpenRequest for details of 
 *          available flags. The <wininet.h> header file is required for the 
 *          definitions of the flags. Some flags which may be useful are:
 *
 *              INTERNET_FLAG_KEEP_CONNECTION
 *              Uses keep-alive semantics, if available, for the connection. 
 *              This flag is required for Microsoft Network (MSN), NT LAN 
 *              Manager (NTLM), and other types of authentication. 
 *              ++ Note that this flag is used automatically when soap.omode 
 *              has the SOAP_IO_KEEPALIVE flag set. ++
 *
 *              INTERNET_FLAG_IGNORE_CERT_CN_INVALID
 *              Disables Microsoft Win32 Internet function checking of SSL/PCT-
 *              based certificates that are returned from the server against 
 *              the host name given in the request. 
 *
 *              INTERNET_FLAG_IGNORE_CERT_DATE_INVALID
 *              Disables Win32 Internet function checking of SSL/PCT-based 
 *              certificates for proper validity dates.
 *
 *          This plugin uses the following callback functions and is not 
 *          compatible with any other plugin that uses these functions.
 *
 *              soap->fopen
 *              soap->fposthdr
 *              soap->fsend
 *              soap->frecv
 *              soap->fclose
 *
 *          If there are errors in sending the HTTP request which would 
 *          cause a dialog box to be displayed in IE (for instance, invalid
 *          certificates on an HTTPS connection), then a dialog will also
 *          be displayed by this library. At the moment is is not possible
 *          to disable the UI. If you wish to remove the UI then you will 
 *          need to hack the source to remove the dialog box and resolve the
 *          errors programmatically, or supply the appropriate flags in
 *          soap_register_plugin_arg() to disable the unwanted warnings.
 *
 *          Because messages are buffered internally to gsoapWinInet2 plugin
 *          it is recommended that the SOAP_IO_STORE flag is not used otherwise
 *          the message may be buffered twice on every send. Use the default
 *          flag SOAP_IO_BUFFER, or SOAP_IO_FLUSH.
 *
 * Redistribution: 
 *          Feel free to use, improve, and share.  I would appreciate 
 *          notification of any bugs found/fixed, or improvements made. This 
 *          code has not been extensively tested, so use at your own risk.  
 */
#ifndef INCLUDED_gsoapWinInet2_h
#define INCLUDED_gsoapWinInet2_h

#include <stdsoap2.h>

#ifdef __cplusplus
extern "C" {
#endif 

extern int 
wininet_plugin( 
    struct soap *           a_pSoap, 
    struct soap_plugin *    a_pPluginData, 
    void *                  a_pUnused );

#ifdef __cplusplus
}
#endif 

#endif // INCLUDED_gsoapWinInet2_h

Generated by  Doxygen 1.6.0   Back to index