3
0
mirror of https://github.com/jlu5/PyLink.git synced 2024-12-26 12:43:09 +01:00
Commit Graph

637 Commits

Author SHA1 Message Date
James Lu
a12b2cb5dc nefarious: don't drop messages without a sender
During the initial link phase, the uplink server isn't even known. It sends "SERVER blah blah" and "PASS :whatever" as is.
2016-04-14 15:36:59 -07:00
James Lu
74af9b67ba protocols: p10.py -> nefarious.py 2016-04-12 07:00:45 -07:00
James Lu
19f1ee1be8 p10: initial protocol stub (#87)
This can connect and spawn the main PyLink client right now... It can't do anything else
2016-04-10 20:24:58 -07:00
James Lu
3a00e46b48 Move getSid/getUid into classes.Protocol 2016-04-10 19:00:44 -07:00
James Lu
38e098aef4 inspircd: normalize chmode +r name
This should be "registered", not "c_registered" in order to be consistent with other protocols.
2016-04-09 18:25:17 -07:00
James Lu
0ccdf4cfce unreal: require UMODE2 cap too
I realize we don't handle MODE being used for users at all. UMODE2 is always used when enabled, which is what we're expecting right now.
2016-04-09 11:43:26 -07:00
James Lu
5dee6ab651 unreal: simplify capability checks & require NICKIP cap 2016-04-09 11:34:09 -07:00
James Lu
29030073b9 unreal: request NICKIP capability, track Unreal 3.2 user IPs
Closes #196.
2016-04-09 10:17:25 -07:00
James Lu
62c8cd2405 protocols: s/_getNick/_getUid/g
The old function name _getNick was a bit misleading, as the function converted nicks to UIDs, not the other way around..
2016-04-08 22:21:37 -07:00
James Lu
248c0cbb78 hybrid: virtual umodes +d/+x don't take arguments 2016-04-08 22:20:23 -07:00
James Lu
32038e666a hybrid: track vHost changes (#198) 2016-04-08 22:02:08 -07:00
James Lu
d0655b701a hybrid: implement services account tracking (#198) 2016-04-08 21:38:41 -07:00
James Lu
3ec3d4cebb hybrid: Fix typo in 0be83449fb (#198) 2016-04-08 20:57:03 -07:00
James Lu
e4cd028e86 hybrid: prettier logging, fix wrong argument being passed to IrcUser 2016-04-08 20:46:03 -07:00
James Lu
b3447b74c2 hybrid: make a note of how hybrid UID differs from standard TS6
These are two mutually incompatible implementations, which is why this module exists separately from ts6!
2016-04-08 20:41:27 -07:00
James Lu
5a6a6ca40e hybrid: require caps EX IE SVS EOB HOPS QS TBURST SVS 2016-04-08 20:40:54 -07:00
James Lu
3dbae3b744 hybrid: fix EOB handler name 2016-04-08 20:36:14 -07:00
James Lu
0be83449fb hybrid: implement outgoing host change in updateClient (#198) 2016-04-08 20:35:45 -07:00
James Lu
3b3080d199 hybrid: drop unused svstag handler 2016-04-08 20:22:53 -07:00
James Lu
aeb65478cb hybrid: implement topicBurst (#198) 2016-04-08 20:01:45 -07:00
James Lu
abcf3b6082 ts6: re-add some of the ircd traffic examples 2016-04-07 18:23:21 -07:00
James Lu
fb74179f58 hybrid: handle services logins on burst too 2016-04-07 18:23:18 -07:00
James Lu
3ae9155e78 hybrid: inherit from proto/ts6, drastically reducing the module size 2016-04-07 18:11:13 -07:00
James Lu
d585b60507 Merge branch 'devel+hybrid' of github.com:DanielOaks/PyLink into wip/hybrid 2016-04-07 17:53:57 -07:00
Daniel Oaks
59809e1530 hybrid: Dispatch ENDBURST so it can be caught by plugins 2016-04-07 22:29:15 +10:00
James Lu
1e3aba2cce protocols: simplify super() syntax 2016-04-05 18:37:09 -07:00
James Lu
f620b5b4e8 protocols: initialize sidgen/uidgen in ts6_common 2016-04-05 18:34:54 -07:00
James Lu
cb3187c5e9 ts6_common: do reverse nick lookup for KICK targets
Also needed for Unreal 3.2 compat, as the kick target may be a nick (on legacy servers) instead of a UID.
2016-04-03 13:03:00 -07:00
James Lu
55afa1bff6 unreal: log instances of PUID manging to debug 2016-04-03 13:01:08 -07:00
James Lu
75984c3c4c ts6_common: add abstraction to convert UIDs->outgoing nicks
This is a more complete fix for #193.
2016-04-03 12:57:47 -07:00
James Lu
9f20f8f767 unreal: update SJOIN matching regex
We should only treat symbols as a possible prefix, not letters. Things like +nick might be sent in a SJOIN instead of +001AAAAAA, for legacy servers.
2016-04-03 12:57:47 -07:00
James Lu
4157cb5671 ts6_common: use a better variable name for _getSid() 2016-04-03 12:49:50 -07:00
James Lu
e687bb0a78 unreal: remove outfilter hack, this doesn't handle text including PUIDs properly
Reverts part of 44dc856ffa.
2016-04-03 12:38:38 -07:00
James Lu
02ec50826b unreal: fix super() syntax in SQUIT handling 2016-04-02 12:12:38 -07:00
James Lu
6acfbb4125 unreal: case-desensitize legacy server names when handling user introductions from them 2016-04-02 11:51:29 -07:00
James Lu
956167538a unreal: add warnings & more descriptive errors regarding mixed_link 2016-04-02 10:56:41 -07:00
James Lu
f3ceefe87f unreal: initialize legacy users on the right server 2016-04-02 10:56:13 -07:00
James Lu
c4273e68a4 unreal: fix for Python 3.4 support
The general syntax for unpacking lists with *list was only introduced in Python 3.5: https://www.python.org/dev/peps/pep-0448/
2016-04-02 09:32:03 -07:00
James Lu
4f08894227 unreal: typofix 2016-04-01 23:35:48 -07:00
James Lu
10be962318 unreal: actually return the hook data for NICK & KILL 2016-04-01 23:27:31 -07:00
James Lu
44dc856ffa unreal: use an awful outFilter hack to convert PUIDs->nicks when sending outgoing commands 2016-04-01 23:14:04 -07:00
James Lu
74ee1ded4d unreal: Start work on some really hacky Unreal 3.2 compat code (#193)
What works:
- Tracking user JOINs, QUITs, PARTs

What doesn't work:
- Sending messages from PyLink clients to 3.2 users. They have fake UIDs (nick@counter) which don't go anywhere, meaning messages are silently dropped.
2016-04-01 23:02:12 -07:00
James Lu
fd32bbf45f unreal: fix typo in last commit 2016-04-01 19:12:58 -07:00
James Lu
efcc30c983 unreal: don't confuse legacy SERVER introductions from our uplink with protocol negotiation
Reported by Rascle on IRC.
2016-04-01 19:08:25 -07:00
Daniel Oaks
80b659a940 hybrid: Actually set irc.connected on CAPAB, like other protocols 2016-03-30 17:24:26 +10:00
Daniel Oaks
9d40efc114 hybrid: Steal some more handlers from TS6/Unreal protocols 2016-03-30 16:25:03 +10:00
Daniel Oaks
153b77c4bb hybrid: Set irc.connected after receiving EOB 2016-03-30 15:48:44 +10:00
Daniel Oaks
4b14134a17 hybrid: Fix TBURST, support WHOIS 2016-03-30 13:59:04 +10:00
Daniel Oaks
177e690dd3 hybrid: Support TBURST 2016-03-30 13:51:53 +10:00
Daniel Oaks
89c88d9111 hybrid: Use standard handle_events (with our special additions), don't lower() commands anymore since that isn't done now 2016-03-30 13:40:35 +10:00
Daniel Oaks
c71010f1b0 hybrid: Reorder a little, send EOB right after sending SERVER 2016-03-30 11:38:03 +10:00
Daniel Oaks
c4608fb891 hybrid: Set prefixmodes properly, handle MODE and TMODE 2016-03-30 11:34:52 +10:00
Daniel Oaks
a2bd0a8617 hybrid: Fix JOIN, handle JOIN (hopefully correctly), send EOB after receiving EOB 2016-03-30 09:11:43 +10:00
Daniel Oaks
3cd2dbac5a hybrid: Update for new methods 2016-03-30 09:11:43 +10:00
Daniel Oaks
6ff06cb881 hybrid: Use new CLIENT_OPERED name 2016-03-30 09:11:43 +10:00
Daniel Oaks
e914dc1e8e hybrid: Start making modes more consistent 2016-03-30 09:11:43 +10:00
Daniel Oaks
46610d217d hybrid: Remove silly debug print 2016-03-30 09:11:42 +10:00
Daniel Oaks
24589b21c1 hybrid: Handle PONG 2016-03-30 09:11:42 +10:00
Daniel Oaks
7ec4962412 hybrid: Implement suggested changes, remove comments 2016-03-30 09:11:42 +10:00
Daniel Oaks
1e79adc171 hybrid: Start module, very very broken 2016-03-30 09:11:42 +10:00
James Lu
662d1ce03f inspircd: warn that inspircd 2.2 support is experimental 2016-03-26 18:19:19 -07:00
James Lu
d5d3c2422b inspircd: define minimum & target protocol versions instead of hardcoding them 2016-03-26 16:23:22 -07:00
James Lu
70b9bde2c4 unreal: fix a little typo 2016-03-26 13:26:57 -07:00
James Lu
ad517f80da unreal: bump protocol version to 4000 2016-03-26 13:19:06 -07:00
James Lu
19ac5b59a5 protocols: drop underscores from pre-defined opertypes 2016-03-26 13:15:22 -07:00
James Lu
44083ccd5e core: Store opertype info in all IrcUser objects
This allows plugins to define custom opertypes for their clients, and still have them show in WHOIS queries.
2016-03-26 12:55:23 -07:00
James Lu
bdbc1020f2 Merge branch 'master' into devel 2016-03-26 12:50:35 -07:00
James Lu
9cd1635f68 unreal: fix wrong variable name in handle_umode2 2016-03-26 12:50:23 -07:00
James Lu
f618b96b34 inspircd: add VERSION handling
InspIRCd is different from the rest in that it stores and caches version data for other servers during BURST, instead of whenever it is requested by a client.
2016-03-26 11:35:29 -07:00
James Lu
23056e97e3 protocols & coreplugin: add handlers for VERSION requests 2016-03-26 11:27:07 -07:00
James Lu
e183078645 protocols: Remove "secret" testing channel name 2016-03-20 17:34:13 -07:00
James Lu
d12e70d5e5 ts6: unset has_eob correctly on reconnects
(cherry picked from commit 6962f3b73e)
2016-03-19 18:37:48 -07:00
James Lu
6962f3b73e ts6: unset has_eob correctly on reconnects 2016-03-19 18:19:41 -07:00
James Lu
15b35f1853 ts6: support charybdis +T mode (closes #173) 2016-03-07 21:38:57 -08:00
James Lu
d531201850 Merge branch 'master' into devel 2016-02-27 17:47:55 -08:00
James Lu
a7a98c9a52 inspircd: format kill reasons like "Killed (sourcenick (reason))"
InspIRCd will show the raw kill message sent from servers as the quit message.
So, make kills look actually like a kill instead of someone quitting with an arbitrary message.
2016-02-26 07:16:39 -08:00
James Lu
decdf141fd unreal: don't use updateClient to update hostname of clients internally 2016-02-20 18:19:15 -08:00
James Lu
2ebdb4bad6 unreal: support services account tracking (#25), fix handle_SVSMODE applying modes on the wrong target 2016-02-20 18:16:21 -08:00
James Lu
cabdb11f86 inspircd: implement services account tracking (#25) 2016-02-20 17:54:46 -08:00
James Lu
0fff91edfd ts6: implement services account tracking (#25)
This adds a new protocol hook: [user_logging_in, 'CLIENT_SERVICES_LOGIN', {'text': account_name}], sent whenever someone logs in to services. Actual state tracking is done in coreplugin.py
2016-02-07 18:38:22 -08:00
James Lu
5877031203 Merge branch 'master' into devel 2016-01-30 23:39:08 -08:00
James Lu
341c208513 inspircd, ts6: don't crash when receiving an unrecognized UID 2016-01-27 18:41:25 -08:00
James Lu
fdad7c9c16 ts6: record null IPs as 0.0.0.0 instead of 0 2016-01-23 13:52:37 -08:00
James Lu
3c3ae104ba unreal: remove bad check for users connecting via IPv4
This fixes a crash when... anyone using IPv4 connects.
2016-01-23 13:52:37 -08:00
James Lu
4b939ea641 ts6: rewrite end-of-burst code (EOB is literally just a PING in ts6) 2016-01-23 13:52:37 -08:00
James Lu
06d22722dc protocols: parse modes on the TARGET, not the sender
This fixes crashes on AssertionError when the sender of a MODE is a server.
2016-01-19 21:23:07 -08:00
James Lu
bb9d87bdca inspircd: split protocol negotiation handlers into separate functions (#156)
Use the generic handle_events in ts6_common, which passes everything to event handlers appropriately.
2016-01-17 21:03:10 -08:00
James Lu
814ebc9fe0 ts6: use new-style module design (#156) 2016-01-16 18:14:46 -08:00
James Lu
a220659eaf Move unreal's handle_events block to ts6_common
Precursor to part 2 of #156.
2016-01-16 17:48:22 -08:00
James Lu
812a866a4e protocols: rename pingServer -> ping 2016-01-16 17:11:23 -08:00
James Lu
3d0bf18001 protocols: rename topicClient -> topic; topicServer -> topicBurst
This is one of the few commands that I won't consolidate at this time, because there is actually a difference in how most IRCds handle topic bursts and normal topic changes
2016-01-16 17:09:52 -08:00
James Lu
5ccf204c75 protocols: consolidate modeClient and modeServer into mode() 2016-01-16 17:08:17 -08:00
James Lu
eef97ac035 protocols: consolidate killServer / killClient into kill() 2016-01-16 17:03:22 -08:00
James Lu
975ace3e04 ts6_common: consolidate kickClient and kickServer into kick 2016-01-16 16:56:40 -08:00
James Lu
ee65ac60e1 protocols: rename sjoinServer(...) -> sjoin(...) 2016-01-16 16:53:46 -08:00
James Lu
9a61e64dfc protocols: squitServer(...) -> squit(...) 2016-01-16 16:53:06 -08:00
James Lu
5324475d18 protocols: quitClient(...) -> quit(...), partClient(...) -> part(...) 2016-01-16 16:51:54 -08:00
James Lu
7e5284969d protocols: rename nickClient(...) -> nick(...) 2016-01-16 16:51:04 -08:00
James Lu
196282db86 protocols: numericServer(...) -> numeric(...) 2016-01-16 16:47:35 -08:00
James Lu
3a53005d8c protocols: messageClient -> message, noticeClient -> notice 2016-01-16 16:44:23 -08:00
James Lu
108be5e25e protocols: rename knockClient -> knock 2016-01-16 16:41:17 -08:00
James Lu
20cb65e668 protocols: rename awayClient -> away 2016-01-16 16:40:36 -08:00
James Lu
b4e5c57a35 protocols: rename inviteClient(...) -> invite(...) 2016-01-16 16:38:27 -08:00
James Lu
acdd7dbb78 protocols: rename joinClient(...) -> join(...) 2016-01-16 16:36:45 -08:00
James Lu
ff6841c551 protocols: record the right sender in TOPIC handlers (first part of #127) 2016-01-09 20:50:55 -08:00
James Lu
8db8f6b6c4 note to self: never use case-insensitive find/replace again 2016-01-09 18:34:41 -08:00
James Lu
48203ff321 protocols: reword error text 2016-01-09 17:44:18 -08:00
James Lu
9a43a620f9 unreal: implicitly set +xt when SETHOST or CHGHOST is received (#136) 2016-01-03 11:28:35 -08:00
James Lu
adcb61da67 unreal: update users' hosts properly on setting +x/-x
Closes #136.
2016-01-03 11:28:26 -08:00
James Lu
eac934c237 classes: sort code, move nickToUid, clientToServer, isInternalClient, isInternalServer into the Irc class
The following BREAKING changes are made:
utils.nickToUid(irc, nick) -> irc.nickToUid(nick)
utils.isInternalClient(irc, uid) -> irc.isInternalClient(uid)
utils.isInternalServer(irc, uid) -> irc.isInternalServer(uid)
utils.clientToServer(irc, uid) -> utils.getServer(uid)
2015-12-31 17:28:47 -08:00
James Lu
8b8895988d ts6: map EUID hook to UID 2015-12-30 16:53:35 -08:00
James Lu
741fed9acd protocols: allow changing remote users' hosts in updateClient
Closes #142.
2015-12-30 15:54:09 -08:00
James Lu
f3d8c35219 ts6: fix sending wrong UID in handle_chghost hook payload 2015-12-30 15:53:31 -08:00
James Lu
bf7522697a Rename PYLINK_CLIENT_OPERED hook -> CLIENT_OPERED
To be consistent, any PYLINK_* hooks should internal hooks sent out by PyLink itself. CLIENT_OPERED, on the other hand, requires protocol modules to send it and thus, shouldn't be labeled as a PYLINK_* hook.
2015-12-26 15:41:22 -08:00
James Lu
11adee9d78 Yet another documentation refresh (#113) 2015-12-26 14:45:28 -08:00
James Lu
3c51231ce8 inspircd: re-add RSQUIT handler (closes #150) 2015-12-24 19:52:52 -08:00
James Lu
3f45450969 unreal: move setting irc.connected to AFTER protocol negotiation, and add missing EOS (ENDBURST) handler
The lack of the latter caused relay to *fail* to spawn users whenever an Unreal server reconnects, which should be fixed now.
2015-12-24 18:13:53 -08:00
James Lu
349cff36e1 protocols: in TOPIC hooks, send the topic as keyword "text" instead of keyword "topic"
This is just to be more consistent, as other hooks usually use "text" for text fields.
2015-12-18 22:05:10 -08:00
James Lu
d60a48bb11 protocols: actually update away status in awayClient
"Oops, I forgot to do this."
2015-12-17 21:50:50 -08:00
James Lu
6d597e4482 unreal: call PYLINK_CLIENT_OPERED hooks where we're supposed to 2015-12-17 21:37:01 -08:00
James Lu
09bb2976f8 inspircd: Remove a couple of overzealous find+replaces 2015-12-17 21:19:40 -08:00
James Lu
6b14a885bc protocols: add support for endburst_delay in spawnServer (#128) 2015-12-17 21:18:11 -08:00
James Lu
f79524e9e1 unreal: remove duplicate import 2015-12-06 17:44:59 -08:00
James Lu
62501ce8f2 unreal: actually, storing the cloaked host instead of the real host is a better idea
This prevents IP leaks, at least until #136 is fixed. Reverts part of b965f2c.
2015-11-28 20:57:33 -08:00
James Lu
f8cc297522 unreal: remove "possible desync" warning in _getNick 2015-11-26 22:52:29 -08:00
James Lu
994eaef12c unreal: forcibly SETHOST to the desired vHost in spawnClient
This prevents real host / IP address leaks, since the "virt host" specified in UID doesn't seem to be respected by the IRCd (real host is shown instead). Workaround for #136.
2015-11-26 22:34:15 -08:00
James Lu
0c068c6543 unreal: fix #137
a.k.a. fix the mess I made encoding IPs by not knowing about socket.inet_pton / socket.inet_ntop.
2015-11-26 22:15:52 -08:00
James Lu
b965f2c4b0 unreal: store the displayed host, not the Unreal-cloaking (+x) host in users
I was misinterpreting the UID command syntax. See #136 for what still has to be done.
2015-11-22 13:07:25 -08:00
James Lu
5c0517ba40 unreal/ts6/relay: add some more user mode support
Cloaking is still a bit iffy on UnrealIRCd networks - Unreal insists on applying its own cloaking for +x users, but vHosts for non +x remote users don't apply at all (their real host is shown instead)
2015-11-21 23:57:24 -08:00
James Lu
e86d21e67d unreal: map SETHOST/IDENT/NAME to the right hooks 2015-11-21 23:28:39 -08:00
James Lu
06539fc813 unreal: add missing SJOIN->JOIN hook map, and set irc.connected (relay will otherwise break) 2015-11-15 21:42:58 -08:00
James Lu
f3428d264b ts6: actually send original TS in INVITE hook 2015-11-15 21:16:03 -08:00
James Lu
0f269da9b8 unreal: add outgoing KNOCK
In Unreal, KNOCKs are simply specially formatted notices sent from the orginating user's server. No special inbound hook is used to handle this as a result.
2015-11-15 21:09:40 -08:00
James Lu
2ddb72f9ec unreal: add incoming/outgoing INVITE support 2015-11-15 21:00:51 -08:00
James Lu
89e515f513 unreal: don't set TS to 0 when it's sent in MODE (samode overrides the timestamp as this to ensure it always works) 2015-11-15 09:52:01 -08:00
James Lu
7e8e8f33f7 unreal: add updateClient 2015-11-15 09:45:46 -08:00
James Lu
e167be2a69 move awayClient/handle_away to ts6_common 2015-11-15 09:34:26 -08:00
James Lu
a5a2481205 unreal: handle sethost, chghost, and all that 2015-11-15 09:30:29 -08:00
James Lu
ac48c49591 Move squitServer/spawnServer to ts6_common, add topicServer for Unreal 2015-11-15 09:12:21 -08:00
James Lu
5664218254 unreal: add WHOIS handling 2015-11-11 19:40:26 -08:00
James Lu
dfefaeabc5 Merge branch 'devel' into wip/unrealircd 2015-11-11 19:40:22 -08:00
James Lu
eeedeb0135 Move numericServer to ts6_common 2015-11-11 19:40:10 -08:00
James Lu
8c60782753 unreal: add modeClient/modeServer 2015-11-11 19:24:57 -08:00
James Lu
76472560ab unreal: add killServer/killClient 2015-11-11 19:09:37 -08:00
James Lu
fcd1bf5c37 unreal: fix typo in one updateTS call 2015-11-11 19:09:30 -08:00
James Lu
6f9feb46b1 unreal: fix last commit (actually map the hook & set modes on RIGHT target) 2015-11-11 18:55:05 -08:00
James Lu
6601071d35 unreal: add svsmode/svs2mode handler 2015-11-08 15:27:09 -08:00
James Lu
119aa8939b unreal: use Protocol.updateTS() for TS checks 2015-11-08 15:27:09 -08:00
James Lu
619b004bdf Merge branch 'devel' into wip/unrealircd 2015-11-08 15:14:51 -08:00
James Lu
2008df047c Fix logic in last commit
ts has to be set to orig_ts if missing, otherwise a later comparison would try to check for None <= some int, which would error
2015-11-08 15:14:03 -08:00
James Lu
c88f126331 Merge branch 'devel' into wip/unrealircd 2015-11-08 15:10:42 -08:00
James Lu
2eeba50a2a Modularize TS updating code (Closes #129) 2015-11-08 10:49:09 -08:00
James Lu
6f36fb7126 unreal: alias SVSKILL to KILL 2015-11-01 21:50:46 -08:00
James Lu
4a4c43d3c4 unreal: handle timestamps in MODE (channel bursts), ignoring when TS is 0 2015-11-01 21:41:41 -08:00
James Lu
cedcb9b11a Merge branch 'master' into wip/unrealircd 2015-11-01 20:40:56 -08:00
James Lu
c5b3441f6a inspircd: alias SVSTOPIC to FTOPIC (reported by @siniStar7boy)
SVSTOPIC is used by services to set topics when m_topiclock (server side topic locking) is enabled on the IRCd. Unfortunately, usage of this isn't documented anywehere......
Basically, this makes PyLink treat it as a regular server topic change (FTOPIC), since the arguments are the same anyways.
2015-10-31 19:15:03 -07:00
James Lu
59af8e196c ts6: fix call to operup hook when handling EUID 2015-10-25 10:27:06 -07:00
James Lu
dbe24973d5 unreal: add joinClient + sjoinServer, support +qaohv properly 2015-10-12 19:38:38 -07:00
James Lu
f0ff14fda9 unreal: fix spawnClient manipulatable setting 2015-10-12 19:34:52 -07:00
James Lu
90fd64b125 unreal: store IPs properly, now that I understand how... 2015-10-12 18:45:25 -07:00
James Lu
399f89900b unreal: TOPIC inbound handler (#104) 2015-10-12 18:25:30 -07:00
James Lu
00a6008078 unreal: we can send NETINFO instantly now, since network full name is a config option 2015-10-12 18:20:16 -07:00
James Lu
b5677806e7 unreal: bump protocol version to 3999 (Unreal 4.0.0-rc1) 2015-10-12 18:17:58 -07:00
James Lu
1eeeba1e86 unreal: support legacy server introduction (#119) 2015-10-12 18:15:39 -07:00
James Lu
2fc0e086ae unreal: rename _convertNick => _getNick 2015-10-12 17:58:36 -07:00
James Lu
4f4ad7b54d unreal: switch to _getSid for server name reverse lookup 2015-10-12 17:50:44 -07:00
James Lu
07fce69c5e Merge branch 'devel' into wip/unrealircd 2015-10-12 17:50:35 -07:00
James Lu
d4200424fa ts6: support legacy (non-sid) server introduction
Closes #119.

For the sake of simplicity, server swithout a SID are stored by their server names internally, which is convenient because no reverse lookup is needed when an SQUIT is received for it.
2015-10-12 17:49:03 -07:00
James Lu
1f0426d7ff ts6: fixes to SQUIT handling 2015-10-10 14:58:52 -07:00
James Lu
64cba70cbd ts6: add stub for legacy (no SID) SERVER introduction 2015-10-09 22:50:11 -07:00
James Lu
6e30a62a4a unreal: SQUIT and SID handlers (#114) 2015-10-09 22:38:28 -07:00
James Lu
d5a2d3b0e8 unreal: fix incorrect comment 2015-10-09 21:39:09 -07:00
James Lu
a3ee7f2c8a unreal: handle UMODE2 (self user mode changes)
For #114. TODO: find out if it's possible to set modes on other users, and handle that if applicable
2015-10-09 21:37:44 -07:00
James Lu
f97d3eb756 Merge branch 'master' into wip/unrealircd 2015-10-09 21:36:02 -07:00
James Lu
9927627630 unreal: add handle_mode (channel modes) and support for unreal +f (#104) 2015-10-08 21:06:57 -07:00
James Lu
181c40d9fe inspircd: fix another "find all, replace" mistake 2015-10-08 21:06:35 -07:00
James Lu
c50866c3a9 unreal: Fix handle_sjoin (#104) 2015-10-08 20:48:10 -07:00
James Lu
963b9e978e unreal: Add handle_sjoin (#104) 2015-10-08 20:46:30 -07:00
James Lu
009cac2263 unreal: fix joinClient not adding users to state (#104) 2015-10-08 20:44:12 -07:00
James Lu
665481276d unreal: update spawnClient to latest spec, improve handle_events and documentation to be more correct 2015-10-08 20:28:21 -07:00
James Lu
7c7f07b3a9 Merge branch 'master' into wip/unrealircd 2015-10-08 20:14:30 -07:00
James Lu
8bde21f1e6 inspircd: remove clients from state when killing own clients
Closes #115.
2015-10-08 20:13:37 -07:00
James Lu
a9253eda77 ts6: fix removeClient usage 2015-10-02 23:31:38 -07:00
James Lu
f015fe5e25 Documentation updates, finish off pmodule-spec.md (#113) 2015-09-24 18:36:54 -07:00
James Lu
3351aafc79 inspircd: fix wrong arguments in numericServer() stub 2015-09-24 18:13:11 -07:00
James Lu
c77d170765 Move parseArgs and removeClient into the base Protocol class
These aren't really TS6-specific, and can be useful anywhere.
2015-09-24 18:03:30 -07:00
James Lu
886994475d Merge branch 'master' into wip/unrealircd
Conflicts:
	classes.py
2015-09-23 18:59:17 -07:00
James Lu
e92f35018f TS6SIDGenerator: take an IRC object, and skip any SIDs that are currently in use 2015-09-20 18:32:43 -07:00
James Lu
f38958995c Store opertypes with spaces instead of underscores, and only change them back when sending OPERTYPE
Another "Janus sucks" commit - it should be always using underscores when sending OPERTYPE, but it doesn't...
2015-09-20 11:25:45 -07:00
James Lu
c3e8420aa0 relay/ts6_common: be more error tolerant with network (dis)connections 2015-09-18 22:11:27 -07:00
James Lu
fb91ff8ea3 Remove allow_abcd attributes from protocols (not needed anymore) 2015-09-17 19:07:37 -07:00
James Lu
069cd62865 core: allow marking spawned clients as manipulatable or protected
This flag determines whether the client should be manipulated by commands like bots.py's MODE/QUIT/JOIN commands, or protected from them (services).
2015-09-17 19:01:54 -07:00
James Lu
b87e34efa2 Slightly more consistent logging format... 2015-09-16 21:32:27 -07:00
James Lu
c5b6658200 bots: more validation in "MODE" to prevent bad things from happening
This adds a new "allow_forceset_usermodes" attribute to protocol modules, which determines whether the IRCd allows us to force usermode changes on other servers' clients.

Also, make sure our target is a valid nick/UID/channel, and that the parsed modes are not empty!
2015-09-14 17:46:20 -07:00
James Lu
6476aefb5f Merge branch 'master' into devel
Conflicts:
	protocols/inspircd.py
2015-09-14 16:55:35 -07:00
James Lu
1f95774131 inspircd: add proper fallback value for OPERTYPE? 2015-09-13 17:04:17 -07:00
James Lu
9c4e0107f3 ts6_common: make old topic retrievable in handle_topic 2015-09-13 14:23:09 -07:00
James Lu
c82a0a771c protocols: return an "oldchan" IrcChannel object with the previous state of a channel when processing channel mode changes
This allows plugins to check for op statuses, etc. before the mode change is processed.
2015-09-13 13:47:18 -07:00
James Lu
17282aa049 protocols: fix typo and ts6._sendModes when input is a set() 2015-09-12 23:35:20 -07:00
James Lu
3a8d3d146c protocols: make "uidgen" a protocol instance attribute 2015-09-12 16:02:51 -07:00
James Lu
0cbdefcab1 ts6/inspircd: fix TS6SIDGenerator not actually incrementing...
It was being replaced on every call... It was only supposed to do that if sidgen hadn't been set yet!
2015-09-12 12:08:02 -07:00
James Lu
36b0a08368 ts6_common: return server name in SQUIT handler too 2015-09-12 12:08:02 -07:00
James Lu
df42a81191 classes/protocols: store server descriptions internally
Closes #106.
2015-09-12 12:07:59 -07:00
James Lu
d6cb9d45c7 Merge commit '320de2079a78202e99c7b6aeb53c28c13f43ba47'
Many things here, including:
- New 'exec' plugin
- INVITE, umode +H (hideoper) support for relay
- New and improved 'showuser' command, now with internals that support multiple binds to one command name.
- relay: bug fixes, like not sending empty user mode changes.
2015-09-12 09:11:52 -07:00
James Lu
ca3372b0af protocols/unreal: class()-ify everything 2015-09-10 18:41:01 -07:00
James Lu
da1b101bc4 Merge branch 'devel' into wip/unrealircd 2015-09-10 18:27:46 -07:00
James Lu
29065fdd04 protocols/: remove unused imports & various documentation improvements 2015-09-08 19:51:14 -07:00
James Lu
983acd5adc Move MODE handling back from ts6_common->inspircd, now that ts6.py does different handling 2015-09-08 19:50:46 -07:00
James Lu
6c503b3603 Fix typos and other stupid mistakes... 2015-09-06 23:18:27 -07:00
James Lu
7952590436 ts6_common: fix a typo 2015-09-06 22:09:09 -07:00
James Lu
197ccd7916 relay/protocols: use utils.toLower() for channel names, respecting IRCd casemappings
Closes #102.

(cherry picked from commit 0b590d6ab3)
2015-09-06 21:47:27 -07:00
James Lu
57da0aa3b3 Classify all our protocol modules - why didn't I do this earlier 2015-09-05 18:00:57 -07:00
James Lu
3b7d81d62a inspircd: fix typo in comment 2015-09-05 14:28:18 -07:00
James Lu
9f2d8a1b01 Document the sources of protocols/inspircd & ts6_common 2015-09-05 14:25:11 -07:00
James Lu
871e6a5c47 unreal: JOIN handlers 2015-09-05 12:29:20 -07:00
James Lu
76246dea70 unreal: add NOTICE and PRIVMSG (inbound/outbound) 2015-09-05 12:02:45 -07:00
James Lu
b63d7619da unreal: validate uplink protocol version (needs >=2351) 2015-09-05 11:52:46 -07:00
James Lu
cae4c60b56 unreal: stricter protocol negotiation (check needed capabilities) 2015-09-05 11:45:28 -07:00
James Lu
a96826273f Merge branch 'devel' into wip/unrealircd 2015-09-05 11:24:45 -07:00
James Lu
72cfe04904 protocols: respect serverdesc config options in spawnServer 2015-09-04 18:59:57 -07:00
James Lu
759f6c4492 protocols/: add outgoing squitServer() 2015-09-04 18:55:39 -07:00
James Lu
47a63cb8d6 Merge branch 'master' into devel 2015-09-04 18:48:08 -07:00
James Lu
8f70582d1b ts6: fixes to spawnServer
1) Use SID, not SERVER - This allows us to actually spawn clients on these servers...
2) Fix check for existing server names (drop the .keys() loop, it raises TypeError and isn't needed)
2015-09-04 18:47:53 -07:00
James Lu
bd30bc862e unreal: Implement spawnClient and (most of) inbound UID handling 2015-09-04 11:51:00 -07:00
James Lu
83725f90ff unreal: coerse sender names to UIDs if they're not given
Unreal's protocol isn't quite consistent with UIDs yet... Some commands (PART, QUIT, NICK) use them, while others (KILL, MODE) don't.
2015-09-04 11:51:00 -07:00
James Lu
6d00309f9f unreal: update imports, add (shared) handlers for QUIT, PART, NICK, and KILL 2015-09-04 11:51:00 -07:00
James Lu
3469603763 Merge branch 'devel' into wip/unrealircd 2015-09-04 11:25:26 -07:00
James Lu
167f5cd0cf Move shared stuff into a ts6_common library
Closes #78.
2015-09-04 11:24:40 -07:00
James Lu
18dc1591aa unreal: Niceties like PING/PONG handling and enumerating our uplink's server 2015-09-03 16:07:30 -07:00
James Lu
58b00d1c23 Initial UnrealIRCd protocol stub (#39) 2015-09-03 13:32:59 -07:00
James Lu
1be4034681 Make TS6 command parsing a shared library (#78) 2015-09-03 12:59:50 -07:00
James Lu
ce83bea09a ts6: less garbled error message for UID handler 2015-09-02 23:51:16 -07:00
James Lu
0b590d6ab3 relay/protocols: use utils.toLower() for channel names, respecting IRCd casemappings
Closes #102.
2015-09-01 22:01:22 -07:00
James Lu
26e102f01a Show oper types on WHOIS 2015-08-31 14:52:56 -07:00
James Lu
5480ae14c4 classes: Remove "opertype" IrcUser() argument
This is useless and should've never been here, oops.
2015-08-31 14:11:12 -07:00
James Lu
531ebbba0a Merge branch 'master' into devel 2015-08-31 13:33:30 -07:00
James Lu
f9b4457ced Decorate relay clients, etc. with custom OPERTYPEs
New PyLink internal hook: PYLINK_CLIENT_OPERED, called (supposedly) when a client opers up.
2015-08-31 13:31:20 -07:00
James Lu
c8e7b72065 protocols: lowercase channel names in PRIVMSG handling
Merge NOTICE and PRIVMSG handlers together; they're essentially the same thing.
2015-08-31 11:45:00 -07:00
James Lu
4a964b1595 Merge branch 'master' into devel 2015-08-31 10:58:47 -07:00
James Lu
37eecd7d69 pr/inspircd: use OPERTYPE to oper up clients correctly, and handle the metadata accordingly 2015-08-31 10:31:50 -07:00
James Lu
7620cd7433 pr/inspircd: fix compatibility with channel mode +q (~)
InspIRCd's defaults use "founder" as the mode name for cmode +q, not "owner". My config was different, so I overlooked this.
2015-08-30 23:16:39 -07:00
James Lu
549a1d1ba4 classes: IrcServer.users is now a set() 2015-08-29 12:35:06 -07:00
James Lu
80bebe3827 protocols: also validate TS on incoming SJOIN 2015-08-26 14:59:05 -07:00
James Lu
977b69b8e9 protocols/: Fix args parsing when the sender UID == the last argument
args.index() would return 0 instead of the index of the current argument.
2015-08-26 14:57:46 -07:00
James Lu
05be3e6c17 pr/: add prefixmodes in sjoinServer if TS <= theirs
The old comparison of our TS < theirs was wrong, because modes are merged (not dropped) when two channels of the same TS join.
2015-08-24 18:37:39 -07:00
James Lu
694e7b87f6 various: make the server description configurable
Two options for this: bot::serverdesc, and server::<network>::serverdesc, with the latter taking precedence if present.
2015-08-24 18:14:35 -07:00
James Lu
1d245bf001 protoocols.sjoinServer: only add prefix modes to channel state if our TS < theirs 2015-08-20 01:32:30 -07:00
James Lu
61d95c19cc protocols: delete empty non-permanent channels 2015-08-15 23:29:40 -07:00
James Lu
c99a6a7b9d protocols: update topic in channel state when sending outbound TOPIC 2015-08-15 22:34:40 -07:00
James Lu
06c466896e ts6: fix prefixmodes not being updated in sjoin 2015-08-15 20:14:36 -07:00
James Lu
4352a68357 Check for TS changes on SJOIN (both incoming and outgoing)
Restore relay to the devel branch; TS bursts shouldn't be handled there, but in the protocol modules.

TODO: fix prefixmodes being cleared after BURST, and never being reset?
2015-08-15 19:53:09 -07:00
James Lu
0d41e35d9c Merge branch 'devel' into wip/handle-ts-bursts
Conflicts:
	plugins/relay.py
2015-08-15 19:28:49 -07:00
James Lu
13e4baba8b inspircd: also strip listmodes in joinClient (#58) 2015-08-14 08:47:23 -07:00
James Lu
7d912bbb28 pr/insp: Strip out listmodes in FJOIN
They should always be sent separately according to the protocol documentation: https://wiki.inspircd.org/InspIRCd_Spanning_Tree_1.2/FJOIN

Closes #58.
2015-08-12 07:05:05 -07:00
James Lu
1a57dfcdc3 prs+IrcUser: add incoming (handle_away) and outgoing (awayClient) AWAY handling 2015-08-12 04:17:01 -07:00
James Lu
bf3116d704 First attempt at handling channel TS @ burst (#93)
Doesn't quite work yet, more testing needed.
2015-08-05 06:14:34 -07:00
James Lu
4d76593901 TS6: Initial support for elemental-ircd
The TS6 protocol gets some new options here: use_halfop, use_admin, use_owner, and use_elemental_modes, to deal with features
supported in Elemental but not charybdis. A second server block is added in the example config to document this.
2015-08-03 23:20:19 -07:00
James Lu
8a134aadc5 Remove duplicate assignment of irc.uidgen 2015-08-03 19:44:11 -07:00
James Lu
e5eb58ee73 inspircd: use parse_as instead of forcibly mapping ENCAP to KNOCK 2015-08-03 05:00:32 -07:00
James Lu
ddefd38591 ts6: fix the broken mess of a JOIN handler, and 'parse_as' handling in irc.callHooks... 2015-07-25 20:43:26 -07:00
James Lu
69e16e536b ts6: add QS as a required capability 2015-07-25 18:27:30 -07:00
James Lu
e354ada838 relay: fix nick collision loop on SAVE + when both tagged UID and untagged UID exist on one net
This fixes a clash when for example: both 42XAAAAAA and _42XAAAAAA exist on a network, and PyLink tries to relay both nicks as _42XAAAAAA/network.

Also, this adds an oldnick argument to the SAVE protocol handler, which is then used by relay.normalizeNick to check whether the original pre-SAVE nick is also in use, in the event of nick collisions.
2015-07-25 18:27:30 -07:00
James Lu
146ab5e444 ts6: support +AOS charybdis extension modes, warning if the IRCd doesn't support them
Also, add 'adminonly' (+A) to relay's whitelist.
2015-07-24 20:55:48 -07:00
James Lu
a4da9b5324 protocol/relay: fix handling of KILLs sent to non-relay users 2015-07-24 18:26:31 -07:00
James Lu
007a1d9389 Merge branch 'master' into devel 2015-07-24 11:09:53 -07:00
James Lu
01220b3024 correction: InspIRCd uses RFC1459 case mapping by default 2015-07-24 10:59:04 -07:00
James Lu
868b4503e6 protocols: Fix #81 - that was easy!
Split data by only one space at a time, not as many spaces as possible. Thanks to @nathan0.
2015-07-23 19:09:19 -07:00
James Lu
57c3a04cda ts6: call SQUIT hooks upon receving it... 2015-07-23 15:05:10 -07:00
James Lu
a77427ded9 ts6: fix SQUIT handling
These come in a different syntax? Strange.
2015-07-23 13:45:55 -07:00
James Lu
0575de1fac Support noctcp (+C) on charybdis, and wallops (+w) in relay 2015-07-23 13:45:38 -07:00
James Lu
254ccea0a3 remove some debugging cruft and unused imports 2015-07-23 11:46:45 -07:00
James Lu
42593ae431 ts6: add missing handler for SID 2015-07-23 11:17:57 -07:00
James Lu
58a8d7134c Fix handling of inbound CHG* 2015-07-23 11:02:32 -07:00
James Lu
2e34d9e85d ts6: Use EUID in spawnClient, and error on attempts to use plain UID
The latter isn't handled and thus would lead to pretty bad desyncs. Closes #79.
2015-07-23 10:22:55 -07:00
James Lu
8799e1ccc8 spawnClient: add ts as opt. argument; relay: spawn pseudoclients w/ TS of original user 2015-07-23 00:11:24 -07:00
James Lu
d52fba37b8 add numericServer for sending raw numerics from servers, and WHOIS handling in coreplugin
Basic WHOIS handling (user information, server information, IRCop access) are sent. #72

TODO: send channel lists, an extra note for relay clients, user modes, and idle time
2015-07-22 21:15:34 -07:00
James Lu
8a1f965303 Consistently use applyModes in spawnClient, so user modes are stored like ('o', None) instead of ('+o', None)
Drop the 'modes' argument in IrcUser, for this is incorrect.
2015-07-22 21:14:22 -07:00
James Lu
686467ffa6 Remove endburst toggling in spawnServer, has_bursted IrcServer flag
Neither are being used at all; they're essentially dead code.
2015-07-22 20:39:38 -07:00
James Lu
35cdfbf7e6 Declare IRCd casemapping in protocol modules, and respect these in utils.nickToUid
This adds a new utils.toLower(irc, text) function which returns the lowercased version of <text> based on <irc>'s declared case mapping.

Closes #75.
2015-07-22 20:31:45 -07:00
James Lu
bad1132789 ts6: fix users not joining channels properly due to command cutoff
https://github.com/grawity/irc-docs/blob/master/server/ts6.txt#L5-L6 states that there can only be 15 parameters max per command, GLOBALLY. Ugh.

No warnings? No clue whatsoever that the SJOIN is dropped? This wasted a lot of time.

COME ON.
2015-07-21 19:29:15 -07:00
James Lu
ea7681502f fix some bugs, introduce others 2015-07-21 17:33:36 -07:00
James Lu
57f8b0d6f7 ts6: add handler for BMASK (ban propagation on burst) 2015-07-21 14:38:53 -07:00
James Lu
9b8ef0a45d make relay and ts6 a bit less, well, buggy 2015-07-21 12:44:01 -07:00
James Lu
6ba42759cf ts6: manually set a timer for ENDBURST so relay's initializeAll works 2015-07-20 23:53:21 -07:00
James Lu
73c41b4363 relay & ts6: miscellaneous fixes? 2015-07-20 23:36:26 -07:00
James Lu
88dbe3cde9 TS6: misc fixes; finish off the basic protocol spec!
TODO: move the shared functionality with inspircd into a new ts6_common module
2015-07-20 22:31:40 -07:00
James Lu
419a39c89c ts6: implement initial connection, JOIN/EUID handlers, and more 2015-07-20 21:21:43 -07:00
James Lu
b593b39421 Merge branch 'devel' into wip/proto-ts6 2015-07-20 19:54:08 -07:00
James Lu
72be5ca79c inspircd: make handle_part return a list of channels, not just one
Some IRCds, like TS6, allow sending multiple channels (as a comma-separated list) in PART.

Update relay accordingly.
2015-07-20 19:52:52 -07:00
James Lu
6a0a61296d ts6: handle_sjoin stub (untested) 2015-07-20 18:26:17 -07:00
James Lu
3494d4f794 inspircd: remove RSQUIT handler
Events like this shouldn't be handled at the protocol level, ever. There's little point in adding this globally, since plugins should be able to choose what happens when they receive an SQUIT.
2015-07-20 18:05:42 -07:00
James Lu
8234eb7304 Initial (incomplete and untested!!!) TS6 protocol stub (#40) 2015-07-20 17:36:43 -07:00
James Lu
a10a18d9cc Irc: make prefixmodes a dict mapping chars to their prefixes
This is needed by TS6 support (#40), which send the characters (@+) instead of modes
2015-07-20 16:48:59 -07:00
James Lu
b1e409ff3e relay: unbreak topic handling (closes #68)
Introducing a new .topicset attributing in IrcChannel denoting whether we've received a TOPIC for this channel from the uplink yet.
2015-07-20 13:18:04 -07:00
James Lu
fe9c317f2c inspircd: make channel user tracking more fault tolerant (in sjoinServer / handle_part) 2015-07-19 23:46:19 -07:00
James Lu
bf444f3f6a pr/insp: Servers should use FTOPIC, not TOPIC to send topics 2015-07-19 17:27:53 -07:00
James Lu
0cb9065d53 pr/insp: coerse 'reginvite' named mode to 'regonly' 2015-07-19 16:53:51 -07:00
James Lu
0540e10d50 relay: don't add bans that don't match nick!user@host
Closes #55.
2015-07-19 16:53:51 -07:00
James Lu
a51cfcb7b2 Fix fakeirc and tests for relay (#56) 2015-07-17 22:52:55 -07:00
James Lu
fdea348cbe move hook calling out of pr/insp and into Irc 2015-07-17 16:09:50 -07:00