|
Mixe for Privacy and Anonymity in the Internet
|
00001 /* 00002 Copyright (c) 2000, The JAP-Team 00003 All rights reserved. 00004 Redistribution and use in source and binary forms, with or without modification, 00005 are permitted provided that the following conditions are met: 00006 00007 - Redistributions of source code must retain the above copyright notice, 00008 this list of conditions and the following disclaimer. 00009 00010 - Redistributions in binary form must reproduce the above copyright notice, 00011 this list of conditions and the following disclaimer in the documentation and/or 00012 other materials provided with the distribution. 00013 00014 - Neither the name of the University of Technology Dresden, Germany nor the names of its contributors 00015 may be used to endorse or promote products derived from this software without specific 00016 prior written permission. 00017 00018 00019 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS 00020 OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 00021 AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS 00022 BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00023 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 00024 OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 00025 IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 00026 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE 00027 */ 00028 00029 // stdafx.h : Include-Datei fuer Standard-System-Include-Dateien, 00030 // oder projektspezifische Include-Dateien, die haeufig benutzt, aber 00031 // in unregelmaessigen Abstaenden geaendert werden. 00032 00033 #if !defined(AFX_STDAFX_H__9A5B051F_FF3A_11D3_9F5E_000001037024__INCLUDED_) 00034 #define AFX_STDAFX_H__9A5B051F_FF3A_11D3_9F5E_000001037024__INCLUDED_ 00035 00036 #define MIX_VERSION "00.11.06" 00037 00038 // set to "true" if this is a testing/development version which is not meant for prodictive use 00039 #define MIX_VERSION_TESTING true 00040 00041 #define MIX_VERSION_TESTING_TEXT "This is a testing/development version. Please do not expect it to work in a productive environment, and don't be surprised if you get unpredictive results or segmentation faults. If you don't like experiments, go and get the stable code.\n" 00042 00043 #include "doxygen.h" 00044 00045 #if defined(DEBUG)|| defined(_DEBUG) 00046 #undef DEBUG 00047 #undef _DEBUG 00048 #define DEBUG 00049 #define _DEBUG 00050 #endif 00051 00052 #ifndef DELAY_USERS 00053 #ifndef PAYMENT 00054 #define DELAY_USERS 00055 #endif 00056 #endif 00057 00058 00059 //#define LOG_TRAFFIC_PER_USER //Log detail for traffic per user 00060 //#define LOG_CHANNEL //Log detail for traffic per channel 00061 //#define LOG_PACKET_TIMES //computes statistics about the processing time each packet needs 00062 //#define LOG_DIALOG 00063 //#define COMPRESSED_LOGS 00064 //#define DO_TRACE 00065 //#define PSEUDO_LOG 00066 //#define DELAY_CHANNELS //to enable max channel bandwidth 00067 //#define DELAY_USERS //to enable max per user bandwidth 00068 //#define DELAY_CHANNELS_LATENCY //to enable min latency per channel 00069 //#define HAVE_EPOLL //define if you have epoll support on your (Linux) system 00070 //#define MXML_DOM //define this if you wnat to use the Mix-XML library (www.minixml.org) instead of the default Xerces-C library 00071 //#define COUNTRY_STATS //collect stats about countries users come from 00072 //#define ONLY_LOCAL_PROXY //define to build only the local proxy (aka JAP) 00073 /* LERNGRUPPE: define this to get dynamic mixes */ 00074 //#define DYNAMIC_MIX 00075 //#define SDTFA // specific logic needed by SDTFA, http://www.sdtfa.com 00076 00077 00078 #define NO_INFOSERVICE_TRHEADS 00079 00080 //#define LASTMIX_CHECK_MEMORY // only for internal debugging purpose 00081 //#define PRINT_THREAD_STACK_TRACE //Usefull for debugging output of stack trace if mix dies... 00082 //#define ENABLE_GPERFTOOLS_CPU_PROFILER //Enables the usage of the Goggle GPerfTools CPU Profiler for profiling the operation of the Mix 00083 //#define ENABLE_GPERFTOOLS_HEAP_CHECKER //Enables the usage of the Goggle GPerfTools heap chekcer for detecting memory leaks 00084 00085 //#define DATA_RETENTION_LOG //define if you need to store logs according to German data retention 00086 //#define INTEL_IPP_CRYPTO //define if you want to use the crypto routines of the Intel Performance Primitives 00087 //#define __UNIT_TEST__ //define if you want to compile the unit tests 00088 //#define EXPORT_ASYM_PRIVATE_KEY //define if you want to be able to export the private key of an assymetric key (only used for debugging purposes..) 00089 00090 00091 #if !defined(PRINT_THREAD_STACK_TRACE) && defined (DEBUG)&& ! defined(ONLY_LOCAL_PROXY) 00092 #define PRINT_THREAD_STACK_TRACE 00093 #endif 00094 00095 #if defined(LOG_DIALOG) 00096 #ifndef LOG_CHANNEL 00097 #define LOG_CHANNEL 00098 #endif 00099 #ifndef COUNTRY_STATS 00100 #define COUNTRY_STATS 00101 #endif 00102 #endif 00103 #if (defined(LOG_CHANNEL)) && !defined(LOG_TRAFFIC_PER_USER) 00104 #define LOG_TRAFFIC_PER_USER 00105 #endif 00106 00107 #ifdef COUNTRY_STATS 00108 #define LOG_COUNTRIES_INTERVALL 6 //how often to log the country stats (multiplied by 10 seconds) 00109 #endif 00110 00111 #ifdef DELAY_CHANNELS 00112 #ifndef DELAY_CHANNEL_TRAFFIC 00113 #define DELAY_CHANNEL_TRAFFIC 10000 //Traffic in bytes after which (download direction) the channel is delayed 00114 #endif 00115 //Delay is at the moment constant and calculate as 00116 // 1000/DELAY_BUCKET_GROW_INTERVALL*DELAY_BUCKET_GROW bytes/s 00117 #ifndef DELAY_CHANNEL_KBYTE_PER_SECOND 00118 #define DELAY_BUCKET_GROW_INTERVALL 100 //Time in ms 00119 #define DELAY_BUCKET_GROW PAYLOAD_SIZE //Grow in bytes 00120 //so we have around 10 KByte/s at the moment 00121 #else 00122 #define DELAY_BUCKET_GROW_INTERVALL (1000/DELAY_CHANNEL_KBYTE_PER_SECOND) //Time in ms 00123 #define DELAY_BUCKET_GROW PAYLOAD_SIZE //Grow in bytes 00124 #endif 00125 #endif 00126 00127 #ifdef DELAY_USERS 00128 #ifndef DELAY_USERS_TRAFFIC 00129 #define DELAY_USERS_TRAFFIC 0 //Traffic in packets after which (download direction) the user is delayed 00130 #endif 00131 //Delay is at the moment constant and calculate as 00132 // 1000/DELAY_BUCKET_GROW_INTERVALL*DELAY_BUCKET_GROW bytes/s 00133 #ifndef DELAY_USERS_PACKETS_PER_SECOND 00134 #define DELAY_USERS_BUCKET_GROW_INTERVALL 100 //Time in ms 00135 #define DELAY_USERS_BUCKET_GROW 10 //Grow in packets 00136 //so we have around 10 KByte/s at the moment 00137 #else 00138 #define DELAY_USERS_BUCKET_GROW_INTERVALL 1000 //Time in ms 00139 #define DELAY_USERS_BUCKET_GROW DELAY_USERS_PACKETS_PER_SECOND //Grow in bytes 00140 #endif 00141 #endif 00142 #ifdef DELAY_CHANNELS_LATENCY 00143 #define DELAY_CHANNEL_LATENCY 0 //min latency defaults to 0 milliseconds 00144 #endif 00145 00146 #if defined LASTMIX_CHECK_MEMORY && ! defined(QUEUE_SIZE_LOG) 00147 #define QUEUE_SIZE_LOG 00148 #endif 00149 //#define LOG_CRIME 00150 //#define PAYMENT //to enable payment support, now use configure --enable-payment.. 00151 //#define NO_LOOPACCEPTUSER //to disable user accept thread for First Mix 00152 00153 //#define USE_POOL 00154 //#define NEW_MIX_TYPE // to enable the new 1:x mix protocol 00155 //#define WITH_CONTROL_CHANNELS_TEST //enable a Test control Channel 00156 //#define NEW_FLOW_CONTROL //enable for the new flow control mechanism --> now enabled by default (i.e. can not be disbaled anymore!) 00157 //#define NEW_CHANNEL_ENCRYPTION //enable the new protcol version which uses RSA-OAEP for key transport and two keys for upstream/downstream channel cryption (--> now enabled by default (i.e. can not be disbaled anymore!) 00158 //#define WITH_INTEGRITY_CHECK //enable AES-GCM encryption for data channels 00159 00160 //#define REPLAY_DETECTION // enable to prevent replay of mix packets 00161 #define REPLAY_TIMESTAMP_PROPAGATION_INTERVALL 1 //How often (in minutes) should the current replay timestamps be propagate 00162 00163 #define KEEP_ALIVE_TRAFFIC_RECV_WAIT_TIME 75000 //How long to wait for a Keep-Alive (or any other packet) 00164 //before we believe that the connection is broken (in ms) 00165 #define KEEP_ALIVE_TRAFFIC_SEND_WAIT_TIME 65000 //How long to wait before we sent a dummy a Keep-Alive-Traffic 00166 00167 //#define ECC 00168 //#define SSL_HACK //??? 00169 00170 #if defined(PAYMENT) && ! defined(SSL_HACK) 00171 #define SSL_HACK 00172 #endif 00173 00174 //#define REPLAY_DATABASE_PERFORMANCE_TEST //to perform a performance test of the replay db 00175 //Some constants 00176 #define MAX_POLLFD 8192 //How many sockets to support at max 00177 00178 #define CLIENTS_PER_IP 10 //how many jap connections per IP are allowed? 00179 #define CHANNELS_PER_CLIENT 50 //how many channels per jap client are allowed? 00180 00181 #define FIRST_MIX_RECEIVE_SYM_KEY_FROM_JAP_TIME_OUT 40000 //Timout in waiting for login information to receive from JAP (10 seconds) 00182 #define LAST_MIX_TO_PROXY_CONNECT_TIMEOUT 2000 //Connection timeout for last mix to proxy connections 2 Seconds... 00183 #define AI_LOGIN_SO_TIMEOUT (UINT32) 10000 //5 Seconds... 00184 #define LAST_MIX_TO_PROXY_SEND_TIMEOUT (UINT32)5000 //5 Seconds... 00185 #define MIX_TO_INFOSERVICE_TIMEOUT 30000 //How long to wait when communicating with the InfoService? (ms) 00186 #define NUM_LOGIN_WORKER_TRHEADS 10//How many working threads for login *do not change this until you really know that you are doing!* ?? 00187 #define MAX_LOGIN_QUEUE 500 //how many waiting entries in the login queue *do not change this until you really know that you are doing!*?? 00188 00189 #if defined(PAYMENT) || defined(MANIOQ) 00190 #define MAX_USER_SEND_QUEUE 100000 //How many bytes could be in each User's send queue, before we suspend the belonging channels 00191 #define MAX_DATA_PER_CHANNEL 100000 00192 #define USER_SEND_BUFFER_RESUME 10000 00193 #else 00194 //EXPERIMENTAL: reduce user-buffers for free mixes by factor 10 00195 #define MAX_USER_SEND_QUEUE 10000 //How many bytes could be in each User's send queue, before we suspend the belonging channels 00196 #define MAX_DATA_PER_CHANNEL 10000 00197 #define USER_SEND_BUFFER_RESUME 1000 00198 #endif 00199 00200 #define PAYMENT_ACCOUNT_CERT_TIMEOUT 180 //Timeout for receiving the Payment certificate in seconds 00201 #define CLEANUP_THREAD_SLEEP_INTERVAL 60 //sleep interval for payment blocked ip list 00202 #define BALANCE_REQUEST_TIMEOUT 60 //Timeout for Balance requests 00203 00204 #define MAX_SIGNATURE_ELEMENTS 10 // maximum of interpreted XML signature elements 00205 00206 #define FLOW_CONTROL_SENDME_HARD_LIMIT 160 //last mix stops sending after this unacked packets 00207 #define FLOW_CONTROL_SENDME_SOFT_LIMIT 80 //last mix expect to get a 'SENDME' after this unacked packets 00208 00209 #if defined(PAYMENT) || defined(MANIOQ) 00210 #define MAX_READ_FROM_PREV_MIX_QUEUE_SIZE 10000000 00211 #define MAX_READ_FROM_NEXT_MIX_QUEUE_SIZE 10000000 //How many bytes could be in the incoming queue ?? 00212 #define MAX_MIXIN_SEND_QUEUE_SIZE 10000000 00213 #define MAX_NEXT_MIX_QUEUE_SIZE 10000000 00214 #else 00215 //EXPERIMENTAL: reduce intermix-buffers for free mixes by factor 10 00216 #define MAX_READ_FROM_PREV_MIX_QUEUE_SIZE 1000000 00217 #define MAX_READ_FROM_NEXT_MIX_QUEUE_SIZE 1000000 //How many bytes could be in the incoming queue ?? 00218 #define MAX_MIXIN_SEND_QUEUE_SIZE 1000000 00219 #define MAX_NEXT_MIX_QUEUE_SIZE 1000000 00220 #endif 00221 //#define FORCED_DELAY 00222 //#define MIN_LATENCY 250 00223 00224 #define DEFAULT_INFOSERVICE "141.76.45.37" 00225 00226 #ifndef MIX_POOL_SIZE 00227 #define MIX_POOL_SIZE 10 //packets in the Mix pool 00228 #endif 00229 #define MIX_POOL_TIMEOUT 200 //home long to wait (in ms) before a dummy is put in the pool 00230 #define DUMMY_CHANNEL 0 00231 00232 #define FM_PACKET_STATS_LOG_INTERVALL 1 //Intervall in Minutes for loggin packet stats for the first Mix 00233 #define LM_PACKET_STATS_LOG_INTERVALL 1 //Intervall in Minutes for loggin packet stats for the last Mix 00234 00235 #define MIX_CASCADE_PROTOCOL_VERSION_0_1_2 12 //with integrity check and new channel encryption 00236 #define MIX_CASCADE_PROTOCOL_VERSION_0_1_1 11 //with integrity check and new channel encryption --> never works correctly 00237 #define MIX_CASCADE_PROTOCOL_VERSION_0_1_0 10 //with new channel encryption 00238 //#define MIX_CASCADE_PROTOCOL_VERSION_0_9 9 //with new payment protocol 00239 #define MIX_CASCADE_PROTOCOL_VERSION_0_8 8 //with replay detection + control channels + first mix symmetric 00240 #define MIX_CASCADE_PROTOCOL_VERSION_0_7 7 //with replay detection + control channels (obsolete) 00241 //#define MIX_CASCADE_PROTOCOL_VERSION_0_6 6 //with new flow control (not used, because flow control is a last Mix only issue) 00242 #define MIX_CASCADE_PROTOCOL_VERSION_0_5 5 //with control channels (obsolte - allway with control channels) 00243 #define MIX_CASCADE_PROTOCOL_VERSION_0_4 4 //symmetric communication to first mix -> new default protocol 00244 #define MIX_CASCADE_PROTOCOL_VERSION_0_3 3 //with reply detection [deprecated - not in use anymore!] 00245 #define MIX_CASCADE_PROTOCOL_VERSION_0_2 2 //old normal protocol [deprecated - not in use anymore!] 00246 00247 #ifdef REPLAY_DETECTION 00248 #define MIX_CASCADE_PROTOCOL_VERSION "0.81" 00249 //#elif defined(PAYMENT) 00250 //#define MIX_CASCADE_PROTOCOL_VERSION "0.9" 00251 #elif defined (WITH_INTEGRITY_CHECK) 00252 #define MIX_CASCADE_PROTOCOL_VERSION "0.12" 00253 #else 00254 #define MIX_CASCADE_PROTOCOL_VERSION "0.10" //"0.10tc" 00255 #endif 00256 00257 00258 #define PAYMENT_VERSION "2.0" 00259 00260 #if defined (_WIN32) &&!defined(__CYGWIN__) 00261 //For Visual C++ #if defined(_MSC_VER) 00262 //For Borland C++ #if defined(__BCPLUSPLUS__) 00263 #define _CRT_SECURE_NO_DEPRECATE 00264 #define _CRT_SECURE_NO_WARNINGS 00265 #define WIN32_LEAN_AND_MEAN 00266 #if _MSC_VER > 1000 00267 #pragma once 00268 #endif // _MSC_VER > 1000 00269 #define _WIN32_WINDOWS 0x0410 00270 #include <winsock2.h> 00271 #if defined(_MSC_VER) &&defined (_DEBUG) 00272 #include <crtdbg.h> 00273 #define HAVE_CRTDBG 00274 #endif 00275 #define socklen_t int 00276 #define MSG_NOSIGNAL 0 00277 #include <io.h> 00278 #include <conio.h> 00279 #include <sys/timeb.h> 00280 #include <process.h> 00281 #ifdef _MSC_VER 00282 #define ftime _ftime 00283 #define timeb _timeb 00284 #endif 00285 #include <malloc.h> 00286 #define SET_NET_ERROR(x) 00287 #define GET_NET_ERROR (WSAGetLastError()) 00288 #define GET_NET_ERROR_STR(x) ("Unknown error") 00289 #define RESETERROR errno=0; 00290 #define GETERROR (errno) 00291 #define ERR_INTERN_TIMEDOUT WSAETIMEDOUT 00292 #define ERR_INTERN_CONNREFUSED WSAECONNREFUSED 00293 #define ERR_INTERN_WOULDBLOCK WSAEWOULDBLOCK 00294 #define ERR_INTERN_SOCKET_CLOSED WSAENOTSOCK 00295 #define MSG_DONTWAIT 0 00296 #define O_NONBLOCK 0 00297 #define O_BLOCK 0 00298 #define SHUT_RDWR SD_BOTH 00299 #define HAVE_VSNPRINTF 00300 #define HAVE_SNPRINTF 00301 #if _MSC_VER <1500 00302 #define vsnprintf _vsnprintf 00303 #endif 00304 #define snprintf _snprintf 00305 #define getpid _getpid 00306 #define strncasecmp _strnicmp 00307 #define HAVE_PTHREAD_MUTEX_INIT 00308 #define HAVE_PTHREAD_COND_INIT 00309 #define HAVE_SEM_INIT 00310 #define BYTE_ORDER_LITTLE_ENDIAN 00311 #else 00312 //__linux is not defined on power pc so we define our own __linux if __linux__ is defined 00313 #if defined(__linux__) && !defined(__linux) 00314 #define __linux 00315 #endif 00316 #if defined(CWDEBUG) 00317 #include <libcw/sysd.h> 00318 #include <libcw/debug.h> 00319 #endif 00320 00321 #ifdef HAVE_CONFIG_H 00322 #include "config.h" 00323 #ifndef HAVE_SOCKLEN_T 00324 typedef int socklen_t; 00325 #endif 00326 #else 00327 #define HAVE_UNIX_DOMAIN_PROTOCOL 00328 #define HAVE_VSNPRINTF 00329 #define HAVE_SNPRINTF 00330 #define HAVE_POLL 00331 #define HAVE_O_SYNC 00332 #define HAVE_PTHREAD_MUTEX_INIT 00333 #define HAVE_PTHREAD_COND_INIT 00334 #define HAVE_SEM_INIT 00335 #ifndef __linux 00336 #define HAVE_TCP_KEEPALIVE 00337 #endif 00338 #ifdef __sgi 00339 #undef HAVE_TCP_KEEPALIVE 00340 #endif 00341 #ifdef __FreeBSD__ 00342 #undef HAVE_TCP_KEEPALIVE 00343 #undef HAVE_O_SYNC 00344 #define HAVE_O_FSYNC 00345 #endif 00346 #ifdef __CYGWIN__ 00347 #undef HAVE_TCP_KEEPALIVE 00348 #define MSG_DONTWAIT 0 00349 #endif 00350 #if !defined(__FreeBSD__)&&!defined(__linux) 00351 typedef int socklen_t; 00352 #endif 00353 #ifndef O_BINARY 00354 #define O_BINARY 0 00355 #endif 00356 #ifndef MAX_PATH 00357 #define MAX_PATH 4096 00358 #endif 00359 #ifdef __sgi 00360 #undef HAVE_VSNPRINTF 00361 #undef HAVE_SNPRINTF 00362 #include <alloca.h> 00363 #endif 00364 #if !defined( __linux) &&!defined(__CYGWIN__) 00365 #include <sys/filio.h> 00366 #define MSG_NOSIGNAL 0 00367 #endif 00368 #endif //Have config.h 00369 00370 //Byte order defines 00371 #if !defined(BYTE_ORDER_LITTLE_ENDIAN) && ! defined(BYTE_ORDER_BIG_ENDIAN) 00372 #ifndef BYTE_ORDER 00373 #error "You MUST define either BYTE_ORDER_BIG_ENDIAN or BYTE_ORDER_LITTLE_ENDIAN" 00374 #else 00375 #if BYTE_ORDER == BIG_ENDIAN 00376 #define BYTE_ORDER_BIG_ENDIAN 00377 #else 00378 #define BYTE_ORDER_LITTLE_ENDIAN 00379 #endif 00380 #endif // BYTE_ORDER 00381 #endif //not byte order given 00382 00383 #ifdef HAVE_FILIO 00384 #include <sys/filio.h> 00385 #endif 00386 #ifdef HAVE_POLL 00387 #include <poll.h> 00388 #endif 00389 #ifdef HAVE_EPOLL 00390 #include <sys/epoll.h> 00391 #endif 00392 #ifdef HAVE_MALLOC_H 00393 #include <malloc.h> 00394 #endif 00395 #include <sys/ioctl.h> 00396 #include <sys/types.h> 00397 #include <sys/socket.h> 00398 #include <pwd.h> 00399 #include <sys/un.h> 00400 #include <sys/time.h> 00401 #include <netinet/in.h> 00402 #include <arpa/inet.h> 00403 #include <netdb.h> 00404 #include <unistd.h> 00405 #include <stdlib.h> 00406 #include <strings.h> 00407 #include <syslog.h> 00408 #include <stdarg.h> 00409 #include <memory.h> 00410 #include <sys/resource.h> 00411 #include <sys/wait.h> 00412 #include <termios.h> 00413 00414 #include <ctype.h> 00415 typedef struct sockaddr SOCKADDR; 00416 typedef SOCKADDR* LPSOCKADDR; 00417 #define SOCKET int 00418 typedef struct hostent HOSTENT; 00419 #define ioctlsocket(a,b,c) ioctl(a,b,c) 00420 #define closesocket(s) close(s) 00421 #define SOCKET_ERROR -1 00422 #define INVALID_SOCKET -1 00423 #define SD_RECEIVE 0 00424 #define SD_SEND 1 00425 #define SD_BOTH 2 00426 #define GET_NET_ERROR (errno) 00427 #define SET_NET_ERROR(x) (errno = x) 00428 #define GET_NET_ERROR_STR(x) (errno == E_TIMEDOUT ? "Connection timed out." : (errno == E_SOCKETCLOSED ? "Socket is closed." : strerror(x))) 00429 #define RESETERROR errno=0; 00430 #define GETERROR (errno) 00431 #define ERR_INTERN_TIMEDOUT ETIMEDOUT 00432 #define ERR_INTERN_CONNREFUSED ECONNREFUSED 00433 #define ERR_INTERN_WOULDBLOCK EAGAIN 00434 #define ERR_INTERN_SOCKET_CLOSED EBADF 00435 #ifndef INADDR_NONE 00436 #define INADDR_NONE -1 00437 #endif 00438 #ifndef AF_LOCAL 00439 #define AF_LOCAL AF_UNIX 00440 #endif 00441 #if !defined(HAVE_MSG_DONTWAIT)&&!defined(MSG_DONTWAIT) 00442 #define MSG_DONTWAIT 0 00443 #endif 00444 #endif //WIn32 ? 00445 00446 #include "basetypedefs.h" 00447 00448 #include <assert.h> 00449 00450 #include <pthread.h> 00451 //the following definition are just for threading support beside pthread 00452 #undef USE_SEMAPHORE //normally we do not need semaphores 00453 #ifdef HAVE_PTHREAD_COND_INIT 00454 #define HAVE_PTHREAD_CV //normally we use the pthread conditional variables 00455 #endif 00456 #ifdef HAVE_PTHREAD_MUTEX_INIT 00457 #define HAVE_PTHREAD_MUTEXES //normally we use the pthread mutexs 00458 #endif 00459 00460 #if !defined(HAVE_PTHREAD_CV) || !defined (HAVE_PTHREAD_MUTEXES) //if we do not have pthread mutexes or cvs we emulate them with semphores 00461 #define USE_SEMAPHORE 00462 #endif 00463 00464 #ifdef HAVE_SEM_INIT 00465 #define HAVE_PTHREAD_SEMAPHORE //normally we use pthread semaphores 00466 #endif 00467 00468 #ifdef USE_SEMAPHORE 00469 #ifdef HAVE_PTHREAD_SEMAPHORE 00470 #include <semaphore.h> 00471 #endif 00472 #endif 00473 00474 #ifdef OS_TUDOS 00475 #define Assert 00476 #define THREAD_RETURN void 00477 #define THREAD_RETURN_ERROR return 00478 #define THREAD_RETURN_SUCCESS return 00479 #include <l4/thread/thread.h> 00480 #include <l4/util/macros.h> 00481 #include <l4/env/errno.h> 00482 #undef Assert 00483 #undef ASSERT 00484 #else 00485 #define THREAD_RETURN void* 00486 #define THREAD_RETURN_ERROR return(NULL) 00487 #define THREAD_RETURN_SUCCESS return (NULL) 00488 #endif 00489 00490 #ifndef DEBUG 00491 #define ASSERT(cond,msg) 00492 #else 00493 #define ASSERT(cond,msg) {if(!(cond)){CAMsg::printMsg(LOG_DEBUG,"ASSERT: %s (File: %s, Line: %u)\n",msg,__FILE__,__LINE__);}} 00494 #endif 00495 00496 00497 #include <stdio.h> 00498 #include <time.h> 00499 #include <sys/types.h> 00500 #include <fcntl.h> 00501 #include <limits.h> 00502 #include <sys/stat.h> 00503 #include <signal.h> 00504 #include <errno.h> 00505 #include "trio/trio.hpp" 00506 #include "trio/triostr.hpp" 00507 #include "popt/system.h" 00508 #include "popt/popt.h" 00509 #include <openssl/rsa.h> 00510 #include <openssl/aes.h> 00511 #include <openssl/rand.h> 00512 #include <openssl/evp.h> 00513 #ifndef ONLY_LOCAL_PROXY 00514 #include <openssl/asn1.h> 00515 #include <openssl/pkcs12.h> 00516 #include <openssl/x509v3.h> 00517 #include <openssl/ssl.h> 00518 #include <openssl/dsa.h> 00519 #include <openssl/sha.h> 00520 #include <openssl/md5.h> 00521 #endif 00522 00523 //For DOM 00524 #ifdef MXML_DOM 00525 #include <mxml.h> 00526 #include "xml/dom/mxml/mxmlDOM.hpp" 00527 #else 00528 #include <util/XercesDefs.hpp> 00529 #include <util/PlatformUtils.hpp> 00530 #include <util/XMLString.hpp> 00531 #include <util/XMLUniDefs.hpp> 00532 #include <framework/XMLFormatter.hpp> 00533 #include <util/TranscodingException.hpp> 00534 #include <framework/MemBufInputSource.hpp> 00535 00536 /*#if (XERCES_VERSION_MAJOR >1) 00537 #include <dom/deprecated/DOM.hpp> 00538 #include <dom/deprecated/DOMParser.hpp> 00539 #else 00540 #include <dom/DOM.hpp> 00541 #include <parsers/DOMParser.hpp> 00542 #endif 00543 */ 00544 #include <dom/DOM.hpp> 00545 #include <parsers/XercesDOMParser.hpp> 00546 00547 #if (_XERCES_VERSION >= 20200) 00548 XERCES_CPP_NAMESPACE_USE 00549 #endif 00550 00551 #endif //wich DOM-Implementation to use? 00552 00553 //For large file support 00554 #ifndef O_LARGEFILE 00555 #define O_LARGEFILE 0 00556 #endif 00557 00558 //O_SYNC defined ??? 00559 #ifndef HAVE_O_SYNC 00560 #ifdef HAVE_O_FSYNC 00561 #define O_SYNC O_FSYNC 00562 #else 00563 #define O_SYNC 0 00564 #endif 00565 #endif 00566 00567 //The min() macro 00568 #ifndef min 00569 #define min(a,b) (( (a) < (b) ) ? (a):(b) ) 00570 #endif 00571 00572 //The max() macro 00573 #ifndef max 00574 #define max(a,b) (((a) > (b) ) ? (a):(b)) 00575 #endif 00576 00577 //For MySQL 00578 #if defined(COUNTRY_STATS) 00579 #ifdef HAVE_CONFIG_H 00580 #ifdef HAVE_MYSQL_MYSQL_H 00581 #include <mysql/mysql.h> 00582 #else 00583 #include <mysql.h> 00584 #endif 00585 #else //HAVE_CONFIG_H 00586 #include <mysql/mysql.h> 00587 #endif 00588 #endif 00589 00590 //For Payment 00591 #ifdef PAYMENT 00592 #ifdef HAVE_CONFIG_H 00593 #ifdef HAVE_POSTGRESQL_LIBPQ_FE_H 00594 #include <postgresql/libpq-fe.h> 00595 #elif defined(HAVE_PGSQL_LIBPQ_FE_H) 00596 #include <pgsql/libpq-fe.h> 00597 #else 00598 #include <libpq-fe.h> 00599 #endif 00600 #elif defined(__FreeBSD__) ||defined (_WIN32) 00601 #include <libpq-fe.h> 00602 #else 00603 #include <postgresql/libpq-fe.h> 00604 #endif 00605 #endif 00606 //Compressed Logs 00607 #ifdef COMPRESSED_LOGS 00608 #include <zlib.h> 00609 #endif 00610 00611 //For CPPUnit Test 00612 #ifdef __UNIT_TEST__ 00613 #include <cppunit/ui/text/TestRunner.h> 00614 #include <cppunit/extensions/HelperMacros.h> 00615 #include <cppunit/TestFixture.h> 00616 #include <cppunit/TestResult.h> 00617 #include <cppunit/TestResultCollector.h> 00618 #include <cppunit/BriefTestProgressListener.h> 00619 #include <cppunit/CompilerOutputter.h> 00620 #endif 00621 00622 //Mix Version Info as multiline String 00623 #ifdef XERCES_FULLVERSIONDOT 00624 #define MY_XERCES_VERSION XERCES_FULLVERSIONDOT 00625 #elif defined(Xerces_DLLVersionStr) 00626 #define MY_XERCES_VERSION Xerces_DLLVersionStr 00627 #else 00628 #define MY_XERCES_VERSION "unknown" 00629 #endif 00630 00631 #ifdef ENABLE_GPERFTOOLS_CPU_PROFILER 00632 #include <google/profiler.h> 00633 #endif 00634 00635 #ifdef INTEL_IPP_CRYPTO 00636 #include <ippcp.h> 00637 #endif 00638 00639 #ifdef PAYMENT 00640 #define PAYMENT_VERSION_INFO " (payment)" 00641 #define PAYMENT_COMPATIBILITY "Payment" 00642 #else 00643 #define PAYMENT_VERSION_INFO 00644 #define PAYMENT_COMPATIBILITY 00645 #endif 00646 00647 #ifdef DATA_RETENTION_LOG 00648 #define DATA_RETENTION_LOG_INFO " (with data retention log)" 00649 #else 00650 #define DATA_RETENTION_LOG_INFO 00651 #endif 00652 00653 #define NEW_FLOW_CONTROL_INFO " (with new flow control)" 00654 #define NEW_FLOW_CONTROL_COMPATIBILITY "NewFlowControl" 00655 00656 #define NEW_CHANNEL_ENCRYPTION_INFO " (with enhanced channel encryption)" 00657 #define NEW_CHANNEL_ENCRYPTION_COMPATIBILITY "NewChannelEncryption" 00658 00659 #ifdef WITH_INTEGRITY_CHECK 00660 #define WITH_INTEGRITY_CHECK_INFO " (with integrity check for data channels)" 00661 #define WITH_INTEGRITY_CHECK_COMPATIBILITY "WithIntegrityCheck" 00662 #else 00663 #define WITH_INTEGRITY_CHECK_INFO 00664 #define WITH_INTEGRITY_CHECK_COMPATIBILITY 00665 #endif 00666 00667 #define MIX_VERSION_INFO "Mix-Version: " MIX_VERSION PAYMENT_VERSION_INFO DATA_RETENTION_LOG_INFO NEW_FLOW_CONTROL_INFO NEW_CHANNEL_ENCRYPTION_INFO WITH_INTEGRITY_CHECK_INFO "\nUsing: " OPENSSL_VERSION_TEXT "\nUsing Xerces-C: " MY_XERCES_VERSION "\n" 00668 #define MIX_VERSION_COMPATIBILITY PAYMENT_COMPATIBILITY " " NEW_FLOW_CONTROL_COMPATIBILITY " " NEW_CHANNEL_ENCRYPTION_COMPATIBILITY " " WITH_INTEGRITY_CHECK_COMPATIBILITY 00669 00670 #include "errorcodes.hpp" 00671 #include "typedefs.hpp" 00672 #include "controlchannelids.h" 00673 #include "gcm/gcm.h" 00674 #ifdef PAYMENT 00675 #define MAX_ACCOUNTNUMBER 999999999999ULL 00676 #define MIN_ACCOUNTNUMBER 100000000000ULL 00677 #define ACCOUNT_NUMBER_SIZE 12 00678 #endif 00679 00680 #endif // !defined(AFX_STDAFX_H__9A5B051F_FF3A_11D3_9F5E_000001037024__INCLUDED_)
1.7.6.1