Simon Ser
2a0696b6bb
Introduce conn for common connection logic
...
This centralizes the common upstream & downstream bits.
2020-04-03 16:35:08 +02:00
Simon Ser
bca0b2ad76
Set connect timeout
...
References: https://todo.sr.ht/~emersion/soju/26
2020-04-01 16:41:17 +02:00
Simon Ser
29f2e93ab7
Set write deadlines
...
References: https://todo.sr.ht/~emersion/soju/26
2020-04-01 16:27:53 +02:00
delthas
0607b940e2
Add support for bouncer logs
...
Add bouncer logs, in a network/channel/date.log format, in a similar
manner to ZNC log module. PRIVMSG, JOIN, PART, QUIT, MODE are logged.
Add a config directive for the logs file, including a way to disable
them entirely.
2020-03-28 00:07:20 +01:00
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