AnyConnect Secure Mobility Client 4.8.02045

include/GenDefs.h

00001 /**************************************************************************
00002 *           Copyright (c) 2000, Cisco Systems, All Rights Reserved
00003 ***************************************************************************
00004 *
00005 *  File:    GenDefs.h
00006 *  Date:    8/23/00
00007 *
00008 ***************************************************************************
00009 *  NOTE* This file is for PORTABILITY related defines ONLY.
00010 ***************************************************************************
00011 *  defines base types to be used by all CVC client components
00012 ***************************************************************************/
00013 #ifndef __GENDEFS_H
00014 #define __GENDEFS_H
00015 
00016 #ifndef _WIN32
00017 
00018 #ifndef USES_CONVERSION
00019 #define USES_CONVERSION
00020 #endif
00021 
00022 #define PRELIM_UNIX_PORT
00023 
00024 #ifdef HAVE_CONFIG_H
00025 #include "config.h"
00026 #endif
00027 
00028 #ifdef HAVE_STDINT_H
00029 #ifndef CNI_LINUX_INTERFACE
00030 #include <stdint.h>
00031 #endif
00032 #elif HAVE_INTTYPES_H
00033 #include <inttypes.h>
00034 #endif
00035 
00036 #ifdef HAVE_SYS_TYPES_H
00037 #ifndef CNI_LINUX_INTERFACE
00038 #include <sys/types.h>
00039 #else
00040 #include <linux/types.h>
00041 #undef _UINTPTR_T_DEFINED
00042 #undef _INTPTR_T_DEFINED
00043 #endif
00044 #endif
00045 
00046 #undef FAR
00047 #define FAR
00048 #undef PASCAL
00049 #define PASCAL
00050 
00051 #else //_WIN32
00052 #define HAVE_STDINT_H
00053 #include <stdint.h>
00054 #undef HAVE_CONFIG_H
00055 #undef HAVE_SYS_TYPES_H
00056 #define WORDS_BIGENDIAN 0
00057 #if !defined(DWORD)
00058 typedef unsigned long  DWORD;
00059 #endif // !defined(DWORD)
00060 
00061 #endif //_WIN32
00062 
00063 
00064 #undef TRUE
00065 #define TRUE            1
00066 
00067 #undef FALSE
00068 #define FALSE           0
00069 
00070 #ifdef DDKBUILD //building with the DDK as the source.
00071 #include <crtdefs.h>
00072 #endif
00073 
00074 #if !defined(PLATFORM_WIN_APP)
00075 // it'd be nice if we could switch to the C99 standard types at some point...
00076 #if defined(HAVE_STDINT_H) || defined(HAVE_INTTYPES_H)
00077 typedef uint8_t         bool8;
00078 typedef uint16_t        bool16;
00079 typedef uint32_t        bool32;
00080 
00081 typedef int8_t          int8;
00082 typedef int16_t         int16;
00083 
00084 #if (!defined(CNI_LINUX_INTERFACE) || !defined(CONFIG_ISDN_PPP) || !defined(CONFIG_ISDN_PPP_VJ) || !defined(_SLHC_H)) && !defined(PROTYPES_H)
00085 typedef int32_t         int32;
00086 #endif
00087 
00088 typedef uint8_t         uint8;
00089 typedef uint16_t        uint16;
00090 
00091 #if !defined(CSSMAPI) && !defined(PROTYPES_H)
00092 #ifdef _WIN32
00093 typedef unsigned long uint32;
00094 #else
00095 typedef uint32_t        uint32;
00096 #endif
00097 #endif
00098 
00099 typedef uint64_t        uint64;
00100 #else
00101 
00102 typedef unsigned char   uint8;
00103 typedef unsigned short  uint16;
00104 #ifndef CSSMAPI
00105 typedef unsigned long   uint32;
00106 #endif
00107 typedef unsigned char   uint8_t;
00108 typedef unsigned short  uint16_t;
00109 #if defined(_WIN32) && !defined (HS_TYPES_H_)
00110 typedef unsigned long   uint32_t;
00111 #endif
00112 
00113 #ifdef _WIN32
00114 typedef __int64                    int64;
00115 typedef unsigned __int64           uint64;
00116 typedef __int64                    int64_t;
00117 typedef unsigned __int64           uint64_t;
00118 #else
00119 typedef long long                  int64;
00120 typedef unsigned long long int     uint64;
00121 typedef long long                  int64_t;
00122 typedef unsigned long long int     uint64_t;
00123 #endif
00124 #endif
00125 
00126 // Definitions for Windows not available in <stdint.h>
00127 #ifdef _WIN32
00128 typedef unsigned long   bool32_t;
00129 typedef unsigned char   bool8_t;
00130 #endif
00131 
00132 // integer types for doing pointer arithmetic, they should be the
00133 // same size as a pointer. Part of the C99 standard, but they aren't
00134 // available everywhere yet.
00135 // These defs should work with IA32 (x86), ILP32 (sparcv8) and LP64 (sparcv9).
00136 // These types are protected with the WIN32 macros (_INTPTR_T_DEFINED), since
00137 // some, but not all of the WIN32 SDK's define these types.
00138 #ifdef _WIN32
00139 #ifndef _INTPTR_T_DEFINED
00140 #if defined(_LP64)
00141 #warning 64 bit
00142 typedef int64 intptr_t;
00143 #else
00144 typedef int32 intptr_t;
00145 #endif
00146 #define _INTPTR_T_DEFINED
00147 #endif
00148 
00149 #ifndef _UINTPTR_T_DEFINED
00150 #if defined(_LP64)
00151 #warning 64 bit
00152 typedef uint64 uintptr_t;
00153 #else
00154 typedef uint32 uintptr_t;
00155 #endif
00156 #define _UINTPTR_T_DEFINED
00157 #endif
00158 #endif
00159 
00160 #ifndef __OBJC__   /* Mac OS X defines this in ObjectiveC land... */
00161 typedef int     BOOL;
00162 #endif
00163 
00164 #ifndef _WIN32
00165 typedef int     BOOLEAN;
00166 #endif
00167 
00168 #ifdef _WIN32
00169 typedef int mode_t;
00170 #endif
00171 
00172 typedef unsigned char   uchar;
00173 #ifndef HAVE_SYS_TYPES_H
00174 typedef unsigned int    uint;
00175 typedef unsigned short  ushort;
00176 typedef unsigned long   ulong;
00177 #endif
00178 
00179 #ifndef PLATFORM_ANDROID
00180 typedef ulong   ULONG;
00181 typedef ulong*  PULONG;
00182 #endif
00183 
00184 #if defined(PLATFORM_ANDROID)
00185 typedef unsigned long ulong;
00186 typedef unsigned short ushort;
00187 #endif
00188 
00189 typedef uint32  DWORD;
00190 typedef uint32* PDWORD;
00191 typedef long    LONG;
00192 typedef long*   PLONG;
00193 typedef int     INT;
00194 typedef int*    PINT;
00195 typedef uint    UINT;
00196 typedef uint*   PUINT;
00197 typedef uint16  USHORT;
00198 typedef uint16* PUSHORT;
00199 typedef int16   SHORT;
00200 typedef int16*  PSHORT;
00201 typedef uint16  WORD;
00202 typedef uint16* PWORD;
00203 typedef char    CHAR;
00204 typedef uchar   UCHAR;
00205 typedef char*   PCHAR;
00206 typedef uint8   BYTE;
00207 typedef uint8*  PBYTE;
00208 #define         VOID  void
00209 typedef void*   PVOID;
00210 #ifdef _WIN32
00211 typedef void*   HANDLE;
00212 #else
00213 typedef int     HANDLE;
00214 typedef int     SOCKET;
00215 typedef const char*   LPCTSTR;
00216 typedef const char*   LPCSTR;
00217 typedef const char*   PCTSTR;
00218 typedef char*   LPTSTR;
00219 typedef void*   LPVOID;
00220 typedef char*   LPSTR;
00221 typedef long*   LPLONG;
00222 typedef DWORD*  LPDWORD;
00223 typedef signed int INT32;
00224 
00225 
00226 typedef struct __WSABUF
00227 {
00228     unsigned long len;
00229     char *buf;
00230 } WSABUF, *LPWSABUF;
00231 
00232 typedef struct OVERLAPPED
00233 {
00234     void *data;
00235     int fd;
00236 } OVERLAPPED,*LPOVERLAPPED;
00237 
00238 typedef struct sockaddr_in SOCKADDR_IN;
00239 typedef struct sockaddr_in6 SOCKADDR_IN6;
00240 
00241 #endif //!_WIN32
00242 
00243 typedef HANDLE* PHANDLE;
00244 typedef uint8   KIRQL;
00245 #else // PLATFORM_WIN_APP
00246 typedef unsigned long bool32;
00247 typedef unsigned long bool32_t;
00248 typedef unsigned long ulong;
00249 typedef unsigned char BYTE;
00250 typedef unsigned long uint32;
00251 typedef long int32;
00252 #endif // !defined(PLATFORM_WIN_APP)
00253 
00254 typedef long STATUSCODE;
00255 
00256 /* function parameter context */
00257 #undef  IN
00258 #define IN
00259 
00260 #undef  OUT
00261 #define OUT
00262 
00263 #undef  INOUT
00264 #define INOUT
00265 
00266 #undef  packed
00267 #define packed
00268 
00269 #ifndef CLEAR
00270 #define CLEAR(a)                        memset(&a,0,sizeof(a))
00271 #endif
00272 
00273 #ifndef POINT_BEYOND
00274 #define POINT_BEYOND(a,t)       (t) &((&a)[1])
00275 #endif
00276 
00277 #ifndef MAX
00278 #define MAX(a,b) ((a) > (b) ? (a) : (b))
00279 #endif
00280 #ifndef MIN
00281 #define MIN(a,b) ((a) < (b) ? (a) : (b))
00282 #endif
00283 
00284 #ifndef _WIN32
00285 #define _ftime ftime
00286 #define _timeb timeb
00287 #define __cdecl
00288 #define __stdcall
00289 #ifndef __fastcall
00290 #define __fastcall
00291 #endif
00292 #ifndef WINAPI
00293 #define WINAPI
00294 #endif
00295 #ifndef CALLBACK
00296 #define CALLBACK
00297 #endif
00298 #endif
00299 
00300 #ifndef _WIN32
00301 #undef  INVALID_SOCKET
00302 #define INVALID_SOCKET -1
00303 #undef  INVALID_FD
00304 #define INVALID_FD -1
00305 #undef  SOCKET_ERROR
00306 #define SOCKET_ERROR -1
00307 #undef  SOCKADDR
00308 #define SOCKADDR sockaddr
00309 #undef  SOCKADDR_IN
00310 #define SOCKADDR_IN sockaddr_in
00311 #undef  SOCKADDR_IN6
00312 #define SOCKADDR_IN6 sockaddr_in6
00313 
00314 #if defined(PLATFORM_DARWIN) || defined(PLATFORM_APPLE_SSLVPN) || defined(APPLE_IOS) || defined(PLATFORM_CHROMEBOOK)
00315 #define s6_words __u6_addr.__u6_addr16
00316 #elif defined(PLATFORM_LINUX)
00317 #define s6_words s6_addr16
00318 #endif
00319 
00320 #endif
00321 
00322 #ifndef _CRT_SECURE_NO_DEPRECATE
00323 #define _CRT_SECURE_NO_DEPRECATE
00324 #endif
00325 
00326 
00327 #if !defined(_WIN32)
00328 
00329 #ifndef ZeroMemory
00330 #define ZeroMemory ZEROMEM
00331 #ifndef PLATFORM_ANDROID
00332     #define ZEROMEM(ptr,cnt) \
00333         if ( ptr ) { memset(ptr,0,cnt); }
00334 #else
00335     // Cius compiler will generate a compilation error for: if( &var )
00336     #define ZEROMEM(ptr,cnt) \
00337     { \
00338         void *pZero = ptr; \
00339         if ( NULL != pZero ) { memset(pZero,0,cnt); } \
00340     }
00341 #endif /* !PLATFORM_ANDROID */
00342 #endif  /* ZeroMemory */
00343 
00344 #ifndef SecureZeroMemory
00345 #define SECUREZEROMEM(ptr, cnt) \
00346     do { \
00347         size_t size = (size_t)cnt; \
00348         volatile char *vptr = (volatile char *)ptr; \
00349         while (size) { \
00350             *vptr = 0; \
00351             vptr++; \
00352             size--; \
00353         } \
00354     } while(0);
00355 #define SecureZeroMemory SECUREZEROMEM
00356 #endif  /* SecureZeroMemory */
00357 #endif  /* Windows */
00358 
00359 
00360 
00361 #ifndef _WIN32
00362 #define _strnicmp strncasecmp
00363 #define _stricmp  strcasecmp
00364 #endif
00365 
00366 #if !defined(UINT16_MAX)
00367 #define UINT16_MAX 0xffffu
00368 #endif
00369 
00370 #ifndef ARRAY_SIZE
00371 #define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
00372 #endif
00373 
00374 #if !defined(TO_STR) && !defined(TO_TSTR) && !defined(SYMBOL_TO_STR) && !defined(SYMBOL_TO_TSTR)
00375 
00376 // use TO_STR(x)/TO_TSTR(x) to stringize (put double quotes around) x
00377 //  example:
00378 //    std::string foo = TO_STR(15);
00379 //    tstring bar = TO_TSTR(15);
00380 //  becomes
00381 //    std::string foo = "15";
00382 //    tstring bar = _T("15");
00383 #define TO_STR(x) #x
00384 #define TO_TSTR(x) _T(#x)
00385 
00386 // use SYMBOL_TO_STR(x)/SYMBOL_TO_TSTR(x) to stringize
00387 // the definition of symbol x
00388 //  example:
00389 //    #define MAX_LEN 15
00390 //    std::string foo = SYMBOL_TO_STR(MAX_LEN);
00391 //    tstring bar = SYMBOL_TO_TSTR(MAX_LEN);
00392 //  becomes
00393 //    std::string foo = "15";
00394 //    tstring bar = _T("15");
00395 //
00396 // Note that TO_STR(MAX_LEN) results in "MAX_LEN".  The double macro is required in
00397 // order to strinigize the *definition* of a symbol (as opposed to the symbol itself)
00398 #define SYMBOL_TO_STR(x)  TO_STR(x)
00399 #define SYMBOL_TO_TSTR(x) TO_TSTR(x)
00400 
00401 #endif
00402 
00403 #ifdef _WIN32
00404 #define systemtime_t __time64_t
00405 #define getSystemTimeInSeconds()    _time64(NULL)
00406 #else
00407 #define systemtime_t time_t
00408 #define getSystemTimeInSeconds()    time(NULL)
00409 #endif
00410 
00411 #ifndef _WIN32
00412 #ifndef INFINITE
00413 #define INFINITE 0xFFFFFFFF
00414 #endif
00415 #endif
00416 
00417 #ifdef _WIN32
00418 #define ANY_PATHNAME_DELIMITER "/\\"
00419 #define PATHNAME_DELIMITER  '\\'
00420 #define PATHNAME_DELIMITER_STR  "\\"
00421 #else
00422 #define ANY_PATHNAME_DELIMITER "/"
00423 #define PATHNAME_DELIMITER  '/'
00424 #define PATHNAME_DELIMITER_STR  "/"
00425 #endif
00426 #define URL_URI_DELIMITER  '/'
00427 #define URL_URI_DELIMITER_STR  "/"
00428 
00429 #ifdef _WIN32
00430 #define NEWLINE "\r\n"
00431 #else
00432 #define NEWLINE "\n"
00433 #endif
00434 
00435 #if defined(_WIN32)
00436 #define HOSTSFILE_LOCATION _T("drivers\\etc\\hosts")
00437 #else
00438 #define HOSTSFILE_LOCATION _T("/etc/hosts")
00439 #endif
00440 
00441 #ifdef _WIN32
00442 #define DebugWriteFile(_handle_,_buffer_,_length_,_refCharsWritten_)  \
00443         WriteFile((_handle_),(_buffer_),(_length_),(_refCharsWritten_),NULL)
00444 #else
00445 #ifndef INVALID_HANDLE_VALUE
00446 #define INVALID_HANDLE_VALUE    NULL
00447 #endif
00448 #define DebugWriteFile(_handle_,_buffer_,_length_,_refCharsWritten_)  \
00449         fprintf((_handle_), "%s", (_buffer_)); \
00450         fflush((_handle_))
00451 #endif
00452 
00453 typedef uint8_t MAC_ADDR[6];
00454 
00455 #if !defined(_WIN32) || defined(_WIN32_WCE)
00456 #ifndef ADDRESS_FAMILY
00457 typedef unsigned short ADDRESS_FAMILY;
00458 #endif
00459 #endif
00460 
00461 #if ((defined(_WIN32) && !defined(_WIN32_WCE) && !defined(PLATFORM_WIN_APP)) || defined(PLATFORM_DARWIN) || defined(PLATFORM_LINUX)) && !defined(ANYCONNECT_USE_SNAK) && !defined(PRODUCT_TYPE_SSA)
00462 /*
00463  ** the FIREWALL_SUPPORTED define is used to track the platforms
00464  ** where the firewall feature is supported. This is to avoid repeating the
00465  ** platforms in #ifdef clauses in other files.
00466  ** Also, when Firewall feature expands to other platforms, they only need to be added in
00467  ** one place.
00468  */
00469 #define FIREWALL_SUPPORTED
00470 #endif
00471 
00472 #if !defined(PRODUCT_TYPE_SSA) && ((defined(_WIN32) && !defined(_WIN32_WCE) && !defined(PLATFORM_WIN_APP)) || defined(PLATFORM_DARWIN) || (defined(PLATFORM_LINUX) && !defined(PLATFORM_CHROMEBOOK)))
00473 /*
00474 ** the TRUSTED_NETWORK_DETECTION define is used to track the platforms
00475 ** where Trusted Network Detection is performed. This is to avoid repeating the
00476 ** platforms in #ifdef clauses in other files.
00477 ** Also, when TND support expands to other platforms, they only need to be added in
00478 ** one place.
00479 */
00480 #define TRUSTED_NETWORK_DETECTION
00481 
00482 /*
00483  * Android only uses TND to report state to NVM.
00484  * Policy-based actions are not supported.
00485  */
00486 #if !defined(PLATFORM_ANDROID)
00487 #define TND_ACTIONS_SUPPORTED
00488 #endif
00489 #endif
00490 
00491 #if (defined(_WIN32) || defined(PLATFORM_DARWIN) || defined(PLATFORM_ANDROID) || defined(PLATFORM_LINUX) && !defined(ANYCONNECT_USE_SNAK) && !defined(PLATFORM_WIN_APP))
00492 #define INTER_MODULE_STATE_NOTIFY
00493 #endif
00494 
00495 #if ((defined(_WIN32) && !defined(_WIN32_WCE)) || defined(PLATFORM_DARWIN) || defined(TRUSTED_NETWORK_DETECTION)) && !defined(PRODUCT_TYPE_SSA) && !defined(PLATFORM_ANDROID)
00496 /*
00497 ** the LOGIN_UTILITIES_SUPPORTED define is used to track the platforms
00498 ** that support AnyConnect action triggered by user login. This is to avoid
00499 ** repeating the platforms in #ifdef clauses in other files.
00500 ** Also, when login support expands to other platforms, they only need to be added in
00501 ** one place.
00502 */
00503 #define LOGIN_UTILITIES_SUPPORTED
00504 #endif
00505 
00506 #if (defined(_WIN32) || defined(PLATFORM_DARWIN)) && !defined(PLATFORM_WIN_APP)
00507 /*
00508 ** The DNS_PLUGIN_SUPPORTED define is used to track the platforms where the DNS KDF plugin is 
00509 ** available. This is to avoid repeating the platforms in #ifdef clauses in other files.
00510 ** Also, when support expands to other platforms, they only need to be added in one place.
00511 */
00512 #define DNS_PLUGIN_SUPPORTED
00513 #if defined(_WIN32)
00514 /*
00515 ** The DNS_PLUGIN_DNS_REQ_HANDLING_SUPPORTED define is used to track the platforms where the DNS KDF plugin is 
00516 ** available and supports handling of DNS requests during the VPN tunnel (e.g. for split-DNS or tunnel-all-DNS enforcement).
00517 **/
00518 #define DNS_PLUGIN_DNS_REQ_HANDLING_SUPPORTED
00519 #endif // _WIN32
00520 #endif // (_WIN32 || PLATFORM_DARWIN) && !PLATFORM_WIN_APP && !PRODUCT_TYPE_SSA
00521 
00522 #if defined(DNS_PLUGIN_SUPPORTED)
00523 /*
00524 ** The DYNAMIC_SPLIT_TUNNELING_SUPPORTED define is used to track the platforms where dynamic split tunneling is supported.
00525 **/
00526 #define DYNAMIC_SPLIT_TUNNELING_SUPPORTED
00527 #endif // DNS_PLUGIN_SUPPORTED
00528 
00529 #if !(defined(PLATFORM_APPLE_SSLVPN) && TARGET_CPU_ARMV6)
00530 /*
00531 ** A bug was discovered in iPhone testing wherein virtual inline functions do
00532 ** not work correctly on ARMv6 processors. To work around this, virtual inline
00533 ** function need to be made standard virtual functions on ARMv6. To prevent
00534 ** differences in runtime behavior, the VIRTUAL_INLINES_SUPPORTED define is used
00535 ** to define some virtual inlines in the header files, letting the functions be
00536 ** defined without the inline type in the cpp file for non-supported platforms.
00537 */
00538 #define VIRTUAL_INLINES_SUPPORTED
00539 #endif
00540 
00541 /*
00542  * When changing the SCRIPTING_SUPPORTED definition, you MUST also update the
00543  * ClientIfcBase.h!  We duplicate this definition there due to the manner in
00544  * which we distribute our code to partners; we cannot include this header from
00545  * ClientIfcBase.h.
00546  */
00547 #if !defined(PLATFORM_APPLE_SSLVPN) && !defined(PLATFORM_ANDROID) && !defined(PLATFORM_WIN_APP)
00548 /*
00549 ** the SCRIPTING_SUPPORTED define is used to enable the script manager for launching
00550 ** customer provided scripts on events like connection establishment, completion of
00551 ** disconnect, and captive portal detection.
00552 */
00553 #define SCRIPTING_SUPPORTED
00554 #endif
00555 
00556 #if defined(PLATFORM_ANDROID)
00557 #define DYNAMIC_CHANGE_FIPS
00558 #endif // PLATFORM_ANDROID
00559 
00560 #if !defined(PRODUCT_TYPE_SSA) && ((defined(_WIN32) && !defined(_WIN32_WCE)  && !defined(PLATFORM_WIN_APP)) || defined(PLATFORM_DARWIN) || (defined(PLATFORM_LINUX) && !defined(ANYCONNECT_USE_SNAK)))
00561 /*
00562 ** the NETWORK_ENVIRONMENT_STATE define is used to track the platforms
00563 ** where NETWORK_ENVIRONMENT_STATE check is performed. This is to avoid repeating the
00564 ** platforms in #ifdef clauses in other files.
00565 ** Also, when NES support expands to other platforms, they only need to be added in
00566 ** one place.
00567 */
00568 #define NETWORK_ENVIRONMENT_STATE
00569 #endif
00570 
00571 
00572 #if (defined(_WIN32) && !defined(_WIN32_WCE)  && !defined(PLATFORM_WIN_APP)) || defined(PLATFORM_DARWIN) || (defined(PLATFORM_LINUX) && !defined(ANYCONNECT_USE_SNAK))
00573 /*
00574 ** The AUTOMATIC_HEADEND_SELECTION define is used to track the platforms
00575 ** where Automatic Headend Selection is performed. This is to avoid repeating the
00576 ** platforms in #ifdef clauses in other files.
00577 ** Also, when AHS support expands to other platforms, they only need to be added in
00578 ** one place.
00579 */
00580 #define AUTOMATIC_HEADEND_SELECTION
00581 #endif
00582 
00583 #if (defined(_WIN32) && !defined(_WIN32_WCE) && !defined(PLATFORM_WIN_APP)) || defined(PLATFORM_DARWIN)
00584 /*
00585  ** the MUS_HOST_SERVICES define is used to track the platforms
00586  ** where MUS Host Status check is performed. This is to avoid repeating the
00587  ** platforms in #ifdef clauses in other files.
00588  */
00589 #define MUS_HOST_SERVICES
00590 #endif
00591 
00592 // BUGBUG - initially only enable code signing for Windows
00593 #if (defined(_WIN32) && !defined(_WIN32_WCE)  && !defined(PLATFORM_WIN_APP)) || defined(PLATFORM_DARWIN) || (defined(PLATFORM_LINUX) && !defined(PLATFORM_LINUX_EMBEDDED_PPC) && !defined(PLATFORM_LINUX_EMBEDDED_ARM) && !defined(PLATFORM_ANDROID) && !defined(PLATFORM_CHROMEBOOK))
00594 /*
00595  ** the CODE_SIGNING_SUPPORTED define is used to track the platforms 
00596  ** where code sign verification is support. This is to avoid repeating the
00597  ** platforms in #ifdef clauses in other files.
00598  **
00599  */
00600 #define CODE_SIGNING_SUPPORTED
00601 #endif
00602 
00603 #if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(PLATFORM_WIN_APP)
00604 #define RSA_SECURID_SUPPORTED
00605 #endif
00606 
00607 #if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(PLATFORM_WIN_APP)
00608 #define SAFEWORD_SOFTOKEN_SUPPORTED
00609 #endif
00610 
00611 #if (defined(_WIN32) && !defined(_WIN32_WCE)  && !defined(PLATFORM_WIN_APP)) || defined(PLATFORM_DARWIN) || defined(PLATFORM_LINUX) || defined(PLATFORM_APPLE_SSLVPN) || ( defined(PRODUCT_TYPE_SSA) && defined(APPLE_IOS) )
00612 /*
00613  ** the IPSEC_SUPPORTED define is used to track the platforms 
00614  ** where the IPSec protocol is supported. This is to avoid repeating the
00615  ** platforms in #ifdef clauses in other files.
00616  */
00617 #define IPSEC_SUPPORTED
00618 #endif
00619 
00620 #if (defined(_WIN32) && !defined(_WIN32_WCE)) || defined(PLATFORM_DARWIN) || (defined(PLATFORM_LINUX) && !defined(PLATFORM_CHROMEBOOK)) || defined(PLATFORM_APPLE_SSLVPN) || defined (PLATFORM_ANDROID)
00621 /*
00622  ** The IPV6_SUPPORTED define is used to track the platforms 
00623  ** where full IPv6 capability is supported. This is to avoid repeating the
00624  ** platforms in #ifdef clauses in other files.
00625  ** Note that this is further narrowed down by method CIPv6Util::IsIPv6FullCapabilitySupported.
00626  */
00627 #define IPV6_SUPPORTED
00628 #endif
00629 
00630 #if (defined(_WIN32) && !defined(_WIN32_WCE) && !defined(PLATFORM_WIN_APP)) || defined(PLATFORM_DARWIN) || defined(PLATFORM_LINUX) || defined(PLATFORM_APPLE_SSLVPN) || ( defined(PRODUCT_TYPE_SSA) && defined(APPLE_IOS) )
00631 /*
00632  ** the PLUGIN_PROTOCOL_SUPPORTED define is used to track the platforms 
00633  ** where modular protocol Plugins are supported. This is to avoid repeating the
00634  ** platforms in #ifdef clauses in other files.
00635  */
00636 #define PLUGIN_PROTOCOL_SUPPORTED
00637 #endif
00638 
00639 #if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(PLATFORM_WIN_APP) && !defined(PRODUCT_TYPE_SSA)
00640 /*
00641 ** The IPSEC_OVER_SSL define is used to track the platforms 
00642 ** where the feature "IPsec tunneling over SSL for Oracle" (EDCS-852737) is supported. 
00643 ** This is to avoid repeating the platforms in #ifdef clauses in other files.
00644 ** Also, when the support expands to other platforms, they only need to be added in
00645 ** one place.
00646 */
00647 #define IPSEC_OVER_SSL
00648 #endif
00649 
00650 #if (defined(_WIN32) && !defined(_WIN32_WCE) && !defined(PLATFORM_WIN_APP)) || defined(PLATFORM_DARWIN) || (defined(PLATFORM_LINUX) && !defined(PLATFORM_ANDROID) && !defined(PLATFORM_CHROMEBOOK)) || defined(APPLE_IOS)
00651 /*
00652  ** the DATA_OBFUSCATING_SUPPORTED define is used to track the platforms 
00653  ** where data obfuscation using key exchanges are supported. This is to
00654  ** avoid repeating the platforms in #ifdef clauses in other files.
00655  */
00656 #define DATA_OBFUSCATING_SUPPORTED
00657 #endif
00658 
00659 #if !defined(PLATFORM_APPLE_SSLVPN) && !defined(_WIN32_WCE) && !defined(PLATFORM_WIN_APP) && !defined(PRODUCT_TYPE_SSA) && !defined(PLATFORM_ANDROID) && !defined(PLATFORM_CHROMEBOOK)
00660 /*
00661 ** the HOSTFILE_MODIFICATION_SUPPORTED define is used to track the platforms
00662 ** where hosts file modification is performed. This is to avoid repeating the
00663 ** platforms in #ifdef clauses in other files.
00664 */
00665 #define HOSTSFILE_MODIFICATION_SUPPORTED
00666 #endif
00667 
00668 #if defined(_WIN32) || defined(_WIN32_WCE) || defined(PLATFORM_DARWIN) || defined(PLATFORM_LINUX) || defined(PLATFORM_ANDROID) || defined(PLATFORM_APPLE_SSLVPN)|| defined(PLATFORM_WIN_APP)
00669 /*
00670 ** the SCEP_CERTIFICATE_ENROLLMENT_SUPPORTED define is used to track the platforms
00671 ** where SCEP enrollment can be performed. This is to avoid repeating the
00672 ** platforms in #ifdef clauses in other files.
00673 */
00674 #define SCEP_CERTIFICATE_ENROLLMENT_SUPPORTED
00675 #endif
00676 
00677 #if (defined(_WIN32) && !defined(_WIN32_WCE))
00678 /*
00679 ** these XXX_PROFILE_SUPPORTED defines are used to track the platforms where
00680 ** Service Profiles for optional modules are supported.
00681 ** All platforms: VPN
00682 ** Windows: NAM, Web Security, ISE Posture, FireAMP, NVM and OpenDNS
00683  */
00684 #define NAM_PROFILE_SUPPORTED
00685 #define WEBSEC_PROFILE_SUPPORTED
00686 #define ISEPOSTURE_PROFILE_SUPPORTED
00687 #define FIREAMP_PROFILE_SUPPORTED
00688 #define NVM_PROFILE_SUPPORTED
00689 #define OPENDNS_PROFILE_SUPPORTED
00690 #elif defined(PLATFORM_DARWIN)
00691 /*
00692 ** OS X: Web Security, ISE Posture, FireAMP, NVM and OpenDNS
00693 */
00694 #define WEBSEC_PROFILE_SUPPORTED
00695 #define ISEPOSTURE_PROFILE_SUPPORTED
00696 #define FIREAMP_PROFILE_SUPPORTED
00697 #define NVM_PROFILE_SUPPORTED
00698 #define OPENDNS_PROFILE_SUPPORTED
00699 #elif defined(PLATFORM_LINUX)
00700 #define NVM_PROFILE_SUPPORTED
00701 #endif
00702 
00703 #if defined(_WIN32) || defined(PLATFORM_DARWIN)
00704 /*
00705 ** the CLOUD_UPDATE_SUPPORTED define is used to track the platforms
00706 ** that support cloud updates (currently from OpenDNS). This is to avoid repeating the
00707 ** platforms in #ifdef clauses in other files.
00708 */
00709 #define CLOUD_UPDATE_SUPPORTED
00710 #endif
00711 
00712 /*
00713 ** The PLATFORM_DESKTOP define is used to track AnyConnect desktop platforms.
00714 */
00715 #if (defined(_WIN32) || defined(PLATFORM_DARWIN) || (defined(PLATFORM_LINUX) && !defined(ANYCONNECT_USE_SNAK) && !defined (PLATFORM_ANDROID) && !defined(PLATFORM_CHROMEBOOK))) \
00716     && !defined(PRODUCT_TYPE_SSA) && !defined(PLATFORM_WIN_APP)
00717 #define PLATFORM_DESKTOP
00718 #endif
00719 
00720 #if defined(PLATFORM_DESKTOP)
00721 /*
00722 ** The exportStats call is only supported on the Desktop Platforms,
00723 ** it should not be included or supported if it is not a Desktop Plat
00724 */
00725 #define EXPORT_STATS_SUPPORTED
00726 #endif
00727 
00728 #if defined(_WIN32) || defined(PLATFORM_DARWIN) || defined(PLATFORM_LINUX) || defined(PLATFORM_APPLE_SSLVPN)
00729 #define AC_CERTIFICATE_POLICY_SUPPORTED
00730 #endif
00731 
00732 #ifndef _TRSTRING
00733 #define _tr(String) String
00734 #define _TRSTRING
00735 #endif
00736 
00737 #ifndef _C_MYASSERT
00738 #define C_MYASSERT(e) typedef char __C_MYASSERT__[(e)?1:-1]
00739 #define _C_MYASSERT
00740 #endif
00741 
00742 #if defined(PLATFORM_APPLE_SSLVPN) || defined(APPLE_IOS)
00743 #define NETWORK_ORDER_LOOPBACK_INTF_ADDR    htonl(0x7f000001) // 127.0.0.1
00744 #endif
00745 
00746 #if !defined(BITS_PER_BYTE)
00747 #define BITS_PER_BYTE   8
00748 #endif
00749 
00750 #if defined(PLATFORM_DESKTOP) && defined(PLATFORM_LINUX)
00751 #define STATIC_THREAD_LOCAL static __thread
00752 #else
00753 #define STATIC_THREAD_LOCAL thread_local
00754 #endif
00755 
00756 #if defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_ANDROID) || defined(PLATFORM_CHROMEBOOK)|| defined(PRODUCT_TYPE_SSA) || defined(PLATFORM_WIN_APP)
00757 /*
00758  ** the MANUAL_PKCS12_IMPORT_SUPPORTED define is used to track the platforms 
00759  ** where the manual import of PKCS12 certificates is supported. This is to avoid repeating the
00760  ** platforms in #ifdef clauses in other files.
00761  */
00762 #define MANUAL_PKCS12_IMPORT_SUPPORTED
00763 #endif
00764 
00765 #if defined(PLATFORM_ANDROID) || defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_CHROMEBOOK)
00766 // Zlib is statically linked.
00767 #define STATIC_ZLIB
00768 #endif
00769 
00770 #if (defined(PLATFORM_LINUX) && !defined(PLATFORM_ANDROID)) || defined(PLATFORM_DARWIN)
00771 // Use zlib dynamic library on the system.
00772 #define USE_SYSTEM_ZLIB
00773 #endif
00774 
00775 
00776 /*
00777  * Platforms that support a single profile.
00778  */
00779 #if defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_ANDROID) || defined(PLATFORM_CHROMEBOOK)
00780 #define USE_SINGLE_PROFILE
00781 #endif
00782 
00783 
00784 /*
00785  * Platforms that support ACIDEX.
00786  */
00787 #if defined(PLATFORM_ANDROID) || defined(PLATFORM_APPLE_SSLVPN) || defined(_WIN32) || defined(PLATFORM_DARWIN) || defined(PLATFORM_LINUX)  || defined(PLATFORM_CHROMEBOOK)
00788 #define ACIDEX_SUPPORTED
00789 #endif
00790 
00791 /*
00792  * Platforms that support PerApp.
00793  */
00794 #if defined(PLATFORM_ANDROID) || defined(PLATFORM_APPLE_SSLVPN)
00795 #define PERAPP_SUPPORTED
00796 #endif
00797 
00798 
00799 /*
00800  * Platforms that support HOSTDATA.
00801  */
00802 #if defined(PLATFORM_ANDROID) || defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_CHROMEBOOK)
00803 #define HOST_DATA_SUPPORTED
00804 #endif
00805 
00806 
00807 /*
00808  * Platforms that support scripting.
00809  *
00810  * When changing the SCRIPTING_SUPPORTED definition, you MUST also update the
00811  * ClientIfcBase.h!  We duplicate this definition there due to the manner in
00812  * which we distribute our code to partners; we cannot include this header from
00813  * ClientIfcBase.h.
00814 
00815  */
00816 #if !defined(PLATFORM_APPLE_SSLVPN) && !defined(PLATFORM_ANDROID) && !defined(PLATFORM_WIN_APP)
00817 #define SCRIPTING_SUPPORTED
00818 #endif
00819 
00820 #if defined(PLATFORM_ANDROID)
00821 // On Android, modifying the default route may break system network services.
00822 #define DONT_TOUCH_IPV4_DEFAULT_ROUTE
00823 #endif
00824 
00825 #if defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_ANDROID) || defined(PLATFORM_CHROMEBOOK)
00826 #define SNAK_NO_ROUTE_TABLE_ACCESS
00827 #endif
00828 
00829 #if defined(ANYCONNECT_USE_SNAK) || defined(PLATFORM_APPLE_SSLVPN)
00830 #define GLOBAL_SNAK_PLUGIN_VER              2
00831 #endif
00832 
00833 #if defined(PLATFORM_ANDROID)
00834 #define MEMORY_LOGGING_SUPPORTED
00835 #endif
00836 
00837 
00838 
00839 #if defined(PLATFORM_ANDROID)
00840 // Supports API for integrating program data (e.g. localization and profile).
00841 #define PROGRAM_DATA_IMPORT_SUPPORTED
00842 #endif
00843 
00844 #if defined(PLATFORM_ANDROID)
00845 // Credentials for a connection can be prefilled via uri handling or API calls
00846 // if you add a new platform, you need to add it in ClientIfcBase.h and ConnectPromptInfoBase.h
00847 #define CREDENTIAL_PREFILL_SUPPORTED
00848 #endif
00849 
00850 #if !(defined(_WIN32_WCE) || defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_ANDROID) || defined(PLATFORM_CHROMEBOOK))
00851 // support for automatic reconnects
00852 #define AUTORECONNECT_SUPPORTED
00853 #endif
00854 
00855 #if !defined(_WIN32_WCE) && !defined(PLATFORM_LINUX_EMBEDDED_PPC) && !defined(PLATFORM_WEBOS_ARM) && !defined(PLATFORM_WEBOS_X86) && !defined(APPLE_IOS) && !defined(PLATFORM_WIN_APP)
00856 #define FIPS_SUPPORTED
00857 #endif
00858 
00859 #if !defined(_WIN32_WCE) && !defined(PLATFORM_WIN_APP)  && !defined(PLATFORM_APPLE_SSLVPN) && !defined(PLATFORM_LINUX_EMBEDDED_PPC) && !defined(PLATFORM_WEBOS_ARM) && !defined(PLATFORM_WEBOS_X86) && !defined(APPLE_IOS) && !defined(PRODUCT_TYPE_SSA) && !defined(PLATFORM_CHROMEBOOK)
00860 #define LEAF_SUPPORTED
00861 #endif
00862 
00863 #if defined(PLATFORM_DESKTOP) && (defined(_WIN32) || defined(PLATFORM_LINUX))
00864 /*
00865 ** This define is used to track platforms where user logon 
00866 ** related preferences in client profile are supported.
00867 */
00868 #define ENFORCE_USER_LOGON_SETTINGS 
00869 #endif
00870 
00871 #if !defined(PLATFORM_ANDROID) && !defined(PLATFORM_CHROMEBOOK) // More platforms need to be added
00872 #define WIDE_CHAR_SUPPORTED
00873 #endif
00874 
00875 #if defined(_WIN32) && !defined(PRODUCT_TYPE_SSA) && !defined(PLATFORM_WIN_APP)
00876 #define TUNNEL_PROXY_SETTINGS_SUPPORTED
00877 #endif
00878 
00879 /*
00880 ** Public Proxy support is only implemented on Windows, Linux and Mac desktop platforms
00881 */
00882 #if defined(PLATFORM_DESKTOP)
00883 #define PUBLIC_PROXY_SUPPORTED
00884 #endif
00885 
00886 /*
00887 ** NTLM support is only implemented on Windows desktop platforms
00888 */
00889 #if defined(_WIN32) && defined(PUBLIC_PROXY_SUPPORTED)
00890 #define PROXYAUTH_NTLM_SUPPORTED
00891 #endif
00892 
00893 #if defined(PLATFORM_ANDROID) || defined(PRODUCT_TYPE_SSA) || defined(PLATFORM_APPLE_SSLVPN)
00894 #define IMPORT_API_SUPPORTED
00895 #endif
00896 
00897 #if defined(PLATFORM_APPLE_SSLVPN)  || (defined(PRODUCT_TYPE_SSA) && !(defined(PLATFORM_ANDROID) || defined(APPLE_IOS)))  || defined(PLATFORM_CHROMEBOOK)
00898 /*
00899 ** This serves to tell the IPsec plugin interface to explicitly
00900 ** exclude it's global namespace entry points, leaving the only
00901 ** plugin interface as a set of static class methods, which the
00902 ** loading code will look for directly.
00903 */
00904 #define IPSEC_AS_INTERNAL_MODULE
00905 #endif
00906 
00907 #if defined(PLATFORM_ANDROID) // More platforms need to be added
00908 #define dynamic_cast reinterpret_cast
00909 #endif
00910 
00911 #if defined(PRODUCT_TYPE_SSA) && defined(APPLE_IOS) && !defined(PLATFORM_APPLE_SSLVPN)
00912 #define CONFIGURE_REMOTE_WAKEUP_SUPPORTED
00913 #endif
00914 
00915 /*
00916 ** The SMARTCARD_SUPPORTED define is used to track the platforms where smartcard
00917 ** certificate authentication is supported. This is to avoid repeating the
00918 ** platforms in #ifdef clauses in other files.
00919 */
00920 #if (defined(_WIN32) && !defined(PLATFORM_WIN_APP)) || defined(PLATFORM_DARWIN)
00921 #define SMARTCARD_SUPPORTED
00922 /*
00923 ** The SMARTCARD_REMOVAL_SUPPORTED define is used to track the platforms where smartcard
00924 ** removal monitoring is supported. This is to avoid repeating the
00925 ** platforms in #ifdef clauses in other files.
00926 */
00927 #if defined(_WIN32)
00928 #define SMARTCARD_REMOVAL_SUPPORTED
00929 #endif
00930 #endif // (_WIN32 && !PLATFORM_WIN_APP) || PLATFORM_DARWIN
00931 
00932 #if (defined(PLATFORM_LINUX) || defined(PLATFORM_DARWIN)) && !defined(ANYCONNECT_USE_SNAK) && !defined(PRODUCT_TYPE_SSA)
00933 /*
00934  ** The CIRCUMVENT_HOST_FILTERING_SUPPORTED define is used to track the platforms
00935  ** where AnyConnect can control whether or not pre-existing host filtering is
00936  ** circumvented upon applying AnyConnect filtering (only applicable to split-tunneling). 
00937  */
00938 #define CIRCUMVENT_HOST_FILTERING_SUPPORTED
00939 #endif
00940 
00941 #if defined(_WIN32) && !defined(ANYCONNECT_USE_SNAK) && !defined(PRODUCT_TYPE_SSA)
00942 /*
00943  ** The SKIP_DHCP_SERVER_ROUTE_SUPPORTED define is used to track the platforms
00944  ** where the admin can control whether or not the public DHCP server route is created
00945  ** upon establishing the VPN tunnel. 
00946  */
00947 #define SKIP_DHCP_SERVER_ROUTE_SUPPORTED
00948 #endif
00949 
00950 #if defined(PLUGIN_PROTOCOL_SUPPORTED) && !defined(PRODUCT_TYPE_SSA)
00951 #if (defined(_WIN32) && !defined(_WIN32_WCE))
00952 // support Service Control Plugins if defined
00953 #define SERVICE_PLUGIN
00954 // support PhoneHome Plugin if defined
00955 #define PHONEHOME_PLUGIN
00956 #elif defined(PLATFORM_DARWIN)
00957 // support Service Control Plugins if defined
00958 #define SERVICE_PLUGIN
00959 // support PhoneHome Plugin if defined
00960 #define PHONEHOME_PLUGIN
00961 #elif defined(PLATFORM_LINUX) && !defined(PLATFORM_ANDROID) && !defined(PLATFORM_CHROMEBOOK)
00962 #define PHONEHOME_PLUGIN
00963 #define SERVICE_PLUGIN
00964 #endif
00965 #endif
00966 
00967 #if (defined (PLATFORM_DARWIN) || defined (PLATFORM_ANDROID) || defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_CHROMEBOOK) || (defined (PLATFORM_LINUX) && !defined (ANYCONNECT_USE_SNAK)))
00968 #define FILE_STORE_SUPPORTED
00969 #endif
00970 
00971 #if !defined(PLATFORM_WIN_APP)
00972 /*
00973 ** the INTERPROCESS_COMMUNICATION_SUPPORTED define is used to track the platforms where the
00974 ** communication between processes is supported. This is to avoid repeating the
00975 ** platforms in #ifdef clauses in other files.
00976 */
00977 #define INTERPROCESS_COMMUNICATION_SUPPORTED
00978 #endif
00979 #if !defined(PLATFORM_WIN_APP)
00980 /*
00981 ** the THREADS_SUPPORTED define is used to track the platforms where
00982 ** threads are supported. This is to avoid repeating the
00983 ** platforms in #ifdef clauses in other files.
00984 */
00985 #define THREADS_SUPPORTED
00986 #endif
00987 
00988 #if !defined(PLATFORM_WIN_APP)
00989 /*
00990 ** the CAPTIVE_PORTAL_DETECTION_SUPPORTED define is used to track the platforms where
00991 ** captive portal detection is supported. This is to avoid repeating the
00992 ** platforms in #ifdef clauses in other files.
00993 */
00994 #define CAPTIVE_PORTAL_DETECTION_SUPPORTED
00995 #endif
00996 
00997 #if defined(_WIN32) && defined(CAPTIVE_PORTAL_DETECTION_SUPPORTED) && defined(PLATFORM_DESKTOP)  
00998 /*
00999 ** the SECURE_CAPTIVE_PORTAL_REMEDIATION_SUPPORTED define is used to track the platforms where
01000 ** secure captive portal remediation is supported.
01001 */
01002 #define SECURE_CAPTIVE_PORTAL_REMEDIATION_SUPPORTED
01003 #endif
01004 
01005 #if !defined(PLATFORM_WIN_APP)
01006 /*
01007 ** the EVENTS_SUPPORTED define is used to track the platforms where
01008 ** events are supported. This is to avoid repeating the
01009 ** platforms in #ifdef clauses in other files.
01010 */
01011 #define EVENTS_SUPPORTED
01012 #endif
01013 
01014 #if defined(IPV6_SUPPORTED) && !defined(PLATFORM_WIN_APP) && !defined(PLATFORM_ANDROID) && !defined(PLATFORM_CHROMEBOOK) && !defined(PLATFORM_APPLE_SSLVPN)
01015 /*
01016 ** the MODIFY_HOSTSFILE_SUPPORTED define is used to track the platforms where
01017 ** modification of the system's hosts file is supported. This is to avoid repeating the
01018 ** platforms in #ifdef clauses in other files.
01019 */
01020 #define MODIFY_HOSTSFILE_SUPPORTED
01021 #endif
01022 
01023 #if !defined(PLATFORM_WIN_APP)
01024 /*
01025 ** the HOST_CONFIG_MANAGER_SUPPORTED define is used to track the platforms where
01026 ** broad control of the host OS is supported. This is to avoid repeating the
01027 ** platforms in #ifdef clauses in other files.
01028 */
01029 #define HOST_CONFIG_MANAGER_SUPPORTED
01030 #endif
01031 
01032 #if defined(PRODUCT_TYPE_SSA) || defined(PLATFORM_WIN_APP) ||  defined(PLATFORM_ANDROID) || defined(PLATFORM_CHROMEBOOK) || defined(PLATFORM_APPLE_SSLVPN)
01033 /*
01034 ** the FILE_SYNCHRONIZER_SUPPORTED define is used to track the platforms where
01035 ** files downloaded directly by VPN API are supported. This is to avoid repeating the
01036 ** platforms in #ifdef clauses in other files.
01037 */
01038 #define FILE_SYNCHRONIZER_SUPPORTED
01039 #endif
01040 
01041 #if defined(_WIN32) || defined(PLATFORM_DARWIN) || (defined(PLATFORM_LINUX) && !defined(PLATFORM_ANDROID) && !defined(PLATFORM_CHROMEBOOK))
01042 /*
01043  ** the SAVE_VPNCONFIG_TO_FILE_SUPPORTED define is used to track the platforms where the
01044  ** writting of the VPN config to file is supported. This is to avoid repeating the
01045  ** platforms in #ifdef clauses in other files.
01046  */
01047 #define SAVE_VPNCONFIG_TO_FILE_SUPPORTED
01048 #endif
01049 
01050 /*
01051 *  DSCP preservation is not considered for Downloader. Downloader uses socket transport for IPC.
01052 */
01053 #if (defined(PLATFORM_ANDROID) || defined(PLATFORM_DARWIN) || defined(_WIN32)) && !defined(_DOWNLOADER) && !defined(PRODUCT_TYPE_SSA) && !defined(PLATFORM_WIN_APP)
01054 // Used to enable preservation of Differentiated Services field in the IP packet header.
01055 #define DIFFSERV_PRESERVATION_SUPPORTED
01056 #endif
01057 
01058 #if !defined(PRODUCT_TYPE_SSA) && !defined(PLATFORM_WIN_APP)
01059 /*
01060 ** the ROUTE_MANAGER_SUPPORTED define is used to track the platforms
01061 ** where RouteMgr is supported. This is to avoid repeating the
01062 ** platforms in #ifdef clauses in other files.
01063 */
01064 #define ROUTE_MANAGER_SUPPORTED
01065 #endif
01066 
01067 #if !defined(PRODUCT_TYPE_SSA) && !defined(PLATFORM_WIN_APP)
01068 /*
01069 ** the FILTER_MANAGER_SUPPORTED define is used to track the platforms
01070 ** where FilterMgr is supported. This is to avoid repeating the
01071 ** platforms in #ifdef clauses in other files.
01072 */
01073 #define FILTER_MANAGER_SUPPORTED
01074 #endif
01075 
01076 #if defined(PLATFORM_APPLE_SSLVPN)
01077 // Used to enable the file logging for Apple plugins.
01078 //#define FILE_LOGGING_SUPPORTED
01079 #endif
01080 
01081 /*
01082 ** Legacy Single sign on authentication.
01083 ** Explicitly disabled on mobile platforms due to session fixation vulnerability, as described in CSCvg65072
01084 ** To be removed from desktop platforms in some future AnyConnect release (4.7?)
01085 */
01086 #if defined(PLATFORM_DESKTOP)
01087 #define SSO_V1_SUPPORTED
01088 #endif
01089 
01090 /*
01091 ** Single sign on authentication (requires embedded browser).
01092 */
01093 #if !defined(PLATFORM_WIN_APP)
01094 #define SSO_SUPPORTED
01095 #endif
01096 
01097 #if !defined(PLATFORM_WIN_APP)
01098 #define MCA_SUPPORTED
01099 #endif
01100 
01101 #if !defined(PLATFORM_WIN_APP)
01102 #define TIMERS_SUPPORTED
01103 #endif
01104 
01105 #if !defined(PLATFORM_CHROMEBOOK)
01106 #define LOAD_EXTERNAL_MODULES
01107 #endif
01108 
01109 #if defined(PLATFORM_ANDROID)
01110 #define SPLIT_DNS_PROXY_SUPPORTED
01111 #endif
01112 
01113 #if (defined(_WIN32) || defined(PLATFORM_DARWIN)) && defined(PLATFORM_DESKTOP)
01114 /*
01115 ** The MGMT_TUNNEL_SUPPORTED define is used to track the platforms where
01116 ** the management tunnel feature is supported.
01117 */
01118 #define MGMT_TUNNEL_SUPPORTED
01119 #endif
01120 
01121 #if (defined(_WIN32) && defined(PLATFORM_DESKTOP)) || defined(MGMT_TUNNEL_SUPPORTED)
01122 // Machine certificate authentication SSL tunnel connections via agent are supported
01123 // on Windows desktop, and also on all platforms supporting the management tunnel feature.
01124 //
01125 #define SSL_CONNECT_VIA_AGENT_SUPPORTED
01126 #endif
01127 
01128 /*
01129 ** Performance optimization for the tunnel packet processing loop to attempt to process 
01130 ** multiple packets before calling back into select().
01131 */
01132 #if !defined(_WIN32)
01133 #define MULTI_TUN_PACKET_PROCESSING_SUPPORTED
01134 #endif
01135 
01136 #if (defined(_WIN32) && defined(_M_ARM64)) || defined(X86_FOR_ARM64)
01137 /*
01138 ** Disable Hostscan on Windows ARM64 builds (both native ARM64 and the hybrid _WIN32_FOR_ARM64).
01139 */
01140 #define ANYCONNECT_NO_CSD
01141 #endif
01142 
01143 #if defined(_WIN32) && defined(PLATFORM_DESKTOP) && !defined(_M_ARM64) && !defined(X86_FOR_ARM64)
01144 /*
01145 ** Connected Standby is supported in Windows desktop but not UWP and not ARM64 (both native ARM64 and the hybrid _WIN32_FOR_ARM64).
01146 */
01147 #define CONNECTED_STANDBY_SUPPORTED
01148 #endif
01149 
01150 
01151 #if defined(_WIN32) && defined(PLATFORM_DESKTOP) || defined(PLATFORM_APPLE_SSLVPN)
01152 /*
01153 ** This define is used to track platforms where multi-line logs are readable, and hence supported.
01154 */
01155 #define MULTI_LINE_LOGS_SUPPORTED
01156 #endif
01157 
01158 #if defined (PLATFORM_ANDROID)
01159 #define PCAP_VA_SUPPORTED
01160 #endif
01161 
01162 /* END OF MACRO HELL */
01163 #endif /*__GENDEFS_H*/