diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Database.py | 17 | ||||
| -rw-r--r-- | src/IRCBot.py | 4 | ||||
| -rw-r--r-- | src/IRCServer.py | 4 |
3 files changed, 14 insertions, 11 deletions
diff --git a/src/Database.py b/src/Database.py index b159ca4f..8c7e7f0d 100644 --- a/src/Database.py +++ b/src/Database.py @@ -5,22 +5,23 @@ class Table(object): self.database = database class Servers(Table): - def add(self, alias, hostname, port, password, ipv4, tls, nickname, - username=None, realname=None): + def add(self, alias, hostname, port, password, ipv4, tls, bindhost, + nickname, username=None, realname=None): username = username or nickname realname = realname or nickname self.database.execute( """INSERT INTO servers (alias, hostname, port, password, ipv4, - tls, nickname, username, realname) VALUES ( - ?, ?, ?, ?, ?, ?, ?, ?)""", - [hostname, port, password, ipv4, tls, nickname, username, realname]) + tls, bindhost, nickname, username, realname) VALUES ( + ?, ?, ?, ?, ?, ?, ?, ?, ?)""", + [hostname, port, password, ipv4, tls, bindhost, nickname, username, + realname]) def get_all(self): return self.database.execute_fetchall( "SELECT server_id, alias FROM servers") def get(self, id): return self.database.execute_fetchone( """SELECT server_id, alias, hostname, port, password, ipv4, - tls, nickname, username, realname FROM servers WHERE + tls, bindhost, nickname, username, realname FROM servers WHERE server_id=?""", [id]) @@ -304,8 +305,8 @@ class Database(object): if not self.has_table("servers"): self.execute("""CREATE TABLE servers (server_id INTEGER PRIMARY KEY, alias TEXT, hostname TEXT, - port INTEGER,password TEXT,ipv4 BOOLEAN, tls BOOLEAN, - nickname TEXT, username TEXT, realname TEXT)""") + port INTEGER, password TEXT, ipv4 BOOLEAN, tls BOOLEAN, + bindhost TEXT, nickname TEXT, username TEXT, realname TEXT)""") def make_channels_table(self): if not self.has_table("channels"): self.execute("""CREATE TABLE channels diff --git a/src/IRCBot.py b/src/IRCBot.py index e27165de..7d4a25f1 100644 --- a/src/IRCBot.py +++ b/src/IRCBot.py @@ -23,11 +23,11 @@ class Bot(object): self.poll = select.epoll() def add_server(self, server_id, connect=True): - (_, alias, hostname, port, password, ipv4, tls, nickname, + (_, alias, hostname, port, password, ipv4, tls, bindhost, nickname, username, realname) = self.database.servers.get(server_id) new_server = IRCServer.Server(self, self._events, server_id, alias, - hostname, port, password, ipv4, tls, nickname, username, + hostname, port, password, ipv4, tls, bindhost, nickname, username, realname) if not new_server.get_setting("connect", True): return diff --git a/src/IRCServer.py b/src/IRCServer.py index cb47cfb8..5c11fa8b 100644 --- a/src/IRCServer.py +++ b/src/IRCServer.py @@ -8,7 +8,7 @@ PING_INTERVAL_SECONDS = 30 class Server(IRCObject.Object): def __init__(self, bot, events, id, alias, hostname, port, password, - ipv4, tls, nickname, username, realname): + ipv4, tls, bindhost, nickname, username, realname): self.connected = False self.bot = bot self.events = events @@ -59,6 +59,8 @@ class Server(IRCObject.Object): self.socket = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) + if bindhost: + self.socket.bind((bindhost, 0)) self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) self.socket.settimeout(5.0) |
