3
0
mirror of https://github.com/jlu5/PyLink.git synced 2024-11-30 23:09:23 +01:00
Commit Graph

479 Commits

Author SHA1 Message Date
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
James Lu
5c981c83b1 core: abort autoconnect and socket connectons when the daemon is shutting down 2017-08-31 13:40:11 -07:00
James Lu
82a7b914b6 Move control.tried_shutdown to world.shutting_down 2017-08-31 13:36:50 -07:00
James Lu
bc48709595 PyLinkNetworkCore: fix extraneous warnings in get_service_bot 2017-08-30 19:48:46 -07:00
James Lu
cad55097f1 core: reuse existing service client UIDs for all service bots
This prevents nick collision wars caused by spawn_service when an ENDBURST hook for the uplink is received multiple times.
2017-08-30 19:29:46 -07:00
James Lu
87639ddeb2 classes: add a has_eob attribute to each server object 2017-08-30 19:16:54 -07:00
James Lu
46e9975bd5 Continue rewriting the protocol module spec (#478) 2017-08-30 01:26:35 -07:00
James Lu
4a363aee50 Move _expandPUID into PyLinkNetworkCoreWithUtils 2017-08-30 00:56:18 -07:00
James Lu
d79f1766b6 classes, coremods: migrate to irc.is_* 2017-08-28 20:13:25 -07:00
James Lu
e39b4e9c69 Move utils.is* methods into PyLinkNetworkCoreWithUtils (#476) 2017-08-28 20:07:31 -07:00
James Lu
2a7594e56e Move PUIDGenerator->classes, IncrementalUIDGenerator->ircs2s_common (#476) 2017-08-28 19:42:24 -07:00
James Lu
b1159400f1 Move DeprecatedAttributesObject, CamelCaseToSnakeCase to structures (#476) 2017-08-28 19:36:55 -07:00
James Lu
0907f05296 Condense (deep)copy definitions into structures.CopyWrapper 2017-08-25 17:05:53 -07:00
James Lu
8c0f19422f core: Add irc argument to User and Server classes
Also, add a __deepcopy__ override to channel because we cannot clone IRCNetwork objects (locks cannot be pickled).
2017-08-25 13:53:45 -07:00
James Lu
96a202acce core: make User.channels use IRCCaseInsensitiveSet
Closes #515. This is an API breaking change!
2017-08-25 13:26:34 -07:00
James Lu
80766e051e core: define two (joined) versions of the channels index
Closes #509.

PyLinkNetworkCore.channels is split into the following:
- irc._channels which implicitly creates channels on access (mostly used in protocol modules)
- irc.channels which does not (recommended for use by plugins)
2017-08-25 02:12:08 -07:00
James Lu
c6ca89b48a Fill in the rest of the extbans list for inspircd & unreal (#498) 2017-08-23 21:47:43 -07:00
James Lu
de1a6379df Add (experimental) support for matching extbans (#498) 2017-08-23 21:18:57 -07:00
James Lu
d28006ae62 Move ProtocolError to utils, and link the copy in classes to it 2017-08-21 22:21:09 -07:00
James Lu
3e150d8514 Break up classes.ChannelState into structures.(IRC)CaseInsensitiveDict 2017-08-21 21:50:44 -07:00
James Lu
7aa836efa6 Concisify match_host CIDR logging again
We're replacing the glob, not the target's host.
2017-08-16 00:03:57 -07:00
James Lu
761d3ef500 Fix wrong logging for CIDR ranges in match_host 2017-08-15 21:26:18 -07:00
James Lu
9113b34b46 NetworkCore: return the server in get_server if the arg was a server 2017-08-11 13:13:50 -07:00
James Lu
e0e929492e match_host: implicitly convert string masks such as "user1" to "$pylinkacc:user1"
This keeps it in line with other services packages and is way nicer to read.
2017-08-07 16:31:17 -07:00
James Lu
a070ec5c32 PyLinkNetworkCore: add stubs for disconnect() and connect() 2017-08-06 21:49:52 -07:00
James Lu
d3f635901b classes: reorganize methods in NetworkCore 2017-08-06 21:49:41 -07:00
James Lu
a72f710a69 Add regex variants to checkban and massban 2017-08-06 20:02:20 -07:00
James Lu
d12f12ae22 Add a 'massban' command
Closes #174.
2017-08-06 19:21:55 -07:00
James Lu
c8a9163f57 ChannelState: add __repr__ 2017-08-06 18:09:37 -07:00
James Lu
c9c0e0a85b ChannelState: add copy and __contains__ methods 2017-08-06 18:04:46 -07:00
James Lu
cbb3c88e11 NetworkCoreWithUtils: add new match_all() method 2017-08-06 17:55:43 -07:00
James Lu
32249ace3e Store channels case-insensitively in a new classes.ChannelState
Closes #372.
2017-08-06 17:52:52 -07:00
James Lu
9ae851e1fc classes: rename NetworkCore.aborted to _aborted 2017-08-05 22:16:52 -07:00
James Lu
8d15d05711 IRCNetwork: use disconnect() to kill networks if parsing a command errors
This is more standard, as aborted is solely an internal value.
2017-08-05 22:14:44 -07:00
James Lu
f4da1fc94c Merge branch 'master' into devel
Conflicts:
	VERSION
	classes.py
	docs/faq.md
	example-conf.yml
	protocols/p10.py
	pylink
	world.py
2017-08-05 22:11:22 -07:00
James Lu
7db811f2dd protocols: declare quiet extban support where applicable 2017-08-05 21:52:34 -07:00
James Lu
a0a295f7d2 Set Irc.aborted earlier in the disconnect loop
This prevents plugins from getting really confused as we remove things.
2017-08-03 10:22:57 -07:00
James Lu
0d5afd266f Irc: stop extraneous queue threads when removing from world.networkobjects 2017-08-03 10:15:29 -07:00
James Lu
981e6c508f Move _check_nick_collision to NetworkCoreWithUtils
This is useful for networks that emulate IRC as well, to prevent clashes between real clients and virtual ones.
2017-07-31 20:58:02 +08:00
James Lu
47f3977554 Move NetworkCore.parse_protocol_command to IRCNetwork.parse_irc_command
Also add a stub for handle_events.
2017-07-31 11:09:08 +08:00
James Lu
eae1425975 NetworkCore: remove nonexistent cmode +r from mode type definitions 2017-07-31 00:43:19 +08:00
James Lu
c7c29f35e5 core: make message cutoff optional, and disable for inspircd
Closes #490.
2017-07-16 21:01:55 -07:00
James Lu
b88830ba25 classes: migrate to conf.conf['pylink'] 2017-07-14 05:50:19 -07:00
James Lu
880d0975db Merge branch 'type-to-isinstance' of https://github.com/cooper/PyLink into devel 2017-07-14 05:22:37 -07:00
James Lu
716ffd389b classes: mark reply_lock, init_vars as private 2017-07-14 05:22:05 -07:00
James Lu
fa4d831e44 NetworkCore: remove outdated, now misleading constructor description 2017-07-12 23:16:03 -07:00
James Lu
2e7fed84c1 IRCNetwork: mark connection_thread, pingTimer, socket, and queue as private 2017-07-12 22:56:30 -07:00
James Lu
2ef7df01e7 IRCNetwork: don't try to close the socket if none was ever initialized 2017-07-12 22:50:16 -07:00
James Lu
db778debb8 Fix error logging for validate_server_conf (#472) 2017-07-12 22:44:48 -07:00
James Lu
69bafedcca IRCNetwork: use a less confusing error than "No data received" 2017-07-12 22:22:08 -07:00
James Lu
0e3d733a72 NetworkCore: set self.aborted to True as early as possible when launching a disconnect
This should prevent spurious "No data received" errors from popping up when using the 'disconnect' command.
2017-07-12 22:22:08 -07:00
James Lu
f85bdb3d8b IRCNetwork: suppress logging connection errors when PyLink is shutting down 2017-07-12 22:22:08 -07:00
Mitchell Cooper
7ab0e8f105 use isinstance() instead of type() where appropriate #410 2017-07-12 17:29:34 -04:00
James Lu
1a8dcdfa3a NetworkCore: use the new validate_server_conf name 2017-07-11 02:22:01 -07:00
James Lu
b7466327db protocols: move S2S_BUFSIZE definition into a class variable 2017-07-07 20:14:26 -07:00
James Lu
1172ca7387 IRCNetwork: use \r\n as separator instead of \n
CRLF is the standard way of doing this per RFC1459
2017-07-07 20:14:26 -07:00
James Lu
51fb269d0d IRCNetwork: don't attempt to send more than 510 bytes per message
Some IRCds like ngIRCd will SQUIT you if you try to do so, though most just ignore this kind of overflow.
2017-07-07 20:14:23 -07:00
James Lu
3bcf0092e9 NetworkCoreWithUtils: wrap irc.to_lower in a lru_cache 2017-07-07 14:40:27 -07:00
James Lu
6636a19a2b ngircd: implement handler for METADATA 2017-07-06 22:15:56 -07:00
James Lu
9132556fd9 PyLinkNetworkCore: fix __repr__ definition 2017-07-04 23:32:41 -07:00
James Lu
970b38719d core: rename ping() to _ping_uplink(), and drop the unused source/target arguments 2017-07-04 22:09:50 -07:00
James Lu
640e903dd6 Move _get_SID/_get_UID to IRCCommonProtocol 2017-07-02 22:36:47 -07:00
James Lu
bbc4dec8dd NetworkCoreWithUtils: shortcut _get_SID/UID if the target already exists 2017-07-02 22:35:39 -07:00
James Lu
e866e9eb7b NetworkCore: demote "stopping connect loop" messages to DEBUG 2017-07-02 22:26:28 -07:00
James Lu
06ef421578 classes: clean up references to deprecated classes/methods 2017-06-30 21:49:29 -07:00
James Lu
a73300e864 classes.Channel: migrate to snake case 2017-06-30 21:34:08 -07:00
James Lu
0c7fb861f1 classes, relay, ircs2s_c: tweak/remove various debug statements 2017-06-29 23:19:21 -07:00
James Lu
67347935b5 ircs2s_common: add missing ProtocolError import 2017-06-29 21:55:33 -07:00
James Lu
56275c5a3b NetworkCore: rename removeClient -> _remove_client (no migration stub) 2017-06-27 16:21:30 -07:00
James Lu
5e7529dae4 Move some functions back into NetworkCore
Things like is_internal_client() are specific to the way we track users, so it doesn't make much sense to override these per protocol. It can *still* be done though, but there's little point...
2017-06-27 16:17:28 -07:00
James Lu
56f1c9e919 NetworkCore: fix irc.protoname definition 2017-06-27 16:15:37 -07:00
James Lu
ad2d5a5ae0 Move ts_lock definition into PyLinkNetworkCoreWithUtils 2017-06-27 16:12:45 -07:00
James Lu
928dbf80bb Move more IRC-specific attributes into IRCNetwork.init_vars() 2017-06-27 16:05:58 -07:00
James Lu
62784a63e4 IRCNetwork: error when attempting to start multiple connection threads for a network 2017-06-27 15:58:55 -07:00
James Lu
c3cdf63253 Move some IRC-specific attributes to IRCNetwork 2017-06-27 15:58:38 -07:00
James Lu
fb34392fca IRCNetwork: mark schedule_ping, process_queue as private 2017-06-27 02:53:09 -07:00
James Lu
710a276c45 IRCNetwork: rename run() -> _run_irc(), this is a private function 2017-06-27 01:44:26 -07:00
James Lu
7814914a05 classes, protocols: convert self.irc usage to self 2017-06-25 02:09:52 -07:00
James Lu
eef7a73ce9 classes: migrate self.proto calls to self 2017-06-25 02:09:41 -07:00
James Lu
d0209f720a Rewrite network intitialization bits
- Move protocols.connect -> protocols.post_connect to fix namespace conflict
- Starting an IRC connection is now explicit (via irc.connect instead of __init__)
2017-06-25 01:12:58 -07:00
James Lu
df18e318a8 WIP: merge IRCNetwork and Protocol classes together
Eventually, the goal is to have both of these hotswappable with inheritance, so this distinction becomes moot.
2017-06-24 23:27:24 -07:00
James Lu
7ca98eb965 Split IRC-specific code from classes.Protocol into a new IRCCommonProtocol (#454) 2017-06-16 17:13:26 -07:00
James Lu
37d8e8ad43 Irc: break protocol-agnostic [dis]connect code into _pre/_post functions (#371) 2017-06-16 16:53:23 -07:00
James Lu
2a978c498e Rename PyLinkIRCNetwork -> IRCNetwork
The "PyLink" prefix is sort of redundant here...
2017-06-15 21:55:08 -07:00
James Lu
c4f6d626d5 Drop Irc prefix from IrcServer/User/Channel classes 2017-06-15 21:54:40 -07:00
James Lu
d98d522387 Move Irc.runline => PyLinkNetworkCore.parse_protocol_command 2017-06-15 21:45:04 -07:00
James Lu
47e36a9249 classes: break Irc into three classes: PyLinkNetworkCore, PyLinkNetworkCoreWithUtils, PyLinkIRCNetwork (aliased to Irc) 2017-06-15 21:38:52 -07:00
James Lu
d4fae02540 Irc: migrate functions to camel case 2017-06-02 23:17:14 -07:00
James Lu
f97db31533 Irc: show the current encoding setting in fullVersion() 2017-06-02 08:46:55 -07:00
James Lu
3a934ef5b8 Merge branch 'wip/configurable-encoding' into devel 2017-06-02 07:32:07 -07:00
James Lu
b9aee6ae85 Irc: only apply encoding settings on connect
Changing the encoding after a connection has been established is somewhat dangerous, because it's possible to corrupt channel/user state if characters in the old encoding are no longer valid.

Also, mark this option as experimental.
2017-06-02 07:31:49 -07:00
James Lu
1ff027152a Irc: remove outdated cert/keyfile comment 2017-05-28 20:09:26 -07:00
James Lu
2737b6bbfc Irc: simplify _send() code and replace unencodable characters 2017-05-27 02:21:12 -07:00
James Lu
1246edaf2c Irc: initial work on encoding support (#101) 2017-05-27 01:27:09 -07:00
James Lu
ead20f5be9 Irc: log full tracebacks when disconnecting due to an error 2017-05-16 16:30:03 -07:00
James Lu
fd3236ddb7 Irc: fix another CPU loop on 'disconnect' 2017-05-12 19:52:40 -07:00
James Lu
daa6593534 Irc: block when the queue is empty instead of needlessly polling it
Rework Irc.processQueue() to block when the queue is full, and abort if the item "None" is sent to it.
To make sure that the None isn't caught by a full queue or pushed back by other elements, this modifies queue.Queue's underlying deque instance directly.

Closes #459.
2017-05-12 17:55:24 -07:00
James Lu
06d49f4433 Revert "Irc: only disconnect the write portion of the socket"
This reverts commit f4babc6f28.
2017-05-12 17:19:16 -07:00
James Lu
7daef0000b Irc: break out of processQueue properly when a network disconnects 2017-05-09 23:31:20 -07:00
James Lu
701f01fa4f Irc: reword error message from last commit to be more concise 2017-05-09 18:19:35 -07:00
James Lu
bac6dc36b4 Irc: log socket.send() errors with a proper traceback 2017-05-09 18:06:51 -07:00
James Lu
4ca8667669 Irc: fix 62aea23879 (lowercase queue) 2017-05-07 17:34:04 -07:00
James Lu
62aea23879 Irc: fix throttle_time not actually blocking for the defined amount of time
Passing the timeout to queue.Queue.get is invalid because it'll only block if there ISN'T any text to send.
2017-05-07 17:31:31 -07:00
James Lu
15ed251ed7 Irc: refuse to queue send data if aborted is set 2017-05-07 13:46:25 -07:00
James Lu
de67fe0d37 Irc: log socket shutdown errors to debug 2017-05-07 13:46:15 -07:00
James Lu
f4babc6f28 Irc: only disconnect the write portion of the socket
Per https://docs.python.org/3/howto/sockets.html#disconnecting
2017-05-07 13:46:06 -07:00
James Lu
5d629f7331 matchHost: extend negation via "!" to regular hostmasks as well as exttargets 2017-05-04 19:04:03 -07:00
James Lu
6d96dd21ac updateTS: remove usage of mutable as function default argument
This may subtly break things: https://docs.quantifiedcode.com/python-anti-patterns/correctness/mutable_default_value_as_argument.html
2017-04-09 14:45:12 -07:00
James Lu
348572bcb6 Irc: rewrite sendq to use queue.Queue, and add an upper bound (maxsendq)
Closes #430. Closes #442.
2017-03-31 17:41:56 -07:00
James Lu
9d9b01839c Split Irc.reply() into _reply() to make 'networks.remote' actually thread-safe
Previously, the Irc.reply_lock check was in the reply() function itself: replacing it with another function checking for the same lock would delay execution,
but then run the wrong reply() code if another module used irc.reply() while 'remote' was executing.
2017-03-31 16:25:28 -07:00
James Lu
ae6c68018b core: half the default throttle time (from 0.01 to 0.005) 2017-03-28 22:38:54 -07:00
James Lu
938a1fb9d7 Irc: reorder comments from last commit 2017-03-26 14:25:02 -07:00
James Lu
397df48efd Irc: simplify runloop error catching, adding RuntimeError and SystemExit (closes #438)
socket.error is aliased to OSError since Python 3.3, and ConnectionError is actually a subclass of OSError.
So, it makes more sense to just catch the more generic type here.

Also, make ProtocolError derive from RuntimeError instead of Exception.
2017-03-26 14:17:37 -07:00
James Lu
e3c0bf6a1b Irc: break out of processQueue as soon as self.aborted is set 2017-03-24 18:40:02 -07:00
James Lu
99d3780773 Irc: add locking for reply() calls (#437) 2017-03-24 00:57:21 -07:00
James Lu
ff6d961922 Protocol: add missing self in hasCap() 2017-03-23 22:41:12 -07:00
James Lu
f512ae1b33 Protocol: add a hasCap() wrapper function (#337) 2017-03-15 23:46:13 -07:00
James Lu
2ca0cf05a0 Start work on protocol capabilities (#337) 2017-03-15 23:32:47 -07:00
James Lu
afc5cc26fa Irc: more compact __repr__ for IrcChannel/IrcServer/IrcUser 2017-03-11 22:49:48 -08:00
James Lu
2028cab04c core: Grow autoconnect delays by a configurable factor whenever connections fail
Closes #348.
2017-03-11 00:21:30 -08:00
James Lu
9e50c5e69a Irc: try to make breaking out of autoconnect loops faster 2017-03-10 23:57:37 -08:00
James Lu
3096c54bb8 Irc: return in msg() if the main client is missing and no explicit source is set 2017-03-10 23:47:07 -08:00
James Lu
9a9e0b2c20 Irc: deprecate the botdata field as well (#273) 2017-03-05 00:14:43 -08:00
James Lu
b4f70bdece Irc: remove duplicate botdata assignment 2017-03-05 00:06:49 -08:00
James Lu
4284853a4a Irc: remove internal use of 'conf' and 'botdata' (#273) 2017-03-05 00:06:44 -08:00
James Lu
7f070448b7 utils, Irc: add abstraction to warn on deprecated attribute usage (#273) 2017-03-05 00:00:26 -08:00