| Age | Commit message (Collapse) | Author |
|
Yay, now there're topic!!
|
|
Also remove hostname argument from the cli. It'd be better to have it
in a config file rather than passing through an argument, it was like
that since times config file didn't exist, but time has changed
|
|
Though it's kinda basic, but still
|
|
Incrementing global count instead of i is a stupid mistake...
|
|
Version before works fine, but
- Checking whether it's a client or not is redundant
- writef() was inside the loop before the break; for no good reason
|
|
It's a flag that restricts a set of users able to write to a channel to
those who joined. If not, reply 442 is sent upon PRIVMSG
|
|
IRC operators should be able to change channel modes as well
|
|
|
|
When user user_remove() is called, that user quits all of the channels
it was belonging to. But since channel_exit() mutates chanels array, it
is incorrect to 1) compare with channels_c 2) access channels[i]. As a
fix, 1) channels_c is not being compared throughout the loop but is
assigned to i once, and then i decrements 2) channels is being accessed
only as channels[0]
|
|
As they will anyway repeat a lot of times, it's better to make a macro
for that. Also now this look better and printing doesn't take too much
attention within a block of logic
|
|
Well, prefix starts with a colon, yes...
|
|
Well, an oper should have some way to manage their channel :)
|
|
User has to be authorized in order to be able to change channel's
modes.
|
|
MODE command is used to manage modes of both users and channels. But
since these tasks are quite different it'd be nice to split them to
not have an if statement whose both branches occupe whole function
|
|
At least it is now set to a first user :D
|
|
I thought it'd be fine to store modes as an array. But using this is
awful experience. Take a look at simple NAMES command: it just needs
to check whether some user is oper or voice or not, and with that
approach it will need to iterate over an array of users, and for each
user iterate over an array of modes. Or it is possible to optimize it,
saving all interesting modes to a local buffer and then iterating over
it. But those are attempts to fix broken design
So, instead of array of modes there'll be lots of fields regarding each
mode or kind of mode
From now on (struct Channel).peers is not a simple array of peers, but
the one with metainformation. This is done by making an array of
structures, so there are renames throughout the code
Also, I didn't like that it was users and not peers and this is a nice
opportunity to rename it: in first place this was done to avoid thing
that compiler somehow could silently ignore type change, but this is
also a stylistic change reflecting my view on naming
|
|
CFLAGS is a *c*ompiler flags and thus are unneeded for linking, perhaps
even harmful. LDLIBS are needed for linking as program can require some
external libraries and those should be listed exactly here
|
|
- One is missing *
- Second is missing s
|
|
It requires a parameter command, but no caller provided it :/
|
|
SETOPER is a command for config, OPER is the one to authorize a user
|
|
It's incorrect to check for an uppercase letter on a lowercase
string...
|
|
So not it can show who's on the channel, yay. Though, no showing ops
|
|
For configuration it's important to allow IRC messages to end with \n.
This also fixes a TODO from a previous commit and allows to connect to
ircd using netcat
|
|
Now users can query each other
Plus, server info and creation date can be changed without recompiling
using configuration file in IRC message format which is loaded on
startup
TODO: since readcfg uses IRC logic, handle() now should be able to deal
with commands ending with simply \n
|
|
- Now code depends on config.h in Makefile
- By default the smallest timeout is chosen for poll()
- Somewhy there was sizeof(PEER_QUIT_MAX)...
|
|
Well, example config values don't need licesing that much, but as every
other file has that notice I think this one should have it as well
|
|
Now ircd responds with all replies up to 4
Plus memchr was wrong, yep
|
|
It wasn't very accurate for this time
|
|
Now there can't be single \r or \n in the message, erroneous nicks and
channel names are rejected, and usernames are stripped on '@'
|
|
The one in user.c is the funniest one
|
|
After seeing same announcing code second time I decided it should be
done before an actual quit in loop.c. Plus, channel exiting is now done
in user_remove().
|
|
I think it should guarantee that nothing will break, including chanels
|
|
Now users will be kicked for inactivity o.o
|
|
Also make a new file config.h for storing that stuff
|
|
Then I should make some logic for pinging others...
|
|
Well, it's the same as PRIVMSG but different name
|
|
Well... yes
|
|
- Instead of checking users in the channel check user's channels
- Ensure thing looks really dumb here, so remove it
|
|
|
|
If user hasn't joined any channels, announcement still should be
delivered to them
|
|
Well, I guess that code is needed more then once, so it'll be good
to move it to some function
|
|
Channels are removed just like users, hence they have the same
problem as users had before: when channel is removed, links to it
must be updated. For users that was fixed[1], for users this commit
provides the fix.
[1] Commit where user quit was fixed -
63c0a8860459c0c9bf3b66d4d4ec631ece4bf56e
|
|
Yay, adding some validation to the data ^^
|
|
Now it's O(n) instead of O(n^2)
|
|
So I decided to kill a link when there's no IRC message within 512
bytes, because doing so removes code and IMO makes it more clear
If peer->recvd == sizeof(peer->buf), then buffer size passed into next
read(peer->fd) will be 0, therefore its return value will be 0. Though,
this means that link is almost dropped if it sent exactly 512 bytes not
containing an \r\n: they can get information, but on next send ircd
will close the connection. But this state is unachievable with an IRC
client: it either sends a message <= 512 bytes containing an \r\n, or,
if one or more bytes longer, well that's already > 512 bytes hence link
is still ready to be read and will be kicked after the next poll()
|
|
|
|
So, it fixes a situation when an already registered user wants to
change their nick and ircd welcomes they
|
|
So, now there're all modes listed in RFC 2812. The only what they
do now, though, is a +r restricting user from changing their nick
|
|
There were bugs when struct layout was changed, and this was right
because needed files were not rebuilt. This is fixed now
|
|
In the past there was a configpath parameter, and unveil was allowing
to read at this path. But now accessing filesystem is redundant
completely
|