2013-06-21 00:55:04 +02:00
import shared
import ConfigParser
2013-06-22 16:55:15 +02:00
import sys
import os
2013-08-21 16:08:22 +02:00
import locale
2013-11-02 00:25:24 +01:00
import random
import string
2014-01-20 21:25:02 +01:00
import platform
from distutils . version import StrictVersion
2013-06-22 16:55:15 +02:00
2013-07-05 20:08:19 +02:00
from namecoin import ensureNamecoinOptions
2013-06-22 16:55:15 +02:00
storeConfigFilesInSameDirectoryAsProgramByDefault = False # The user may de-select Portable Mode in the settings if they want the config files to stay in the application data folder.
2013-06-21 00:55:04 +02:00
2014-02-06 14:16:07 +01:00
def _loadTrustedPeer ( ) :
try :
trustedPeer = shared . config . get ( ' bitmessagesettings ' , ' trustedpeer ' )
except ConfigParser . Error :
# This probably means the trusted peer wasn't specified so we
# can just leave it as None
return
host , port = trustedPeer . split ( ' : ' )
shared . trustedPeer = shared . Peer ( host , int ( port ) )
2013-06-21 00:55:04 +02:00
def loadConfig ( ) :
2013-08-26 00:55:53 +02:00
if shared . appdata :
2013-06-21 00:55:04 +02:00
shared . config . read ( shared . appdata + ' keys.dat ' )
2013-08-26 00:55:53 +02:00
#shared.appdata must have been specified as a startup option.
2013-06-21 00:55:04 +02:00
try :
shared . config . get ( ' bitmessagesettings ' , ' settingsversion ' )
2013-08-26 00:55:53 +02:00
print ' Loading config files from directory specified on startup: ' + shared . appdata
needToCreateKeysFile = False
2013-06-21 00:55:04 +02:00
except :
2013-08-26 00:55:53 +02:00
needToCreateKeysFile = True
else :
shared . config . read ( ' keys.dat ' )
try :
shared . config . get ( ' bitmessagesettings ' , ' settingsversion ' )
print ' Loading config files from same directory as program. '
needToCreateKeysFile = False
shared . appdata = ' '
except :
# Could not load the keys.dat file in the program directory. Perhaps it
# is in the appdata directory.
shared . appdata = shared . lookupAppdataFolder ( )
shared . config . read ( shared . appdata + ' keys.dat ' )
try :
shared . config . get ( ' bitmessagesettings ' , ' settingsversion ' )
print ' Loading existing config files from ' , shared . appdata
needToCreateKeysFile = False
except :
needToCreateKeysFile = True
if needToCreateKeysFile :
# This appears to be the first time running the program; there is
# no config file (or it cannot be accessed). Create config file.
shared . config . add_section ( ' bitmessagesettings ' )
2013-11-04 08:05:07 +01:00
shared . config . set ( ' bitmessagesettings ' , ' settingsversion ' , ' 8 ' )
2013-08-26 00:55:53 +02:00
shared . config . set ( ' bitmessagesettings ' , ' port ' , ' 8444 ' )
shared . config . set (
' bitmessagesettings ' , ' timeformat ' , ' %% a, %% d %% b %% Y %% I: %% M %% p ' )
shared . config . set ( ' bitmessagesettings ' , ' blackwhitelist ' , ' black ' )
shared . config . set ( ' bitmessagesettings ' , ' startonlogon ' , ' false ' )
if ' linux ' in sys . platform :
2013-06-21 00:55:04 +02:00
shared . config . set (
2013-08-26 00:55:53 +02:00
' bitmessagesettings ' , ' minimizetotray ' , ' false ' )
# This isn't implimented yet and when True on
# Ubuntu causes Bitmessage to disappear while
# running when minimized.
else :
2013-06-21 00:55:04 +02:00
shared . config . set (
2013-08-26 00:55:53 +02:00
' bitmessagesettings ' , ' minimizetotray ' , ' true ' )
shared . config . set (
' bitmessagesettings ' , ' showtraynotifications ' , ' true ' )
shared . config . set ( ' bitmessagesettings ' , ' startintray ' , ' false ' )
shared . config . set ( ' bitmessagesettings ' , ' socksproxytype ' , ' none ' )
shared . config . set (
' bitmessagesettings ' , ' sockshostname ' , ' localhost ' )
shared . config . set ( ' bitmessagesettings ' , ' socksport ' , ' 9050 ' )
shared . config . set (
' bitmessagesettings ' , ' socksauthentication ' , ' false ' )
shared . config . set (
' bitmessagesettings ' , ' sockslisten ' , ' false ' )
shared . config . set ( ' bitmessagesettings ' , ' socksusername ' , ' ' )
shared . config . set ( ' bitmessagesettings ' , ' sockspassword ' , ' ' )
shared . config . set ( ' bitmessagesettings ' , ' keysencrypted ' , ' false ' )
shared . config . set (
' bitmessagesettings ' , ' messagesencrypted ' , ' false ' )
shared . config . set ( ' bitmessagesettings ' , ' defaultnoncetrialsperbyte ' , str (
2013-09-23 05:12:21 +02:00
shared . networkDefaultProofOfWorkNonceTrialsPerByte * 2 ) )
2013-08-26 00:55:53 +02:00
shared . config . set ( ' bitmessagesettings ' , ' defaultpayloadlengthextrabytes ' , str (
shared . networkDefaultPayloadLengthExtraBytes ) )
shared . config . set ( ' bitmessagesettings ' , ' minimizeonclose ' , ' false ' )
shared . config . set (
' bitmessagesettings ' , ' maxacceptablenoncetrialsperbyte ' , ' 0 ' )
shared . config . set (
' bitmessagesettings ' , ' maxacceptablepayloadlengthextrabytes ' , ' 0 ' )
shared . config . set ( ' bitmessagesettings ' , ' dontconnect ' , ' true ' )
2013-08-27 12:10:46 +02:00
shared . config . set ( ' bitmessagesettings ' , ' userlocale ' , ' system ' )
2013-11-02 00:25:24 +01:00
shared . config . set ( ' bitmessagesettings ' , ' useidenticons ' , ' True ' )
2013-09-21 16:24:14 +02:00
shared . config . set ( ' bitmessagesettings ' , ' identiconsuffix ' , ' ' . join ( random . choice ( " 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz " ) for x in range ( 12 ) ) ) # a twelve character pseudo-password to salt the identicons
2014-01-28 20:57:01 +01:00
shared . config . set ( ' bitmessagesettings ' , ' replybelow ' , ' False ' )
2013-09-28 02:47:16 +02:00
2013-11-04 08:05:07 +01:00
#start:UI setting to stop trying to send messages after X days/months
2013-09-28 02:47:16 +02:00
shared . config . set (
2013-11-04 08:05:07 +01:00
' bitmessagesettings ' , ' stopresendingafterxdays ' , ' ' )
2013-09-28 02:47:16 +02:00
shared . config . set (
2013-11-04 08:05:07 +01:00
' bitmessagesettings ' , ' stopresendingafterxmonths ' , ' ' )
#shared.config.set(
# 'bitmessagesettings', 'timeperiod', '-1')
2013-10-10 07:10:46 +02:00
#end
2013-08-28 04:29:39 +02:00
# Are you hoping to add a new option to the keys.dat file? You're in
# the right place for adding it to users who install the software for
# the first time. But you must also add it to the keys.dat file of
# existing users. To do that, search the class_sqlThread.py file for the
# text: "right above this line!"
2013-08-26 00:55:53 +02:00
ensureNamecoinOptions ( )
2013-06-21 00:55:04 +02:00
2013-08-26 00:55:53 +02:00
if storeConfigFilesInSameDirectoryAsProgramByDefault :
# Just use the same directory as the program and forget about
# the appdata folder
shared . appdata = ' '
print ' Creating new config files in same directory as program. '
else :
print ' Creating new config files in ' , shared . appdata
if not os . path . exists ( shared . appdata ) :
os . makedirs ( shared . appdata )
if not sys . platform . startswith ( ' win ' ) :
os . umask ( 0o077 )
2014-09-15 08:34:33 +02:00
shared . writeKeysFile ( )
2014-01-20 21:25:02 +01:00
2014-02-06 14:16:07 +01:00
_loadTrustedPeer ( )
2014-01-20 21:25:02 +01:00
def isOurOperatingSystemLimitedToHavingVeryFewHalfOpenConnections ( ) :
try :
VER_THIS = StrictVersion ( platform . version ( ) )
if sys . platform [ 0 : 3 ] == " win " :
2014-01-21 07:17:36 +01:00
return StrictVersion ( " 5.1.2600 " ) < = VER_THIS and StrictVersion ( " 6.0.6000 " ) > = VER_THIS
2014-01-20 21:25:02 +01:00
return False
except Exception as err :
print ' An Exception occurred within isOurOperatingSystemLimitedToHavingVeryFewHalfOpenConnections: ' , err
2014-01-28 20:57:01 +01:00
return False