Jeremy Latt
a30bb540e9
rewrite parseLine to be much saner about utf8
2014-02-25 13:24:32 -08:00
Jeremy Latt
e409bcec99
simplify new channel insert
2014-02-25 13:12:11 -08:00
Jeremy Latt
02abeeb164
persistent channels persisted to a sqlite db
2014-02-25 11:11:34 -08:00
Jeremy Latt
de5538f5d5
add persistent flag for channels
2014-02-25 10:04:59 -08:00
Jeremy Latt
0531c40481
simplify semantic version constant
2014-02-25 09:42:50 -08:00
Jeremy Latt
6882edeff7
version 1.1.0
2014-02-25 09:14:50 -08:00
Jeremy Latt
1fe73aaa9e
kill command
2014-02-25 09:10:16 -08:00
Jeremy Latt
4d2d18caf1
time command
2014-02-25 07:45:40 -08:00
Jeremy Latt
f0305cf01a
invite command
2014-02-25 07:35:52 -08:00
Jeremy Latt
d6ec1e719b
add a version command for sumeet
2014-02-24 22:04:11 -08:00
Jeremy Latt
f0773c4e9e
increase buffer for a server channel
2014-02-24 19:00:09 -08:00
Jeremy Latt
cc6f764c85
minor cleanup
2014-02-24 17:45:04 -08:00
Jeremy Latt
72726a39b8
many changes
...
- load config sub files relative to config file dir
- load config file by name
- expect bcrypt for passwords
- -genpasswd for generating config-file-safe passwords
- block client thread while checking passwords (PASS and OPER)
2014-02-24 09:48:46 -08:00
Jeremy Latt
be089e7f5f
do bcrypt in the client main routine
2014-02-23 22:21:39 -08:00
Jeremy Latt
2229645a39
refactor server command loop
2014-02-23 19:13:45 -08:00
Jeremy Latt
41e6baf9d4
get rid of a race; use pointers where possible
2014-02-23 18:05:06 -08:00
Jeremy Latt
0856a9fa81
flag socket as closed when writes fail
2014-02-23 17:16:35 -08:00
Jeremy Latt
0bf968e19e
move command parsing and hostname lookups into the socket routine
2014-02-23 17:04:24 -08:00
Jeremy Latt
ff5656fdb4
aggressively clean up client
2014-02-23 11:08:01 -08:00
Jeremy Latt
3b56b5bf42
expose various go internals as a DEBUG command
2014-02-23 10:04:31 -08:00
Jeremy Latt
f482b6b82f
add all channel mask list replies
2014-02-22 15:01:11 -08:00
Jeremy Latt
c5c7469cf0
good ol' fashioned refactoring
2014-02-22 13:15:31 -08:00
Jeremy Latt
c7298c55b9
flesh out channel modes
...
- deprecate 's' mode
- add user limit
- don't leak key in mode messages to non-members
- begin refactoring Mode()
2014-02-22 13:08:25 -08:00
Jeremy Latt
21337cda7f
add error responses for mode command
2014-02-22 12:15:34 -08:00
Jeremy Latt
1283bd35c7
encapsulate client replies in method
2014-02-22 11:40:32 -08:00
Jeremy Latt
39fb4bfb53
restrict new channels to channel regex
2014-02-21 17:19:02 -08:00
Jeremy Latt
c8701febd0
loosen restrictions on WHO replies
2014-02-21 11:09:46 -08:00
Jeremy Latt
f9bf422ba7
be more lax about whitespace when parsing commands from clients
2014-02-20 21:09:56 -08:00
Jeremy Latt
c1edddb9a1
fix whois reply
2014-02-20 20:47:05 -08:00
Jeremy Latt
e1c4c8e8cc
don't send prefix on server-originated string coded replies
2014-02-20 20:08:32 -08:00
Jeremy Latt
0ad05abf5f
omit prefix for non-numeric replies from the server
2014-02-20 19:55:17 -08:00
Jeremy Latt
23f01ff9ee
handle CAP command silently in registration too
2014-02-20 19:55:03 -08:00
Jeremy Latt
b6d8f62674
adjust ping message
2014-02-20 19:22:08 -08:00
Jeremy Latt
52ffc77d8d
don't allow double-joining
2014-02-20 18:56:13 -08:00
Jeremy Latt
1486411db1
render a single part string for all channel members
2014-02-20 18:20:07 -08:00
Jeremy Latt
7dffa530c2
send part message from correct source
2014-02-20 16:56:05 -08:00
Jeremy Latt
ad513da486
do hostname lookups in the client read thread
2014-02-20 13:03:33 -08:00
Jeremy Latt
97881b555d
async hostname lookups
2014-02-20 11:51:45 -08:00
Jeremy Latt
c0dc733351
don't wait for writing to complete
2014-02-20 11:16:10 -08:00
Jeremy Latt
9960089226
format replies to strings instead of using a Reply struct
2014-02-19 22:20:34 -08:00
Jeremy Latt
25ebab37d3
replies shouldn't contain references to client
2014-02-19 19:30:49 -08:00
Jeremy Latt
9c385ededd
synchronize on last writes to client sockets
2014-02-19 18:46:46 -08:00
Jeremy Latt
af6a8ee6f0
remove channel buffering
2014-02-19 18:22:57 -08:00
Jeremy Latt
6265b70622
get rid of goroutines on client socket
2014-02-19 18:13:35 -08:00
Jeremy Latt
95f267ea4f
buffer all channels
2014-02-19 17:48:03 -08:00
Jeremy Latt
f090c616b3
reduce writes
2014-02-18 20:28:35 -08:00
Jeremy Latt
dcb4ac90e2
use a buffered channel for socket writing
2014-02-18 17:46:11 -08:00
Jeremy Latt
0cd6be8008
clean up nickname setting logic
2014-02-18 15:36:58 -08:00
Jeremy Latt
86d4cae141
swap refcounting friends for iteration
2014-02-18 15:28:20 -08:00
Jeremy Latt
9e471b5b5d
solve quit/connection close race
2014-02-18 13:25:21 -08:00
Jeremy Latt
2bc1b952a0
do idle in the server goroutine instead of the timeout goroutine
2014-02-18 11:22:56 -08:00
Jeremy Latt
4f106e7d3e
make server logging consistent with other logs
2014-02-18 10:22:40 -08:00
Jeremy Latt
58517ad4e8
fix closed channel on socket close
2014-02-18 10:13:57 -08:00
Jeremy Latt
9c1ab4f610
fix socket close race
2014-02-17 23:58:02 -08:00
Jeremy Latt
baf83e73d2
support USER from both RFCs 1459 and 2812
2014-02-17 22:10:48 -08:00
Jeremy Latt
bb64d38684
implement who reply like ngircd
2014-02-17 21:30:14 -08:00
Jeremy Latt
b17e62d0b0
names command
2014-02-17 21:02:03 -08:00
Jeremy Latt
046723a709
make whois channels possibly multiline
2014-02-17 20:47:41 -08:00
Jeremy Latt
528588acfc
augment whois idle with signon time
2014-02-17 19:56:06 -08:00
Jeremy Latt
9a5f21e78c
beef up whois
2014-02-17 19:08:57 -08:00
Jeremy Latt
bd3ca4ae47
fix race in idle timeout; fix some string trimming; fix some replies
2014-02-17 18:10:52 -08:00
Jeremy Latt
1a7f56a903
clean up general command and name handling
2014-02-17 17:58:22 -08:00
Jeremy Latt
a55b912941
enforce nicks via lowercase strings
2014-02-17 15:25:32 -08:00
Jeremy Latt
6d8b381927
convert client bools to a flags map
2014-02-17 13:22:35 -08:00
Jeremy Latt
2ecc66b9d9
add more modes to arg-having modes
2014-02-17 11:46:40 -08:00
Jeremy Latt
f0fc3b492c
list command
2014-02-16 23:51:27 -08:00
Jeremy Latt
a9d7f64693
kick command
2014-02-16 23:29:11 -08:00
Jeremy Latt
af5a05f390
use a select in the server commands loop
2014-02-16 22:38:43 -08:00
Jeremy Latt
d5c9681a10
instantiate clients in the server command goroutine
2014-02-16 22:30:01 -08:00
Jeremy Latt
dc5e258f88
don't use a goroutine when initializing clients
2014-02-16 22:26:33 -08:00
Jeremy Latt
cd4503be31
allow blank lines from the client
2014-02-16 22:24:49 -08:00
Jeremy Latt
a894e3f37f
parse lines more robustly
2014-02-16 22:22:46 -08:00
Jeremy Latt
4e56ea1bdc
get rid of unnecessary concurrency for channels and clients
2014-02-16 22:20:42 -08:00
Jeremy Latt
54ca916c85
stop login timer on destroy
2014-02-16 18:16:13 -08:00
Jeremy Latt
e411dafda7
get rid of mutexes in favor of channel-base syncing
2014-02-16 17:23:47 -08:00
Jeremy Latt
74b8221db7
use mutexes more
2014-02-16 10:42:25 -08:00
Jeremy Latt
81a0f19390
fix bad ref in part command
2014-02-16 09:41:16 -08:00
Jeremy Latt
a17490e801
disable no-topic reply
2014-02-16 09:39:11 -08:00
Jeremy Latt
0f6ee63e6e
fix a race
2014-02-15 20:20:37 -08:00
Jeremy Latt
213afc0481
fix another race
2014-02-15 20:01:28 -08:00
Jeremy Latt
ae02596214
get rid of extra topic messages
2014-02-15 19:56:38 -08:00
Jeremy Latt
488b2ccf8f
implement channel modes and messages properly
2014-02-15 19:49:20 -08:00
Jeremy Latt
0bfa2fb98f
channel mode flags and member modes
2014-02-14 21:57:08 -08:00
Jeremy Latt
6983d1930c
RPL_ENDOFNAMES should come from server
2014-02-14 19:38:31 -08:00
Jeremy Latt
33b1e6c582
simplify Replier
2014-02-14 19:35:25 -08:00
Jeremy Latt
ac186a0669
don't close socket send channel
2014-02-14 19:30:58 -08:00
Jeremy Latt
50f1012c92
don't close socket sending channel
2014-02-14 19:30:07 -08:00
Jeremy Latt
87cc184ec0
type numeric codes
2014-02-14 19:25:14 -08:00
Jeremy Latt
3a9027e3dc
don't double-close socket
2014-02-14 19:05:30 -08:00
Jeremy Latt
4d9742d033
organize server command into phases
2014-02-14 18:28:36 -08:00
Jeremy Latt
29df88fb7a
more race conditions
2014-02-14 09:00:49 -08:00
Jeremy Latt
72a90d5544
don't close channels unless necessary
2014-02-14 08:57:17 -08:00
Jeremy Latt
9600be82a3
fix more data races
2014-02-14 08:42:56 -08:00
Jeremy Latt
6ea3c8f4d1
fix race conditions
2014-02-13 23:16:07 -08:00
Jeremy Latt
7051627fb2
avoid race double-close on replies
2014-02-13 21:10:31 -08:00
Jeremy Latt
3ba928cee6
remove server command mutex
2014-02-13 20:58:13 -08:00
Jeremy Latt
7cef494d28
don't close replies twice
2014-02-13 20:56:15 -08:00
Jeremy Latt
be01a412d9
only quit registered clients
2014-02-13 20:52:42 -08:00
Jeremy Latt
dcc40bbac1
more logging
2014-02-13 20:42:06 -08:00
Jeremy Latt
541a40b056
touch should respect destroyed
2014-02-13 20:38:22 -08:00
Jeremy Latt
e0e61907ce
don't trigger connection closed on read and write goroutines
2014-02-13 20:30:51 -08:00
Jeremy Latt
03b6caa597
don't close replies too many times
2014-02-13 20:27:20 -08:00
Jeremy Latt
d35fe6088c
attempt to fix hang condition in quit sequence
2014-02-13 20:23:22 -08:00
Jeremy Latt
a9eae872c9
mutex server commands
2014-02-13 20:08:16 -08:00
Jeremy Latt
42ff4410ad
more logging
2014-02-13 19:49:31 -08:00
Jeremy Latt
6301d2b47f
more logging
2014-02-13 19:44:42 -08:00
Jeremy Latt
8902ee040d
more logging; check client for each reply
2014-02-13 19:41:51 -08:00
Jeremy Latt
11537ad975
abstract net operations as Socket
2014-02-13 19:37:37 -08:00
Jeremy Latt
b8bbc7eeb5
add more logging
2014-02-13 18:59:45 -08:00
Jeremy Latt
b6a7d98b64
adjust authorization and add more hang logging
2014-02-13 18:39:33 -08:00
Jeremy Latt
ce931b23a2
simplify net logging
2014-02-13 18:17:20 -08:00
Jeremy Latt
965d8efdf8
add a login timout to close dropped connections
2014-02-13 13:19:26 -08:00
Jeremy Latt
6e0ab99d38
look up PROXY hostnames async
2014-02-13 11:27:04 -08:00
Jeremy Latt
4b98d2a45b
clear out old clients; fix NameReply
2014-02-13 11:06:07 -08:00
Jeremy Latt
c805006ab8
save reply source id at init time for nick changes
2014-02-13 10:57:58 -08:00
Jeremy Latt
261aaa128f
try to fix nick message sending
2014-02-13 10:19:53 -08:00
Jeremy Latt
c327042c94
destroy clients on socket close with quit
2014-02-13 09:47:10 -08:00
Jeremy Latt
7a2c9db503
don't allow send on closed channels
2014-02-13 09:35:59 -08:00
Jeremy Latt
ca25828804
sanify debug net logging
2014-02-12 21:18:02 -08:00
Jeremy Latt
415ccc7607
maybe fix networking hangs
2014-02-12 21:07:40 -08:00
Jeremy Latt
01fa48c73e
clear client channel list on destroy
2014-02-12 18:33:30 -08:00
Jeremy Latt
2aa61b0dbe
clean up and fix targets for quit message
2014-02-12 18:27:36 -08:00
Jeremy Latt
52dd2521c2
remove prefix from local replies; fix topic message
2014-02-12 18:14:19 -08:00
Jeremy Latt
db2a21fee0
ignore target in whois
2014-02-12 09:42:47 -08:00
Jeremy Latt
6daf81ea91
notice command
2014-02-11 17:11:59 -08:00
Jeremy Latt
09887b2db3
motd command
2014-02-11 16:35:32 -08:00
Jeremy Latt
a203a3ca16
ison command
2014-02-11 15:58:54 -08:00
Jeremy Latt
08d9d5ab79
away modes
2014-02-11 15:44:58 -08:00
Jeremy Latt
cdae59ecf5
stub motd
2014-02-11 15:33:02 -08:00
Jeremy Latt
887f12cb31
get rid of channel abstraction for buffered socket io
2014-02-11 15:00:19 -08:00
Jeremy Latt
aac0efebee
send initial nick message to source client
2014-02-11 14:32:17 -08:00
Jeremy Latt
0e07b29010
avoid nil reference in who reply
2014-02-11 09:09:16 -08:00
Jeremy Latt
a34443f155
fix reverse dns
2014-02-10 19:39:53 -08:00
Jeremy Latt
4379cb8e1c
add PROXY protocol support
2014-02-10 18:40:06 -08:00
Jeremy Latt
a8141a0e1c
async new connections
2014-02-10 17:54:35 -08:00
Jeremy Latt
8d0adf253d
configure ipv4/6 in config file
2014-02-10 13:52:28 -08:00
Jeremy Latt
fb65203805
stub cap command
2014-02-10 11:14:34 -08:00
Jeremy Latt
28bd5a40ba
trim . from reverse address lookup
2014-02-09 21:10:36 -08:00
Jeremy Latt
959167cbe7
reverse dns lookup
2014-02-09 21:04:37 -08:00
Jeremy Latt
9b89f1a0fb
check permissions before doing channel modes
2014-02-09 20:04:17 -08:00
Jeremy Latt
56cb8512dc
relax SSL restrictions
2014-02-09 19:59:45 -08:00
Jeremy Latt
3fd73e3252
don't close socket channels to avoid panics
2014-02-09 19:59:25 -08:00
Jeremy Latt
db0f494604
TLS support
2014-02-09 19:41:00 -08:00
Jeremy Latt
e625f62baa
cancel timers when a client quits
2014-02-09 19:06:30 -08:00
Jeremy Latt
035a8f6cde
do a type conversion better
2014-02-09 19:03:56 -08:00
Jeremy Latt
f3da4e0286
remove double nick-change message
2014-02-09 15:18:18 -08:00
Jeremy Latt
6653b55416
interpret local ips as localhost
2014-02-09 15:14:53 -08:00
Jeremy Latt
133b91b9f0
idle/quit timeout
2014-02-09 12:13:09 -08:00
Jeremy Latt
8a90634c0a
irc operators
2014-02-09 10:07:40 -08:00
Jeremy Latt
6367e4b654
fix ModeString
2014-02-09 08:53:06 -08:00
Jeremy Latt
1787ac8ebf
use Reply() to wrap channel
2014-02-09 08:48:11 -08:00
Jeremy Latt
281558072a
configure server with json
2014-02-09 07:53:42 -08:00
Jeremy Latt
55d3d6e946
don't overwrite base command
2014-02-08 23:51:51 -08:00
Jeremy Latt
04f881a617
channel 'no outside messages' flag
2014-02-08 23:33:56 -08:00
Jeremy Latt
a3b7441939
type cleanup
2014-02-08 23:15:05 -08:00
Jeremy Latt
20257ec624
use ModeOp everywhere
2014-02-08 22:42:14 -08:00
Jeremy Latt
93f4b6859a
more channel mode parsing and bad listing
2014-02-08 22:06:10 -08:00
Jeremy Latt
d370abcd4c
minimal who command
2014-02-08 18:49:52 -08:00
Jeremy Latt
d8951e1b48
minimal channel mode command
2014-02-08 18:14:39 -08:00
Jeremy Latt
a0eed1d687
properly implement join/part
2014-02-08 17:53:06 -08:00
Jeremy Latt
c4f457705a
minimal whois implementation
2014-02-08 17:43:59 -08:00
Jeremy Latt
06648393a1
implement join/quit and channel messages properly
2014-02-08 17:10:04 -08:00
Jeremy Latt
3f9495cda0
add data structures for decoding mode messages
2014-02-08 14:20:23 -08:00
Jeremy Latt
b9cb539219
organize like a proper go package
2014-02-08 13:19:35 -08:00