Commit Graph

96 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