|
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 #ifndef __CACMDLNOPTIONS__ 00030 #define __CACMDLNOPTIONS__ 00031 #include "CASocketAddrINet.hpp" 00032 #ifdef HAVE_UNIX_DOMAIN_PROTOCOL 00033 #include "CASocketAddrUnix.hpp" 00034 #endif 00035 #include "CASignature.hpp" 00036 #include "CASocket.hpp" 00037 #include "CAMultiSignature.hpp" 00038 #include "CACertificate.hpp" 00039 #include "CAThread.hpp" 00040 #include "CAMix.hpp" 00041 #include "CAListenerInterface.hpp" 00042 #include "CATargetInterface.hpp" 00043 #include "CAXMLBI.hpp" 00044 #include "CAXMLPriceCert.hpp" 00045 //#ifdef LOG_CRIME 00046 #include "tre/regex.h" 00047 //#endif 00048 00049 #define REGEXP_BUFF_SIZE 4096 00050 00051 00052 // LERNGRUPPE moved this define from CACmdLnOptions.cpp 00053 #define DEFAULT_TARGET_PORT 6544 00054 #define DEFAULT_CONFIG_FILE "default.xml" 00055 #define MIN_INFOSERVICES 1 00056 // END LERNGRUPPE 00057 00058 #define WITH_SUBTREE true 00059 #define WITHOUT_SUBTREE (!(WITHSUBTREE)) 00060 00061 00062 /* General Option definitions */ 00063 #define OPTIONS_NODE_GENERAL "General" 00064 00065 #define OPTIONS_NODE_MIX_TYPE "MixType" 00066 #define OPTIONS_NODE_MIX_NAME "MixName" 00067 #define OPTIONS_NODE_MIX_ID "MixID" 00068 #define OPTIONS_NODE_DYNAMIC_MIX "Dynamic" 00069 #define OPTIONS_NODE_MIN_CASCADE_LENGTH "MinCascadeLength" 00070 #define OPTIONS_NODE_CASCADE_NAME "CascadeName" 00071 #define OPTIONS_NODE_USER_ID "UserID" 00072 #define OPTIONS_NODE_FD_NR "NrOfFileDescriptors" 00073 #define OPTIONS_NODE_DAEMON "Daemon" 00074 #define OPTIONS_NODE_MAX_USERS "MaxUsers" 00075 #define OPTIONS_NODE_PAYMENT_REMINDER "PaymentReminderProbability" 00076 #define OPTIONS_NODE_LOGGING "Logging" 00077 #define OPTIONS_NODE_LOGGING_CONSOLE "Console" 00078 #define OPTIONS_NODE_LOGGING_FILE "File" 00079 #define OPTIONS_ATTRIBUTE_LOGGING_MAXFILESIZE "MaxFileSize" 00080 #define OPTIONS_ATTRIBUTE_LOGGING_MAXFILES "MaxFiles" 00081 #define LOGGING_MAXFILES_DEFAULT 10 00082 #define OPTIONS_NODE_SYSLOG "Syslog" 00083 #define OPTIONS_NODE_ENCRYPTED_LOG "EncryptedLog" 00084 #define OPTIONS_NODE_LOGGING_KEYINFO "KeyInfo" 00085 #define OPTIONS_NODE_DESCRIPTION "Description" 00086 #define OPTIONS_ATTRIBUTE_NAME_FOR_CASCADE "forCascade" 00087 00088 /* values for the operator OPTIONS_NODE_MIX_NAME */ 00089 #define OPTIONS_VALUE_OPERATOR_NAME "Operator" 00090 #define OPTIONS_VALUE_MIX_NAME "Mix" 00091 #define OPTIONS_VALUE_NAMETYPE_DEFAULT OPTIONS_VALUE_MIX_NAME 00092 00093 /* Certificate Option definitions */ 00094 #define OPTIONS_NODE_CERTIFICATE_LIST "Certificates" 00095 00096 #define OPTIONS_NODE_OWN_CERTIFICATE "OwnCertificate" 00097 #define OPTIONS_NODE_OWN_OPERATOR_CERTIFICATE "OperatorOwnCertificate" 00098 #define OPTIONS_NODE_NEXT_MIX_CERTIFICATE "NextMixCertificate" 00099 #define OPTIONS_NODE_NEXT_OPERATOR_CERTIFICATE "NextOperatorCertificate" 00100 #define OPTIONS_NODE_PREV_MIX_CERTIFICATE "PrevMixCertificate" 00101 #define OPTIONS_NODE_PREV_OPERATOR_CERTIFICATE "PrevOperatorCertificate" 00102 #define OPTIONS_NODE_TRUSTED_ROOT_CERTIFICATES "TrustedRootCertificates" 00103 #define OPTIONS_NODE_MIX_CERTIFICATE_VERIFICATION "MixCertificateVerification" 00104 #define OPTIONS_NODE_X509DATA "X509Data" 00105 #define OPTIONS_NODE_X509_CERTIFICATE "X509Certificate" 00106 #define OPTIONS_NODE_X509_PKCS12 "X509PKCS12" 00107 #define OPTIONS_NODE_SIGNATURE "Signature" 00108 00109 00110 /* Accounting Option definitions */ 00111 #define OPTIONS_NODE_ACCOUNTING "Accounting" 00112 00113 #define OPTIONS_NODE_PRICE_CERTIFICATE "PriceCertificate" 00114 #define OPTIONS_NODE_PAYMENT_INSTANCE CAXMLBI::getXMLElementName() 00115 #define OPTIONS_NODE_AI_SOFT_LIMIT "SoftLimit" 00116 #define OPTIONS_NODE_AI_HARD_LIMIT "HardLimit" 00117 #define OPTIONS_NODE_SETTLE_IVAL "SettleInterval" 00118 #define OPTIONS_NODE_PREPAID_IVAL "PrepaidInterval" 00119 #define OPTIONS_NODE_PREPAID_IVAL_KB "PrepaidIntervalKbytes" 00120 #define OPTIONS_NODE_AI_DB "Database" 00121 #define OPTIONS_NODE_AI_DB_HOST "Host" 00122 #define OPTIONS_NODE_AI_DB_PORT "Port" 00123 #define OPTIONS_NODE_AI_DB_NAME "DBName" 00124 #define OPTIONS_NODE_AI_DB_USER "Username" 00125 #define OPTIONS_NODE_AI_DB_PASSW "Password" 00126 00127 #define OPTIONS_DEFAULT_PREPAID_IVAL 3000000 //3 MB as safe default if not explicitly set in config file 00128 00129 #define OPTIONS_NODE_NETWORK "Network" 00130 00131 #define OPTIONS_NODE_INFOSERVICE_LIST "InfoServices" 00132 #define OPTIONS_NODE_INFOSERVICE "InfoService" 00133 #define OPTIONS_NODE_ALLOW_AUTO_CONF "AllowAutoConfiguration" 00134 #define OPTIONS_NODE_LISTENER_INTERFACES CAListenerInterface::XML_ELEMENT_CONTAINER_NAME 00135 #define OPTIONS_NODE_NEXT_MIX "NextMix" 00136 #define OPTIONS_NODE_NETWORK_PROTOCOL "NetworkProtocol" 00137 #define OPTIONS_NODE_IP "IP" 00138 #define OPTIONS_NODE_PROXY_LIST "Proxies" 00139 #define OPTIONS_NODE_PROXY "Proxy" 00140 #define OPTIONS_NODE_PROXY_TYPE "ProxyType" 00141 #define OPTIONS_NODE_SERVER_MONITORING "ServerMonitoring" 00142 #define OPTIONS_NODE_VISIBLE_ADDRESS_LIST "VisibleAddresses" 00143 #define OPTIONS_NODE_VISIBLE_ADDRESS "VisibleAddress" 00144 #define OPTIONS_NODE_LISTENER_INTERFACE_LIST CAListenerInterface::XML_ELEMENT_CONTAINER_NAME 00145 #define OPTIONS_NODE_LISTENER_INTERFACE CAListenerInterface::XML_ELEMENT_NAME 00146 #define OPTIONS_NODE_KEEP_ALIVE "KeepAlive" 00147 #define OPTIONS_NODE_KEEP_ALIVE_SEND_IVAL "SendInterval" 00148 #define OPTIONS_NODE_KEEP_ALIVE_RECV_IVAL "ReceiveInterval" 00149 #define OPTIONS_NODE_IP "IP" 00150 #define OPTIONS_NODE_HOST "Host" 00151 #define OPTIONS_NODE_PORT "Port" 00152 #define OPTIONS_NODE_FILE "File" 00153 00154 #define OPTIONS_NODE_RESSOURCES "Ressources" 00155 00156 #define OPTIONS_NODE_UNLIMIT_TRAFFIC "UnlimitTraffic" 00157 #define OPTIONS_NODE_BYTES_PER_IVAL "BytesPerIntervall" 00158 #define OPTIONS_NODE_DELAY_IVAL "Intervall" 00159 #define OPTIONS_NODE_LATENCY "Latency" 00160 00161 #define OPTIONS_NODE_TNCS_OPTS "TermsAndConditionsOptions" 00162 #define OPTIONS_NODE_TNCS_TEMPLATES "Templates" 00163 #define OPTIONS_NODE_TNCS_TEMPLATE "Template" 00164 #define OPTIONS_NODE_TNCS "TermsAndConditions" 00165 #define OPTIONS_NODE_TNCS_TRANSLATION "TCTranslation" 00166 #define OPTIONS_NODE_TNCS_TRANSLATION_IMPORTS "TCTranslationImports" 00167 #define OPTIONS_NODE_TNCS_OPERATOR "Operator" 00168 #define OPTIONS_ATTRIBUTE_TNC_DATE "date" 00169 #define OPTIONS_ATTRIBUTE_TNC_SERIAL "serial" 00170 #define OPTIONS_ATTRIBUTE_TNC_VERSION "version" 00171 #define OPTIONS_ATTRIBUTE_TNC_LOCALE "locale" 00172 #define OPTIONS_ATTRIBUTE_TNC_TEMPLATE_TYPE "type" 00173 #define OPTIONS_ATTRIBUTE_TNC_ID "id" 00174 #define OPTIONS_ATTRIBUTE_TNC_TEMPLATE_REFID "referenceId" 00175 #define OPTIONS_ATTRIBUTE_TNC_DEFAULT_LANG_DEFINED "default" 00176 #define OPTIONS_ATTRIBUTE_TNC_DEFAULT_LANG "defaultLang" 00177 00178 #define OPTIONS_NODE_CRIME_DETECTION "CrimeDetection" 00179 00180 #define OPTIONS_NODE_CRIME_REGEXP_URL "RegExpURL" 00181 #define OPTIONS_NODE_CRIME_REGEXP_PAYLOAD "RegExpPayload" 00182 #define OPTIONS_NODE_CRIME_SURVEILLANCE_IP "SurveillanceIP" 00183 #define OPTIONS_NODE_CRIME_SURVEILLANCE_ACCOUNT "PayAccountNumber" 00184 #define OPTIONS_ATTRIBUTE_LOG_PAYLOAD "logPayload" 00185 00186 #define MIXINFO_NODE_PARENT "Mix" 00187 #define MIXINFO_NODE_MIX_NAME "Name" 00188 #define MIXINFO_NODE_SOFTWARE "Software" 00189 #define MIXINFO_NODE_VERSION "Version" 00190 00191 #define MIXINFO_NODE_PAYMENTREMINDER "PaymentReminderProbability" 00192 00193 #define MIXINFO_ATTRIBUTE_MIX_ID "id" 00194 00195 #define LOG_NODE_NOT_FOUND(Nodename) \ 00196 CAMsg::printMsg(LOG_CRIT,"No \"%s\" node found in configuration file!\n", (Nodename)) 00197 00198 #define LOG_NODE_EMPTY_OR_INVALID(Nodename) \ 00199 CAMsg::printMsg(LOG_CRIT,"Node \"%s\" is empty or has invalid content!\n", (Nodename)) 00200 00201 #define LOG_NODE_WRONG_PARENT(Parentname, Childname) \ 00202 CAMsg::printMsg(LOG_CRIT,"\"%s\" is the wrong parent for Node \"%s\"\n", (Parentname), (Childname)) 00203 00204 00205 #define ASSERT_PARENT_NODE_NAME(Parentname, NameToMatch, Childname) \ 00206 if(!equals((Parentname), (NameToMatch) )) \ 00207 { \ 00208 char *parentName = XMLString::transcode(Parentname); \ 00209 LOG_NODE_WRONG_PARENT(parentName, Childname); \ 00210 XMLString::release(&parentName); \ 00211 return E_UNKNOWN; \ 00212 } 00213 00214 #define ASSERT_GENERAL_OPTIONS_PARENT(Parentname, Childname) \ 00215 ASSERT_PARENT_NODE_NAME(Parentname, OPTIONS_NODE_GENERAL, Childname) 00216 00217 #define ASSERT_CERTIFICATES_OPTIONS_PARENT(Parentname, Childname) \ 00218 ASSERT_PARENT_NODE_NAME(Parentname, OPTIONS_NODE_CERTIFICATE_LIST, Childname) 00219 00220 #define ASSERT_ACCOUNTING_OPTIONS_PARENT(Parentname, Childname) \ 00221 ASSERT_PARENT_NODE_NAME(Parentname, OPTIONS_NODE_ACCOUNTING, Childname) 00222 00223 #define ASSERT_NETWORK_OPTIONS_PARENT(Parentname, Childname) \ 00224 ASSERT_PARENT_NODE_NAME(Parentname, OPTIONS_NODE_NETWORK, Childname) 00225 00226 #define ASSERT_CRIME_DETECTION_OPTIONS_PARENT(Parentname, Childname) \ 00227 ASSERT_PARENT_NODE_NAME(Parentname, OPTIONS_NODE_CRIME_DETECTION, Childname) 00228 00229 THREAD_RETURN threadReConfigure(void *param); 00230 00231 class CACmdLnOptions; 00232 typedef SINT32 (CACmdLnOptions::*optionSetter_pt)(DOMElement *); 00233 00234 class CACmdLnOptions 00235 { 00236 public: 00237 CACmdLnOptions(); 00238 ~CACmdLnOptions(); 00239 SINT32 cleanup(); 00240 void clean(); 00241 SINT32 parse(int argc,const char** arg); 00242 SINT32 initLogging(); 00243 bool getDaemon(); 00244 //bool getProxySupport(); 00245 00246 SINT32 getMixId(UINT8* id,UINT32 len); 00247 00248 00249 // UINT16 getServerPort(); 00250 /*For IP (Host) AND Unix Domain Sockets*/ 00251 // SINT32 getServerHost(UINT8* path,UINT32 len); 00252 00253 // SINT32 getServerRTTPort(); 00254 UINT16 getSOCKSServerPort(); 00255 00256 00257 SINT32 createSockets(bool a_bPrintMessages, CASocket** a_sockets, UINT32 a_socketsLen); 00258 UINT32 getListenerInterfaceCount(){return m_cnListenerInterfaces;} 00259 CAListenerInterface* getListenerInterface(UINT32 nr) 00260 { 00261 if(nr>0&&nr<=m_cnListenerInterfaces&&m_arListenerInterfaces[nr-1]!=NULL) 00262 return new CAListenerInterface(*m_arListenerInterfaces[nr-1]); 00263 return NULL; 00264 }; 00265 00266 //this is only for the local proxy 00267 UINT16 getMixPort(); 00268 SINT32 getMixHost(UINT8* host,UINT32 len); 00269 00270 //if we have more than one Target (currently only Caches are possible...) 00271 UINT32 getTargetInterfaceCount(){return m_cnTargets;} 00272 00285 SINT32 getTargetInterface(CATargetInterface& oTargetInterface, UINT32 nr) 00286 { 00287 if(nr>0&&nr<=m_cnTargets) 00288 { 00289 return m_arTargetInterfaces[nr-1].cloneInto(oTargetInterface); 00290 } 00291 else 00292 return E_UNKNOWN; 00293 }; 00294 00295 #ifndef ONLY_LOCAL_PROXY 00296 //for last Mixes: number of outside visible addresses 00297 UINT32 getVisibleAddressesCount(){return m_cnVisibleAddresses;} 00298 00307 SINT32 getVisibleAddress(UINT8* strAddressBuff, UINT32 len,UINT32 nr); 00308 00309 UINT16 getSOCKSPort(); 00310 SINT32 getSOCKSHost(UINT8* host,UINT32 len); 00311 CAListenerInterface** getInfoServices(UINT32& r_size); 00312 #endif //ONLY_LOCAL_PROXY 00313 00314 SINT32 getMaxOpenFiles() 00315 { 00316 return m_nrOfOpenFiles; 00317 } 00318 00319 00320 #ifndef ONLY_LOCAL_PROXY 00321 //TODO maybe clone MultiSignature object! 00322 CAMultiSignature* getMultiSigner(){ return m_pMultiSignature; } 00323 /*CASignature* getSignKey() 00324 { 00325 if(m_pSignKey!=NULL) 00326 return m_pSignKey->clone(); 00327 return NULL; 00328 }*/ 00332 /*CACertificate* getOwnCertificate() const 00333 { 00334 if(m_pOwnCertificate!=NULL) 00335 { 00336 return m_pOwnCertificate->clone(); 00337 } 00338 return NULL; 00339 }*/ 00343 /*CACertificate* getOpCertificate() const 00344 { 00345 if( m_OpCert != NULL ) 00346 { 00347 return m_OpCert->clone(); 00348 } 00349 return NULL; 00350 }*/ 00351 SINT32 getOperatorSubjectKeyIdentifier(UINT8 *buffer, UINT32 *length); 00352 #ifdef PAYMENT 00353 CAXMLPriceCert* getPriceCertificate() const 00354 { 00355 if(m_pPriceCertificate != NULL) 00356 { 00357 return m_pPriceCertificate; 00358 } 00359 return NULL; 00360 } 00361 #endif 00362 00363 #ifdef COUNTRY_STATS 00364 SINT32 getCountryStatsDBConnectionLoginData(char** db_host,char**db_user,char**db_passwd); 00365 #endif 00366 bool hasPrevMixTestCertificate() 00367 { 00368 return m_pPrevMixCertificate!=NULL; 00369 } 00370 00371 CACertificate* getPrevMixTestCertificate() 00372 { 00373 if(m_pPrevMixCertificate!=NULL) 00374 return m_pPrevMixCertificate->clone(); 00375 return NULL; 00376 } 00377 00378 SINT32 setPrevMixTestCertificate(CACertificate* cert) 00379 { 00380 if(cert != NULL) 00381 { 00382 m_pPrevMixCertificate = cert->clone(); 00383 return E_SUCCESS; 00384 } 00385 return E_UNKNOWN; 00386 } 00387 00388 bool hasNextMixTestCertificate() 00389 { 00390 return m_pNextMixCertificate!=NULL; 00391 } 00392 00393 CACertificate* getNextMixTestCertificate() 00394 { 00395 if(m_pNextMixCertificate!=NULL) 00396 return m_pNextMixCertificate->clone(); 00397 return NULL; 00398 } 00399 00400 SINT32 setNextMixTestCertificate(CACertificate* cert) 00401 { 00402 if(cert != NULL) 00403 { 00404 m_pNextMixCertificate = cert->clone(); 00405 return E_SUCCESS; 00406 } 00407 return E_UNKNOWN; 00408 } 00409 CACertStore* getTrustedCertificateStore() 00410 { 00411 return m_pTrustedRootCertificates; 00412 } 00413 00415 bool isEncryptedLogEnabled() 00416 { 00417 return m_bIsEncryptedLogEnabled; 00418 } 00419 bool isSyslogEnabled() 00420 { 00421 return m_bSyslog; 00422 } 00423 00425 SINT32 enableEncryptedLog(bool b) 00426 { 00427 m_bIsEncryptedLogEnabled=b; 00428 return E_SUCCESS; 00429 } 00430 00432 CACertificate* getLogEncryptionKey() 00433 { 00434 if(m_pLogEncryptionCertificate!=NULL) 00435 return m_pLogEncryptionCertificate->clone(); 00436 return NULL; 00437 } 00438 00439 DOMElement* getCascadeXML() 00440 { 00441 return m_pCascadeXML; 00442 } 00443 00444 SINT32 getCascadeName(UINT8* name,UINT32 len) const; 00445 00446 // added by ronin <ronin2@web.de> 00447 SINT32 setCascadeName(const UINT8* name) 00448 { 00449 delete[] m_strCascadeName; 00450 m_strCascadeName = new UINT8[strlen((const char*)name)+1]; 00451 strcpy((char*)m_strCascadeName,(const char*)name); 00452 return E_SUCCESS; 00453 } 00454 00455 SINT32 reread(CAMix* pMix); 00456 00457 00458 SINT32 getEncryptedLogDir(UINT8* name,UINT32 len); 00459 00461 //SINT32 getMixXml(UINT8* strxml,UINT32* len); 00462 SINT32 getMixXml(XERCES_CPP_NAMESPACE::DOMDocument* & docMixInfo); 00463 00464 UINT32 getNumberOfTermsAndConditionsTemplates(); 00465 XERCES_CPP_NAMESPACE::DOMDocument **getAllTermsAndConditionsTemplates(); 00466 XERCES_CPP_NAMESPACE::DOMElement *getTermsAndConditions(); 00467 00468 UINT32 getKeepAliveSendInterval() 00469 { 00470 return m_u32KeepAliveSendInterval; 00471 } 00472 00473 UINT32 getKeepAliveRecvInterval() 00474 { 00475 return m_u32KeepAliveRecvInterval; 00476 } 00477 bool isInfoServiceEnabled() 00478 { 00479 return (m_addrInfoServicesSize>0); 00480 } 00481 #endif //ONLY_LOCAL_PROXY 00482 bool getCompressLogs() 00483 { 00484 return m_bCompressedLogs; 00485 } 00486 SINT32 getLogDir(UINT8* name,UINT32 len); 00487 SINT32 setLogDir(const UINT8* name,UINT32 len); 00488 SINT64 getMaxLogFileSize() 00489 { 00490 return m_maxLogFileSize; 00491 } 00492 00493 UINT32 getMaxLogFiles() 00494 { 00495 return m_maxLogFiles; 00496 } 00497 00498 SINT32 getUser(UINT8* user,UINT32 len); 00499 SINT32 getPidFile(UINT8* pidfile,UINT32 len); 00500 00501 #ifdef SERVER_MONITORING 00502 char *getMonitoringListenerHost(); 00503 UINT16 getMonitoringListenerPort(); 00504 #endif /* SERVER_MONITORING */ 00505 00506 bool isLocalProxy(); 00507 bool isFirstMix(); 00508 bool isMiddleMix(); 00509 bool isLastMix(); 00510 00511 00512 bool isSock5sSupported() 00513 { 00514 return m_bSocksSupport; 00515 } 00516 00517 00518 bool getAutoReconnect() 00519 { 00520 return m_bAutoReconnect; 00521 } 00522 00523 #ifdef LOG_CRIME 00524 regex_t* getCrimeRegExpsURL(UINT32* len) 00525 { 00526 *len=m_nCrimeRegExpsURL; 00527 return m_arCrimeRegExpsURL; 00528 } 00529 00530 regex_t* getCrimeRegExpsPayload(UINT32* len) 00531 { 00532 *len=m_nCrimeRegExpsPayload; 00533 return m_arCrimeRegExpsPayload; 00534 } 00535 00536 UINT64* getCrimeSurveillanceAccounts() 00537 { 00538 return m_surveillanceAccounts; 00539 } 00540 00541 UINT32 getNrOfCrimeSurveillanceAccounts() 00542 { 00543 return m_nrOfSurveillanceAccounts; 00544 } 00545 00546 00547 CASocketAddrINet* getCrimeSurveillanceIPs() 00548 { 00549 return m_surveillanceIPs; 00550 } 00551 00552 UINT32 getNrOfCrimeSurveillanceIPs() 00553 { 00554 return m_nrOfSurveillanceIPs; 00555 } 00556 00557 bool isPayloadLogged() 00558 { 00559 return m_logPayload; 00560 } 00561 #endif 00562 00563 #if defined(DELAY_CHANNELS)||defined(DELAY_USERS) 00564 UINT32 getDelayChannelUnlimitTraffic() 00565 { 00566 return m_u32DelayChannelUnlimitTraffic; 00567 } 00568 UINT32 getDelayChannelBucketGrow() 00569 { 00570 return m_u32DelayChannelBucketGrow; 00571 } 00572 UINT32 getDelayChannelBucketGrowIntervall() 00573 { 00574 return m_u32DelayChannelBucketGrowIntervall; 00575 } 00576 #endif 00577 00578 #if defined(DELAY_CHANNELS_LATENCY) 00579 00580 UINT32 getDelayChannelLatency() 00581 { 00582 return m_u32DelayChannelLatency; 00583 } 00584 #endif 00585 00586 00587 #ifdef PAYMENT 00588 // accounting database 00589 SINT32 getDatabaseHost(UINT8 * host, UINT32 len); 00590 UINT16 getDatabasePort(); 00591 SINT32 getDatabaseName(UINT8 * name, UINT32 len); 00592 SINT32 getDatabaseUsername(UINT8 * user, UINT32 len); 00593 SINT32 getDatabasePassword(UINT8 * pass, UINT32 len); 00594 SINT32 getAiID(UINT8 * id, UINT32 len); 00595 CAXMLBI* getBI(); 00596 UINT32 getPaymentHardLimit(); 00597 UINT32 getPaymentSoftLimit(); 00598 UINT32 getPrepaidInterval(); 00599 UINT32 getPaymentSettleInterval(); 00600 #endif 00601 00602 #ifdef DATA_RETENTION_LOG 00603 SINT32 getDataRetentionLogDir(UINT8* strLogDir,UINT32 len); 00604 SINT32 getDataRetentionPublicEncryptionKey(CAASymCipher** pKey) 00605 { 00606 *pKey=m_pDataRetentionPublicEncryptionKey; 00607 return E_SUCCESS; 00608 } 00609 #endif 00610 00611 #ifdef EXPORT_ASYM_PRIVATE_KEY 00612 SINT32 getEncryptionKeyImportFile(const UINT8* strFile,UINT32 len) 00613 { 00614 if(m_strImportKeyFile==NULL) 00615 return E_UNKNOWN; 00616 if(len<=(UINT32)strlen((char*)m_strImportKeyFile)) 00617 { 00618 return E_SPACE; 00619 } 00620 strcpy((char*)strFile,(char*)m_strImportKeyFile); 00621 return E_SUCCESS; 00622 } 00623 SINT32 getEncryptionKeyExportFile(const UINT8* strFile,UINT32 len) 00624 { 00625 if(m_strExportKeyFile==NULL) 00626 return E_UNKNOWN; 00627 if(len<=(UINT32)strlen((char*)m_strExportKeyFile)) 00628 { 00629 return E_SPACE; 00630 } 00631 strcpy((char*)strFile,(char*)m_strExportKeyFile); 00632 return E_SUCCESS; 00633 } 00634 bool isImportKey() 00635 { 00636 return m_strImportKeyFile!=NULL; 00637 } 00638 bool isExportKey() 00639 { 00640 return m_strExportKeyFile!=NULL; 00641 } 00642 #endif 00643 00644 00645 #ifndef ONLY_LOCAL_PROXY 00646 // added by ronin <ronin2@web.de> 00647 // needed for autoconfiguration 00648 SINT32 setNextMix(XERCES_CPP_NAMESPACE::DOMDocument* pDoc); 00649 SINT32 setPrevMix(XERCES_CPP_NAMESPACE::DOMDocument* pDoc); 00650 bool acceptReconfiguration() { return m_bAcceptReconfiguration; } 00651 00652 friend THREAD_RETURN threadReConfigure(void *param); 00653 00655 static SINT32 createMixOnCDConfiguration(const UINT8* strFileName); 00656 static SINT32 saveToFile(XERCES_CPP_NAMESPACE::DOMDocument* a_doc, const UINT8* a_strFileName); 00657 UINT32 getMaxNrOfUsers() 00658 { 00659 return m_maxNrOfUsers; 00660 } 00661 00662 #ifdef DYNAMIC_MIX 00663 /* LERNGRUPPE (refactoring + new) */ 00664 //SINT32 createMixOnCDConfiguration(const UINT8* strFileName); 00665 SINT32 createDefaultConfiguration(); 00666 SINT32 addListenerInterface(DOM_Element a_elem); 00667 SINT32 resetNetworkConfiguration(); 00668 SINT32 getRandomInfoService(CASocketAddrINet *&r_address); 00669 bool isDynamic() { return m_bDynamic; } 00670 SINT32 changeMixType(CAMix::tMixType a_newMixType); 00671 SINT32 resetNextMix(); 00672 SINT32 resetPrevMix(); 00673 SINT32 setCascadeProposal(UINT8* a_strCascadeProposal, UINT32 a_len) 00674 { 00675 if(m_strLastCascadeProposal != NULL) 00676 { 00677 delete m_strLastCascadeProposal; 00678 m_strLastCascadeProposal = NULL; 00679 } 00680 if(a_strCascadeProposal == NULL) 00681 return E_SUCCESS; 00682 m_strLastCascadeProposal = new UINT8[ a_len + 1 ]; 00683 memcpy(m_strLastCascadeProposal, a_strCascadeProposal, a_len+1); 00684 return E_SUCCESS; 00685 } 00686 SINT32 getLastCascadeProposal(UINT8* r_strCascadeProposal, UINT32 r_len) 00687 { 00688 if(m_strLastCascadeProposal == NULL) 00689 { 00690 return E_UNKNOWN; 00691 } 00692 if(r_len >= strlen((char*)m_strLastCascadeProposal)) 00693 { 00694 r_len = strlen((char*)m_strLastCascadeProposal); 00695 memcpy(r_strCascadeProposal, m_strLastCascadeProposal, r_len + 1); 00696 return E_SUCCESS; 00697 } 00698 return E_UNKNOWN; 00699 } 00700 #endif // DYNAMIC_MIX 00701 XERCES_CPP_NAMESPACE::DOMDocument **m_termsAndConditionsTemplates; 00702 UINT32 m_nrOfTermsAndConditionsTemplates; 00703 bool verifyMixCertificates() {return m_bVerifyMixCerts;} 00704 private: 00705 #ifdef DYNAMIC_MIX 00706 UINT8* m_strLastCascadeProposal; 00707 UINT32 getRandom(UINT32 a_max); 00708 SINT32 checkInfoServices(UINT32 *r_runningInfoServices); 00709 SINT32 checkMixId(); 00710 SINT32 checkListenerInterfaces(); 00711 SINT32 checkCertificates(); 00712 #endif //DYNAMIC_MIX 00713 bool m_bDynamic; 00714 SINT32 parseInfoServices(DOMElement* a_infoServiceNode); 00715 /* END LERNGRUPPE */ 00716 static SINT32 buildDefaultConfig(XERCES_CPP_NAMESPACE::DOMDocument* a_doc,bool bForLastMix); 00717 #endif //only_LOCAL_PROXY 00718 UINT8* m_strConfigFile; //the filename of the config file 00719 bool m_bDaemon; 00720 UINT16 m_iSOCKSServerPort; 00721 UINT16 m_iTargetPort; //only for the local proxy... 00722 char* m_strTargetHost; //only for the local proxy... 00723 char* m_strSOCKSHost; 00724 UINT16 m_iSOCKSPort; 00725 #ifndef ONLY_LOCAL_PROXY 00726 bool m_bIsRunReConfigure; //true, if an async reconfigure is under way 00727 CAMutex* m_pcsReConfigure; //Ensures that reconfigure is running only once at the same time; 00728 CAThread m_threadReConfigure; //Thread, that does the actual reconfigure work 00729 CAListenerInterface** m_addrInfoServices; 00730 UINT32 m_addrInfoServicesSize; 00731 00732 //CASignature* m_pSignKey; 00733 //CACertificate* m_pOwnCertificate; 00734 CAMultiSignature* m_pMultiSignature; 00735 //CACertificate** m_ownCerts; 00736 //UINT32 m_ownCertsLength; 00737 #ifdef PAYMENT 00738 CAXMLPriceCert* m_pPriceCertificate; 00739 #endif 00740 00741 CACertificate* m_OpCert; 00742 //CACertificate** m_opCerts; 00743 //UINT32 m_opCertsLength; 00744 DOMNodeList* m_opCertList; 00745 00746 /* for mix certificate verification */ 00747 bool m_bVerifyMixCerts; 00748 CACertStore* m_pTrustedRootCertificates; 00749 00750 CACertificate* m_pPrevMixCertificate; 00751 CACertificate* m_pNextMixCertificate; 00752 CACertificate* m_pLogEncryptionCertificate; 00753 00754 UINT32 m_maxNrOfUsers; 00755 00756 SINT32 m_PaymentReminderProbability; 00757 00758 // added by ronin <ronin2@web.de> 00759 DOMElement* m_pCascadeXML; 00760 bool m_bAcceptReconfiguration; 00761 XERCES_CPP_NAMESPACE::DOMDocument* m_docMixInfo; 00762 XERCES_CPP_NAMESPACE::DOMDocument* m_docMixXml; 00763 XERCES_CPP_NAMESPACE::DOMDocument* m_docOpTnCs; 00764 00765 UINT32 m_u32KeepAliveSendInterval; 00766 UINT32 m_u32KeepAliveRecvInterval; 00767 00768 bool m_perfTestEnabled; 00769 #endif //ONLY_LOCAL_PROXY 00770 00771 bool m_bLocalProxy,m_bFirstMix,m_bMiddleMix,m_bLastMix; 00772 bool m_bAutoReconnect; //auto reconnect if connection to first mix lost ?? 00773 UINT8* m_strCascadeName; 00774 char* m_strLogDir; 00775 char* m_strLogLevel; 00776 SINT64 m_maxLogFileSize; 00777 UINT32 m_maxLogFiles; //how many log files can be created before starting again with the first one 00778 char* m_strEncryptedLogDir; 00779 bool m_bCompressedLogs; 00780 bool m_bSocksSupport; 00781 bool m_bSyslog; 00782 bool m_bLogConsole; 00783 char* m_strUser; 00784 char* m_strPidFile; 00785 SINT32 m_nrOfOpenFiles; //How many open files (sockets) should we use 00786 00787 //char* m_strMixXml; 00788 char* m_strMixID; 00789 char* m_strMixName; 00790 00791 bool m_bIsEncryptedLogEnabled; 00792 00793 CATargetInterface* m_arTargetInterfaces; 00794 UINT32 m_cnTargets; 00795 CAListenerInterface** m_arListenerInterfaces; 00796 UINT32 m_cnListenerInterfaces; 00797 UINT8** m_arStrVisibleAddresses; 00798 UINT32 m_cnVisibleAddresses; 00799 00800 00801 #ifdef LOG_CRIME 00802 bool m_logPayload; 00803 regex_t* m_arCrimeRegExpsURL; 00804 UINT32 m_nCrimeRegExpsURL; 00805 regex_t* m_arCrimeRegExpsPayload; 00806 UINT32 m_nCrimeRegExpsPayload; 00807 UINT32 m_nrOfSurveillanceIPs; 00808 CASocketAddrINet* m_surveillanceIPs; 00809 UINT64* m_surveillanceAccounts; 00810 UINT32 m_nrOfSurveillanceAccounts; 00811 /* Crime Logging Options */ 00812 #define CRIME_DETECTION_OPTIONS_NR 4 00813 optionSetter_pt *crimeDetectionOptionSetters; 00814 SINT32 setCrimeURLRegExp(DOMElement *elemCrimeDetection); 00815 SINT32 setCrimePayloadRegExp(DOMElement *elemCrimeDetection); 00816 SINT32 setCrimeSurveillanceIP(DOMElement *elemCrimeDetection); 00817 SINT32 setCrimeSurveillanceAccounts(DOMElement *elemCrimeDetection); 00818 void initCrimeDetectionOptionSetters(); 00819 SINT32 setCrimeDetectionOptions(DOMElement *elemRoot); 00820 #endif 00821 00822 #ifdef DATA_RETENTION_LOG 00823 UINT8* m_strDataRetentionLogDir; 00824 CAASymCipher* m_pDataRetentionPublicEncryptionKey; 00825 #endif 00826 00827 #ifdef EXPORT_ASYM_PRIVATE_KEY 00828 UINT8* m_strImportKeyFile; 00829 UINT8* m_strExportKeyFile; 00830 #endif 00831 00832 00833 #if defined (DELAY_CHANNELS) ||defined(DELAY_USERS) 00834 UINT32 m_u32DelayChannelUnlimitTraffic; 00835 UINT32 m_u32DelayChannelBucketGrow; 00836 UINT32 m_u32DelayChannelBucketGrowIntervall; 00837 #endif 00838 00839 #if defined (DELAY_CHANNELS_LATENCY) 00840 UINT32 m_u32DelayChannelLatency; 00841 #endif 00842 00843 #ifdef PAYMENT 00844 // added by Bastian Voigt: 00845 // getter functions for the payment config options 00846 private: 00847 CAXMLBI * m_pBI; 00848 UINT8 * m_strDatabaseHost; 00849 UINT8 * m_strDatabaseName; 00850 UINT8 * m_strDatabaseUser; 00851 UINT8 * m_strDatabasePassword; 00852 UINT8* m_strAiID; 00853 UINT16 m_iDatabasePort; 00854 UINT32 m_iPaymentHardLimit; 00855 UINT32 m_iPaymentSoftLimit; 00856 UINT32 m_iPrepaidInterval; 00857 UINT32 m_iPaymentSettleInterval; 00858 optionSetter_pt *accountingOptionSetters; 00859 #endif 00860 optionSetter_pt *mainOptionSetters; 00861 optionSetter_pt *generalOptionSetters; 00862 optionSetter_pt *certificateOptionSetters; 00863 optionSetter_pt *networkOptionSetters; 00864 optionSetter_pt *termsAndConditionsOptionSetters; 00865 00866 #ifdef SERVER_MONITORING 00867 private: 00868 char *m_strMonitoringListenerHost; 00869 UINT16 m_iMonitoringListenerPort; 00870 #endif 00871 00872 private: 00873 SINT32 setNewValues(CACmdLnOptions& newOptions); 00874 #ifndef ONLY_LOCAL_PROXY 00875 SINT32 readXmlConfiguration(XERCES_CPP_NAMESPACE::DOMDocument* & docConfig,const UINT8* const configFileName); 00876 SINT32 readXmlConfiguration(XERCES_CPP_NAMESPACE::DOMDocument* & docConfig,const UINT8* const buf, UINT32 len); 00877 SINT32 processXmlConfiguration(XERCES_CPP_NAMESPACE::DOMDocument* docConfig); 00878 SINT32 clearVisibleAddresses(); 00879 SINT32 addVisibleAddresses(DOMNode* nodeProxy); 00880 #ifdef COUNTRY_STATS 00881 char* m_dbCountryStatsHost; 00882 char* m_dbCountryStatsUser; 00883 char* m_dbCountryStatsPasswd; 00884 #endif //COUNTRY_STATS 00885 #endif //ONLY_LOCAL_PROXY 00886 SINT32 clearTargetInterfaces(); 00887 SINT32 clearListenerInterfaces(); 00888 00889 00890 00891 /* NR of all Option types, i.e. General, Certificates, Networking, etc. (excluding *mainOptionSetters) 00892 * these options are all direct children of <MixConfiguration>*/ 00893 #define MAIN_OPTION_SETTERS_NR 8 00894 SINT32 setGeneralOptions(DOMElement* elemRoot); 00895 SINT32 setMixDescription(DOMElement* elemRoot); /* mix decription for the mix info */ 00896 SINT32 setCertificateOptions(DOMElement* elemRoot); 00897 SINT32 setNetworkOptions(DOMElement *elemRoot); 00898 SINT32 setRessourceOptions(DOMElement *elemRoot); 00899 SINT32 setTermsAndConditions(DOMElement *elemRoot); 00900 00901 /* General Options */ 00902 #define GENERAL_OPTIONS_NR 12 00903 SINT32 setMixType(DOMElement* elemGeneral); 00904 SINT32 setMixName(DOMElement* elemGeneral); 00905 SINT32 setMixID(DOMElement* elemGeneral); 00906 SINT32 setDynamicMix(DOMElement* elemGeneral); 00907 SINT32 setMinCascadeLength(DOMElement* elemGeneral); 00908 SINT32 setCascadeNameFromOptions(DOMElement* elemGeneral); 00909 SINT32 setUserID(DOMElement* elemGeneral); 00910 SINT32 setNrOfFileDescriptors(DOMElement* elemGeneral); 00911 SINT32 setDaemonMode(DOMElement* elemGeneral); 00912 SINT32 setMaxUsers(DOMElement* elemGeneral); 00913 SINT32 setLoggingOptions(DOMElement* elemGeneral); 00914 SINT32 setPaymentReminder(DOMElement* elemGeneral); 00915 00916 /* Certificate Options */ 00917 #define MAX_CERTIFICATE_OPTIONS_NR 6 00918 UINT32 m_nCertificateOptionsSetters; 00919 SINT32 setOwnCertificate(DOMElement *elemCertificates); 00920 SINT32 setOwnOperatorCertificate(DOMElement *elemCertificates); 00921 SINT32 setMixCertificateVerification(DOMElement *elemCertificates); 00922 SINT32 setNextMixCertificate(DOMElement *elemCertificates); 00923 SINT32 setPrevMixCertificate(DOMElement *elemCertificates); 00924 SINT32 setTrustedRootCertificates(DOMElement *elemCertificates); 00925 00926 #ifdef PAYMENT 00927 /* Payment Options */ 00928 #define ACCOUNTING_OPTIONS_NR 7 00929 SINT32 setPriceCertificate(DOMElement *elemAccounting); 00930 SINT32 setPaymentInstance(DOMElement *elemAccounting); 00931 SINT32 setAccountingSoftLimit(DOMElement *elemAccounting); 00932 SINT32 setAccountingHardLimit(DOMElement *elemAccounting); 00933 SINT32 setPrepaidInterval(DOMElement *elemAccounting); 00934 SINT32 setSettleInterval(DOMElement *elemAccounting); 00935 SINT32 setAccountingDatabase(DOMElement *elemAccounting); 00936 void initAccountingOptionSetters(); 00937 SINT32 setAccountingOptions(DOMElement *elemRoot); 00938 #endif 00939 /* Network Options */ 00940 #define NETWORK_OPTIONS_NR 5 00941 SINT32 setInfoServices(DOMElement *elemNetwork); 00942 SINT32 setListenerInterfaces(DOMElement *elemNetwork); 00943 SINT32 setTargetInterfaces(DOMElement *elemNetwork); 00944 SINT32 setServerMonitoring(DOMElement *elemNetwork); 00945 SINT32 setKeepAliveTraffic(DOMElement *elemNetwork); 00946 00947 /* Terms & Conditions options */ 00948 #define TERMS_AND_CONDITIONS_OPTIONS_NR 2 00949 SINT32 setTermsAndConditionsTemplates(DOMElement *elemTnCs); 00950 SINT32 setTermsAndConditionsList(DOMElement *elemTnCs); 00951 00952 00953 SINT32 appendMixInfo_internal(DOMNode* a_node, bool with_subtree); 00954 inline SINT32 addMixIdToMixInfo(); 00955 00956 SINT32 invokeOptionSetters(const optionSetter_pt *optionsSetters, DOMElement* target, SINT32 optionsSettersLength); 00957 00958 void initMainOptionSetters(); 00959 void initGeneralOptionSetters(); 00960 void initMixDescriptionSetters(); 00961 void initCertificateOptionSetters(); 00962 void initNetworkOptionSetters(); 00963 void initTermsAndConditionsOptionSetters(); 00964 }; 00965 00966 SINT32 setRegExpressions(DOMElement *rootElement, const char* const childElementName, 00967 regex_t **regExContainer, UINT32* regExNr); 00968 00969 #endif 00970
1.7.6.1