Simon Ser
88cc4c41f1
Fix TOPIC parsing, broadcast to downstream clients
2020-03-04 15:45:14 +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
d1550a3cdb
Remove upstream prefix for outgoing MODE and PRIVMSG
...
We shouldn't set the prefix when sending these commands.
2020-03-03 15:33:21 +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
6e12347f2b
cmd/jounce: fix non-TLS listener address
2020-03-03 15:15:57 +01:00
Simon Ser
70fcef297b
Add functions to translate between upstream and downstream names
2020-02-19 18:25:19 +01:00
Simon Ser
ef2d145d1f
Fix PING handlers, again
2020-02-18 20:40:32 +01:00
Simon Ser
1141698a92
Enable TCP keep-alive on all connections
2020-02-18 17:26:17 +01:00
Simon Ser
d484e6e374
Properly handle PING messages
2020-02-18 17:07:58 +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
9fea758956
Fix panic when closing downstream connection
2020-02-18 15:08:06 +01:00
Simon Ser
1f5a72a7cf
Add config file
2020-02-18 14:10:23 +01:00
Simon Ser
603bd6bdef
Add CLI flags for listening address and hostname
2020-02-17 16:25:09 +01:00
Simon Ser
3c3f218b2b
Add upstreamConn.SendMessage
...
Allows us to change upstreamConn implementation details without updating
the whole codebase.
2020-02-17 16:17:31 +01:00
Simon Ser
70d811f5a8
Document Ring
2020-02-17 16:09:35 +01:00
Simon Ser
528c402bd0
Forward PRIVMSG coming from downstream
2020-02-17 15:56: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
2a43dbd71a
Add downstreamConn.writeMessages
...
This logic will become more complicated in upcoming commits.
2020-02-17 12:41:27 +01:00
Simon Ser
09dffc0f68
Abbreviate {upstream,downstream}Conn with uc and dc
...
This makes it clearer than just `c` when we manipulate both kinds at the
same time.
2020-02-17 12:36:42 +01:00
Simon Ser
0cf731aeab
Don't write to downstreamConn.messages directly
...
Use a helper function instead. This will allow us to change
downstreamConn implementation details without having to update the whole
codebase.
2020-02-17 12:27:48 +01:00
Simon Ser
86f9221ddc
readme: add some high-level goals, add contributing links
2020-02-17 12:19:27 +01:00
Simon Ser
6e352f43b1
Switch license to AGPLv3
2020-02-07 17:41:51 +01:00
Simon Ser
7127fa325a
Add names to consumers
2020-02-07 17:35:57 +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
09a793ff9c
Handle downstream JOIN messages
2020-02-07 13:31:09 +01:00
Simon Ser
2e5395f20b
Send fake RPL_CREATED message
2020-02-07 13:23:09 +01:00
Simon Ser
4de405d3b2
Handle downstream MODE messages
2020-02-07 13:08:27 +01:00
Simon Ser
519cdd9e38
Close connection from writer goroutine
...
Connections were being closed from the reader goroutine, causing issues
when sending messages and immediately closing the connection.
2020-02-07 12:42:24 +01:00
Simon Ser
e17c0b3aca
Add upstreamConn.register
2020-02-07 12:37:44 +01:00
Simon Ser
96653499dc
Add parseMessageParams helper
2020-02-07 12:36:02 +01:00
Simon Ser
6d03af8243
Allow changing nickname
2020-02-07 12:19:42 +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
7abf426447
Forward PRIVMSG messages
2020-02-07 11:07:01 +01:00
Simon Ser
0706d45aba
Handle channel mode changes
2020-02-07 11:01:53 +01:00
Simon Ser
bd54c57d71
Handle third-party JOIN and PART messages
2020-02-07 10:54:03 +01:00
Simon Ser
8493f5b255
Use a dedicated goroutine to write upstream messages
2020-02-06 22:46:46 +01:00
Simon Ser
774872d655
Add missing bridge.go, oops
2020-02-06 22:45:54 +01:00
Simon Ser
86f66cf6c4
Remove downstreamConn.WriteMessage
...
It wasn't clear what this function was doing
2020-02-06 22:35:24 +01:00
Simon Ser
ec658e3d39
Send channel info to downstream on registration
2020-02-06 22:29:24 +01:00
Simon Ser
3b0639bacc
Keep track of upstream connections in a list
2020-02-06 22:25:32 +01:00
Simon Ser
89f1944d30
De-duplicate downstream QUIT handling
2020-02-06 22:22:14 +01:00
Simon Ser
cd7556264e
Forward channel information
2020-02-06 22:19:31 +01:00
Simon Ser
4a816e1593
Write to downstream conn in dedicated goroutine
2020-02-06 21:52:04 +01:00
Simon Ser
3f2e08b949
Mark channel info as complete on RPL_ENDOFNAMES
2020-02-06 21:43:22 +01:00