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