AnyConnect Secure Mobility Client 4.9.04043

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 ( NULL != 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 __cplusplus >= 201103L
00462 #define CPP_11_SUPPORTED
00463 #endif
00464 #if __cplusplus >= 201402L
00465 #define CPP_14_SUPPORTED
00466 #endif
00467 #if __cplusplus >= 201703L
00468 #define CPP_17_SUPPORTED
00469 #endif
00470 
00471 #if ((defined(_WIN32) && !defined(_WIN32_WCE) && !defined(PLATFORM_WIN_APP)) || defined(PLATFORM_DARWIN) || defined(PLATFORM_LINUX)) && !defined(ANYCONNECT_USE_SNAK) && !defined(PRODUCT_TYPE_SSA)
00472 /*
00473  ** the FIREWALL_SUPPORTED define is used to track the platforms
00474  ** where the firewall feature is supported. This is to avoid repeating the
00475  ** platforms in #ifdef clauses in other files.
00476  ** Also, when Firewall feature expands to other platforms, they only need to be added in
00477  ** one place.
00478  */
00479 #define FIREWALL_SUPPORTED
00480 #endif
00481 
00482 #if !defined(PRODUCT_TYPE_SSA) && ((defined(_WIN32) && !defined(_WIN32_WCE) && !defined(PLATFORM_WIN_APP)) || defined(PLATFORM_DARWIN) || (defined(PLATFORM_LINUX) && !defined(PLATFORM_CHROMEBOOK)))
00483 /*
00484 ** the TRUSTED_NETWORK_DETECTION define is used to track the platforms
00485 ** where Trusted Network Detection is performed. This is to avoid repeating the
00486 ** platforms in #ifdef clauses in other files.
00487 ** Also, when TND support expands to other platforms, they only need to be added in
00488 ** one place.
00489 */
00490 #define TRUSTED_NETWORK_DETECTION
00491 
00492 /*
00493  * Android only uses TND to report state to NVM.
00494  * Policy-based actions are not supported.
00495  */
00496 #if !defined(PLATFORM_ANDROID)
00497 #define TND_ACTIONS_SUPPORTED
00498 #endif
00499 #endif
00500 
00501 #if (defined(_WIN32) || defined(PLATFORM_DARWIN) || defined(PLATFORM_ANDROID) || defined(PLATFORM_LINUX) && !defined(ANYCONNECT_USE_SNAK) && !defined(PLATFORM_WIN_APP))
00502 #define INTER_MODULE_STATE_NOTIFY
00503 #endif
00504 
00505 #if ((defined(_WIN32) && !defined(_WIN32_WCE)) || defined(PLATFORM_DARWIN) || defined(TRUSTED_NETWORK_DETECTION)) && !defined(PRODUCT_TYPE_SSA) && !defined(PLATFORM_ANDROID)
00506 /*
00507 ** the LOGIN_UTILITIES_SUPPORTED define is used to track the platforms
00508 ** that support AnyConnect action triggered by user login. This is to avoid
00509 ** repeating the platforms in #ifdef clauses in other files.
00510 ** Also, when login support expands to other platforms, they only need to be added in
00511 ** one place.
00512 */
00513 #define LOGIN_UTILITIES_SUPPORTED
00514 #endif
00515 
00516 #if (defined(_WIN32) || defined(PLATFORM_DARWIN)) && !defined(PLATFORM_WIN_APP)
00517 /*
00518 ** The DNS_PLUGIN_SUPPORTED define is used to track the platforms where the DNS KDF plugin is 
00519 ** available. This is to avoid repeating the platforms in #ifdef clauses in other files.
00520 ** Also, when support expands to other platforms, they only need to be added in one place.
00521 */
00522 #define DNS_PLUGIN_SUPPORTED
00523 #if defined(_WIN32)
00524 /*
00525 ** The DNS_PLUGIN_DNS_REQ_HANDLING_SUPPORTED define is used to track the platforms where the DNS KDF plugin is 
00526 ** available and supports handling of DNS requests during the VPN tunnel (e.g. for split-DNS or tunnel-all-DNS enforcement).
00527 **/
00528 #define DNS_PLUGIN_DNS_REQ_HANDLING_SUPPORTED
00529 #endif // _WIN32
00530 #endif // (_WIN32 || PLATFORM_DARWIN) && !PLATFORM_WIN_APP && !PRODUCT_TYPE_SSA
00531 
00532 #if defined(DNS_PLUGIN_SUPPORTED)
00533 /*
00534 ** The DYNAMIC_SPLIT_TUNNELING_SUPPORTED define is used to track the platforms where dynamic split tunneling is supported.
00535 **/
00536 #define DYNAMIC_SPLIT_TUNNELING_SUPPORTED
00537 #endif // DNS_PLUGIN_SUPPORTED
00538 
00539 #if !(defined(PLATFORM_APPLE_SSLVPN) && TARGET_CPU_ARMV6)
00540 /*
00541 ** A bug was discovered in iPhone testing wherein virtual inline functions do
00542 ** not work correctly on ARMv6 processors. To work around this, virtual inline
00543 ** function need to be made standard virtual functions on ARMv6. To prevent
00544 ** differences in runtime behavior, the VIRTUAL_INLINES_SUPPORTED define is used
00545 ** to define some virtual inlines in the header files, letting the functions be
00546 ** defined without the inline type in the cpp file for non-supported platforms.
00547 */
00548 #define VIRTUAL_INLINES_SUPPORTED
00549 #endif
00550 
00551 /*
00552  * When changing the SCRIPTING_SUPPORTED definition, you MUST also update the
00553  * ClientIfcBase.h!  We duplicate this definition there due to the manner in
00554  * which we distribute our code to partners; we cannot include this header from
00555  * ClientIfcBase.h.
00556  */
00557 #if !defined(PLATFORM_APPLE_SSLVPN) && !defined(PLATFORM_ANDROID) && !defined(PLATFORM_WIN_APP)
00558 /*
00559 ** the SCRIPTING_SUPPORTED define is used to enable the script manager for launching
00560 ** customer provided scripts on events like connection establishment, completion of
00561 ** disconnect, and captive portal detection.
00562 */
00563 #define SCRIPTING_SUPPORTED
00564 #endif
00565 
00566 #if defined(PLATFORM_ANDROID)
00567 #define DYNAMIC_UPDATE_LOCAL_POLICY
00568 #endif // PLATFORM_ANDROID
00569 
00570 #if !defined(PRODUCT_TYPE_SSA) && ((defined(_WIN32) && !defined(_WIN32_WCE)  && !defined(PLATFORM_WIN_APP)) || defined(PLATFORM_DARWIN) || (defined(PLATFORM_LINUX) && !defined(ANYCONNECT_USE_SNAK)))
00571 /*
00572 ** the NETWORK_ENVIRONMENT_STATE define is used to track the platforms
00573 ** where NETWORK_ENVIRONMENT_STATE check is performed. This is to avoid repeating the
00574 ** platforms in #ifdef clauses in other files.
00575 ** Also, when NES support expands to other platforms, they only need to be added in
00576 ** one place.
00577 */
00578 #define NETWORK_ENVIRONMENT_STATE
00579 #endif
00580 
00581 
00582 #if (defined(_WIN32) && !defined(_WIN32_WCE)  && !defined(PLATFORM_WIN_APP)) || defined(PLATFORM_DARWIN) || (defined(PLATFORM_LINUX) && !defined(ANYCONNECT_USE_SNAK))
00583 /*
00584 ** The AUTOMATIC_HEADEND_SELECTION define is used to track the platforms
00585 ** where Automatic Headend Selection is performed. This is to avoid repeating the
00586 ** platforms in #ifdef clauses in other files.
00587 ** Also, when AHS support expands to other platforms, they only need to be added in
00588 ** one place.
00589 */
00590 #define AUTOMATIC_HEADEND_SELECTION
00591 #endif
00592 
00593 #if (defined(_WIN32) && !defined(_WIN32_WCE) && !defined(PLATFORM_WIN_APP)) || defined(PLATFORM_DARWIN)
00594 /*
00595  ** the MUS_HOST_SERVICES define is used to track the platforms
00596  ** where MUS Host Status check is performed. This is to avoid repeating the
00597  ** platforms in #ifdef clauses in other files.
00598  */
00599 #define MUS_HOST_SERVICES
00600 #endif
00601 
00602 // BUGBUG - initially only enable code signing for Windows
00603 #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))
00604 /*
00605  ** the CODE_SIGNING_SUPPORTED define is used to track the platforms 
00606  ** where code sign verification is support. This is to avoid repeating the
00607  ** platforms in #ifdef clauses in other files.
00608  **
00609  */
00610 #define CODE_SIGNING_SUPPORTED
00611 #endif
00612 
00613 #if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(PLATFORM_WIN_APP)
00614 #define RSA_SECURID_SUPPORTED
00615 #endif
00616 
00617 #if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(PLATFORM_WIN_APP)
00618 #define SAFEWORD_SOFTOKEN_SUPPORTED
00619 #endif
00620 
00621 #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) )
00622 /*
00623  ** the IPSEC_SUPPORTED define is used to track the platforms 
00624  ** where the IPSec protocol is supported. This is to avoid repeating the
00625  ** platforms in #ifdef clauses in other files.
00626  */
00627 #define IPSEC_SUPPORTED
00628 #endif
00629 
00630 #if (defined(_WIN32) && !defined(_WIN32_WCE)) || defined(PLATFORM_DARWIN) || (defined(PLATFORM_LINUX) && !defined(PLATFORM_CHROMEBOOK)) || defined(PLATFORM_APPLE_SSLVPN) || defined (PLATFORM_ANDROID)
00631 /*
00632  ** The IPV6_SUPPORTED define is used to track the platforms 
00633  ** where full IPv6 capability is supported. This is to avoid repeating the
00634  ** platforms in #ifdef clauses in other files.
00635  ** Note that this is further narrowed down by method CIPv6Util::IsIPv6FullCapabilitySupported.
00636  */
00637 #define IPV6_SUPPORTED
00638 #endif
00639 
00640 #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) )
00641 /*
00642  ** the PLUGIN_PROTOCOL_SUPPORTED define is used to track the platforms 
00643  ** where modular protocol Plugins are supported. This is to avoid repeating the
00644  ** platforms in #ifdef clauses in other files.
00645  */
00646 #define PLUGIN_PROTOCOL_SUPPORTED
00647 #endif
00648 
00649 #if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(PLATFORM_WIN_APP) && !defined(PRODUCT_TYPE_SSA)
00650 /*
00651 ** The IPSEC_OVER_SSL define is used to track the platforms 
00652 ** where the feature "IPsec tunneling over SSL for Oracle" (EDCS-852737) is supported. 
00653 ** This is to avoid repeating the platforms in #ifdef clauses in other files.
00654 ** Also, when the support expands to other platforms, they only need to be added in
00655 ** one place.
00656 */
00657 #define IPSEC_OVER_SSL
00658 #endif
00659 
00660 #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)
00661 /*
00662  ** the DATA_OBFUSCATING_SUPPORTED define is used to track the platforms 
00663  ** where data obfuscation using key exchanges are supported. This is to
00664  ** avoid repeating the platforms in #ifdef clauses in other files.
00665  */
00666 #define DATA_OBFUSCATING_SUPPORTED
00667 #endif
00668 
00669 #if !defined(PLATFORM_APPLE_SSLVPN) && !defined(_WIN32_WCE) && !defined(PLATFORM_WIN_APP) && !defined(PRODUCT_TYPE_SSA) && !defined(PLATFORM_ANDROID) && !defined(PLATFORM_CHROMEBOOK)
00670 /*
00671 ** the HOSTFILE_MODIFICATION_SUPPORTED define is used to track the platforms
00672 ** where hosts file modification is performed. This is to avoid repeating the
00673 ** platforms in #ifdef clauses in other files.
00674 */
00675 #define HOSTSFILE_MODIFICATION_SUPPORTED
00676 #endif
00677 
00678 #if defined(_WIN32) || defined(_WIN32_WCE) || defined(PLATFORM_DARWIN) || defined(PLATFORM_LINUX) || defined(PLATFORM_ANDROID) || defined(PLATFORM_APPLE_SSLVPN)|| defined(PLATFORM_WIN_APP)
00679 /*
00680 ** the SCEP_CERTIFICATE_ENROLLMENT_SUPPORTED define is used to track the platforms
00681 ** where SCEP enrollment can be performed. This is to avoid repeating the
00682 ** platforms in #ifdef clauses in other files.
00683 */
00684 #define SCEP_CERTIFICATE_ENROLLMENT_SUPPORTED
00685 #endif
00686 
00687 #if (defined(_WIN32) && !defined(_WIN32_WCE))
00688 /*
00689 ** these XXX_PROFILE_SUPPORTED defines are used to track the platforms where
00690 ** Service Profiles for optional modules are supported.
00691 ** All platforms: VPN
00692 ** Windows: NAM, Web Security, ISE Posture, FireAMP, NVM and OpenDNS
00693  */
00694 #define NAM_PROFILE_SUPPORTED
00695 #define WEBSEC_PROFILE_SUPPORTED
00696 #define ISEPOSTURE_PROFILE_SUPPORTED
00697 #define FIREAMP_PROFILE_SUPPORTED
00698 #define NVM_PROFILE_SUPPORTED
00699 #define OPENDNS_PROFILE_SUPPORTED
00700 #elif defined(PLATFORM_DARWIN)
00701 /*
00702 ** OS X: Web Security, ISE Posture, FireAMP, NVM and OpenDNS
00703 */
00704 #define WEBSEC_PROFILE_SUPPORTED
00705 #define ISEPOSTURE_PROFILE_SUPPORTED
00706 #define FIREAMP_PROFILE_SUPPORTED
00707 #define NVM_PROFILE_SUPPORTED
00708 #define OPENDNS_PROFILE_SUPPORTED
00709 #elif defined(PLATFORM_LINUX)
00710 #define NVM_PROFILE_SUPPORTED
00711 #endif
00712 
00713 #if defined(_WIN32) || defined(PLATFORM_DARWIN)
00714 /*
00715 ** the CLOUD_UPDATE_SUPPORTED define is used to track the platforms
00716 ** that support cloud updates (currently from OpenDNS). This is to avoid repeating the
00717 ** platforms in #ifdef clauses in other files.
00718 */
00719 #define CLOUD_UPDATE_SUPPORTED
00720 #endif
00721 
00722 /*
00723 ** The PLATFORM_DESKTOP define is used to track AnyConnect desktop platforms.
00724 */
00725 #if (defined(_WIN32) || defined(PLATFORM_DARWIN) || (defined(PLATFORM_LINUX) && !defined(ANYCONNECT_USE_SNAK) && !defined (PLATFORM_ANDROID) && !defined(PLATFORM_CHROMEBOOK))) \
00726     && !defined(PRODUCT_TYPE_SSA) && !defined(PLATFORM_WIN_APP)
00727 #define PLATFORM_DESKTOP
00728 #endif
00729 
00730 #if defined(PLATFORM_DESKTOP)
00731 /*
00732 ** The exportStats call is only supported on the Desktop Platforms,
00733 ** it should not be included or supported if it is not a Desktop Plat
00734 */
00735 #define EXPORT_STATS_SUPPORTED
00736 #endif
00737 
00738 #if defined(_WIN32) || defined(PLATFORM_DARWIN) || defined(PLATFORM_LINUX) || defined(PLATFORM_APPLE_SSLVPN)
00739 #define AC_CERTIFICATE_POLICY_SUPPORTED
00740 #endif
00741 
00742 #ifndef _TRSTRING
00743 #define _tr(String) String
00744 #define _TRSTRING
00745 #endif
00746 
00747 #ifndef _C_MYASSERT
00748 #define C_MYASSERT(e) typedef char __C_MYASSERT__[(e)?1:-1]
00749 #define _C_MYASSERT
00750 #endif
00751 
00752 #if defined(PLATFORM_APPLE_SSLVPN) || defined(APPLE_IOS)
00753 #define NETWORK_ORDER_LOOPBACK_INTF_ADDR    htonl(0x7f000001) // 127.0.0.1
00754 #endif
00755 
00756 #if !defined(BITS_PER_BYTE)
00757 #define BITS_PER_BYTE   8
00758 #endif
00759 
00760 #if defined(PLATFORM_DESKTOP) && defined(PLATFORM_LINUX)
00761 #define STATIC_THREAD_LOCAL static __thread
00762 #else
00763 #define STATIC_THREAD_LOCAL thread_local
00764 #endif
00765 
00766 #if defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_ANDROID) || defined(PLATFORM_CHROMEBOOK)|| defined(PRODUCT_TYPE_SSA) || defined(PLATFORM_WIN_APP)
00767 /*
00768  ** the MANUAL_PKCS12_IMPORT_SUPPORTED define is used to track the platforms 
00769  ** where the manual import of PKCS12 certificates is supported. This is to avoid repeating the
00770  ** platforms in #ifdef clauses in other files.
00771  */
00772 #define MANUAL_PKCS12_IMPORT_SUPPORTED
00773 #endif
00774 
00775 #if defined(PLATFORM_ANDROID) || defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_CHROMEBOOK)
00776 // Zlib is statically linked.
00777 #define STATIC_ZLIB
00778 #endif
00779 
00780 #if (defined(PLATFORM_LINUX) && !defined(PLATFORM_ANDROID)) || defined(PLATFORM_DARWIN)
00781 // Use zlib dynamic library on the system.
00782 #define USE_SYSTEM_ZLIB
00783 #endif
00784 
00785 
00786 /*
00787  * Platforms that support a single profile.
00788  */
00789 #if defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_ANDROID) || defined(PLATFORM_CHROMEBOOK)
00790 #define USE_SINGLE_PROFILE
00791 #endif
00792 
00793 
00794 /*
00795  * Platforms that support ACIDEX.
00796  */
00797 #if defined(PLATFORM_ANDROID) || defined(PLATFORM_APPLE_SSLVPN) || defined(_WIN32) || defined(PLATFORM_DARWIN) || defined(PLATFORM_LINUX)  || defined(PLATFORM_CHROMEBOOK)
00798 #define ACIDEX_SUPPORTED
00799 #endif
00800 
00801 /*
00802  * Platforms that support PerApp.
00803  */
00804 #if defined(PLATFORM_ANDROID) || defined(PLATFORM_APPLE_SSLVPN)
00805 #define PERAPP_SUPPORTED
00806 #endif
00807 
00808 
00809 /*
00810  * Platforms that support HOSTDATA.
00811  */
00812 #if defined(PLATFORM_ANDROID) || defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_CHROMEBOOK)
00813 #define HOST_DATA_SUPPORTED
00814 #endif
00815 
00816 
00817 /*
00818  * Platforms that support scripting.
00819  *
00820  * When changing the SCRIPTING_SUPPORTED definition, you MUST also update the
00821  * ClientIfcBase.h!  We duplicate this definition there due to the manner in
00822  * which we distribute our code to partners; we cannot include this header from
00823  * ClientIfcBase.h.
00824 
00825  */
00826 #if !defined(PLATFORM_APPLE_SSLVPN) && !defined(PLATFORM_ANDROID) && !defined(PLATFORM_WIN_APP)
00827 #define SCRIPTING_SUPPORTED
00828 #endif
00829 
00830 #if defined(PLATFORM_ANDROID)
00831 // On Android, modifying the default route may break system network services.
00832 #define DONT_TOUCH_IPV4_DEFAULT_ROUTE
00833 #endif
00834 
00835 #if defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_ANDROID) || defined(PLATFORM_CHROMEBOOK)
00836 #define SNAK_NO_ROUTE_TABLE_ACCESS
00837 #endif
00838 
00839 #if defined(ANYCONNECT_USE_SNAK) || defined(PLATFORM_APPLE_SSLVPN)
00840 #define GLOBAL_SNAK_PLUGIN_VER              2
00841 #endif
00842 
00843 #if defined(PLATFORM_ANDROID)
00844 // Supports API for integrating program data (e.g. localization and profile).
00845 #define PROGRAM_DATA_IMPORT_SUPPORTED
00846 #endif
00847 
00848 #if defined(PLATFORM_ANDROID)
00849 // Credentials for a connection can be prefilled via uri handling or API calls
00850 // if you add a new platform, you need to add it in ClientIfcBase.h and ConnectPromptInfoBase.h
00851 #define CREDENTIAL_PREFILL_SUPPORTED
00852 #endif
00853 
00854 #if !(defined(_WIN32_WCE) || defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_ANDROID) || defined(PLATFORM_CHROMEBOOK))
00855 // support for automatic reconnects
00856 #define AUTORECONNECT_SUPPORTED
00857 #endif
00858 
00859 #if !defined(_WIN32_WCE) && !defined(PLATFORM_LINUX_EMBEDDED_PPC) && !defined(PLATFORM_WEBOS_ARM) && !defined(PLATFORM_WEBOS_X86) && !defined(APPLE_IOS) && !defined(PLATFORM_WIN_APP) && !defined(_DOWNLOADER)
00860 #define FIPS_SUPPORTED
00861 #endif
00862 
00863 #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)
00864 #define LEAF_SUPPORTED
00865 #endif
00866 
00867 #if defined(PLATFORM_DESKTOP) && (defined(_WIN32) || defined(PLATFORM_LINUX))
00868 /*
00869 ** This define is used to track platforms where user logon 
00870 ** related preferences in client profile are supported.
00871 */
00872 #define ENFORCE_USER_LOGON_SETTINGS 
00873 #endif
00874 
00875 #if !defined(PLATFORM_ANDROID) && !defined(PLATFORM_CHROMEBOOK) // More platforms need to be added
00876 #define WIDE_CHAR_SUPPORTED
00877 #endif
00878 
00879 #if defined(_WIN32) && !defined(PRODUCT_TYPE_SSA) && !defined(PLATFORM_WIN_APP)
00880 #define TUNNEL_PROXY_SETTINGS_SUPPORTED
00881 #endif
00882 
00883 /*
00884 ** Public Proxy support is only implemented on Windows, Linux and Mac desktop platforms
00885 */
00886 #if defined(PLATFORM_DESKTOP)
00887 #define PUBLIC_PROXY_SUPPORTED
00888 #endif
00889 
00890 /*
00891 ** NTLM support is only implemented on Windows desktop platforms
00892 */
00893 #if defined(_WIN32) && defined(PUBLIC_PROXY_SUPPORTED)
00894 #define PROXYAUTH_NTLM_SUPPORTED
00895 #endif
00896 
00897 #if defined(PLATFORM_ANDROID) || defined(PRODUCT_TYPE_SSA) || defined(PLATFORM_APPLE_SSLVPN)
00898 #define IMPORT_API_SUPPORTED
00899 #endif
00900 
00901 #if defined(PLATFORM_APPLE_SSLVPN)  || (defined(PRODUCT_TYPE_SSA) && !(defined(PLATFORM_ANDROID) || defined(APPLE_IOS)))  || defined(PLATFORM_CHROMEBOOK)
00902 /*
00903 ** This serves to tell the IPsec plugin interface to explicitly
00904 ** exclude it's global namespace entry points, leaving the only
00905 ** plugin interface as a set of static class methods, which the
00906 ** loading code will look for directly.
00907 */
00908 #define IPSEC_AS_INTERNAL_MODULE
00909 #endif
00910 
00911 #if defined(PLATFORM_ANDROID) // More platforms need to be added
00912 #define dynamic_cast reinterpret_cast
00913 #endif
00914 
00915 #if defined(PRODUCT_TYPE_SSA) && defined(APPLE_IOS) && !defined(PLATFORM_APPLE_SSLVPN)
00916 #define CONFIGURE_REMOTE_WAKEUP_SUPPORTED
00917 #endif
00918 
00919 /*
00920 ** The SMARTCARD_SUPPORTED define is used to track the platforms where smartcard
00921 ** certificate authentication is supported. This is to avoid repeating the
00922 ** platforms in #ifdef clauses in other files.
00923 */
00924 #if (defined(_WIN32) && !defined(PLATFORM_WIN_APP)) || defined(PLATFORM_DARWIN)
00925 #define SMARTCARD_SUPPORTED
00926 /*
00927 ** The SMARTCARD_REMOVAL_SUPPORTED define is used to track the platforms where smartcard
00928 ** removal monitoring is supported. This is to avoid repeating the
00929 ** platforms in #ifdef clauses in other files.
00930 */
00931 #if defined(_WIN32)
00932 #define SMARTCARD_REMOVAL_SUPPORTED
00933 #endif
00934 #endif // (_WIN32 && !PLATFORM_WIN_APP) || PLATFORM_DARWIN
00935 
00936 #if (defined(PLATFORM_LINUX) || defined(PLATFORM_DARWIN)) && !defined(ANYCONNECT_USE_SNAK) && !defined(PRODUCT_TYPE_SSA)
00937 /*
00938  ** The CIRCUMVENT_HOST_FILTERING_SUPPORTED define is used to track the platforms
00939  ** where AnyConnect can control whether or not pre-existing host filtering is
00940  ** circumvented upon applying AnyConnect filtering (only applicable to split-tunneling). 
00941  */
00942 #define CIRCUMVENT_HOST_FILTERING_SUPPORTED
00943 #endif
00944 
00945 #if defined(PLATFORM_LINUX) && defined(PLATFORM_DESKTOP)
00946 /*
00947  ** The TUNNEL_FROM_ANY_SOURCE_SUPPORTED define is used to track the platforms
00948  ** where admin can control whether or not to allow packets from any source addresses
00949  ** being tunneled. 
00950  */
00951 #define TUNNEL_FROM_ANY_SOURCE_SUPPORTED
00952 #endif
00953 
00954 #if defined(_WIN32) && !defined(ANYCONNECT_USE_SNAK) && !defined(PRODUCT_TYPE_SSA)
00955 /*
00956  ** The SKIP_DHCP_SERVER_ROUTE_SUPPORTED define is used to track the platforms
00957  ** where the admin can control whether or not the public DHCP server route is created
00958  ** upon establishing the VPN tunnel. 
00959  */
00960 #define SKIP_DHCP_SERVER_ROUTE_SUPPORTED
00961 #endif
00962 
00963 #if defined(PLUGIN_PROTOCOL_SUPPORTED) && !defined(PRODUCT_TYPE_SSA)
00964 #if (defined(_WIN32) && !defined(_WIN32_WCE))
00965 // support Service Control Plugins if defined
00966 #define SERVICE_PLUGIN
00967 // support PhoneHome Plugin if defined
00968 #define PHONEHOME_PLUGIN
00969 #elif defined(PLATFORM_DARWIN)
00970 // support Service Control Plugins if defined
00971 #define SERVICE_PLUGIN
00972 // support PhoneHome Plugin if defined
00973 #define PHONEHOME_PLUGIN
00974 #elif defined(PLATFORM_LINUX) && !defined(PLATFORM_ANDROID) && !defined(PLATFORM_CHROMEBOOK)
00975 #define PHONEHOME_PLUGIN
00976 #define SERVICE_PLUGIN
00977 #endif
00978 #endif
00979 
00980 #if (defined (PLATFORM_DARWIN) || defined (PLATFORM_ANDROID) || defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_CHROMEBOOK) || (defined (PLATFORM_LINUX) && !defined (ANYCONNECT_USE_SNAK)))
00981 #define FILE_STORE_SUPPORTED
00982 #endif
00983 
00984 #if !defined(PLATFORM_WIN_APP)
00985 /*
00986 ** the INTERPROCESS_COMMUNICATION_SUPPORTED define is used to track the platforms where the
00987 ** communication between processes is supported. This is to avoid repeating the
00988 ** platforms in #ifdef clauses in other files.
00989 */
00990 #define INTERPROCESS_COMMUNICATION_SUPPORTED
00991 #endif
00992 #if !defined(PLATFORM_WIN_APP)
00993 /*
00994 ** the THREADS_SUPPORTED define is used to track the platforms where
00995 ** threads are supported. This is to avoid repeating the
00996 ** platforms in #ifdef clauses in other files.
00997 */
00998 #define THREADS_SUPPORTED
00999 #endif
01000 
01001 #if !defined(PLATFORM_WIN_APP)
01002 /*
01003 ** the CAPTIVE_PORTAL_DETECTION_SUPPORTED define is used to track the platforms where
01004 ** captive portal detection is supported. This is to avoid repeating the
01005 ** platforms in #ifdef clauses in other files.
01006 */
01007 #define CAPTIVE_PORTAL_DETECTION_SUPPORTED
01008 #endif
01009 
01010 #if defined(_WIN32) && defined(CAPTIVE_PORTAL_DETECTION_SUPPORTED) && defined(PLATFORM_DESKTOP)  
01011 /*
01012 ** the SECURE_CAPTIVE_PORTAL_REMEDIATION_SUPPORTED define is used to track the platforms where
01013 ** secure captive portal remediation is supported.
01014 */
01015 #define SECURE_CAPTIVE_PORTAL_REMEDIATION_SUPPORTED
01016 #endif
01017 
01018 #if !defined(PLATFORM_WIN_APP)
01019 /*
01020 ** the EVENTS_SUPPORTED define is used to track the platforms where
01021 ** events are supported. This is to avoid repeating the
01022 ** platforms in #ifdef clauses in other files.
01023 */
01024 #define EVENTS_SUPPORTED
01025 #endif
01026 
01027 #if defined(IPV6_SUPPORTED) && !defined(PLATFORM_WIN_APP) && !defined(PLATFORM_ANDROID) && !defined(PLATFORM_CHROMEBOOK) && !defined(PLATFORM_APPLE_SSLVPN)
01028 /*
01029 ** the MODIFY_HOSTSFILE_SUPPORTED define is used to track the platforms where
01030 ** modification of the system's hosts file is supported. This is to avoid repeating the
01031 ** platforms in #ifdef clauses in other files.
01032 */
01033 #define MODIFY_HOSTSFILE_SUPPORTED
01034 #endif
01035 
01036 #if !defined(PLATFORM_WIN_APP)
01037 /*
01038 ** the HOST_CONFIG_MANAGER_SUPPORTED define is used to track the platforms where
01039 ** broad control of the host OS is supported. This is to avoid repeating the
01040 ** platforms in #ifdef clauses in other files.
01041 */
01042 #define HOST_CONFIG_MANAGER_SUPPORTED
01043 #endif
01044 
01045 #if defined(PRODUCT_TYPE_SSA) || defined(PLATFORM_WIN_APP) ||  defined(PLATFORM_ANDROID) || defined(PLATFORM_CHROMEBOOK) || defined(PLATFORM_APPLE_SSLVPN)
01046 /*
01047 ** the FILE_SYNCHRONIZER_SUPPORTED define is used to track the platforms where
01048 ** files downloaded directly by VPN API are supported. This is to avoid repeating the
01049 ** platforms in #ifdef clauses in other files.
01050 */
01051 #define FILE_SYNCHRONIZER_SUPPORTED
01052 #endif
01053 
01054 #if defined(_WIN32) || defined(PLATFORM_DARWIN) || (defined(PLATFORM_LINUX) && !defined(PLATFORM_ANDROID) && !defined(PLATFORM_CHROMEBOOK))
01055 /*
01056  ** the SAVE_VPNCONFIG_TO_FILE_SUPPORTED define is used to track the platforms where the
01057  ** writting of the VPN config to file is supported. This is to avoid repeating the
01058  ** platforms in #ifdef clauses in other files.
01059  */
01060 #define SAVE_VPNCONFIG_TO_FILE_SUPPORTED
01061 #endif
01062 
01063 /*
01064 *  DSCP preservation is not considered for Downloader. Downloader uses socket transport for IPC.
01065 */
01066 #if (defined(PLATFORM_ANDROID) || defined(PLATFORM_DARWIN) || defined(_WIN32)) && !defined(_DOWNLOADER) && !defined(PRODUCT_TYPE_SSA) && !defined(PLATFORM_WIN_APP)
01067 // Used to enable preservation of Differentiated Services field in the IP packet header.
01068 #define DIFFSERV_PRESERVATION_SUPPORTED
01069 #endif
01070 
01071 #if !defined(PRODUCT_TYPE_SSA) && !defined(PLATFORM_WIN_APP)
01072 /*
01073 ** the ROUTE_MANAGER_SUPPORTED define is used to track the platforms
01074 ** where RouteMgr is supported. This is to avoid repeating the
01075 ** platforms in #ifdef clauses in other files.
01076 */
01077 #define ROUTE_MANAGER_SUPPORTED
01078 #endif
01079 
01080 #if !defined(PRODUCT_TYPE_SSA) && !defined(PLATFORM_WIN_APP)
01081 /*
01082 ** the FILTER_MANAGER_SUPPORTED define is used to track the platforms
01083 ** where FilterMgr is supported. This is to avoid repeating the
01084 ** platforms in #ifdef clauses in other files.
01085 */
01086 #define FILTER_MANAGER_SUPPORTED
01087 #endif
01088 
01089 #if defined(PLATFORM_APPLE_SSLVPN)
01090 // Used to enable the file logging for Apple plugins.
01091 //#define FILE_LOGGING_SUPPORTED
01092 #endif
01093 
01094 /*
01095 ** Legacy Single sign on authentication.
01096 ** Explicitly disabled on mobile platforms due to session fixation vulnerability, as described in CSCvg65072
01097 ** To be removed from desktop platforms in some future AnyConnect release (4.7?)
01098 */
01099 #if defined(PLATFORM_DESKTOP)
01100 #define SSO_V1_SUPPORTED
01101 #endif
01102 
01103 /*
01104 ** Single sign on authentication (requires embedded browser).
01105 */
01106 #if !defined(PLATFORM_WIN_APP)
01107 #define SSO_SUPPORTED
01108 #endif
01109 
01110 #if !defined(PLATFORM_WIN_APP)
01111 #define MCA_SUPPORTED
01112 #endif
01113 
01114 #if !defined(PLATFORM_WIN_APP)
01115 #define TIMERS_SUPPORTED
01116 #endif
01117 
01118 #if !defined(PLATFORM_CHROMEBOOK)
01119 #define LOAD_EXTERNAL_MODULES
01120 #endif
01121 
01122 #if defined(PLATFORM_ANDROID)
01123 #define SPLIT_DNS_PROXY_SUPPORTED
01124 #endif
01125 
01126 #if (defined(_WIN32) || defined(PLATFORM_DARWIN)) && defined(PLATFORM_DESKTOP)
01127 /*
01128 ** The MGMT_TUNNEL_SUPPORTED define is used to track the platforms where
01129 ** the management tunnel feature is supported.
01130 */
01131 #define MGMT_TUNNEL_SUPPORTED
01132 #endif
01133 
01134 #if (defined(_WIN32) && defined(PLATFORM_DESKTOP)) || defined(MGMT_TUNNEL_SUPPORTED)
01135 // Machine certificate authentication SSL tunnel connections via agent are supported
01136 // on Windows desktop, and also on all platforms supporting the management tunnel feature.
01137 //
01138 #define SSL_CONNECT_VIA_AGENT_SUPPORTED
01139 #endif
01140 
01141 /*
01142 ** Performance optimization for the tunnel packet processing loop to attempt to process 
01143 ** multiple packets before calling back into select().
01144 */
01145 #if !defined(_WIN32)
01146 #define MULTI_TUN_PACKET_PROCESSING_SUPPORTED
01147 #endif
01148 
01149 #if (defined(_WIN32) && defined(_M_ARM64))
01150 /*
01151 ** Disable Hostscan on Windows native ARM64 builds.
01152 */
01153 #define ANYCONNECT_NO_CSD
01154 #endif
01155 #if defined(_WIN32) && defined(PLATFORM_DESKTOP) && !defined(_M_ARM64) && !defined(X86_FOR_ARM64)
01156 /*
01157 ** Connected Standby is supported in Windows desktop but not UWP and not ARM64 (both native ARM64 and the hybrid _WIN32_FOR_ARM64).
01158 */
01159 #define CONNECTED_STANDBY_SUPPORTED
01160 #endif
01161 
01162 #if defined(_WIN32) && defined(PLATFORM_DESKTOP) || defined(PLATFORM_APPLE_SSLVPN)
01163 /*
01164 ** This define is used to track platforms where multi-line logs are readable, and hence supported.
01165 */
01166 #define MULTI_LINE_LOGS_SUPPORTED
01167 #endif
01168 
01169 #if defined(PLATFORM_ANDROID)
01170 #define PBR_SUPPORTED
01171 #endif
01172 
01173 #if (defined(PBR_SUPPORTED) && defined(PLATFORM_APPLE_SSLVPN) && defined(SUBPLATFORM_IPHONE))
01174 #define USERSPACE_DNS_CACHE_SUPPORTED;
01175 #endif
01176 
01177 #if defined (PLATFORM_ANDROID)
01178 #define PCAP_VA_SUPPORTED
01179 #endif
01180 
01181 /*
01182  * Platforms that support Unix Domain Socket.
01183  */
01184 #if defined(PLATFORM_ANDROID) || defined(PLATFORM_APPLE_SSLVPN)
01185 #define UNIX_DOMAIN_SOCKET_SUPPORTED
01186 #endif
01187 
01188 /* END OF MACRO HELL */
01189 #endif /*__GENDEFS_H*/