Merge pull request #14 from jaicis/fix#1

python3 quality checks
This commit is contained in:
lakshyacis 2020-01-02 15:15:35 +05:30 committed by GitHub
commit 9a87c37dba
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
23 changed files with 371 additions and 386 deletions

View File

@ -37,6 +37,7 @@ from helper_ackPayload import genAckPayload
from helper_sql import SqlBulkExecute, sqlExecute, sqlQuery, sqlStoredProcedure
from inventory import Inventory
from network.threads import StoppableThread
# pylint: disable=unused-variable
str_chan = '[chan]'
@ -275,7 +276,6 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
data = '{"addresses":['
for addressInKeysFile in BMConfigParser().addresses():
# pylint: disable=unused-variable
status, addressVersionNumber, streamNumber, hash01 = decodeAddress(
addressInKeysFile)
if len(data) > 20:
@ -609,7 +609,6 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
label = str_chan + ' ' + passphrase
except BaseException:
label = str_chan + ' ' + repr(passphrase)
# pylint: disable=unused-variable
status, addressVersionNumber, streamNumber, toRipe = self._verifyAddress(
suppliedAddress)
suppliedAddress = addBMIfNotPresent(suppliedAddress)
@ -634,7 +633,6 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
raise APIError(0, 'I need parameters.')
elif len(params) == 1:
address, = params
# pylint: disable=unused-variable
status, addressVersionNumber, streamNumber, toRipe = \
self._verifyAddress(address)
address = addBMIfNotPresent(address)
@ -657,7 +655,6 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
raise APIError(0, 'I need parameters.')
elif len(params) == 1:
address, = params
# pylint: disable=unused-variable
status, addressVersionNumber, streamNumber, toRipe = \
self._verifyAddress(address)
address = addBMIfNotPresent(address)
@ -878,7 +875,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
data = '{"sentMessages":['
for row in queryreturn:
msgid, toAddress, fromAddress, subject, lastactiontime, message, \
encodingtype, status, ackdata = row # pylint: disable=unused-variable
encodingtype, status, ackdata = row
subject = shared.fixPotentiallyInvalidUTF8Data(subject)
message = shared.fixPotentiallyInvalidUTF8Data(message)
if len(data) > 25:
@ -988,7 +985,6 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
TTL = 28 * 24 * 60 * 60
toAddress = addBMIfNotPresent(toAddress)
fromAddress = addBMIfNotPresent(fromAddress)
# pylint: disable=unused-variable
status, addressVersionNumber, streamNumber, toRipe = \
self._verifyAddress(toAddress)
self._verifyAddress(fromAddress)
@ -1165,7 +1161,6 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
def ListSubscriptions(self, params):
"""Handle a request to list susbcriptions"""
# pylint: disable=unused-variable
queryreturn = sqlQuery(
"SELECT label, address, enabled FROM subscriptions")
data = {'subscriptions': []}
@ -1271,7 +1266,6 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
pubkeyReadPosition += 8
else:
pubkeyReadPosition += 4
# pylint: disable=unused-variable
addressVersion, addressVersionLength = decodeVarint(
payload[pubkeyReadPosition:pubkeyReadPosition + 10])
pubkeyReadPosition += addressVersionLength

View File

@ -29,7 +29,8 @@ from bmconfigparser import BMConfigParser
api = ''
keysName = 'keys.dat'
keysPath = 'keys.dat'
usrPrompt = 0 # 0 = First Start, 1 = prompt, 2 = no prompt if the program is starting up
# 0 = First Start, 1 = prompt, 2 = no prompt if the program is starting up
usrPrompt = 0
knownAddresses = dict()
@ -38,7 +39,7 @@ def userInput(message):
global usrPrompt
print '\n' + message
print('\n' + message)
uInput = raw_input('> ')
if uInput.lower() == 'exit': # Returns the user to the main menu
@ -46,7 +47,7 @@ def userInput(message):
main()
elif uInput.lower() == 'quit': # Quits the program
print '\n Bye\n'
print('\n Bye\n')
sys.exit(0)
else:
@ -55,9 +56,9 @@ def userInput(message):
def restartBmNotify():
"""Prompt the user to restart Bitmessage"""
print '\n *******************************************************************'
print ' WARNING: If Bitmessage is running locally, you must restart it now.'
print ' *******************************************************************\n'
print('\n *******************************************************************')
print(' WARNING: If Bitmessage is running locally, you must restart it now.')
print(' *******************************************************************\n')
# Begin keys.dat interactions
@ -96,8 +97,8 @@ def configInit():
with open(keysName, 'wb') as configfile:
BMConfigParser().write(configfile)
print '\n ' + str(keysName) + ' Initalized in the same directory as daemon.py'
print ' You will now need to configure the ' + str(keysName) + ' file.\n'
print('\n ' + str(keysName) + ' Initalized in the same directory as daemon.py')
print(' You will now need to configure the ' + str(keysName) + ' file.\n')
def apiInit(apiEnabled):
@ -114,20 +115,20 @@ def apiInit(apiEnabled):
with open(keysPath, 'wb') as configfile:
BMConfigParser().write(configfile)
print 'Done'
print('Done')
restartBmNotify()
return True
elif uInput == "n":
print ' \n************************************************************'
print ' Daemon will not work when the API is disabled. '
print ' Please refer to the Bitmessage Wiki on how to setup the API.'
print ' ************************************************************\n'
print(' \n************************************************************')
print(' Daemon will not work when the API is disabled. ')
print(' Please refer to the Bitmessage Wiki on how to setup the API.')
print(' ************************************************************\n')
usrPrompt = 1
main()
else:
print '\n Invalid Entry\n'
print('\n Invalid Entry\n')
usrPrompt = 1
main()
@ -136,11 +137,11 @@ def apiInit(apiEnabled):
return True
else: # API information was not present.
print '\n ' + str(keysPath) + ' not properly configured!\n'
print('\n ' + str(keysPath) + ' not properly configured!\n')
uInput = userInput("Would you like to do this now, (Y)es or (N)o?").lower()
if uInput == "y": # User said yes, initalize the api by writing these values to the keys.dat file
print ' '
print(' ')
apiUsr = userInput("API Username")
apiPwd = userInput("API Password")
@ -149,11 +150,11 @@ def apiInit(apiEnabled):
daemon = userInput("Daemon mode Enabled? (True) or (False)").lower()
if (daemon != 'true' and daemon != 'false'):
print '\n Invalid Entry for Daemon.\n'
print('\n Invalid Entry for Daemon.\n')
uInput = 1
main()
print ' -----------------------------------\n'
print(' -----------------------------------\n')
# sets the bitmessage port to stop the warning about the api not properly
# being setup. This is in the event that the keys.dat is in a different
@ -168,18 +169,18 @@ def apiInit(apiEnabled):
with open(keysPath, 'wb') as configfile:
BMConfigParser().write(configfile)
print '\n Finished configuring the keys.dat file with API information.\n'
print('\n Finished configuring the keys.dat file with API information.\n')
restartBmNotify()
return True
elif uInput == "n":
print '\n ***********************************************************'
print ' Please refer to the Bitmessage Wiki on how to setup the API.'
print ' ***********************************************************\n'
print('\n ***********************************************************')
print(' Please refer to the Bitmessage Wiki on how to setup the API.')
print(' ***********************************************************\n')
usrPrompt = 1
main()
else:
print ' \nInvalid entry\n'
print(' \nInvalid entry\n')
usrPrompt = 1
main()
@ -206,11 +207,11 @@ def apiData():
BMConfigParser().get('bitmessagesettings', 'port')
except:
# keys.dat was not there either, something is wrong.
print '\n ******************************************************************'
print ' There was a problem trying to access the Bitmessage keys.dat file'
print ' or keys.dat is not set up correctly'
print ' Make sure that daemon is in the same directory as Bitmessage. '
print ' ******************************************************************\n'
print('\n ******************************************************************')
print(' There was a problem trying to access the Bitmessage keys.dat file')
print(' or keys.dat is not set up correctly')
print(' Make sure that daemon is in the same directory as Bitmessage. ')
print(' ******************************************************************\n')
uInput = userInput("Would you like to create a keys.dat in the local directory, (Y)es or (N)o?").lower()
@ -220,11 +221,11 @@ def apiData():
usrPrompt = 0
main()
elif (uInput == "n" or uInput == "no"):
print '\n Trying Again.\n'
print('\n Trying Again.\n')
usrPrompt = 0
main()
else:
print '\n Invalid Input.\n'
print('\n Invalid Input.\n')
usrPrompt = 1
main()
@ -249,7 +250,7 @@ def apiData():
apiUsername = BMConfigParser().get('bitmessagesettings', 'apiusername')
apiPassword = BMConfigParser().get('bitmessagesettings', 'apipassword')
print '\n API data successfully imported.\n'
print('\n API data successfully imported.\n')
# Build the api credentials
return "http://" + apiUsername + ":" + apiPassword + "@" + apiInterface + ":" + str(apiPort) + "/"
@ -281,7 +282,7 @@ def bmSettings():
try:
port = BMConfigParser().get('bitmessagesettings', 'port')
except:
print '\n File not found.\n'
print('\n File not found.\n')
usrPrompt = 0
main()
@ -300,27 +301,27 @@ def bmSettings():
socksusername = BMConfigParser().get('bitmessagesettings', 'socksusername')
sockspassword = BMConfigParser().get('bitmessagesettings', 'sockspassword')
print '\n -----------------------------------'
print ' | Current Bitmessage Settings |'
print ' -----------------------------------'
print ' port = ' + port
print ' startonlogon = ' + str(startonlogon)
print ' minimizetotray = ' + str(minimizetotray)
print ' showtraynotifications = ' + str(showtraynotifications)
print ' startintray = ' + str(startintray)
print ' defaultnoncetrialsperbyte = ' + defaultnoncetrialsperbyte
print ' defaultpayloadlengthextrabytes = ' + defaultpayloadlengthextrabytes
print ' daemon = ' + str(daemon)
print '\n ------------------------------------'
print ' | Current Connection Settings |'
print ' -----------------------------------'
print ' socksproxytype = ' + socksproxytype
print ' sockshostname = ' + sockshostname
print ' socksport = ' + socksport
print ' socksauthentication = ' + str(socksauthentication)
print ' socksusername = ' + socksusername
print ' sockspassword = ' + sockspassword
print ' '
print('\n -----------------------------------')
print(' | Current Bitmessage Settings |')
print(' -----------------------------------')
print(' port = ' + port)
print(' startonlogon = ' + str(startonlogon))
print(' minimizetotray = ' + str(minimizetotray))
print(' showtraynotifications = ' + str(showtraynotifications))
print(' startintray = ' + str(startintray))
print(' defaultnoncetrialsperbyte = ' + defaultnoncetrialsperbyte)
print(' defaultpayloadlengthextrabytes = ' + defaultpayloadlengthextrabytes)
print(' daemon = ' + str(daemon))
print('\n ------------------------------------')
print(' | Current Connection Settings |')
print(' -----------------------------------')
print(' socksproxytype = ' + socksproxytype)
print(' sockshostname = ' + sockshostname)
print(' socksport = ' + socksport)
print(' socksauthentication = ' + str(socksauthentication))
print(' socksusername = ' + socksusername)
print(' sockspassword = ' + sockspassword)
print(' ')
uInput = userInput("Would you like to modify any of these settings, (Y)es or (N)o?").lower()
@ -328,74 +329,74 @@ def bmSettings():
while True: # loops if they mistype the setting name, they can exit the loop with 'exit'
invalidInput = False
uInput = userInput("What setting would you like to modify?").lower()
print ' '
print(' ')
if uInput == "port":
print ' Current port number: ' + port
print(' Current port number: ' + port)
uInput = userInput("Enter the new port number.")
BMConfigParser().set('bitmessagesettings', 'port', str(uInput))
elif uInput == "startonlogon":
print ' Current status: ' + str(startonlogon)
print(' Current status: ' + str(startonlogon))
uInput = userInput("Enter the new status.")
BMConfigParser().set('bitmessagesettings', 'startonlogon', str(uInput))
elif uInput == "minimizetotray":
print ' Current status: ' + str(minimizetotray)
print(' Current status: ' + str(minimizetotray))
uInput = userInput("Enter the new status.")
BMConfigParser().set('bitmessagesettings', 'minimizetotray', str(uInput))
elif uInput == "showtraynotifications":
print ' Current status: ' + str(showtraynotifications)
print(' Current status: ' + str(showtraynotifications))
uInput = userInput("Enter the new status.")
BMConfigParser().set('bitmessagesettings', 'showtraynotifications', str(uInput))
elif uInput == "startintray":
print ' Current status: ' + str(startintray)
print(' Current status: ' + str(startintray))
uInput = userInput("Enter the new status.")
BMConfigParser().set('bitmessagesettings', 'startintray', str(uInput))
elif uInput == "defaultnoncetrialsperbyte":
print ' Current default nonce trials per byte: ' + defaultnoncetrialsperbyte
print(' Current default nonce trials per byte: ' + defaultnoncetrialsperbyte)
uInput = userInput("Enter the new defaultnoncetrialsperbyte.")
BMConfigParser().set('bitmessagesettings', 'defaultnoncetrialsperbyte', str(uInput))
elif uInput == "defaultpayloadlengthextrabytes":
print ' Current default payload length extra bytes: ' + defaultpayloadlengthextrabytes
print(' Current default payload length extra bytes: ' + defaultpayloadlengthextrabytes)
uInput = userInput("Enter the new defaultpayloadlengthextrabytes.")
BMConfigParser().set('bitmessagesettings', 'defaultpayloadlengthextrabytes', str(uInput))
elif uInput == "daemon":
print ' Current status: ' + str(daemon)
print(' Current status: ' + str(daemon))
uInput = userInput("Enter the new status.").lower()
BMConfigParser().set('bitmessagesettings', 'daemon', str(uInput))
elif uInput == "socksproxytype":
print ' Current socks proxy type: ' + socksproxytype
print "Possibilities: 'none', 'SOCKS4a', 'SOCKS5'."
print(' Current socks proxy type: ' + socksproxytype)
print("Possibilities: 'none', 'SOCKS4a', 'SOCKS5'.")
uInput = userInput("Enter the new socksproxytype.")
BMConfigParser().set('bitmessagesettings', 'socksproxytype', str(uInput))
elif uInput == "sockshostname":
print ' Current socks host name: ' + sockshostname
print(' Current socks host name: ' + sockshostname)
uInput = userInput("Enter the new sockshostname.")
BMConfigParser().set('bitmessagesettings', 'sockshostname', str(uInput))
elif uInput == "socksport":
print ' Current socks port number: ' + socksport
print(' Current socks port number: ' + socksport)
uInput = userInput("Enter the new socksport.")
BMConfigParser().set('bitmessagesettings', 'socksport', str(uInput))
elif uInput == "socksauthentication":
print ' Current status: ' + str(socksauthentication)
print(' Current status: ' + str(socksauthentication))
uInput = userInput("Enter the new status.")
BMConfigParser().set('bitmessagesettings', 'socksauthentication', str(uInput))
elif uInput == "socksusername":
print ' Current socks username: ' + socksusername
print(' Current socks username: ' + socksusername)
uInput = userInput("Enter the new socksusername.")
BMConfigParser().set('bitmessagesettings', 'socksusername', str(uInput))
elif uInput == "sockspassword":
print ' Current socks password: ' + sockspassword
print(' Current socks password: ' + sockspassword)
uInput = userInput("Enter the new password.")
BMConfigParser().set('bitmessagesettings', 'sockspassword', str(uInput))
else:
print "\n Invalid input. Please try again.\n"
print("\n Invalid input. Please try again.\n")
invalidInput = True
if invalidInput is not True: # don't prompt if they made a mistake.
uInput = userInput("Would you like to change another setting, (Y)es or (N)o?").lower()
if uInput != "y":
print '\n Changes Made.\n'
print('\n Changes Made.\n')
with open(keysPath, 'wb') as configfile:
BMConfigParser().write(configfile)
restartBmNotify()
@ -405,7 +406,7 @@ def bmSettings():
usrPrompt = 1
main()
else:
print "Invalid input."
print("Invalid input.")
usrPrompt = 1
main()
@ -433,10 +434,10 @@ def subscribe():
if address == "c":
usrPrompt = 1
print ' '
print(' ')
main()
elif validAddress(address) is False:
print '\n Invalid. "c" to cancel. Please try again.\n'
print('\n Invalid. "c" to cancel. Please try again.\n')
else:
break
@ -444,7 +445,7 @@ def subscribe():
label = label.encode('base64')
api.addSubscription(address, label)
print '\n You are now subscribed to: ' + address + '\n'
print('\n You are now subscribed to: ' + address + '\n')
def unsubscribe():
@ -456,31 +457,31 @@ def unsubscribe():
if address == "c":
usrPrompt = 1
print ' '
print(' ')
main()
elif validAddress(address) is False:
print '\n Invalid. "c" to cancel. Please try again.\n'
print('\n Invalid. "c" to cancel. Please try again.\n')
else:
break
userInput("Are you sure, (Y)es or (N)o?").lower() # uInput =
api.deleteSubscription(address)
print '\n You are now unsubscribed from: ' + address + '\n'
print('\n You are now unsubscribed from: ' + address + '\n')
def listSubscriptions():
"""List subscriptions"""
global usrPrompt
print '\nLabel, Address, Enabled\n'
print('\nLabel, Address, Enabled\n')
try:
print api.listSubscriptions()
print(api.listSubscriptions())
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
print ' '
print(' ')
def createChan():
@ -490,9 +491,9 @@ def createChan():
password = userInput("Enter channel name")
password = password.encode('base64')
try:
print api.createChan(password)
print(api.createChan(password))
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
@ -506,19 +507,19 @@ def joinChan():
if address == "c":
usrPrompt = 1
print ' '
print(' ')
main()
elif validAddress(address) is False:
print '\n Invalid. "c" to cancel. Please try again.\n'
print('\n Invalid. "c" to cancel. Please try again.\n')
else:
break
password = userInput("Enter channel name")
password = password.encode('base64')
try:
print api.joinChan(password, address)
print(api.joinChan(password, address))
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
@ -532,17 +533,17 @@ def leaveChan():
if address == "c":
usrPrompt = 1
print ' '
print(' ')
main()
elif validAddress(address) is False:
print '\n Invalid. "c" to cancel. Please try again.\n'
print('\n Invalid. "c" to cancel. Please try again.\n')
else:
break
try:
print api.leaveChan(address)
print(api.leaveChan(address))
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
@ -554,14 +555,14 @@ def listAdd():
jsonAddresses = json.loads(api.listAddresses())
numAddresses = len(jsonAddresses['addresses']) # Number of addresses
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
# print '\nAddress Number,Label,Address,Stream,Enabled\n'
print '\n --------------------------------------------------------------------------'
print ' | # | Label | Address |S#|Enabled|'
print ' |---|-------------------|-------------------------------------|--|-------|'
# print('\nAddress Number,Label,Address,Stream,Enabled\n')
print('\n --------------------------------------------------------------------------')
print(' | # | Label | Address |S#|Enabled|')
print(' |---|-------------------|-------------------------------------|--|-------|')
for addNum in range(0, numAddresses): # processes all of the addresses and lists them out
label = (jsonAddresses['addresses'][addNum]['label']).encode(
'utf') # may still misdiplay in some consoles
@ -572,7 +573,7 @@ def listAdd():
if len(label) > 19:
label = label[:16] + '...'
print ''.join([
print(''.join([
' |',
str(addNum).ljust(3),
'|',
@ -584,13 +585,13 @@ def listAdd():
'|',
enabled.ljust(7),
'|',
])
]))
print ''.join([
print(''.join([
' ',
74 * '-',
'\n',
])
]))
def genAdd(lbl, deterministic, passphrase, numOfAdd, addVNum, streamNum, ripe):
@ -603,7 +604,7 @@ def genAdd(lbl, deterministic, passphrase, numOfAdd, addVNum, streamNum, ripe):
try:
generatedAddress = api.createRandomAddress(addressLabel)
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
@ -614,7 +615,7 @@ def genAdd(lbl, deterministic, passphrase, numOfAdd, addVNum, streamNum, ripe):
try:
generatedAddress = api.createDeterministicAddresses(passphrase, numOfAdd, addVNum, streamNum, ripe)
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
return generatedAddress
@ -646,7 +647,7 @@ def saveFile(fileName, fileData):
with open(filePath, 'wb+') as path_to_file:
path_to_file.write(fileData.decode("base64"))
print '\n Successfully saved ' + filePath + '\n'
print('\n Successfully saved ' + filePath + '\n')
def attachment():
@ -667,26 +668,26 @@ def attachment():
with open(filePath):
break
except IOError:
print '\n %s was not found on your filesystem or can not be opened.\n' % filePath
print('\n %s was not found on your filesystem or can not be opened.\n' % filePath)
# print filesize, and encoding estimate with confirmation if file is over X size (1mb?)
# print(filesize, and encoding estimate with confirmation if file is over X size (1mb?))
invSize = os.path.getsize(filePath)
invSize = (invSize / 1024) # Converts to kilobytes
round(invSize, 2) # Rounds to two decimal places
if invSize > 500.0: # If over 500KB
print ''.join([
print(''.join([
'\n WARNING:The file that you are trying to attach is ',
invSize,
'KB and will take considerable time to send.\n'
])
]))
uInput = userInput('Are you sure you still want to attach it, (Y)es or (N)o?').lower()
if uInput != "y":
print '\n Attachment discarded.\n'
print('\n Attachment discarded.\n')
return ''
elif invSize > 184320.0: # If larger than 180MB, discard.
print '\n Attachment too big, maximum allowed size:180MB\n'
print('\n Attachment too big, maximum allowed size:180MB\n')
main()
pathLen = len(str(ntpath.basename(filePath))) # Gets the length of the filepath excluding the filename
@ -694,17 +695,17 @@ def attachment():
filetype = imghdr.what(filePath) # Tests if it is an image file
if filetype is not None:
print '\n ---------------------------------------------------'
print ' Attachment detected as an Image.'
print ' <img> tags will automatically be included,'
print ' allowing the recipient to view the image'
print ' using the "View HTML code..." option in Bitmessage.'
print ' ---------------------------------------------------\n'
print('\n ---------------------------------------------------')
print(' Attachment detected as an Image.')
print(' <img> tags will automatically be included,')
print(' allowing the recipient to view the image')
print(' using the "View HTML code..." option in Bitmessage.')
print(' ---------------------------------------------------\n')
isImage = True
time.sleep(2)
# Alert the user that the encoding process may take some time.
print '\n Encoding Attachment, Please Wait ...\n'
print('\n Encoding Attachment, Please Wait ...\n')
with open(filePath, 'rb') as f: # Begin the actual encoding
data = f.read(188743680) # Reads files up to 180MB, the maximum size for Bitmessage.
@ -759,10 +760,10 @@ def sendMsg(toAddress, fromAddress, subject, message):
if toAddress == "c":
usrPrompt = 1
print ' '
print(' ')
main()
elif validAddress(toAddress) is False:
print '\n Invalid Address. "c" to cancel. Please try again.\n'
print('\n Invalid Address. "c" to cancel. Please try again.\n')
else:
break
@ -771,14 +772,14 @@ def sendMsg(toAddress, fromAddress, subject, message):
jsonAddresses = json.loads(api.listAddresses())
numAddresses = len(jsonAddresses['addresses']) # Number of addresses
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
if numAddresses > 1: # Ask what address to send from if multiple addresses
found = False
while True:
print ' '
print(' ')
fromAddress = userInput("Enter an Address or Address Label to send from.")
if fromAddress == "exit":
@ -795,7 +796,7 @@ def sendMsg(toAddress, fromAddress, subject, message):
if found is False:
if validAddress(fromAddress) is False:
print '\n Invalid Address. Please try again.\n'
print('\n Invalid Address. Please try again.\n')
else:
for addNum in range(0, numAddresses): # processes all of the addresses
@ -805,13 +806,13 @@ def sendMsg(toAddress, fromAddress, subject, message):
break
if found is False:
print '\n The address entered is not one of yours. Please try again.\n'
print('\n The address entered is not one of yours. Please try again.\n')
if found:
break # Address was found
else: # Only one address in address book
print '\n Using the only address in the addressbook to send from.\n'
print('\n Using the only address in the addressbook to send from.\n')
fromAddress = jsonAddresses['addresses'][0]['address']
if subject == '':
@ -828,9 +829,9 @@ def sendMsg(toAddress, fromAddress, subject, message):
try:
ackData = api.sendMessage(toAddress, fromAddress, subject, message)
print '\n Message Status:', api.getStatus(ackData), '\n'
print('\n Message Status:', api.getStatus(ackData), '\n')
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
@ -845,7 +846,7 @@ def sendBrd(fromAddress, subject, message):
jsonAddresses = json.loads(api.listAddresses())
numAddresses = len(jsonAddresses['addresses']) # Number of addresses
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
@ -868,7 +869,7 @@ def sendBrd(fromAddress, subject, message):
if found is False:
if validAddress(fromAddress) is False:
print '\n Invalid Address. Please try again.\n'
print('\n Invalid Address. Please try again.\n')
else:
for addNum in range(0, numAddresses): # processes all of the addresses
@ -878,13 +879,13 @@ def sendBrd(fromAddress, subject, message):
break
if found is False:
print '\n The address entered is not one of yours. Please try again.\n'
print('\n The address entered is not one of yours. Please try again.\n')
if found:
break # Address was found
else: # Only one address in address book
print '\n Using the only address in the addressbook to send from.\n'
print('\n Using the only address in the addressbook to send from.\n')
fromAddress = jsonAddresses['addresses'][0]['address']
if subject == '':
@ -901,9 +902,9 @@ def sendBrd(fromAddress, subject, message):
try:
ackData = api.sendBroadcast(fromAddress, subject, message)
print '\n Message Status:', api.getStatus(ackData), '\n'
print('\n Message Status:', api.getStatus(ackData), '\n')
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
@ -916,7 +917,7 @@ def inbox(unreadOnly=False):
inboxMessages = json.loads(api.getAllInboxMessages())
numMessages = len(inboxMessages['inboxMessages'])
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
@ -926,16 +927,16 @@ def inbox(unreadOnly=False):
message = inboxMessages['inboxMessages'][msgNum]
# if we are displaying all messages or if this message is unread then display it
if not unreadOnly or not message['read']:
print ' -----------------------------------\n'
print ' Message Number:', msgNum # Message Number
print ' To:', getLabelForAddress(message['toAddress']) # Get the to address
print ' From:', getLabelForAddress(message['fromAddress']) # Get the from address
print ' Subject:', message['subject'].decode('base64') # Get the subject
print ''.join([
print(' -----------------------------------\n')
print(' Message Number:', msgNum) # Message Number
print(' To:', getLabelForAddress(message['toAddress'])) # Get the to address
print(' From:', getLabelForAddress(message['fromAddress'])) # Get the from address
print(' Subject:', message['subject'].decode('base64')) # Get the subject
print(''.join([
' Received:',
datetime.datetime.fromtimestamp(
float(message['receivedTime'])).strftime('%Y-%m-%d %H:%M:%S'),
])
]))
messagesPrinted += 1
if not message['read']:
messagesUnread += 1
@ -943,9 +944,9 @@ def inbox(unreadOnly=False):
if messagesPrinted % 20 == 0 and messagesPrinted != 0:
userInput('(Press Enter to continue or type (Exit) to return to the main menu.)').lower() # uInput =
print '\n -----------------------------------'
print ' There are %d unread messages of %d messages in the inbox.' % (messagesUnread, numMessages)
print ' -----------------------------------\n'
print('\n -----------------------------------')
print(' There are %d unread messages of %d messages in the inbox.' % (messagesUnread, numMessages))
print(' -----------------------------------\n')
def outbox():
@ -956,32 +957,32 @@ def outbox():
outboxMessages = json.loads(api.getAllSentMessages())
numMessages = len(outboxMessages['sentMessages'])
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
for msgNum in range(0, numMessages): # processes all of the messages in the outbox
print '\n -----------------------------------\n'
print ' Message Number:', msgNum # Message Number
# print ' Message ID:', outboxMessages['sentMessages'][msgNum]['msgid']
print ' To:', getLabelForAddress(outboxMessages['sentMessages'][msgNum]['toAddress']) # Get the to address
print('\n -----------------------------------\n')
print(' Message Number:', msgNum) # Message Number
# print(' Message ID:', outboxMessages['sentMessages'][msgNum]['msgid'])
# Get the to address
print(' To:', getLabelForAddress(outboxMessages['sentMessages'][msgNum]['toAddress']))
# Get the from address
print ' From:', getLabelForAddress(outboxMessages['sentMessages'][msgNum]['fromAddress'])
print ' Subject:', outboxMessages['sentMessages'][msgNum]['subject'].decode('base64') # Get the subject
print ' Status:', outboxMessages['sentMessages'][msgNum]['status'] # Get the subject
print ''.join([
print(' From:', getLabelForAddress(outboxMessages['sentMessages'][msgNum]['fromAddress']))
print(' Subject:', outboxMessages['sentMessages'][msgNum]['subject'].decode('base64')) # Get the subject
print(' Status:', outboxMessages['sentMessages'][msgNum]['status']) # Get the subject
print(''.join([
' Last Action Time:',
datetime.datetime.fromtimestamp(
float(outboxMessages['sentMessages'][msgNum]['lastActionTime'])).strftime('%Y-%m-%d %H:%M:%S'),
])
]))
if msgNum % 20 == 0 and msgNum != 0:
userInput('(Press Enter to continue or type (Exit) to return to the main menu.)').lower() # uInput =
print '\n -----------------------------------'
print ' There are ', numMessages, ' messages in the outbox.'
print ' -----------------------------------\n'
print('\n -----------------------------------')
print(' There are ', numMessages, ' messages in the outbox.')
print(' -----------------------------------\n')
def readSentMsg(msgNum):
@ -992,14 +993,14 @@ def readSentMsg(msgNum):
outboxMessages = json.loads(api.getAllSentMessages())
numMessages = len(outboxMessages['sentMessages'])
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
print ' '
print(' ')
if msgNum >= numMessages:
print '\n Invalid Message Number.\n'
print('\n Invalid Message Number.\n')
main()
# Begin attachment detection
@ -1035,19 +1036,19 @@ def readSentMsg(msgNum):
# End attachment Detection
print '\n To:', getLabelForAddress(outboxMessages['sentMessages'][msgNum]['toAddress']) # Get the to address
print('\n To:', getLabelForAddress(outboxMessages['sentMessages'][msgNum]['toAddress'])) # Get the to address
# Get the from address
print ' From:', getLabelForAddress(outboxMessages['sentMessages'][msgNum]['fromAddress'])
print ' Subject:', outboxMessages['sentMessages'][msgNum]['subject'].decode('base64') # Get the subject
print ' Status:', outboxMessages['sentMessages'][msgNum]['status'] # Get the subject
print ''.join([
print(' From:', getLabelForAddress(outboxMessages['sentMessages'][msgNum]['fromAddress']))
print(' Subject:', outboxMessages['sentMessages'][msgNum]['subject'].decode('base64')) # Get the subject
print(' Status:', outboxMessages['sentMessages'][msgNum]['status']) # Get the subject
print(''.join([
' Last Action Time:',
datetime.datetime.fromtimestamp(
float(outboxMessages['sentMessages'][msgNum]['lastActionTime'])).strftime('%Y-%m-%d %H:%M:%S'),
])
print ' Message:\n'
print message # inboxMessages['inboxMessages'][msgNum]['message'].decode('base64')
print ' '
]))
print(' Message:\n')
print(message) # inboxMessages['inboxMessages'][msgNum]['message'].decode('base64')
print(' ')
def readMsg(msgNum):
@ -1057,12 +1058,12 @@ def readMsg(msgNum):
inboxMessages = json.loads(api.getAllInboxMessages())
numMessages = len(inboxMessages['inboxMessages'])
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
if msgNum >= numMessages:
print '\n Invalid Message Number.\n'
print('\n Invalid Message Number.\n')
main()
# Begin attachment detection
@ -1097,17 +1098,17 @@ def readMsg(msgNum):
break
# End attachment Detection
print '\n To:', getLabelForAddress(inboxMessages['inboxMessages'][msgNum]['toAddress']) # Get the to address
print('\n To:', getLabelForAddress(inboxMessages['inboxMessages'][msgNum]['toAddress'])) # Get the to address
# Get the from address
print ' From:', getLabelForAddress(inboxMessages['inboxMessages'][msgNum]['fromAddress'])
print ' Subject:', inboxMessages['inboxMessages'][msgNum]['subject'].decode('base64') # Get the subject
print ''.join([
print(' From:', getLabelForAddress(inboxMessages['inboxMessages'][msgNum]['fromAddress']))
print(' Subject:', inboxMessages['inboxMessages'][msgNum]['subject'].decode('base64')) # Get the subject
print(''.join([
' Received:', datetime.datetime.fromtimestamp(
float(inboxMessages['inboxMessages'][msgNum]['receivedTime'])).strftime('%Y-%m-%d %H:%M:%S'),
])
print ' Message:\n'
print message # inboxMessages['inboxMessages'][msgNum]['message'].decode('base64')
print ' '
]))
print(' Message:\n')
print(message) # inboxMessages['inboxMessages'][msgNum]['message'].decode('base64')
print(' ')
return inboxMessages['inboxMessages'][msgNum]['msgid']
@ -1119,7 +1120,7 @@ def replyMsg(msgNum, forwardORreply):
try:
inboxMessages = json.loads(api.getAllInboxMessages())
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
@ -1141,14 +1142,14 @@ def replyMsg(msgNum, forwardORreply):
if toAdd == "c":
usrPrompt = 1
print ' '
print(' ')
main()
elif validAddress(toAdd) is False:
print '\n Invalid Address. "c" to cancel. Please try again.\n'
print('\n Invalid Address. "c" to cancel. Please try again.\n')
else:
break
else:
print '\n Invalid Selection. Reply or Forward only'
print('\n Invalid Selection. Reply or Forward only')
usrPrompt = 0
main()
@ -1180,7 +1181,7 @@ def delMsg(msgNum):
msgAck = api.trashMessage(msgId)
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
@ -1197,7 +1198,7 @@ def delSentMsg(msgNum):
msgId = outboxMessages['sentMessages'][int(msgNum)]['msgid']
msgAck = api.trashSentMessage(msgId)
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
@ -1233,7 +1234,7 @@ def buildKnownAddresses():
if entry['address'] not in knownAddresses:
knownAddresses[entry['address']] = "%s (%s)" % (entry['label'].decode('base64'), entry['address'])
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
@ -1248,7 +1249,7 @@ def buildKnownAddresses():
if entry['address'] not in knownAddresses:
knownAddresses[entry['address']] = "%s (%s)" % (entry['label'].decode('base64'), entry['address'])
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
@ -1263,21 +1264,20 @@ def listAddressBookEntries():
if "API Error" in response:
return getAPIErrorCode(response)
addressBook = json.loads(response)
print
print ' --------------------------------------------------------------'
print ' | Label | Address |'
print ' |--------------------|---------------------------------------|'
print()
print(' --------------------------------------------------------------')
print(' | Label | Address |')
print(' |--------------------|---------------------------------------|')
for entry in addressBook['addresses']:
label = entry['label'].decode('base64')
address = entry['address']
if len(label) > 19:
label = label[:16] + '...'
print ' | ' + label.ljust(19) + '| ' + address.ljust(37) + ' |'
print ' --------------------------------------------------------------'
print
print(' | ' + label.ljust(19) + '| ' + address.ljust(37) + ' |')
print(' --------------------------------------------------------------')
print()
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
@ -1292,7 +1292,7 @@ def addAddressToAddressBook(address, label):
if "API Error" in response:
return getAPIErrorCode(response)
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
@ -1307,7 +1307,7 @@ def deleteAddressFromAddressBook(address):
if "API Error" in response:
return getAPIErrorCode(response)
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
@ -1331,7 +1331,7 @@ def markMessageRead(messageID):
if "API Error" in response:
return getAPIErrorCode(response)
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
@ -1346,7 +1346,7 @@ def markMessageUnread(messageID):
if "API Error" in response:
return getAPIErrorCode(response)
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
@ -1359,7 +1359,7 @@ def markAllMessagesRead():
try:
inboxMessages = json.loads(api.getAllInboxMessages())['inboxMessages']
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
for message in inboxMessages:
@ -1375,7 +1375,7 @@ def markAllMessagesUnread():
try:
inboxMessages = json.loads(api.getAllInboxMessages())['inboxMessages']
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
for message in inboxMessages:
@ -1391,15 +1391,15 @@ def clientStatus():
try:
client_status = json.loads(api.clientStatus())
except:
print '\n Connection Error\n'
print('\n Connection Error\n')
usrPrompt = 0
main()
print "\nnetworkStatus: " + client_status['networkStatus'] + "\n"
print "\nnetworkConnections: " + str(client_status['networkConnections']) + "\n"
print "\nnumberOfPubkeysProcessed: " + str(client_status['numberOfPubkeysProcessed']) + "\n"
print "\nnumberOfMessagesProcessed: " + str(client_status['numberOfMessagesProcessed']) + "\n"
print "\nnumberOfBroadcastsProcessed: " + str(client_status['numberOfBroadcastsProcessed']) + "\n"
print("\nnetworkStatus: " + client_status['networkStatus'] + "\n")
print("\nnetworkConnections: " + str(client_status['networkConnections']) + "\n")
print("\nnumberOfPubkeysProcessed: " + str(client_status['numberOfPubkeysProcessed']) + "\n")
print("\nnumberOfMessagesProcessed: " + str(client_status['numberOfMessagesProcessed']) + "\n")
print("\nnumberOfBroadcastsProcessed: " + str(client_status['numberOfBroadcastsProcessed']) + "\n")
def shutdown():
@ -1409,7 +1409,7 @@ def shutdown():
api.shutdown()
except socket.error:
pass
print "\nShutdown command relayed\n"
print("\nShutdown command relayed\n")
def UI(usrInput):
@ -1418,75 +1418,75 @@ def UI(usrInput):
global usrPrompt
if usrInput == "help" or usrInput == "h" or usrInput == "?":
print ' '
print ' -------------------------------------------------------------------------'
print ' | https://github.com/Dokument/PyBitmessage-Daemon |'
print ' |-----------------------------------------------------------------------|'
print ' | Command | Description |'
print ' |------------------------|----------------------------------------------|'
print ' | help | This help file. |'
print ' | apiTest | Tests the API |'
print ' | addInfo | Returns address information (If valid) |'
print ' | bmSettings | BitMessage settings |'
print ' | exit | Use anytime to return to main menu |'
print ' | quit | Quits the program |'
print ' |------------------------|----------------------------------------------|'
print ' | listAddresses | Lists all of the users addresses |'
print ' | generateAddress | Generates a new address |'
print ' | getAddress | Get determinist address from passphrase |'
print ' |------------------------|----------------------------------------------|'
print ' | listAddressBookEntries | Lists entries from the Address Book |'
print ' | addAddressBookEntry | Add address to the Address Book |'
print ' | deleteAddressBookEntry | Deletes address from the Address Book |'
print ' |------------------------|----------------------------------------------|'
print ' | subscribe | Subscribes to an address |'
print ' | unsubscribe | Unsubscribes from an address |'
print ' |------------------------|----------------------------------------------|'
print ' | create | Creates a channel |'
print ' | join | Joins a channel |'
print ' | leave | Leaves a channel |'
print ' |------------------------|----------------------------------------------|'
print ' | inbox | Lists the message information for the inbox |'
print ' | outbox | Lists the message information for the outbox |'
print ' | send | Send a new message or broadcast |'
print ' | unread | Lists all unread inbox messages |'
print ' | read | Reads a message from the inbox or outbox |'
print ' | save | Saves message to text file |'
print ' | delete | Deletes a message or all messages |'
print ' -------------------------------------------------------------------------'
print ' '
print(' ')
print(' -------------------------------------------------------------------------')
print(' | https://github.com/Dokument/PyBitmessage-Daemon |')
print(' |-----------------------------------------------------------------------|')
print(' | Command | Description |')
print(' |------------------------|----------------------------------------------|')
print(' | help | This help file. |')
print(' | apiTest | Tests the API |')
print(' | addInfo | Returns address information (If valid) |')
print(' | bmSettings | BitMessage settings |')
print(' | exit | Use anytime to return to main menu |')
print(' | quit | Quits the program |')
print(' |------------------------|----------------------------------------------|')
print(' | listAddresses | Lists all of the users addresses |')
print(' | generateAddress | Generates a new address |')
print(' | getAddress | Get determinist address from passphrase |')
print(' |------------------------|----------------------------------------------|')
print(' | listAddressBookEntries | Lists entries from the Address Book |')
print(' | addAddressBookEntry | Add address to the Address Book |')
print(' | deleteAddressBookEntry | Deletes address from the Address Book |')
print(' |------------------------|----------------------------------------------|')
print(' | subscribe | Subscribes to an address |')
print(' | unsubscribe | Unsubscribes from an address |')
print(' |------------------------|----------------------------------------------|')
print(' | create | Creates a channel |')
print(' | join | Joins a channel |')
print(' | leave | Leaves a channel |')
print(' |------------------------|----------------------------------------------|')
print(' | inbox | Lists the message information for the inbox |')
print(' | outbox | Lists the message information for the outbox |')
print(' | send | Send a new message or broadcast |')
print(' | unread | Lists all unread inbox messages |')
print(' | read | Reads a message from the inbox or outbox |')
print(' | save | Saves message to text file |')
print(' | delete | Deletes a message or all messages |')
print(' -------------------------------------------------------------------------')
print(' ')
main()
elif usrInput == "apitest": # tests the API Connection.
if apiTest():
print '\n API connection test has: PASSED\n'
print('\n API connection test has: PASSED\n')
else:
print '\n API connection test has: FAILED\n'
print('\n API connection test has: FAILED\n')
main()
elif usrInput == "addinfo":
tmp_address = userInput('\nEnter the Bitmessage Address.')
address_information = json.loads(api.decodeAddress(tmp_address))
print '\n------------------------------'
print('\n------------------------------')
if 'success' in str(address_information['status']).lower():
print ' Valid Address'
print ' Address Version: %s' % str(address_information['addressVersion'])
print ' Stream Number: %s' % str(address_information['streamNumber'])
print(' Valid Address')
print(' Address Version: %s' % str(address_information['addressVersion']))
print(' Stream Number: %s' % str(address_information['streamNumber']))
else:
print ' Invalid Address !'
print(' Invalid Address !')
print '------------------------------\n'
print('------------------------------\n')
main()
elif usrInput == "bmsettings": # tests the API Connection.
bmSettings()
print ' '
print(' ')
main()
elif usrInput == "quit": # Quits the application
print '\n Bye\n'
print('\n Bye\n')
sys.exit(0)
elif usrInput == "listaddresses": # Lists all of the identities in the addressbook
@ -1508,17 +1508,17 @@ def UI(usrInput):
if isRipe == "y":
ripe = True
print genAdd(lbl, deterministic, passphrase, numOfAdd, addVNum, streamNum, ripe)
print(genAdd(lbl, deterministic, passphrase, numOfAdd, addVNum, streamNum, ripe))
main()
elif isRipe == "n":
ripe = False
print genAdd(lbl, deterministic, passphrase, numOfAdd, addVNum, streamNum, ripe)
print(genAdd(lbl, deterministic, passphrase, numOfAdd, addVNum, streamNum, ripe))
main()
elif isRipe == "exit":
usrPrompt = 1
main()
else:
print '\n Invalid input\n'
print('\n Invalid input\n')
main()
elif uInput == "r" or uInput == "random": # Creates a random address with user-defined label
@ -1526,18 +1526,18 @@ def UI(usrInput):
null = ''
lbl = userInput('Enter the label for the new address.')
print genAdd(lbl, deterministic, null, null, null, null, null)
print(genAdd(lbl, deterministic, null, null, null, null, null))
main()
else:
print '\n Invalid input\n'
print('\n Invalid input\n')
main()
elif usrInput == "getaddress": # Gets the address for/from a passphrase
phrase = userInput("Enter the address passphrase.")
print '\n Working...\n'
print('\n Working...\n')
address = getAddress(phrase, 4, 1) # ,vNumber,sNumber)
print '\n Address: ' + address + '\n'
print('\n Address: ' + address + '\n')
usrPrompt = 1
main()
@ -1572,17 +1572,17 @@ def UI(usrInput):
main()
elif usrInput == "inbox":
print '\n Loading...\n'
print('\n Loading...\n')
inbox()
main()
elif usrInput == "unread":
print '\n Loading...\n'
print('\n Loading...\n')
inbox(True)
main()
elif usrInput == "outbox":
print '\n Loading...\n'
print('\n Loading...\n')
outbox()
main()
@ -1603,14 +1603,14 @@ def UI(usrInput):
uInput = userInput("Would you like to read a message from the (I)nbox or (O)utbox?").lower()
if (uInput != 'i' and uInput != 'inbox' and uInput != 'o' and uInput != 'outbox'):
print '\n Invalid Input.\n'
print('\n Invalid Input.\n')
usrPrompt = 1
main()
msgNum = int(userInput("What is the number of the message you wish to open?"))
if (uInput == 'i' or uInput == 'inbox'):
print '\n Loading...\n'
print('\n Loading...\n')
messageID = readMsg(msgNum)
uInput = userInput("\nWould you like to keep this message unread, (Y)es or (N)o?").lower()
@ -1622,14 +1622,14 @@ def UI(usrInput):
uInput = userInput("\nWould you like to (D)elete, (F)orward, (R)eply to, or (Exit) this message?").lower()
if uInput in ['r', 'reply']:
print '\n Loading...\n'
print ' '
print('\n Loading...\n')
print(' ')
replyMsg(msgNum, 'reply')
usrPrompt = 1
elif uInput == 'f' or uInput == 'forward':
print '\n Loading...\n'
print ' '
print('\n Loading...\n')
print(' ')
replyMsg(msgNum, 'forward')
usrPrompt = 1
@ -1638,12 +1638,12 @@ def UI(usrInput):
if uInput == "y":
delMsg(msgNum)
print '\n Message Deleted.\n'
print('\n Message Deleted.\n')
usrPrompt = 1
else:
usrPrompt = 1
else:
print '\n Invalid entry\n'
print('\n Invalid entry\n')
usrPrompt = 1
elif (uInput == 'o' or uInput == 'outbox'):
@ -1657,12 +1657,12 @@ def UI(usrInput):
if uInput == "y":
delSentMsg(msgNum)
print '\n Message Deleted.\n'
print('\n Message Deleted.\n')
usrPrompt = 1
else:
usrPrompt = 1
else:
print '\n Invalid Entry\n'
print('\n Invalid Entry\n')
usrPrompt = 1
main()
@ -1672,7 +1672,7 @@ def UI(usrInput):
uInput = userInput("Would you like to save a message from the (I)nbox or (O)utbox?").lower()
if uInput not in ['i', 'inbox', 'o', 'outbox']:
print '\n Invalid Input.\n'
print('\n Invalid Input.\n')
usrPrompt = 1
main()
@ -1684,7 +1684,7 @@ def UI(usrInput):
msgNum = int(userInput("What is the number of the message you wish to save?"))
if msgNum >= numMessages:
print '\n Invalid Message Number.\n'
print('\n Invalid Message Number.\n')
else:
break
@ -1700,7 +1700,7 @@ def UI(usrInput):
msgNum = int(userInput("What is the number of the message you wish to save?"))
if msgNum >= numMessages:
print '\n Invalid Message Number.\n'
print('\n Invalid Message Number.\n')
else:
break
@ -1729,7 +1729,7 @@ def UI(usrInput):
if msgNum == 'a' or msgNum == 'all':
break
elif int(msgNum) >= numMessages:
print '\n Invalid Message Number.\n'
print('\n Invalid Message Number.\n')
else:
break
@ -1737,17 +1737,17 @@ def UI(usrInput):
if uInput == "y":
if msgNum in ['a', 'all']:
print ' '
print(' ')
for msgNum in range(0, numMessages): # processes all of the messages in the inbox
print ' Deleting message ', msgNum + 1, ' of ', numMessages
print(' Deleting message ', msgNum + 1, ' of ', numMessages)
delMsg(0)
print '\n Inbox is empty.'
print('\n Inbox is empty.')
usrPrompt = 1
else:
delMsg(int(msgNum))
print '\n Notice: Message numbers may have changed.\n'
print('\n Notice: Message numbers may have changed.\n')
main()
else:
usrPrompt = 1
@ -1763,7 +1763,7 @@ def UI(usrInput):
if msgNum in ['a', 'all']:
break
elif int(msgNum) >= numMessages:
print '\n Invalid Message Number.\n'
print('\n Invalid Message Number.\n')
else:
break
@ -1771,33 +1771,33 @@ def UI(usrInput):
if uInput == "y":
if msgNum in ['a', 'all']:
print ' '
print(' ')
for msgNum in range(0, numMessages): # processes all of the messages in the outbox
print ' Deleting message ', msgNum + 1, ' of ', numMessages
print(' Deleting message ', msgNum + 1, ' of ', numMessages)
delSentMsg(0)
print '\n Outbox is empty.'
print('\n Outbox is empty.')
usrPrompt = 1
else:
delSentMsg(int(msgNum))
print '\n Notice: Message numbers may have changed.\n'
print('\n Notice: Message numbers may have changed.\n')
main()
else:
usrPrompt = 1
else:
print '\n Invalid Entry.\n'
print('\n Invalid Entry.\n')
usrPrompt = 1
main()
elif usrInput == "exit":
print '\n You are already at the main menu. Use "quit" to quit.\n'
print('\n You are already at the main menu. Use "quit" to quit.\n')
usrPrompt = 1
main()
elif usrInput == "listaddressbookentries":
res = listAddressBookEntries()
if res == 20:
print '\n Error: API function not supported.\n'
print('\n Error: API function not supported.\n')
usrPrompt = 1
main()
@ -1806,9 +1806,9 @@ def UI(usrInput):
label = userInput('Enter label')
res = addAddressToAddressBook(address, label)
if res == 16:
print '\n Error: Address already exists in Address Book.\n'
print('\n Error: Address already exists in Address Book.\n')
if res == 20:
print '\n Error: API function not supported.\n'
print('\n Error: API function not supported.\n')
usrPrompt = 1
main()
@ -1816,7 +1816,7 @@ def UI(usrInput):
address = userInput('Enter address')
res = deleteAddressFromAddressBook(address)
if res == 20:
print '\n Error: API function not supported.\n'
print('\n Error: API function not supported.\n')
usrPrompt = 1
main()
@ -1841,7 +1841,7 @@ def UI(usrInput):
main()
else:
print '\n "', usrInput, '" is not a command.\n'
print('\n "', usrInput, '" is not a command.\n')
usrPrompt = 1
main()
@ -1853,24 +1853,24 @@ def main():
global usrPrompt
if usrPrompt == 0:
print '\n ------------------------------'
print ' | Bitmessage Daemon by .dok |'
print ' | Version 0.3.1 for BM 0.6.2 |'
print ' ------------------------------'
print('\n ------------------------------')
print(' | Bitmessage Daemon by .dok |')
print(' | Version 0.3.1 for BM 0.6.2 |')
print(' ------------------------------')
api = xmlrpclib.ServerProxy(apiData()) # Connect to BitMessage using these api credentials
if apiTest() is False:
print '\n ****************************************************************'
print ' WARNING: You are not connected to the Bitmessage client.'
print ' Either Bitmessage is not running or your settings are incorrect.'
print ' Use the command "apiTest" or "bmSettings" to resolve this issue.'
print ' ****************************************************************\n'
print('\n ****************************************************************')
print(' WARNING: You are not connected to the Bitmessage client.')
print(' Either Bitmessage is not running or your settings are incorrect.')
print(' Use the command "apiTest" or "bmSettings" to resolve this issue.')
print(' ****************************************************************\n')
print 'Type (H)elp for a list of commands.' # Startup message
print('Type (H)elp for a list of commands.') # Startup message
usrPrompt = 2
elif usrPrompt == 1:
print '\nType (H)elp for a list of commands.' # Startup message
print('\nType (H)elp for a list of commands.') # Startup message
usrPrompt = 2
try:

View File

@ -34,7 +34,8 @@ import tr
from fallback import RIPEMD160Hash
import l10n
# pylint: disable=too-many-locals, too-many-return-statements, too-many-branches, too-many-statements
# pylint: disable=too-many-locals, too-many-return-statements
# pylint: disable=too-many-branches, too-many-statements
logger = logging.getLogger('default')
@ -644,7 +645,8 @@ class objectProcessor(threading.Thread):
if decodeAddress(toAddress)[1] >= 3 \
and not BMConfigParser().safeGetBoolean(toAddress, 'chan'):
# If I'm not friendly with this person:
if not shared.isAddressInMyAddressBookSubscriptionsListOrWhitelist(fromAddress):
if not shared.isAddressInMyAddressBookSubscriptionsListOrWhitelist(
fromAddress):
requiredNonceTrialsPerByte = BMConfigParser().getint(
toAddress, 'noncetrialsperbyte')
requiredPayloadLengthExtraBytes = BMConfigParser().getint(

View File

@ -114,8 +114,9 @@ class smtpServerPyBitmessage(smtpd.SMTPServer):
return ret
def process_message(self, peer, mailfrom, rcpttos, data): # pylint: disable=too-many-locals, too-many-branches
def process_message(self, peer, mailfrom, rcpttos, data):
"""Process an email"""
# pylint: disable=too-many-locals, too-many-branches
# print 'Receiving message from:', peer
p = re.compile(".*<([^>]+)>")
if not hasattr(self.channel, "auth") or not self.channel.auth:

View File

@ -231,12 +231,13 @@ def check_sqlite():
conn.close()
def check_openssl(): # pylint: disable=too-many-branches, too-many-return-statements
def check_openssl():
"""Do openssl dependency check.
Here we are checking for openssl with its all dependent libraries
and version checking.
"""
# pylint: disable=too-many-branches, too-many-return-statements
# pylint: disable=protected-access, redefined-outer-name
ctypes = try_import('ctypes')
if not ctypes:
@ -365,6 +366,7 @@ def check_pyqt():
Here we are checking for PyQt4 with its version, as for it require
PyQt 4.8 or later.
"""
QtCore = try_import(
'PyQt4.QtCore', 'PyBitmessage requires PyQt 4.8 or later and Qt 4.7 or later.')

View File

@ -22,7 +22,7 @@ def genAckPayload(streamNumber=1, stealthLevel=0):
- level 1: a getpubkey request for a (random) dummy key hash
- level 2: a standard message, encrypted to a random pubkey
"""
if stealthLevel == 2: # Generate privacy-enhanced payload
if stealthLevel == 2: # Generate privacy-enhanced payload
# Generate a dummy privkey and derive the pubkey
dummyPubKeyHex = highlevelcrypto.privToPub(
hexlify(helper_random.randomBytes(32)))
@ -35,12 +35,12 @@ def genAckPayload(streamNumber=1, stealthLevel=0):
acktype = 2 # message
version = 1
elif stealthLevel == 1: # Basic privacy payload (random getpubkey)
elif stealthLevel == 1: # Basic privacy payload (random getpubkey)
ackdata = helper_random.randomBytes(32)
acktype = 0 # getpubkey
version = 4
else: # Minimum viable payload (non stealth)
else: # Minimum viable payload (non stealth)
ackdata = helper_random.randomBytes(32)
acktype = 2 # message
version = 1

View File

@ -53,3 +53,4 @@ def calculateTestnetAddressFromPubkey(pubkey):
numberOfZeroBytesOnBinaryBitcoinAddress += 1
binaryBitcoinAddress = binaryBitcoinAddress[1:]
base58encoded = arithmetic.changebase(binaryBitcoinAddress, 256, 58)
return "1" * numberOfZeroBytesOnBinaryBitcoinAddress + base58encoded

View File

@ -7,6 +7,7 @@ try:
haveQt = True
except ImportError:
haveQt = False
# pylint: disable=too-many-arguments
def search_translate(context, text):
@ -18,7 +19,7 @@ def search_translate(context, text):
def search_sql(xAddress="toaddress", account=None, folder="inbox", where=None, what=None, unreadOnly=False):
"""Perform a search in mailbox tables"""
# pylint: disable=too-many-arguments, too-many-branches
# pylint: disable=too-many-branches
if what is not None and what != "":
what = "%" + what + "%"
if where == search_translate("MainWindow", "To"):
@ -75,7 +76,6 @@ def search_sql(xAddress="toaddress", account=None, folder="inbox", where=None, w
def check_match(toAddress, fromAddress, subject, message, where=None, what=None):
"""Check if a single message matches a filter (used when new messages are added to messagelists)"""
# pylint: disable=too-many-arguments
if what is not None and what != "":
if where in (search_translate("MainWindow", "To"), search_translate("MainWindow", "All")):
if what.lower() not in toAddress.lower():

View File

@ -1,8 +1,8 @@
"""
Insert values into sent table
"""
from helper_sql import sqlExecute
from helper_sql import *
def insert(t):
"""Perform an insert into the `sent` table"""

View File

@ -101,7 +101,7 @@ def sqlStoredProcedure(procName):
sqlLock.release()
class SqlBulkExecute(object):
class SqlBulkExecute(object): # pylint: disable=no-init
"""This is used when you have to execute the same statement in a cycle."""
def __enter__(self):

View File

@ -4,7 +4,6 @@ Startup operations.
# pylint: disable=too-many-branches,too-many-statements
from __future__ import print_function
import configparser
import os
import platform
import sys
@ -21,6 +20,7 @@ from bmconfigparser import BMConfigParser
# the config files to stay in the application data folder.
StoreConfigFilesInSameDirectoryAsProgramByDefault = False
def loadConfig():
"""Load the config"""
config = BMConfigParser()
@ -116,7 +116,6 @@ def loadConfig():
updateConfig()
def updateConfig():
"""Save the config"""
config = BMConfigParser()

View File

@ -1,8 +1,8 @@
"""The Inventory singleton"""
# TODO make this dynamic, and watch out for frozen, like with messagetypes
import storage.sqlite
import storage.filesystem
import storage.sqlite
from bmconfigparser import BMConfigParser
from singleton import Singleton

View File

@ -64,25 +64,25 @@ else:
# comprehensive decoding tests
if time_format != DEFAULT_TIME_FORMAT:
try:
#Check day names
# Check day names
new_time_format = time_format
import sys
if sys.version_info >= (3, 0, 0) and time_format == '%%c':
time_format = '%c'
for i in range(7):
#this work for python2.7
# this work for python2.7
# unicode(time.strftime(time_format, (0, 0, 0, 0, 0, 0, i, 0, 0)), encoding)
#this code for the python3
# this code for the python3
(time.strftime(time_format, (0, 0, 0, 0, 0, 0, i, 0, 0))).encode()
#Check month names
# Check month names
for i in range(1, 13):
# unicode(time.strftime(time_format, (0, i, 0, 0, 0, 0, 0, 0, 0)), encoding)
(time.strftime(time_format, (0, i, 0, 0, 0, 0, 0, 0, 0))).encode()
#Check AM/PM
# Check AM/PM
(time.strftime(time_format, (0, 0, 0, 11, 0, 0, 0, 0, 0))).encode()
(time.strftime(time_format, (0, 0, 0, 13, 0, 0, 0, 0, 0))).encode()
#Check DST
# Check DST
(time.strftime(time_format, (0, 0, 0, 0, 0, 0, 0, 0, 1))).encode()
except:

View File

@ -119,4 +119,4 @@ if __name__ == "__main__":
nonce = do_opencl_pow(initialHash.encode("hex"), target_)
trialValue, = unpack(
'>Q', hashlib.sha512(hashlib.sha512(pack('>Q', nonce) + initialHash).digest()).digest()[0:8])
print ("{} - value {} < {}".format(nonce, trialValue, target_))
print("{} - value {} < {}".format(nonce, trialValue, target_))

View File

@ -294,7 +294,7 @@ def init():
global bitmsglib, bmpow
openclpow.initCL()
if "win32" == sys.platform:
if sys.platform == "win32":
if ctypes.sizeof(ctypes.c_voidp) == 4:
bitmsglib = 'bitmsghash32.dll'
else:
@ -323,7 +323,7 @@ def init():
elif platform == "android":
try:
bso = ctypes.CDLL('libbitmsghash.so')
except Exception as e:
except Exception:
bso = None
else:

View File

@ -185,7 +185,8 @@ def checkIPv4Address(host, hostStandardFormat, private=False):
logger.debug(
'Ignoring IP address in private range: %s', hostStandardFormat)
return hostStandardFormat if private else False
if host[0:2] >= '\xAC\x10'.encode('raw_unicode_escape') and host[0:2] < '\xAC\x20'.encode('raw_unicode_escape'): # 172.16/12
# 172.16/12
if host[0:2] >= '\xAC\x10'.encode('raw_unicode_escape') and host[0:2] < '\xAC\x20'.encode('raw_unicode_escape'):
if not private:
logger.debug(
'Ignoring IP address in private range: %s', hostStandardFormat)
@ -198,15 +199,15 @@ def checkIPv6Address(host, hostStandardFormat, private=False):
if host == ('\x00'.encode() * 15) + '\x01'.encode():
if not private:
logger.debug('Ignoring loopback address: {}'.format( hostStandardFormat))
logger.debug('Ignoring loopback address: {}'.format(hostStandardFormat))
return False
if host[0] == '\xFE' and (ord(host[1]) & 0xc0) == 0x80:
if not private:
logger.debug('Ignoring local address: {}'.format( hostStandardFormat))
logger.debug('Ignoring local address: {}'.format(hostStandardFormat))
return hostStandardFormat if private else False
if (ord(host[0:1]) & 0xfe) == 0xfc:
if not private:
logger.debug('Ignoring unique local address: {}'.format( hostStandardFormat))
logger.debug('Ignoring unique local address: {}'.format(hostStandardFormat))
return hostStandardFormat if private else False
return False if private else hostStandardFormat
@ -325,7 +326,7 @@ def assembleVersionMessage(remoteHost, remotePort, participatingStreams, server=
)
# = 127.0.0.1. This will be ignored by the remote host. The actual remote connected IP will be used.
#python3 need to check
# python3 need to check
payload += '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF'.encode() + pack('>L', 2130706433)
# we have a separate extPort and incoming over clearnet
@ -338,11 +339,10 @@ def assembleVersionMessage(remoteHost, remotePort, participatingStreams, server=
):
payload += pack('>H', extport)
elif checkSocksIP(remoteHost) and server: # incoming connection over Tor
payload += pack('>H', int(BMConfigParser().safeGet('bitmessagesettings', 'onionport')))
payload += pack('>H', int(BMConfigParser().safeGet('bitmessagesettings', 'onionport')))
else: # no extport and not incoming over Tor
payload += pack('>H', int(BMConfigParser().safeGet('bitmessagesettings', 'port')))
if nodeid is not None:
payload += nodeid[0:8]
else:
@ -374,7 +374,7 @@ def assembleErrorMessage(fatal=0, banTime=0, inventoryVector='', errorText=''):
payload += encodeVarint(len(inventoryVector))
payload += inventoryVector.encode() if type(payload) == bytes else inventoryVector
payload += encodeVarint(len(errorText))
payload += errorText.encode() if type(payload)== bytes else errorText
payload += errorText.encode() if type(payload) == bytes else errorText
return CreatePacket('error', payload)

View File

@ -1,6 +1,5 @@
import queue as Queue
"""Most of the queues used by bitmessage threads are defined here."""
import queue as Queue
import threading
import time

View File

@ -1,3 +1,3 @@
from threading import Semaphore
kivyuisignaler = Semaphore(0)
kivyuisignaler = Semaphore(0)

View File

@ -101,6 +101,7 @@ def isAddressInMyAddressBookSubscriptionsListOrWhitelist(address):
return True
return False
def decodeWalletImportFormat(WIFstring):
# pylint: disable=inconsistent-return-statements
"""
@ -116,7 +117,7 @@ def decodeWalletImportFormat(WIFstring):
' 6 characters of the PRIVATE key: {}'.format(str(WIFstring)[:6])
)
os._exit(0)
os._exit(0) # pylint: disable=protected-access
if privkey[0:1] == '\x80'.encode()[1:]: # checksum passed
return privkey[1:]

View File

@ -75,7 +75,7 @@ class singleinstance(object):
fcntl.lockf(self.fp, fcntl.LOCK_EX | fcntl.LOCK_NB)
self.lockPid = os.getpid()
except IOError:
print ('Another instance of this application is already running')
print('Another instance of this application is already running')
sys.exit(-1)
else:
pidLine = "%i\n" % self.lockPid
@ -95,10 +95,10 @@ class singleinstance(object):
os.close(self.fd)
else:
fcntl.lockf(self.fp, fcntl.LOCK_UN)
except Exception as e:
except Exception:
pass
return
print ("Cleaning up lockfile")
print("Cleaning up lockfile")
try:
if sys.platform == 'win32':
if hasattr(self, 'fd'):

View File

@ -109,4 +109,4 @@ availabe_credit = 0
in_sent_method = False
in_search_mode = False
in_search_mode = False

View File

@ -6,17 +6,17 @@ import os
import state
class translateClass:
class translateClass(object):
"""
This is used so that the translateText function can be used
when we are in daemon mode and not using any QT functions.
"""
# pylint: disable=old-style-class,too-few-public-methods
# pylint: disable=too-few-public-methods
def __init__(self, context, text):
self.context = context
self.text = text
def arg(self, argument): # pylint: disable=unused-argument
def arg(self, _):
"""Replace argument placeholders"""
if '%' in self.text:
return translateClass(self.context, self.text.replace('%', '', 1))
@ -25,7 +25,7 @@ class translateClass:
return self.text
def _translate(context, text, disambiguation=None, encoding=None, n=None): # pylint: disable=unused-argument
def _translate(context, text, disambiguation=None, encoding=None, n=None): # pylint: disable=unused-argument
return translateText(context, text, n)
@ -39,12 +39,12 @@ def translateText(context, text, n=None):
try:
from PyQt4 import QtCore, QtGui
except Exception as err:
print ('PyBitmessage requires PyQt unless you want to run it as a daemon and interact with it using the API\
print('PyBitmessage requires PyQt unless you want to run it as a daemon and interact with it using the API\
.You can download PyQt from http://www.riverbankcomputing.com/software/pyqt/download\
or by searching Google for \'PyQt Download\'.\
If you want to run in daemon mode, see https://bitmessage.org/wiki/Daemon')
print ('Error message:', err)
os._exit(0) # pylint: disable=protected-access
print('Error message:', err)
os._exit(0) # pylint: disable=protected-access
if n is None:
return QtGui.QApplication.translate(context, text)

View File

@ -1,8 +1,8 @@
# pylint: disable=too-many-statements,too-many-branches,protected-access,no-self-use
"""
"""
Complete UPnP port forwarding implementation in separate thread.
Reference: http://mattscodecave.com/posts/using-python-and-upnp-to-forward-a-port
"""
# pylint: disable=too-many-statements,too-many-branches,protected-access,no-self-use
import httplib
import socket
@ -19,8 +19,8 @@ import tr
from bmconfigparser import BMConfigParser
from debug import logger
from network.connectionpool import BMConnectionPool
from network.threads import StoppableThread
from network.node import Peer
from network.threads import StoppableThread
def createRequestXML(service, action, arguments=None):
@ -83,6 +83,7 @@ class UPnPError(Exception):
class Router: # pylint: disable=old-style-class
"""Encapulate routing"""
name = ""
path = ""
address = None
@ -152,7 +153,6 @@ class Router: # pylint: disable=old-style-class
def DeletePortMapping(self, externalPort, protocol):
"""Delete UPnP port mapping"""
resp = self.soapRequest(self.upnp_schema + ':1', 'DeletePortMapping', [
('NewRemoteHost', ''),
('NewExternalPort', str(externalPort)),
@ -163,16 +163,12 @@ class Router: # pylint: disable=old-style-class
def GetExternalIPAddress(self):
"""Get the external address"""
resp = self.soapRequest(
self.upnp_schema + ':1', 'GetExternalIPAddress')
resp = self.soapRequest(self.upnp_schema + ':1', 'GetExternalIPAddress')
dom = parseString(resp.read())
return dom.getElementsByTagName(
'NewExternalIPAddress')[0].childNodes[0].data
return dom.getElementsByTagName('NewExternalIPAddress')[0].childNodes[0].data
def soapRequest(self, service, action, arguments=None):
"""Make a request to a router"""
conn = httplib.HTTPConnection(self.routerPath.hostname, self.routerPath.port)
conn.request(
'POST',
@ -223,7 +219,6 @@ class uPnPThread(StoppableThread):
def run(self):
"""Start the thread to manage UPnP activity"""
logger.debug("Starting UPnP thread")
logger.debug("Local IP: %s", self.localIP)
lastSent = 0
@ -261,16 +256,12 @@ class uPnPThread(StoppableThread):
self.routers.append(newRouter)
self.createPortMapping(newRouter)
try:
self_peer = Peer(
newRouter.GetExternalIPAddress(),
self.extPort
)
self_peer = Peer(newRouter.GetExternalIPAddress(), self.extPort)
except:
logger.debug('Failed to get external IP')
else:
with knownnodes.knownNodesLock:
knownnodes.addKnownNode(
1, self_peer, is_self=True)
knownnodes.addKnownNode(1, self_peer, is_self=True)
queues.UISignalQueue.put(('updateStatusBar', tr._translate(
"MainWindow", 'UPnP port mapping established on port %1'
).arg(str(self.extPort))))
@ -296,12 +287,12 @@ class uPnPThread(StoppableThread):
deleted = True
self.deletePortMapping(router)
if deleted:
queues.UISignalQueue.put(('updateStatusBar', tr._translate("MainWindow", 'UPnP port mapping removed')))
queues.UISignalQueue.put(
('updateStatusBar', tr._translate("MainWindow", 'UPnP port mapping removed')))
logger.debug("UPnP thread done")
def getLocalIP(self):
"""Get the local IP of the node"""
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.connect((uPnPThread.GOOGLE_DNS, 1))
@ -309,7 +300,6 @@ class uPnPThread(StoppableThread):
def sendSearchRouter(self):
"""Querying for UPnP services"""
ssdpRequest = "M-SEARCH * HTTP/1.1\r\n" + \
"HOST: %s:%d\r\n" % (uPnPThread.SSDP_ADDR, uPnPThread.SSDP_PORT) + \
"MAN: \"ssdp:discover\"\r\n" + \
@ -324,7 +314,6 @@ class uPnPThread(StoppableThread):
def createPortMapping(self, router):
"""Add a port mapping"""
for i in range(50):
try:
localIP = self.localIP
@ -336,10 +325,7 @@ class uPnPThread(StoppableThread):
extPort = randint(32767, 65535)
logger.debug(
"Attempt %i, requesting UPnP mapping for %s:%i on external port %i",
i,
localIP,
self.localPort,
extPort)
i, localIP, self.localPort, extPort)
router.AddPortMapping(extPort, self.localPort, localIP, 'TCP', 'BitMessage')
self.extPort = extPort
BMConfigParser().set('bitmessagesettings', 'extport', str(extPort))