Commit Graph

167 Commits

Author SHA1 Message Date
Shivaram Lingamneni 3cd3601a30 refactor join/part 2019-01-02 09:55:45 -05:00
Shivaram Lingamneni c2b2559ab4 avoid some uses of Sprintf for loglines 2019-01-02 09:55:45 -05:00
Shivaram Lingamneni 7c36ec3f9d allow auto-ops (halfop and higher) to bypass channel join restrictions 2018-12-30 18:28:56 -05:00
Shivaram Lingamneni b34bab16a7 ensure that identical PRIVMSG share a time tag 2018-12-30 18:17:24 -05:00
Shivaram Lingamneni 2c7c8fbaf9 history replay enhancements 2018-12-28 13:45:55 -05:00
Shivaram Lingamneni f58c873f84 fix RPL_INVITING response to match modern ircdocs 2018-12-23 13:49:03 -05:00
Shivaram Lingamneni b6b4d365bc fix #313 2018-12-23 13:30:25 -05:00
Shivaram Lingamneni a0bf548fc5 draft/resume-0.2 implementation, message history support 2018-11-26 05:23:27 -05:00
Shivaram Lingamneni a18283e2de fix a crash when SAMODE'ing in a channel you're not joined to 2018-08-17 12:44:49 -04:00
Shivaram Lingamneni 1383190249 refactor rehash to rely more on server.config 2018-07-16 03:46:40 -04:00
Shivaram Lingamneni 31f386f5a9 add CHANSERV UNREGISTER 2018-06-04 05:02:22 -04:00
Daniel Oaks 7bf18443a8
Merge pull request #270 from slingamn/amode.1
frontend for persistent account modes in channels
2018-05-30 21:27:28 +10:00
Shivaram Lingamneni 495705f538 implement SAJOIN, allow channel founders to join unconditionally 2018-05-25 02:47:50 -04:00
Shivaram Lingamneni 1016f86f70 implement CHANSERV AMODE 2018-05-23 16:00:49 -04:00
Shivaram Lingamneni 6533893863 optimized implementation of Channel.Names() 2018-04-26 03:22:52 -04:00
Shivaram Lingamneni b97ae00fe3 refactor channel join and part 2018-04-25 00:58:54 -04:00
Shivaram Lingamneni abbbd2c899 review fix 2018-04-23 20:05:02 -04:00
Shivaram Lingamneni fad2475c3f modes refactor, #255 2018-04-22 19:36:15 -04:00
Shivaram Lingamneni 8fb5a38851 Updates to channel persistence
1. Implement persistent channel keys (#208)
2. Persist changes to registered channel modes
3. Backend changes for persisting operator status (partial #198)
2018-04-03 21:49:40 -04:00
Shivaram Lingamneni ef99bc48d1 fix #204
Empty channels were only cleaned up on PART, not QUIT.
2018-03-01 11:10:46 -05:00
Shivaram Lingamneni ad73d68807 refactor account registration, add nick enforcement 2018-02-11 05:30:40 -05:00
Daniel Oaks a70cc6713c (hopefully) fix labeled-response behaviour 2018-02-11 08:57:15 +10:00
Daniel Oaks e0fa97d344 Get labeled-reply working just fine 2018-02-06 00:21:08 +10:00
Daniel Oaks 2419f69879 Move all errors into errors.go 2018-02-03 22:03:36 +10:00
Daniel Oaks 3634d0601e Split modes into a subpackage (this is painful, but will force us to simplify and improve the API for interacting with modes) 2018-02-03 20:21:32 +10:00
Daniel Oaks 275227a461 Make like every client-facing string translatable 2018-01-22 21:26:01 +10:00
Daniel Oaks f8b39cfe61 Send fake channel joins on RESUME 2018-01-22 17:58:10 +10:00
Shivaram Lingamneni 52b0fb71e7 refactor ClientManager 2017-11-22 05:09:38 -05:00
Shivaram Lingamneni d4cb15354f remove registeredChannelsMutex
This moves channel registration to an eventual consistency model,
where the in-memory datastructures (Channel and ChannelManager)
are the exclusive source of truth, and updates to them get persisted
asynchronously to the DB.
2017-11-08 22:24:33 -05:00
Shivaram Lingamneni 60b861e07e fix a race in regenerateMembersCache
The rationale for why regenerateMembersCache didn't need to hold the Lock()
throughout was subtly wrong. It is true that at least some attempt to
regenerate the cache would see *all* the updates. However, it was possible for
the value of `result` generated by that attempt to lose the race for the final
assignment `channel.membersCache = result`.

The fix is to serialize the attempts to regenerate the cache, without adding
any additional locking on the underlying `Channel` fields via
`Channel.stateMutex`. This ensures that the final read from `Channel.members`
is paired with the final write to `Channel.membersCache`.
2017-11-07 14:38:18 -05:00
Shivaram Lingamneni 9b74c47b74 rename some getters
Rename getters in conformance with the "Effective Go" styleguide recommendation:
https://golang.org/doc/effective_go.html#Getters
2017-11-03 02:36:55 -04:00
Shivaram Lingamneni 94cf438f51 remove channelJoinPartMutex 2017-10-30 05:21:47 -04:00
Shivaram Lingamneni fa83ccd82b refactor synchronization for Channel 2017-10-22 19:50:16 -04:00
Daniel Oaks b8d47c3e4f channel: Server opers shouldn't override nooutside, reggedonly and moderated modes. if they want to do that sort of thing, they have SAMODE and all to be explicit about it 2017-10-01 15:18:52 +10:00
Daniel Oaks e3a0387cf5 channel: Fix +m (moderated) and +R (registeredonly) channel modes, add note about opers overriding +m/+R 2017-10-01 15:14:32 +10:00
Daniel Oaks 275449e6cc caps: Move most capability-handling types into the caps package 2017-09-29 17:25:58 +10:00
Daniel Oaks 9bfdc4fdfb Move caps to their own package to prevent conflicts 2017-09-29 12:07:52 +10:00
Shivaram Lingamneni e8b1870067 refactor the rehash implementation 2017-09-28 02:13:24 -04:00
Daniel Oaks 79de443496 channel: Don't send TOPIC on entirely new channel 2017-09-26 08:01:10 +10:00
Daniel Oaks 3b0d9c4db9 Send nick parameter correctly on ERR_NOSUCHNICK numerics 2017-09-26 07:52:43 +10:00
Shivaram Lingamneni 333afe1062 make default channel modes configurable 2017-09-06 17:37:29 -04:00
Daniel Oaks c9ed749538 Rename deps 2017-06-15 10:14:19 -06:00
Daniel Oaks 9a94121281 JOIN: Fix a dumb bug. Really dumb bug. 2017-04-17 20:28:01 +10:00
Daniel Oaks 22216d4d60 Fix lots of nits 2017-04-16 11:31:33 +10:00
Daniel Oaks 0046025d60 Enable chanmode +r, fix bug with registering channels 2017-03-28 17:32:03 +10:00
Daniel Oaks 317a804644 Fix dates at top of source files 2017-03-27 22:15:02 +10:00
Daniel Oaks 013635a827 channel: Give founder mode if channel already exists and founder joins 2017-03-27 14:52:34 +10:00
Daniel Oaks 6aebd4aad9 channel: Add comments, fix a small bug with moderated mode 2017-03-27 14:29:51 +10:00
Daniel Oaks 300d02bd9c channel: Kill a race condition that locked up the server.
Specifically, if you joined a channel while someone else was trying to part. the Join method would grab the lock, the Quit method would queue to grab the lock, the Join method would unlock and then try to regrab the lock, and it would get into a situation where nobody would have the lock and everyone would be waiting for it.

This caused weird oddities with clients.
2017-03-26 22:11:09 +10:00
Daniel Oaks 861b65eb39 channels: Automagically save channel bans/excepts/invites 2017-03-26 20:37:13 +10:00