mirror of
https://github.com/jlu5/PyLink.git
synced 2024-11-24 03:29:28 +01:00
Irc: initial work on encoding support (#101)
This commit is contained in:
parent
9ec3cccaee
commit
1246edaf2c
14
classes.py
14
classes.py
@ -416,8 +416,6 @@ class Irc(utils.DeprecatedAttributesObject):
|
|||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
"""Main IRC loop which listens for messages."""
|
"""Main IRC loop which listens for messages."""
|
||||||
# Some magic below cause this to work, though anything that's
|
|
||||||
# not encoded in UTF-8 doesn't work very well.
|
|
||||||
buf = b""
|
buf = b""
|
||||||
data = b""
|
data = b""
|
||||||
while not self.aborted.is_set():
|
while not self.aborted.is_set():
|
||||||
@ -438,11 +436,14 @@ class Irc(utils.DeprecatedAttributesObject):
|
|||||||
elif (time.time() - self.lastping) > self.pingtimeout:
|
elif (time.time() - self.lastping) > self.pingtimeout:
|
||||||
log.error('(%s) Connection timed out.', self.name)
|
log.error('(%s) Connection timed out.', self.name)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# Get the encoding from the config file, falling back to UTF-8 if none is specified.
|
||||||
|
encoding = self.serverdata.get('encoding') or 'utf-8'
|
||||||
|
|
||||||
while b'\n' in buf:
|
while b'\n' in buf:
|
||||||
line, buf = buf.split(b'\n', 1)
|
line, buf = buf.split(b'\n', 1)
|
||||||
line = line.strip(b'\r')
|
line = line.strip(b'\r')
|
||||||
# FIXME: respect other encodings?
|
line = line.decode(encoding, "replace")
|
||||||
line = line.decode("utf-8", "replace")
|
|
||||||
self.runline(line)
|
self.runline(line)
|
||||||
|
|
||||||
def runline(self, line):
|
def runline(self, line):
|
||||||
@ -509,8 +510,9 @@ class Irc(utils.DeprecatedAttributesObject):
|
|||||||
# Safeguard against newlines in input!! Otherwise, each line gets
|
# Safeguard against newlines in input!! Otherwise, each line gets
|
||||||
# treated as a separate command, which is particularly nasty.
|
# treated as a separate command, which is particularly nasty.
|
||||||
data = data.replace('\n', ' ')
|
data = data.replace('\n', ' ')
|
||||||
data = data.encode("utf-8") + b"\n"
|
encoding = self.serverdata.get('encoding') or 'utf-8'
|
||||||
stripped_data = data.decode("utf-8").strip("\n")
|
data = data.encode(encoding) + b"\n"
|
||||||
|
stripped_data = data.decode(encoding).strip("\n")
|
||||||
log.debug("(%s) -> %s", self.name, stripped_data)
|
log.debug("(%s) -> %s", self.name, stripped_data)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -201,6 +201,12 @@ servers:
|
|||||||
# This setting defaults to sha256.
|
# This setting defaults to sha256.
|
||||||
#ssl_fingerprint_type: sha256
|
#ssl_fingerprint_type: sha256
|
||||||
|
|
||||||
|
# Encoding: allows you to override the network's encoding. This can be useful for networks
|
||||||
|
# using m_nationalchars or something similar. Encoding defaults to utf-8 if not set, and
|
||||||
|
# should be one of the standard encodings defined at
|
||||||
|
# https://docs.python.org/3/library/codecs.html#standard-encodings
|
||||||
|
#encoding: utf-8
|
||||||
|
|
||||||
ts6net:
|
ts6net:
|
||||||
ip: ::1
|
ip: ::1
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user