Changeset 138

Show
Ignore:
Timestamp:
09/18/04 20:37:57 (4 years ago)
Author:
jajcus
Message:

- fixed support for multiple servers (round-robin and failover)
- allow binding to a configured address and port before connecting to a server
(both improvements by Petr Mensik)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/jjigw.dtd

    r86 r138  
    2323<!ELEMENT server        (#PCDATA) > 
    2424<!ATTLIST server  
    25         port            CDATA           "6667"> 
     25        port            CDATA           "6667" 
     26        bind            CDATA           #IMPLIED 
     27        bindport        CDATA           "0"> 
    2628<!ELEMENT channel       (#PCDATA) > 
    2729<!ATTLIST channel  
  • trunk/jjigw/config.py

    r86 r138  
    4747            print >>sys.stderr,"Bad port value: %r, using default: 6667" % (self.port,) 
    4848            self.port=6667 
     49        self.bindport=node.prop("bindport") 
     50        if not self.bindport: 
     51            self.bindport=0 
     52        self.bind=node.prop("bind") 
    4953    def __repr__(self): 
    5054        return "<ServerConfig %s:%s/>" % (self.host,self.port) 
     
    5458        self.name=node.getContent() 
    5559        self.encoding=node.prop("encoding") 
     60        self.description=node.prop("description") 
     61        self.browseable=node.prop("browseable") 
    5662 
    5763class NetworkConfig: 
     
    7682    def get_servers(self): 
    7783        r=self.servers 
    78         self.servers=self.servers[-1:]+self.servers[1:
     84        self.servers=self.servers[-1:]+self.servers[:-1
    7985        return r 
    8086    def get_channel_config(self,channel): 
  • trunk/jjigw/ircsession.py

    r135 r138  
    224224                    try: 
    225225                        self.socket.close() 
    226                     except: 
     226                    except (socket.error),err: 
     227                        self.__logger.debug("Error on receive: %r" % (err,)) 
    227228                        pass 
    228229                    self.socket=None 
    229                     self.exited=1 
     230                    # suppose error ocurred, wh'll try reconnect 
     231                    self.exited=0 
    230232            finally: 
    231233                self.lock.release() 
     
    252254            self.socket.close() 
    253255            self.socket=None 
     256        self.exited = 0 
    254257        server=self.servers_left.pop(0) 
    255258        self.__logger.debug("Trying to connect to %r" % (server,)) 
     
    258261        try: 
    259262            self.socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
     263            if server.bind: 
     264                self.__logger.debug("Binding local socket to: %s:%d"  
     265                        % (server.bind, server.bindport)) 
     266                self.socket.bind((server.bind, server.bindport)) 
     267                if not self.socket: 
     268                    self.__logger.debug("Error binding interface") 
    260269            self.socket.connect((server.host,server.port)) 
    261270        except (IOError,OSError,socket.error),err: 
     
    275284        if self.raw_channel: 
    276285            self.pass_message_to_raw_channel("Connected.") 
     286        self.__logger.debug("Connected.") 
    277287        self._send("NICK %s" % (self.nick,)) 
    278288        user=md5.new(self.jid.bare().as_string()).hexdigest()[:64]