Commit graph

46 commits

Author SHA1 Message Date
Simon Ser 551d41335e
Get rid of Server.downstreamConns
This is unused right now. Let's remove it, we'll add it back if we
really need it.
2020-03-27 22:24:12 +01:00
Simon Ser c0f5850e5b
Add eventDownstreamDisconnected
This should remove the need for protecting user.downstreamConns with a
mutex.
2020-03-27 17:55:03 +01:00
Simon Ser 36ab6ece09
Add eventDownstreamConnected
In a later commit, we'll be able to move part of downstreamConn.register
into the user goroutine to prevent races.

References: https://todo.sr.ht/~emersion/soju/22
2020-03-27 17:21:05 +01:00
Simon Ser 474f2889d9
Introduce a user.events channel
This allows to easily add new events, and also guarantees ordering
between different event types.
2020-03-27 16:33:19 +01:00
delthas d0917f0fa1
Add a server-unique id to each downstream
Adding a simple uint64 id to each downstream is preparatory work
for labeled-responses tags targeting a specific downstream.
2020-03-25 23:17:46 +01:00
Simon Ser 3919ee2036
Per-user dispatcher goroutine
This allows message handlers to read upstream/downstream connection
information without causing any race condition.

References: https://todo.sr.ht/~emersion/soju/1
2020-03-16 12:44:59 +01:00
Simon Ser 7fe0986859
Split user logic into its own file 2020-03-16 11:18:41 +01:00
Simon Ser f3940117d1
Rename project to soju 2020-03-13 18:13:03 +01:00
Simon Ser 85f28daf2d
Auto-save IRC networks 2020-03-12 21:28:09 +01:00
Simon Ser 0ef08dfbb5
Store NICK changes in the DB 2020-03-12 19:17:06 +01:00
Simon Ser 9db953c7e5
go fmt 2020-03-04 19:23:24 +01:00
Simon Ser 84fe3ae255
Add SQLite database
Closes: https://todo.sr.ht/~emersion/jounce/9
2020-03-04 18:22:58 +01:00
Simon Ser 03c546e8bf
Remove unused user.getChannel, move getUpstream to user 2020-03-04 16:00:19 +01:00
Simon Ser c22ce793a1
Allow clients to specify an upstream name in their username 2020-03-04 15:44:13 +01:00
Simon Ser c366b5320c
Retry connecting to upstream servers
Rate-limit retries in case connecting immediately fails.
2020-03-03 15:26:19 +01:00
Simon Ser 1141698a92
Enable TCP keep-alive on all connections 2020-02-18 17:26:17 +01:00
Simon Ser 8997a70acb
Don't leave connections half-opened 2020-02-18 16:54:06 +01:00
Simon Ser 286fb4b18c
Add a -debug flag 2020-02-18 16:31:18 +01:00
Simon Ser 9a93c56cdf
Fix issues related to Ring
- RingConsumer is now used directly in the goroutine responsible for
  writing downstream messages. This allows the ring buffer not to be
  consumed on write error.
- RingConsumer now has a channel attached. This allows PRIVMSG messages
  to always use RingConsumer, instead of also directly pushing messages
  to all downstream connections.
- Multiple clients with the same history name are now supported.
- Ring is now protected by a mutex
2020-02-17 15:46:29 +01:00
Simon Ser fad9d820c1
Add an in-memory ring buffer
References: https://todo.sr.ht/~emersion/jounce/2
2020-02-07 16:43:54 +01:00
Simon Ser 69a35069ef
Handle downstream PART messages 2020-02-07 13:36:32 +01:00
Simon Ser 4de405d3b2
Handle downstream MODE messages 2020-02-07 13:08:27 +01:00
Simon Ser e17c0b3aca
Add upstreamConn.register 2020-02-07 12:37:44 +01:00
Simon Ser 50fc19c92f
Skip unregistered and closed upstream connections 2020-02-07 12:02:19 +01:00
Simon Ser 636ede13da
Add user.forEachDownstream 2020-02-07 11:56:36 +01:00
Simon Ser 059a799d16
Add user.forEachUpstream 2020-02-07 11:46:44 +01:00
Simon Ser 3586ca3d26
Add Server.getUser 2020-02-07 11:39:56 +01:00
Simon Ser 3b2bb58c60
Per-user connections 2020-02-07 11:36:42 +01:00
Simon Ser 3b0639bacc
Keep track of upstream connections in a list 2020-02-06 22:25:32 +01:00
Simon Ser 5988d10a0b
Remove downstream conn from list on disconnect 2020-02-06 21:30:44 +01:00
Simon Ser 36c404c50c
Allow Server to have access to upstreamConn 2020-02-06 21:20:22 +01:00
Simon Ser 8bbba42aef
Maintain a list of downstream connections 2020-02-06 21:11:35 +01:00
Simon Ser 726d7cb54b
Add per-upstream logger 2020-02-06 20:26:03 +01:00
Simon Ser ae7f162883
Join channels on upstream servers 2020-02-06 19:22:04 +01:00
Simon Ser b5f3bad588
Split downstram and upstream code into separate files 2020-02-06 16:18:19 +01:00
Simon Ser a2d9a64bed
Log upstream server errors 2020-02-06 16:13:29 +01:00
Simon Ser c14e26769f
Add basic upstream message handler 2020-02-06 16:11:28 +01:00
Simon Ser 56d793543e
Connect to upstream servers 2020-02-06 16:03:07 +01:00
Simon Ser 06cd1ce44f
Add Server.Logger 2020-02-06 15:50:46 +01:00
Simon Ser 003ce38bf8
Rename conn to downstreamConn 2020-02-06 15:22:26 +01:00
Simon Ser 3ccc1bb4e8
Handle PING 2020-02-06 12:18:37 +01:00
Simon Ser f8a03a25df
Send ERR_NOMOTD on registration 2020-02-06 12:08:54 +01:00
Simon Ser 5547eb7290
Add connection registration 2020-02-04 18:56:07 +01:00
Simon Ser 23ca41b435
Handle NICK and USER 2020-02-04 12:19:18 +01:00
Simon Ser 6d4581a6d0
Send "unknown command" replies 2020-02-04 11:25:53 +01:00
Simon Ser 8e31fde0ab
Add basic IRC listener 2020-02-04 10:46:22 +01:00