Ticket #966: skyped_close_connection_on_send_error.patch

File skyped_close_connection_on_send_error.patch, 2.2 KB (added by mk.fraggod@…, at 2013-01-28T02:52:11Z)

Patch to fix the issue by closing the connection on first error

  • skyped

    a b  
    124124                time.sleep(1)
    125125        return True
    126126
    127 def send(sock, txt):
     127def send(txt, tries=10):
    128128        global options
    129         from time import sleep
    130         count = 1
    131         done = False
    132129        if hasgobject:
    133                 while (not done) and (count < 10):
     130                if not options.conn: return
    134131                        try:
    135                                 sock.send(txt)
    136                                 done = True
     132                        options.conn.sendall(txt)
    137133                        except Exception, s:
    138                                 count += 1
    139                                 dprint("Warning, sending '%s' failed (%s). count=%d" % (txt, s, count))
    140                                 sleep(1)
    141                 if not done:
     134                        dprint("Warning, sending '%s' failed (%s)." % (txt, s))
    142135                        options.conn.close()
     136                        options.conn = False
    143137        else:
    144                 while (not done) and (count < 10) and options.conn:
     138                for attempt in xrange(1, tries+1):
     139                        if not options.conn: break
    145140                        if wait_for_lock(options.lock, 3, 10, "socket send"):
    146141                                try:
    147                                          if options.conn: sock.send(txt)
     142                                         if options.conn: options.conn.sendall(txt)
    148143                                         options.lock.release()
    149                                          done = True
    150144                                except Exception, s:
    151145                                        options.lock.release()
    152                                         count += 1
    153146                                        dprint("Warning, sending '%s' failed (%s). count=%d" % (txt, s, count))
    154                                         sleep(1)
    155                 if not done:
     147                                        time.sleep(1)
     148                                else:
     149                                        break
     150                else:
    156151                        if options.conn:
    157152                                options.conn.close()
    158153                        options.conn = False
     
    164159        if options.conn:
    165160                try:
    166161                        e = "PING"
    167                         done = send(options.conn, "%s\n" % e)
     162                        done = send("%s\n" % e)
    168163                except Exception, s:
    169164                        dprint("Warning, sending '%s' failed (%s)." % (e, s))
    170165                        if hasgobject:
     
    235230                return False
    236231        if ret == 2:
    237232                dprint("Username and password OK.")
    238                 options.conn.send("PASSWORD OK\n")
     233                send("PASSWORD OK\n")
    239234                if hasgobject:
    240235                        gobject.io_add_watch(options.conn, gobject.IO_IN, input_handler)
    241236                else:
     
    244239                return True
    245240        else:
    246241                dprint("Username and/or password WRONG.")
    247                 options.conn.send("PASSWORD KO\n")
     242                send("PASSWORD KO\n")
    248243                if not hasgobject:
    249244                        options.conn.close()
    250245                        options.conn = False
     
    308303                        if options.conn:
    309304                                dprint('<< ' + e)
    310305                                try:
    311                                         send(options.conn, e + "\n")
     306                                        send(e + "\n")
    312307                                except Exception, s:
    313308                                        dprint("Warning, sending '%s' failed (%s)." % (e, s))
    314309                                        if options.conn: options.conn.close()