Esempio n. 1
0
 def mainthread(self):
     try:
         clientprefs = self.recv()
         clientwantsencryption = int(clientprefs[0])
         clientcanserve = int(clientprefs[1])
         if config.sslavailable and (clientcanserve or config.canserve):
             #if the server can do any kind of encryption and either party can serve
             encryptionpossible = True
         else:
             encryptionpossible = False
         if encryptionpossible and (clientwantsencryption or
                                    config.forceencryption):
             usingencryption = True
         else:
             usingencryption = False
         if config.canserve:
             serving = True
         else:
             serving = False
         self.send(str(int(usingencryption)) + str(int(serving)))
         #if encryption is not possible even though it is required by the client, it will d/c at this point
         if usingencryption:
             self.secure(serving)
             print 'Using secure connection with %s (serving = %s)' % (self.ip, str(bool(serving)))
     except:
         print 'Securing connection with %s failed: %s' % (self.ip, str(sys.exc_info()[1]))
         self.send('oops!') #this will trigger sanity checks to fail at the client, rather than just a hang.
         return
     try:
         tmpnick = self.getnick()
     except:
         print '%s getnick failed: %s' % (self.ip, str(sys.exc_info()[1]))
         return
     if registernick(tmpnick) > 0:
         self.send("!NOTE Nickname could not be registered!")
         self.send("!TERMINATE")
         self.close()
         return
     else:
         self.nick = tmpnick
     print "%s logged in as %s" % (self.ip, self.nick)
     self.send("!CHATMODE")
     time.sleep(0.1)
     self.bcast("%s joined!" % self.nick, 'tehsrvr')
     self.welcome()
     thread.start_new_thread(self.pingthread, ())
     self.ready = True
     while 1: #recv loop. spends most of time on self.recv()
         try:
             message = self.recv()
         except:
             self.bcast("%s quit: %s" % (self.nick, str(sys.exc_info()[1])), "tehsrvr")
             if self.ip != self.nick: #if the client still has a registered nick
                 freenick(self.nick)
                 self.nick = self.ip
             break
         if message.startswith('/'):
             self.command(message)
         else: #just a regular message
             self.bcast("<%s> %s" % (self.nick, message), self.nick)
Esempio n. 2
0
 def send(self, text):
     if self.closed: return
     try:
         self.c.send(text)
     except: #sending didn't work
         print "Client %s no longer available" % self.nick
         if self.ip != self.nick: #if the client still has a registered nick
             freenick(self.nick)
             self.nick = self.ip
         self.close()
         return 1
Esempio n. 3
0
 def send(self, text):
     if self.closed: return
     try:
         self.c.send(text)
     except:  #sending didn't work
         print "Client %s no longer available" % self.nick
         if self.ip != self.nick:  #if the client still has a registered nick
             freenick(self.nick)
             self.nick = self.ip
         self.close()
         return 1
Esempio n. 4
0
 def mainthread(self):
     try:
         clientprefs = self.recv()
         clientwantsencryption = int(clientprefs[0])
         clientcanserve = int(clientprefs[1])
         if config.sslavailable and (clientcanserve or config.canserve):
             #if the server can do any kind of encryption and either party can serve
             encryptionpossible = True
         else:
             encryptionpossible = False
         if encryptionpossible and (clientwantsencryption
                                    or config.forceencryption):
             usingencryption = True
         else:
             usingencryption = False
         if config.canserve:
             serving = True
         else:
             serving = False
         self.send(str(int(usingencryption)) + str(int(serving)))
         #if encryption is not possible even though it is required by the client, it will d/c at this point
         if usingencryption:
             self.secure(serving)
             print 'Using secure connection with %s (serving = %s)' % (
                 self.ip, str(bool(serving)))
     except:
         print 'Securing connection with %s failed: %s' % (
             self.ip, str(sys.exc_info()[1]))
         self.send(
             'oops!'
         )  #this will trigger sanity checks to fail at the client, rather than just a hang.
         return
     try:
         tmpnick = self.getnick()
     except:
         print '%s getnick failed: %s' % (self.ip, str(sys.exc_info()[1]))
         return
     if registernick(tmpnick) > 0:
         self.send("!NOTE Nickname could not be registered!")
         self.send("!TERMINATE")
         self.close()
         return
     else:
         self.nick = tmpnick
     print "%s logged in as %s" % (self.ip, self.nick)
     self.send("!CHATMODE")
     time.sleep(0.1)
     self.bcast("%s joined!" % self.nick, 'tehsrvr')
     self.welcome()
     thread.start_new_thread(self.pingthread, ())
     self.ready = True
     while 1:  #recv loop. spends most of time on self.recv()
         try:
             message = self.recv()
         except:
             self.bcast("%s quit: %s" % (self.nick, str(sys.exc_info()[1])),
                        "tehsrvr")
             if self.ip != self.nick:  #if the client still has a registered nick
                 freenick(self.nick)
                 self.nick = self.ip
             break
         if message.startswith('/'):
             self.command(message)
         else:  #just a regular message
             self.bcast("<%s> %s" % (self.nick, message), self.nick)