|
|
@ -58,7 +58,7 @@ class listener:
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
connstream = newsocket
|
|
|
|
connstream = newsocket
|
|
|
|
|
|
|
|
|
|
|
|
new_client = client(connstream, remote_ip, server)
|
|
|
|
new_client = client(connstream, remote_ip, server, self)
|
|
|
|
|
|
|
|
|
|
|
|
self.select_inputs.append(connstream)
|
|
|
|
self.select_inputs.append(connstream)
|
|
|
|
self.select_outputs.append(connstream)
|
|
|
|
self.select_outputs.append(connstream)
|
|
|
@ -88,15 +88,28 @@ class client:
|
|
|
|
buff = ""
|
|
|
|
buff = ""
|
|
|
|
stream = None
|
|
|
|
stream = None
|
|
|
|
user = None
|
|
|
|
user = None
|
|
|
|
|
|
|
|
listener = None
|
|
|
|
ip = ""
|
|
|
|
ip = ""
|
|
|
|
|
|
|
|
|
|
|
|
def __init__(self, connstream, ip, server):
|
|
|
|
def __init__(self, connstream, ip, server, listener):
|
|
|
|
self.ip = ip
|
|
|
|
self.ip = ip
|
|
|
|
self.stream = connstream
|
|
|
|
self.stream = connstream
|
|
|
|
self.user = user(self, server)
|
|
|
|
self.user = user(self, server)
|
|
|
|
|
|
|
|
self.listener = listener
|
|
|
|
|
|
|
|
|
|
|
|
def send_chunk(self, chunk):
|
|
|
|
def send_chunk(self, chunk):
|
|
|
|
|
|
|
|
try:
|
|
|
|
self.stream.send(chunk + EOC)
|
|
|
|
self.stream.send(chunk + EOC)
|
|
|
|
|
|
|
|
except socket.error:
|
|
|
|
|
|
|
|
# TODO: Log quit reason
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
|
|
|
self.stream.shutdown(2)
|
|
|
|
|
|
|
|
self.close()
|
|
|
|
|
|
|
|
except socket.error:
|
|
|
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
self.end()
|
|
|
|
|
|
|
|
self.listener.select_inputs = remove_from_list(self.listener.select_inputs, self.stream)
|
|
|
|
|
|
|
|
print "NOTICE: Client disconnected due to socket error"
|
|
|
|
|
|
|
|
|
|
|
|
def send_global_notice(self, notice):
|
|
|
|
def send_global_notice(self, notice):
|
|
|
|
self.send_chunk(":%s NOTICE %s" % (config_ownhost, notice))
|
|
|
|
self.send_chunk(":%s NOTICE %s" % (config_ownhost, notice))
|
|
|
|