James Lu
e96081aa6e
PyLinkNetworkCore: make deletion from self.users non-fatal
2018-04-20 19:39:35 -07:00
James Lu
25d24e9bb2
Use non-blocking sockets again, since Linux select() doesn't guarantee that recv() won't block
2018-04-12 10:58:09 -07:00
James Lu
6bcf7d325f
PyLinkNetworkCore: add get_service_option()
...
Closes #574 .
2018-04-07 22:20:35 -07:00
James Lu
138a52611e
classes: oops, actually tell the queue thread to abort before we wait for it to stop
2018-04-07 22:12:17 -07:00
James Lu
80cbd7a257
classes: make disconnections more synchronized
...
- Make ping timer abort instantly if the network is dead
- Shut down the read and write parts of the socket separately, and only close the socket once both parts are done.
2018-04-07 21:56:10 -07:00
James Lu
84dbca4bda
classes: thread socket connects once more since they block
2018-04-07 21:56:06 -07:00
James Lu
7586989763
classes: really quash duplicate disconnect calls as much as possible
2018-03-31 11:53:50 -07:00
James Lu
f274088ea0
classes: more checks on _aborted to (hopefully) prevent duplicate disconnects triggered by _send
2018-03-30 10:47:34 -07:00
James Lu
93d590fdea
UserMapping: check for lower_nick rather than isinstance(userobj, User)
...
This makes classes reload-safe again.
2018-03-30 10:46:49 -07:00
James Lu
335fb352ec
classes: ignore errors on duplicate selector.unregister()
...
This should really be fixed more thoroughly: there are still some remaining issues after the port to select, with disconnect / reconnect being triggered twice.
2018-03-29 14:04:58 -07:00
James Lu
a085aed924
Rework irc.users and User() to transparently create a store of nicks -> UIDs
...
- This turns IRCNetwork.users into a new UserMapping class, which stores User objects by UID (str) and provides a 'bynick' dict storing case-normalized nicks to lists of UIDs.
- Turn User.nick into a property, where the setter implicitly updates the 'bynick' index and computes a case-normalized version of the nick (User.lower_nick)
2018-03-24 00:12:19 -07:00
James Lu
815535d76b
IRCNetwork: fix autoconnect not applying when socket.connect() fails
2018-03-23 20:21:49 -07:00
James Lu
814dd9a3c5
IRCNetwork: only register a socket with selectdriver after connecting
2018-03-23 20:16:59 -07:00
James Lu
bb1334696c
classes: cache more of to_lower()
2018-03-22 22:03:08 -07:00
James Lu
b522967760
Fix duplicate calls to _run_autoconnect
2018-03-22 17:42:28 -07:00
James Lu
91b86ce0e4
Remove structures.DeprecatedAttributesObject, it's vastly inefficient for what it accomplishes
2018-03-17 15:49:48 -07:00
James Lu
8100a4cea6
IRCNetwork: run _run_autoconnect in a thread so it doesn't block whatever calls disconnect()
2018-03-17 15:26:36 -07:00
James Lu
0151f77f7b
Don't clear the read buffer with every _run_irc call
2018-03-17 12:18:16 -07:00
James Lu
10d2fb93ed
classes: fix syntaxerror from merge
2018-03-17 11:06:02 -07:00
James Lu
0033612fa3
Merge branch 'devel' into engine-rework
...
Conflicts:
classes.py
2018-03-17 11:03:58 -07:00
James Lu
f7ab2564fe
Rework inbound connection handling to use select
...
Closes #588 .
2018-03-17 11:01:32 -07:00
James Lu
92460716d1
IRCNetwork: bump SOCKET_REPOLL_WAIT to 1 sec
2018-03-07 18:32:20 -08:00
James Lu
ccc9f8e5c8
IRCNetwork: also catch ssl.SSLWantReadError and ssl.SSLWantWriteError
2018-03-07 18:31:43 -08:00
James Lu
8f9b56e9d9
IRCNetwork: abort when _send() fails to avoid deadlocks
2018-03-07 18:30:14 -08:00
James Lu
0ca185fada
classes: fix some prefixmodes list vs. state confusion
2018-03-02 21:07:47 -08:00
James Lu
5a00454a8d
_parse_modes: apply modes to a temporary mode list as we parse them
...
Fixes #573 .
Old, broken behaviour:
irc.parse_modes('#test', '+b-bb *!*@new.ban *!*@nonexistent.ban *!*@new.ban')
=> [('+b', '*!*@new.ban')]
Fixed:
irc.parse_modes('#test', '+b-bb *!*@new.ban *!*@nonexistent.ban *!*@new.ban')
=> [('+b', '*!*@new.ban'), ('-b', '*!*@new.ban')]
2018-03-02 20:57:16 -08:00
James Lu
f12318b5dc
classes: add an is_channel argument to _parse_modes
...
This is required for the following commit.
2018-03-02 20:56:59 -08:00
James Lu
1413aa6042
_apply_modes: don't add prefix modes to mode sets even when prefixmodes=None
2018-03-02 20:47:41 -08:00
James Lu
054680c806
classes: split apply_modes into two functions
2018-03-02 20:43:25 -08:00
James Lu
9cca695d14
classes: split parse_modes into core and wrapper functions
2018-03-02 20:43:25 -08:00
James Lu
6a90e99de4
IRCNetwork: do not break on socket BlockingIOError
...
On non-blocking sockets, recv() raises BlockingIOError instead of blocking when there's no data to be read.
The correct behaviour is to wait and try again instead of breaking the connection.
2018-03-01 12:52:41 -05:00
James Lu
50f8cde694
classes: make _to_lower_core and _expandPUID type-safe
2018-02-24 14:19:57 -05:00
James Lu
2e66b9bde6
classes: allow hook functions to block further execution by returning False
...
Closes #547 .
2018-02-18 22:42:39 -08:00
James Lu
67dea6f748
classes: add docstrings to _pre_connect, _pre_disconnect, _post_disconnect
2018-01-21 13:20:42 -08:00
James Lu
6c65d5523e
IRCNetwork: potentially fix queue thread shutdowns ( #558 )
...
Replace unreliable appendleft() usage with replacing the first element (or adding None if the queue is empty).
2017-12-17 01:01:21 -08:00
James Lu
9dfa0a478e
classes: fix inverted order in get_prefix_modes() description
...
No, no, no. Nobody sorts modes that way!
2017-12-07 12:07:08 -08:00
James Lu
2fc5d32e3f
NetworkCore: don't clear state on disconnect
...
This is already reset on connect, so doing it here too is a bit pointless.
2017-12-03 18:56:39 -08:00
James Lu
bebdf2e4ff
IRCNetwork: avoid sending multiple disconnect hooks for one disconnection
2017-12-03 17:46:45 -08:00
James Lu
62cef5c3f5
classes: clarify comments on mode-related functions
2017-11-03 23:40:11 -07:00
James Lu
472b73cf65
classes.Channel: clarify the intended behaviour of sort_prefixes() and get_prefix_modes()
2017-10-15 02:16:18 -07:00
James Lu
aa44bc15a3
classes: fix backwards sorting in Channel.sort_prefixes()
...
Also remove various workaround code added to address this.
2017-10-15 01:29:42 -07:00
James Lu
a9916a74f2
Revert "NetworkCoreWUtils: strip off leading and trailing quotes from parse_modes"
...
This was a band-aid fix not ready to be committed - we should work on this in IRCParser and opercmds instead.
This reverts commit aeaee491f3
.
2017-10-10 22:33:24 -07:00
James Lu
aeaee491f3
NetworkCoreWUtils: strip off leading and trailing quotes from parse_modes
2017-10-10 22:25:06 -07:00
James Lu
663bfe462c
classes: track hopcount in Server
2017-09-23 22:35:55 -07:00
James Lu
113bfcba9d
PyLinkNetworkCore: copy world.hooks before iterating
...
This fixes a race condition where the order of PRIVMSG handlers could be changed as 'load <plugin>' runs, causing the load command to be processed multiple times.
2017-09-23 13:39:43 -07:00
James Lu
0c50091d11
Merge branch 'master' into devel
2017-09-08 19:12:17 -07:00
James Lu
49136d5abd
core: raise better errors on common logging block syntax mistakes
...
These are commonly reported and include:
- Commenting out the contents of logging:channels without commenting out the "channels:" heading, causing that block to become None.
- Commenting out headers like "filerotation:", causing its body to become pairs in logging:files or something similar.
- Leaving logging:channels:<netname> empty: this causes it to become None, so using get() on it fails.
2017-09-08 19:07:03 -07:00
James Lu
f3e82cc15b
Concisify match_host CIDR logging again
...
We're replacing the glob, not the target's host.
(cherry picked from commit 7aa836efa6
)
2017-09-05 19:03:18 -07:00
James Lu
d1f8358159
Fix wrong logging for CIDR ranges in match_host
...
(cherry picked from commit 761d3ef500
)
2017-09-05 19:03:18 -07:00
James Lu
5e92aefcd4
Implement priorities in utils.add_hook()
...
This changes world.hooks to store lists of tuples indicating (priority, hook_func).
2017-09-02 21:17:50 -07:00