From zothar at freenetproject.org Wed Jan 3 04:12:03 2007 From: zothar at freenetproject.org (zothar at freenetproject.org) Date: Wed, 3 Jan 2007 04:12:03 +0000 (UTC) Subject: [Pyfreenet] r11549 - trunk/apps/pyFreenet Message-ID: <20070103041203.3D20420AFA1@emu.freenetproject.org> Author: zothar Date: 2007-01-03 04:12:02 +0000 (Wed, 03 Jan 2007) New Revision: 11549 Modified: trunk/apps/pyFreenet/refbot.py Log: refbot: Don't repeat channel greeting/spam if only trading with other bots. Modified: trunk/apps/pyFreenet/refbot.py =================================================================== --- trunk/apps/pyFreenet/refbot.py 2007-01-03 02:10:48 UTC (rev 11548) +++ trunk/apps/pyFreenet/refbot.py 2007-01-03 04:12:02 UTC (rev 11549) @@ -591,7 +591,7 @@ "Hi, I'm %s's noderef swap bot. To swap a ref with me, /msg me or say %s: your_ref_url (%d ref%s to go)" \ % ( self.nodenick, self.nick, refs_to_go, refs_plural_str ) ) - if(self.greet_interval > 0): + if(self.greet_interval > 0 and not self.bot2bot_trades_only_enabled): self.after(self.greet_interval, self.greetChannel) #@-node:greetChannel @@ -709,7 +709,7 @@ self.channel, "is a Freenet NodeRef Swap-bot (install pyfcp from http://downloads.freenetproject.org/alpha/pyFreenet/pyFreenet-latest.tbz then run refbot.py; run updater.py periodically)%s" % ( bot2bot_string ) ) - if(self.spam_interval > 0): + if(self.spam_interval > 0 and not self.bot2bot_trades_only_enabled): self.after(self.spam_interval, self.spamChannel) #@-node:spamChannel @@ -1026,7 +1026,7 @@ now = time.time() t = now - self.timeLastChanGreeting - if(self.greet_interval > 0 and t > self.greet_interval): + if(self.greet_interval > 0 and t > self.greet_interval and not self.bot2bot_trades_only_enabled): self.greetChannel() #@-node:thrd From zothar at freenetproject.org Wed Jan 3 22:29:37 2007 From: zothar at freenetproject.org (zothar at freenetproject.org) Date: Wed, 3 Jan 2007 22:29:37 +0000 (UTC) Subject: [Pyfreenet] r11562 - trunk/apps/pyFreenet Message-ID: <20070103222937.853E39BB33@emu.freenetproject.org> Author: zothar Date: 2007-01-03 22:29:36 +0000 (Wed, 03 Jan 2007) New Revision: 11562 Modified: trunk/apps/pyFreenet/refbot.py Log: refbot: Tweak some setup prompts and add a check for _bot being used in the node's name given by the user. Modified: trunk/apps/pyFreenet/refbot.py =================================================================== --- trunk/apps/pyFreenet/refbot.py 2007-01-03 20:49:48 UTC (rev 11561) +++ trunk/apps/pyFreenet/refbot.py 2007-01-03 22:29:36 UTC (rev 11562) @@ -300,16 +300,22 @@ opts = {} + print print "** You will need to be sure to register your IRC nick with freenode" print "** so that someone else can't /msg your bot and shut it down" print "** while you're away. Use /msg nickserv register " - opts['ownerircnick'] = self.prompt("Enter your usual freenode.net nick") + opts['ownerircnick'] = self.prompt("Enter your usual freenode.net IRC nick") + print + print "** Give a short 12 character or less version of your node's name; The bot will tack \"_bot\" onto the end of it to form it's IRC nick" while( 1 ): opts['usernick'] = self.prompt("Enter your node's name", opts['ownerircnick']) if( len( opts['usernick'] ) > 12 ): - print "The node's name used by the bot cannot be any longer than 12 characters because the bot's IRC nickname cannot be any longer than 16 characters and the bot IRC nickname will be this value with '_bot' added to the end." + print "The node's name used by the bot cannot be any longer than 12 characters because the bot's IRC nickname cannot be any longer than 16 characters and the bot IRC nickname will be this value with '_bot' added to the end. Try again." + elif( opts['usernick'][ -4: ].lower() == "_bot" ): + print "The node's name used by the bot should not end in \"_bot\" because the bot IRC nickname will use the this node's name with '_bot' added to the end. Try again." else: break + print; print "** You need to choose a new password, since this bot will" print "** register this password with freenode 'nickserv', and" print "** on subsequent runs, will identify with this password" @@ -324,7 +330,7 @@ opts['ircport'] = int(opts['ircport']) break except: - print "Invalid port '%s'" % opts['ircport'] + print "Invalid port '%s'. Try again." % opts['ircport'] opts['tmci_host'] = self.prompt("Node TMCI (telnet) hostname", "127.0.0.1") @@ -334,7 +340,7 @@ opts['tmci_port'] = int(opts['tmci_port']) break except: - print "Invalid port '%s'" % opts['tmci_port'] + print "Invalid port '%s'. Try again." % opts['tmci_port'] opts['fcp_host'] = self.prompt("Node FCP hostname", "127.0.0.1") @@ -344,7 +350,7 @@ opts['fcp_port'] = int(opts['fcp_port']) break except: - print "Invalid port '%s'" % opts['fcp_port'] + print "Invalid port '%s'. Try again." % opts['fcp_port'] self.setup_bot2bot( opts ) #self.setup_bot2bot_announce( opts ) **FIXME** Not implemented yet From zothar at freenetproject.org Tue Jan 9 01:37:26 2007 From: zothar at freenetproject.org (zothar at freenetproject.org) Date: Tue, 9 Jan 2007 01:37:26 +0000 (UTC) Subject: [Pyfreenet] r11584 - trunk/apps/pyFreenet Message-ID: <20070109013726.BCF559BB91@emu.freenetproject.org> Author: zothar Date: 2007-01-09 01:37:25 +0000 (Tue, 09 Jan 2007) New Revision: 11584 Modified: trunk/apps/pyFreenet/refbot.py Log: refbot: Track some peer stats. Cap refsperrun to 20. Modified: trunk/apps/pyFreenet/refbot.py =================================================================== --- trunk/apps/pyFreenet/refbot.py 2007-01-08 20:02:10 UTC (rev 11583) +++ trunk/apps/pyFreenet/refbot.py 2007-01-09 01:37:25 UTC (rev 11584) @@ -50,6 +50,7 @@ """ peer is telling us to do something only owners can tell us to """ + #@-node:exceptions #@+node:class FreenetNodeRefBot class FreenetNodeRefBot(MiniBot): @@ -67,6 +68,7 @@ """ Takes one optional argument - alternative pathname """ + self.bots = {} self.botIdentities = {} @@ -98,6 +100,11 @@ except: self.config_version = 0 needToSave = True + + self.max_cpeers = 30 + self.max_tpeers = 50 + self.cpeers = None + self.tpeers = None # now, gotta map from config file to constructor keyword kw = {} @@ -218,6 +225,9 @@ if(self.number_of_refs_to_collect <= 0): print "refsperrun is at or below zero. Nothing to do. Quitting." sys.exit( 1 ); + if(self.number_of_refs_to_collect > 20): + self.number_of_refs_to_collect = 20 + needToSave = True if(opts.has_key('telnethost')): self.tmci_host = opts['telnethost'] needToSave = True @@ -281,6 +291,8 @@ self.adderThreads = [] self.identityCheckerThreads = [] + self.peerUpdaterThreads = [] + self.peer_update_interval = 60 self.api_options = [] if(self.bot2bot_enabled): self.api_options.append( "bot2bot" ); @@ -505,11 +517,13 @@ if self._restarted: self.action(self.channel, "restarted because the server was ignoring it") else: + self.getPeerUpdate() self.greetChannel() - + self.after(10, self.spamChannel) self.after(1, self.process_any_identities_checked) self.after(0.5, self.process_any_refs_added) + self.after(1, self.process_peer_updates) log("****** on_ready") @@ -578,9 +592,22 @@ return True; #@-node:addBotIdentity + #@+node:getPeerUpdate + def getPeerUpdate(self): + + peerUpdaterThread = GetPeerUpdate(self.fcp_host, self.fcp_port) + self.peerUpdaterThreads.append(peerUpdaterThread) + peerUpdaterThread.start() + if(self.peer_update_interval > 0): + self.after(self.peer_update_interval, self.getPeerUpdate) + + #@-node:getPeerUpdate #@+node:greetChannel def greetChannel(self): + if(self.tpeers == None): + self.after(0.25, self.greetChannel); + return; refs_to_go = self.number_of_refs_to_collect - self.nrefs refs_plural_str = '' if( refs_to_go > 1 ): @@ -708,6 +735,10 @@ """ Periodic plugs """ + + if(self.tpeers == None): + self.after(5, self.spamChannel); + return; bot2bot_string = ''; if( self.bot2bot_enabled ): bot2bot_string = "(bot2bot)"; @@ -989,6 +1020,18 @@ self.after(0.5, self.process_any_refs_added) #@-node:process_any_refs_added + #@+node:process_peer_updates + def process_peer_updates(self): + if(len(self.peerUpdaterThreads) != 0): + for peerUpdaterThread in self.peerUpdaterThreads: + if(not peerUpdaterThread.isAlive()): + peerUpdaterThread.join() + self.peerUpdaterThreads.remove(peerUpdaterThread) + self.cpeers = peerUpdaterThread.cpeers + self.tpeers = peerUpdaterThread.tpeers + self.after(1, self.process_peer_updates) + + #@-node:process_peer_updates #@+node:prompt def prompt(self, msg, dflt=None): if dflt: @@ -1523,6 +1566,49 @@ return #@-node:class CheckIdentityWithNode +#@+node:class GetPeerUpdate +class GetPeerUpdate(threading.Thread): + def __init__(self, fcp_host, fcp_port): + threading.Thread.__init__(self) + self.fcp_host = fcp_host + self.fcp_port = fcp_port + self.status = -1 + self.status_msg = None + self.cpeers = None + self.tpeers = None + + def run(self): + cpeers = 0 + tpeers = 0 + try: + f = fcp.FCPNode( host = self.fcp_host, port = self.fcp_port ) + returned_peerlist = f.listpeers( WithVolatile = True ) + except Exception, msg: + self.status = -1 + self.status_msg = msg + f.shutdown() + return + try: + f.shutdown(); + except Exception, msg: + pass # Ignore a failure to end the FCP session as we've got what we want now + if( type( returned_peerlist ) != type( [] )): + returned_peerlist = [ returned_peerlist ]; + for peer in returned_peerlist: + if( peer[ "header" ] != "Peer" ): + break + if( not peer.has_key( "volatile.status" )): + continue; + if( peer[ "volatile.status" ] == "CONNECTED" or peer[ "volatile.status" ] == "BACKED OFF" ): + cpeers += 1 + tpeers += 1 + self.status = 0 + self.status_msg = "GetPeerUpdate completed normally" + self.cpeers = cpeers + self.tpeers = tpeers + return + +#@-node:class GetPeerUpdate #@+node:main def main(): From zothar at freenetproject.org Tue Jan 9 02:25:04 2007 From: zothar at freenetproject.org (zothar at freenetproject.org) Date: Tue, 9 Jan 2007 02:25:04 +0000 (UTC) Subject: [Pyfreenet] r11585 - trunk/apps/pyFreenet Message-ID: <20070109022504.B12E49BBD2@emu.freenetproject.org> Author: zothar Date: 2007-01-09 02:25:01 +0000 (Tue, 09 Jan 2007) New Revision: 11585 Modified: trunk/apps/pyFreenet/refbot.py Log: refbot: Attempt to not add peers beyond 30 connected or 50 total. Modified: trunk/apps/pyFreenet/refbot.py =================================================================== --- trunk/apps/pyFreenet/refbot.py 2007-01-09 01:37:25 UTC (rev 11584) +++ trunk/apps/pyFreenet/refbot.py 2007-01-09 02:25:01 UTC (rev 11585) @@ -608,6 +608,8 @@ if(self.tpeers == None): self.after(0.25, self.greetChannel); return; + if( self.number_of_refs_to_collect <= 0 ): + return refs_to_go = self.number_of_refs_to_collect - self.nrefs refs_plural_str = '' if( refs_to_go > 1 ): @@ -738,7 +740,9 @@ if(self.tpeers == None): self.after(5, self.spamChannel); - return; + return + if( self.number_of_refs_to_collect <= 0 ): + return bot2bot_string = ''; if( self.bot2bot_enabled ): bot2bot_string = "(bot2bot)"; @@ -753,18 +757,25 @@ #@+node:thankChannel def thankChannelThenDie(self): - refs_plural_str = '' - if( self.number_of_refs_to_collect > 1 ): - refs_plural_str = "s" - self.privmsg( - self.channel, - "OK, I've got my %d noderef%s. Thanks all." \ - % ( self.number_of_refs_to_collect, refs_plural_str ) - ) - self.privmsg( - self.channel, - "Bye" - ) + if( self.nrefs > 0 ): + if( self.number_of_refs_to_collect > 0 ): + refs_plural_str = '' + if( self.number_of_refs_to_collect > 1 ): + refs_plural_str = "s" + self.privmsg( + self.channel, + "OK, I've got my %d noderef%s. Thanks all." \ + % ( self.number_of_refs_to_collect, refs_plural_str ) + ) + else: + self.privmsg( + self.channel, + "OK, I've got all the noderefs I need. Thanks all." + ) + self.privmsg( + self.channel, + "Bye" + ) self.after(4, self.die) #@-node:thankChannelThenDie @@ -1027,6 +1038,14 @@ if(not peerUpdaterThread.isAlive()): peerUpdaterThread.join() self.peerUpdaterThreads.remove(peerUpdaterThread) + while(self.number_of_refs_to_collect > 0 and (self.number_of_refs_to_collect - self.nrefs) > 0 and ((peerUpdaterThread.cpeers + (self.number_of_refs_to_collect - self.nrefs)) > self.max_cpeers)): + self.number_of_refs_to_collect -= 1; + while(self.number_of_refs_to_collect > 0 and (self.number_of_refs_to_collect - self.nrefs) > 0 and ((peerUpdaterThread.tpeers + (self.number_of_refs_to_collect - self.nrefs)) > self.max_tpeers)): + self.number_of_refs_to_collect -= 1; + if(self.number_of_refs_to_collect <= 0): + log("Don't need any more refs, now terminating!") + self.after(3, self.thankChannelThenDie) + break self.cpeers = peerUpdaterThread.cpeers self.tpeers = peerUpdaterThread.tpeers self.after(1, self.process_peer_updates) From zothar at freenetproject.org Fri Jan 12 22:29:33 2007 From: zothar at freenetproject.org (zothar at freenetproject.org) Date: Fri, 12 Jan 2007 22:29:33 +0000 (UTC) Subject: [Pyfreenet] r11593 - trunk/apps/pyFreenet Message-ID: <20070112222933.0CDD79BB33@emu.freenetproject.org> Author: zothar Date: 2007-01-12 22:29:32 +0000 (Fri, 12 Jan 2007) New Revision: 11593 Modified: trunk/apps/pyFreenet/minibot.py Log: refbot: Exit if we crash more than several times. Use exponential "backoff" for the delay between reconnects after each crash. Modified: trunk/apps/pyFreenet/minibot.py =================================================================== --- trunk/apps/pyFreenet/minibot.py 2007-01-11 23:08:35 UTC (rev 11592) +++ trunk/apps/pyFreenet/minibot.py 2007-01-12 22:29:32 UTC (rev 11593) @@ -106,6 +106,8 @@ self.rxbuf = [] self.txqueue = [] self.txtimes = [] + self.restartCount = 0 + self.restartDelay = 45 #@-node:__init__ #@+node:run @@ -147,8 +149,14 @@ traceback.print_exc() self.sock.close() self.hasIdentified = False - log("** ERROR: bot crashed, restarting in 45 seconds...") - time.sleep(45) # a repeatedly crashing bot can be very annoying + self.restartCount += 1 + if( self.restartCount > 7 ): + log("** ERROR: bot crashed and won't be restarted as it apparently needs user attention if it crashes this many times; please consider filing a bug report at https://bugs.freenetproject.org/ if it seems appropriate.") + self._keepRunning = False + break + log("** ERROR: bot crashed, restarting in %d seconds..." % (self.restartDelay)) + time.sleep(self.restartDelay) # a repeatedly crashing bot can be very annoying to other IRCers on the channel + self.restartDelay = self.restartDelay * 2 # Exponential "backoff" continue if not self._keepRunning: From zothar at freenetproject.org Fri Jan 12 22:35:56 2007 From: zothar at freenetproject.org (zothar at freenetproject.org) Date: Fri, 12 Jan 2007 22:35:56 +0000 (UTC) Subject: [Pyfreenet] r11594 - trunk/apps/pyFreenet Message-ID: <20070112223556.4A71320AFA2@emu.freenetproject.org> Author: zothar Date: 2007-01-12 22:35:56 +0000 (Fri, 12 Jan 2007) New Revision: 11594 Modified: trunk/apps/pyFreenet/refbot.py Log: refbot: State the IRC nick of the bot's owner and it's refbot.py and minibot.py SVN revisions in the spamChannel message Modified: trunk/apps/pyFreenet/refbot.py =================================================================== --- trunk/apps/pyFreenet/refbot.py 2007-01-12 22:29:32 UTC (rev 11593) +++ trunk/apps/pyFreenet/refbot.py 2007-01-12 22:35:56 UTC (rev 11594) @@ -748,7 +748,7 @@ bot2bot_string = "(bot2bot)"; self.action( self.channel, - "is a Freenet NodeRef Swap-bot (install pyfcp from http://downloads.freenetproject.org/alpha/pyFreenet/pyFreenet-latest.tbz then run refbot.py; run updater.py periodically)%s" % ( bot2bot_string ) + "is a Freenet NodeRef Swap-bot owned by %s (install pyfcp from http://downloads.freenetproject.org/alpha/pyFreenet/pyFreenet-latest.tbz then run refbot.py; run updater.py periodically)(r%s/r%s)%s" % ( self.owner, FreenetNodeRefBot.svnRevision, MiniBot.svnRevision, bot2bot_string ) ) if(self.spam_interval > 0 and not self.bot2bot_trades_only_enabled): self.after(self.spam_interval, self.spamChannel) From zothar at freenetproject.org Fri Jan 12 22:42:49 2007 From: zothar at freenetproject.org (zothar at freenetproject.org) Date: Fri, 12 Jan 2007 22:42:49 +0000 (UTC) Subject: [Pyfreenet] r11595 - trunk/apps/pyFreenet Message-ID: <20070112224249.69ED520AFA1@emu.freenetproject.org> Author: zothar Date: 2007-01-12 22:42:49 +0000 (Fri, 12 Jan 2007) New Revision: 11595 Modified: trunk/apps/pyFreenet/refbot.py Log: refbot: slow down the queuing of ref line sends in getrefdirect (used inter-bot ref trading) Modified: trunk/apps/pyFreenet/refbot.py =================================================================== --- trunk/apps/pyFreenet/refbot.py 2007-01-12 22:35:56 UTC (rev 11594) +++ trunk/apps/pyFreenet/refbot.py 2007-01-12 22:42:49 UTC (rev 11595) @@ -1275,7 +1275,7 @@ nextWhen = 0; for nodeRefKey in nodeRefKeys: self.after( nextWhen, self.privmsg, "refdirect %s=%s" % ( nodeRefKey, self.bot.nodeRef[ nodeRefKey ] )) - nextWhen += random.randint(5,10) # 5-10 seconds between each line + nextWhen += random.randint(7,14) # 7-14 seconds between each line self.after( nextWhen, self.privmsg, "refdirect End" ) #@-node:cmd_getrefdirect From zothar at freenetproject.org Fri Jan 12 22:46:04 2007 From: zothar at freenetproject.org (zothar at freenetproject.org) Date: Fri, 12 Jan 2007 22:46:04 +0000 (UTC) Subject: [Pyfreenet] r11596 - trunk/apps/pyFreenet Message-ID: <20070112224604.8FF5F20AFA1@emu.freenetproject.org> Author: zothar Date: 2007-01-12 22:45:58 +0000 (Fri, 12 Jan 2007) New Revision: 11596 Modified: trunk/apps/pyFreenet/minibot.py Log: refbot: Slow down the bot's sending of lines to the IRC server since we were still getting kicked for exceed flood Modified: trunk/apps/pyFreenet/minibot.py =================================================================== --- trunk/apps/pyFreenet/minibot.py 2007-01-12 22:42:49 UTC (rev 11595) +++ trunk/apps/pyFreenet/minibot.py 2007-01-12 22:45:58 UTC (rev 11596) @@ -643,8 +643,8 @@ def _sender(self): fast_send_time = 0.5 - slow_send_time = 2.1 - check_time_range = 20 + slow_send_time = 2.5 + check_time_range = 30 slow_send_time_threshold = 6 next_send_time = fast_send_time self.txtimes.append(time.time()) From zothar at freenetproject.org Fri Jan 19 15:16:00 2007 From: zothar at freenetproject.org (zothar at freenetproject.org) Date: Fri, 19 Jan 2007 15:16:00 +0000 (UTC) Subject: [Pyfreenet] r11609 - trunk/apps/pyFreenet Message-ID: <20070119151600.9A6CF9BBD6@emu.freenetproject.org> Author: zothar Date: 2007-01-19 15:15:58 +0000 (Fri, 19 Jan 2007) New Revision: 11609 Modified: trunk/apps/pyFreenet/refbot.py Log: refbot: Fix the bot2bot ref added log message Modified: trunk/apps/pyFreenet/refbot.py =================================================================== --- trunk/apps/pyFreenet/refbot.py 2007-01-18 18:28:01 UTC (rev 11608) +++ trunk/apps/pyFreenet/refbot.py 2007-01-19 15:15:58 UTC (rev 11609) @@ -968,7 +968,7 @@ refs_plural_str = '' if( refs_to_go > 1 ): refs_plural_str = "s" - log("** Added ref via bot2bot trade with adderThread.sender_irc_nick (%d ref%s to go)" % ( refs_to_go, refs_plural_str )) + log("** Added ref via bot2bot trade with %s (%d ref%s to go)" % ( adderThread.sender_irc_nick, refs_to_go, refs_plural_str )) if self.nrefs >= self.number_of_refs_to_collect: log("Got our %d refs, now terminating!" % ( self.number_of_refs_to_collect )) self.after(3, self.thankChannelThenDie) From zothar at freenetproject.org Fri Jan 19 15:35:28 2007 From: zothar at freenetproject.org (zothar at freenetproject.org) Date: Fri, 19 Jan 2007 15:35:28 +0000 (UTC) Subject: [Pyfreenet] r11610 - trunk/apps/pyFreenet Message-ID: <20070119153528.992089BBD8@emu.freenetproject.org> Author: zothar Date: 2007-01-19 15:35:27 +0000 (Fri, 19 Jan 2007) New Revision: 11610 Modified: trunk/apps/pyFreenet/minibot.py trunk/apps/pyFreenet/refbot.py Log: refbot: quit like we do in updater.py: give the user a chance to see why we're quitting if they're on Windows. Modified: trunk/apps/pyFreenet/minibot.py =================================================================== --- trunk/apps/pyFreenet/minibot.py 2007-01-19 15:15:58 UTC (rev 11609) +++ trunk/apps/pyFreenet/minibot.py 2007-01-19 15:35:27 UTC (rev 11610) @@ -18,6 +18,13 @@ import time import traceback +has_platform_module = False; +try: + import platform; + has_platform_module = True; +except: + pass; + #@-node:imports #@+node:globals progname = sys.argv[0] @@ -162,6 +169,8 @@ if not self._keepRunning: self.sock.close() break + + my_exit( 0 ); #@-node:run #@+node:connect @@ -263,7 +272,7 @@ waitseconds = int( waitsecondsbuf ) except: print "Failed to parse '%s' as an integer. Perhaps minibot.py needs an update for an IRC server behavior change." % ( waitsecondsbuf ) - sys.exit( 1 ); + my_exit( 1 ); log("Just registered password, waiting %d seconds..." % ( waitseconds )) self.after(waitseconds + 1, self.registerPassword) return @@ -948,6 +957,13 @@ bot.run() #@-node:main +#@+node:my_exit +def my_exit( exit_status ): + if( not has_platform_module or ( has_platform_module and "Windows" == platform.system())): + raw_input( "Hit Enter or Return to continue..." ); + sys.exit( exit_status ); + +#@+node:my_exit #@+node:mainline if __name__ == '__main__': main() Modified: trunk/apps/pyFreenet/refbot.py =================================================================== --- trunk/apps/pyFreenet/refbot.py 2007-01-19 15:15:58 UTC (rev 11609) +++ trunk/apps/pyFreenet/refbot.py 2007-01-19 15:35:27 UTC (rev 11610) @@ -77,7 +77,7 @@ fcpnodepy_revision = fcp.FCPNode.svnRevision; except: print "This version of the refbot requires a newer version of fcp/node.py. Please from https://emu.freenetproject.org/svn/trunk/apps/pyFreenet/fcp/node.py and try again."; - sys.exit( 1 ); + minibot.my_exit( 1 ); # determine a config file path if not cfgFile: @@ -176,10 +176,10 @@ needToSave = True if(not self.bot2bot_enabled and self.bot2bot_trades_only_enabled): print "bot2bot communication is disabled, but trading with other bots only is enabled. This does not make sense. Quitting." - sys.exit( 1 ); + minibot.my_exit( 1 ); if(not self.bot2bot_trades_enabled and self.bot2bot_trades_only_enabled): print "bot2bot ref trading is disabled, but trading with other bots only is enabled. This does not make sense. Quitting." - sys.exit( 1 ); + minibot.my_exit( 1 ); if(opts.has_key('ircchannel')): self.chan = opts['ircchannel'] else: @@ -200,7 +200,7 @@ self.greet_interval = int( opts['greetinterval'] ) except: print "Seems you've a bogus value for greetinterval in your config file. Bailing." - sys.exit( 1 ); + minibot.my_exit( 1 ); else: self.greet_interval = 1800 needToSave = True @@ -209,7 +209,7 @@ self.spam_interval = int( opts['spaminterval'] ) except: print "Seems you've a bogus value for spaminterval in your config file. Bailing." - sys.exit( 1 ); + minibot.my_exit( 1 ); else: self.spam_interval = 7200 needToSave = True @@ -218,13 +218,13 @@ self.number_of_refs_to_collect = int( opts['refsperrun'] ) except: print "Seems you've a bogus value for refsperrun in your config file. Bailing." - sys.exit( 1 ); + minibot.my_exit( 1 ); else: self.number_of_refs_to_collect = 10 needToSave = True if(self.number_of_refs_to_collect <= 0): print "refsperrun is at or below zero. Nothing to do. Quitting." - sys.exit( 1 ); + minibot.my_exit( 1 ); if(self.number_of_refs_to_collect > 20): self.number_of_refs_to_collect = 20 needToSave = True @@ -265,7 +265,7 @@ f = fcp.FCPNode( host = self.fcp_host, port = self.fcp_port ) if( f.nodeBuild < self.minimumNodeBuild ): print "This version of the refbot requires your node be running build %d or higher. Please upgrade your Freenet node and try again." % ( self.minimumNodeBuild ); - sys.exit( 1 ); + minibot.my_exit( 1 ); try: noderef = f.refstats(); if( type( noderef ) == type( [] )): @@ -273,11 +273,11 @@ self.nodeIdentity = noderef[ "identity" ]; except Exception, msg: print "Failed to get the node's identity via FCP. This is an odd error this refbot developer is not sure of a reason for."; - sys.exit( 1 ); + minibot.my_exit( 1 ); f.shutdown() except Exception, msg: print "Failed to connect to node via FCP (%s:%d). Check your fcp host and port settings on both the node and the bot config." % ( self.fcp_host, self.fcp_port ); - sys.exit( 1 ); + minibot.my_exit( 1 ); del noderef[ "header" ]; self.nodeRef = noderef; From zothar at freenetproject.org Thu Jan 25 03:40:47 2007 From: zothar at freenetproject.org (zothar at freenetproject.org) Date: Thu, 25 Jan 2007 03:40:47 +0000 (UTC) Subject: [Pyfreenet] r11612 - trunk/apps/pyFreenet Message-ID: <20070125034047.812869BB33@emu.freenetproject.org> Author: zothar Date: 2007-01-25 03:40:46 +0000 (Thu, 25 Jan 2007) New Revision: 11612 Modified: trunk/apps/pyFreenet/refbot.py Log: refbot: Fix use of my_exit(). Check max_cpeers and max_tpeers before connecting to IRC server. Modified: trunk/apps/pyFreenet/refbot.py =================================================================== --- trunk/apps/pyFreenet/refbot.py 2007-01-19 22:14:16 UTC (rev 11611) +++ trunk/apps/pyFreenet/refbot.py 2007-01-25 03:40:46 UTC (rev 11612) @@ -22,7 +22,7 @@ import urllib2 import fcp -from minibot import log, MiniBot, PrivateChat +from minibot import log, MiniBot, PrivateChat, my_exit have_plugin_module = False; try: @@ -77,7 +77,7 @@ fcpnodepy_revision = fcp.FCPNode.svnRevision; except: print "This version of the refbot requires a newer version of fcp/node.py. Please from https://emu.freenetproject.org/svn/trunk/apps/pyFreenet/fcp/node.py and try again."; - minibot.my_exit( 1 ); + my_exit( 1 ); # determine a config file path if not cfgFile: @@ -176,10 +176,10 @@ needToSave = True if(not self.bot2bot_enabled and self.bot2bot_trades_only_enabled): print "bot2bot communication is disabled, but trading with other bots only is enabled. This does not make sense. Quitting." - minibot.my_exit( 1 ); + my_exit( 1 ); if(not self.bot2bot_trades_enabled and self.bot2bot_trades_only_enabled): print "bot2bot ref trading is disabled, but trading with other bots only is enabled. This does not make sense. Quitting." - minibot.my_exit( 1 ); + my_exit( 1 ); if(opts.has_key('ircchannel')): self.chan = opts['ircchannel'] else: @@ -200,7 +200,7 @@ self.greet_interval = int( opts['greetinterval'] ) except: print "Seems you've a bogus value for greetinterval in your config file. Bailing." - minibot.my_exit( 1 ); + my_exit( 1 ); else: self.greet_interval = 1800 needToSave = True @@ -209,7 +209,7 @@ self.spam_interval = int( opts['spaminterval'] ) except: print "Seems you've a bogus value for spaminterval in your config file. Bailing." - minibot.my_exit( 1 ); + my_exit( 1 ); else: self.spam_interval = 7200 needToSave = True @@ -218,13 +218,13 @@ self.number_of_refs_to_collect = int( opts['refsperrun'] ) except: print "Seems you've a bogus value for refsperrun in your config file. Bailing." - minibot.my_exit( 1 ); + my_exit( 1 ); else: self.number_of_refs_to_collect = 10 needToSave = True if(self.number_of_refs_to_collect <= 0): print "refsperrun is at or below zero. Nothing to do. Quitting." - minibot.my_exit( 1 ); + my_exit( 1 ); if(self.number_of_refs_to_collect > 20): self.number_of_refs_to_collect = 20 needToSave = True @@ -261,11 +261,12 @@ self.save() self.nodeRef = {}; + log("Verifying node build version....") try: f = fcp.FCPNode( host = self.fcp_host, port = self.fcp_port ) if( f.nodeBuild < self.minimumNodeBuild ): - print "This version of the refbot requires your node be running build %d or higher. Please upgrade your Freenet node and try again." % ( self.minimumNodeBuild ); - minibot.my_exit( 1 ); + log("This version of the refbot requires your node be running build %d or higher. Please upgrade your Freenet node and try again." % ( self.minimumNodeBuild )) + my_exit( 1 ) try: noderef = f.refstats(); if( type( noderef ) == type( [] )): @@ -273,19 +274,38 @@ self.nodeIdentity = noderef[ "identity" ]; except Exception, msg: print "Failed to get the node's identity via FCP. This is an odd error this refbot developer is not sure of a reason for."; - minibot.my_exit( 1 ); + my_exit( 1 ) f.shutdown() except Exception, msg: print "Failed to connect to node via FCP (%s:%d). Check your fcp host and port settings on both the node and the bot config." % ( self.fcp_host, self.fcp_port ); - minibot.my_exit( 1 ); + my_exit( 1 ) del noderef[ "header" ]; self.nodeRef = noderef; + self.nrefs = 0 + + log("Getting Peer Update...") + temp_cpeers = None; + temp_dpeers = None; + peerUpdateCallResult = getPeerUpdateHelper( self.fcp_host, self.fcp_port ) + if( peerUpdateCallResult.has_key( "cpeers" )): + temp_cpeers = peerUpdateCallResult[ "cpeers" ]; + if( peerUpdateCallResult.has_key( "tpeers" )): + temp_tpeers = peerUpdateCallResult[ "tpeers" ]; + if( temp_cpeers != None and temp_tpeers != None ): + while(self.number_of_refs_to_collect > 0 and (self.number_of_refs_to_collect - self.nrefs) > 0 and ((temp_cpeers + (self.number_of_refs_to_collect - self.nrefs)) > self.max_cpeers)): + self.number_of_refs_to_collect -= 1; + while(self.number_of_refs_to_collect > 0 and (self.number_of_refs_to_collect - self.nrefs) > 0 and ((temp_tpeers + (self.number_of_refs_to_collect - self.nrefs)) > self.max_tpeers)): + self.number_of_refs_to_collect -= 1; + if(self.number_of_refs_to_collect <= 0): + log("Don't need any more refs, now terminating!") + my_exit( 1 ) + self.cpeers = temp_cpeers + self.tpeers = temp_tpeers + self.timeLastChanGreeting = time.time() self.haveSentDownloadLink = False - self.nrefs = 0 - self.lastSendTime = time.time() self.sendlock = threading.Lock() @@ -1038,6 +1058,10 @@ if(not peerUpdaterThread.isAlive()): peerUpdaterThread.join() self.peerUpdaterThreads.remove(peerUpdaterThread) + if(peerUpdaterThread.cpeers == None): + continue + if(peerUpdaterThread.tpeers == None): + continue while(self.number_of_refs_to_collect > 0 and (self.number_of_refs_to_collect - self.nrefs) > 0 and ((peerUpdaterThread.cpeers + (self.number_of_refs_to_collect - self.nrefs)) > self.max_cpeers)): self.number_of_refs_to_collect -= 1; while(self.number_of_refs_to_collect > 0 and (self.number_of_refs_to_collect - self.nrefs) > 0 and ((peerUpdaterThread.tpeers + (self.number_of_refs_to_collect - self.nrefs)) > self.max_tpeers)): @@ -1597,37 +1621,45 @@ self.tpeers = None def run(self): - cpeers = 0 - tpeers = 0 - try: - f = fcp.FCPNode( host = self.fcp_host, port = self.fcp_port ) - returned_peerlist = f.listpeers( WithVolatile = True ) - except Exception, msg: - self.status = -1 - self.status_msg = msg - f.shutdown() - return - try: - f.shutdown(); - except Exception, msg: - pass # Ignore a failure to end the FCP session as we've got what we want now - if( type( returned_peerlist ) != type( [] )): - returned_peerlist = [ returned_peerlist ]; - for peer in returned_peerlist: - if( peer[ "header" ] != "Peer" ): - break - if( not peer.has_key( "volatile.status" )): - continue; - if( peer[ "volatile.status" ] == "CONNECTED" or peer[ "volatile.status" ] == "BACKED OFF" ): - cpeers += 1 - tpeers += 1 - self.status = 0 - self.status_msg = "GetPeerUpdate completed normally" - self.cpeers = cpeers - self.tpeers = tpeers - return + peerUpdateCallResult = getPeerUpdateHelper( self.fcp_host, self.fcp_port ) + if( peerUpdateCallResult.has_key( "status" )): + self.status = peerUpdateCallResult[ "status" ]; + if( peerUpdateCallResult.has_key( "status_msg" )): + self.status_msg = peerUpdateCallResult[ "status_msg" ]; + if( peerUpdateCallResult.has_key( "cpeers" )): + self.cpeers = peerUpdateCallResult[ "cpeers" ]; + if( peerUpdateCallResult.has_key( "tpeers" )): + self.tpeers = peerUpdateCallResult[ "tpeers" ]; -#@-node:class GetPeerUpdate +#@-node:class GetPeerUpdateHelper +#@+node:getPeerUpdateHelper +def getPeerUpdateHelper( fcp_host, fcp_port ): + cpeers = 0 + tpeers = 0 + f = None; + try: + f = fcp.FCPNode( host = fcp_host, port = fcp_port ) + returned_peerlist = f.listpeers( WithVolatile = True ) + except Exception, msg: + f.shutdown() + return { "status" : -1, "status_msg" : msg, "cpeers" : None, "tpeers" : None } + try: + f.shutdown(); + except Exception, msg: + pass # Ignore a failure to end the FCP session as we've got what we want now + if( type( returned_peerlist ) != type( [] )): + returned_peerlist = [ returned_peerlist ]; + for peer in returned_peerlist: + if( peer[ "header" ] != "Peer" ): + break + if( not peer.has_key( "volatile.status" )): + continue; + if( peer[ "volatile.status" ] == "CONNECTED" or peer[ "volatile.status" ] == "BACKED OFF" ): + cpeers += 1 + tpeers += 1 + return { "status" : 0, "status_msg" : "getPeerUpdateHelper completed normally", "cpeers" : cpeers, "tpeers" : tpeers } + +#@-node:getPeerUpdateHelper #@+node:main def main():