phpircd
phpircd copied to clipboard
An ircd. In PHP.
phpircd v0.4.15 this readme is a changelog lololol
06/27/2012 -
- Added error code 464: ERR_PASSWDMISMATCH
- Added error code 491: ERR_NOOPERHOST
- Added OPER command functionality, minus userhost-checking and mode stuff.
- Changed opers.ini: 'pass-enc' previously 'enc'
- Removed some lingering single-quites in ircd::error()
01/13/2012 -
- Fixed NAMES not adding prefixes correctly.
- Fixed "Client Exited" not being shown when conditions are right.
- Hushed ircd::write()'s fwrite().
- Added bitwise permissions system.
- Added Channel::hasPrivs() method.
- Added Mode::CHANNEL_* constants.
- Added some hookpoint checks.
- Fixed new channel create giving user +O when they should have +o.
- Changed Channel::getUserPrefix() to use new Mode::$prefix.
- Removed Channel::isQop|Aop|Op|Hop.
- Changed Channel::hasVoice() to use Mode::CHANNEL_VOICE privilege.
- Added error 499 ERR_CHANOWNPRIVNEEDED.
- Version is now 0.4.14
01/11/2012 -
- Modes now have one of five types: A (list), B (requires parameter for set/unset), C (requires parameter for set), D (toggle), or P (list, special).
- Converted all channel modes to the new format and added usermodes +is.
- Re-wrote/created user::setModes(), user::setMode(), channel::setModes(), and channel::setMode(). setMode() sets ONE mode, setModes() is passed the mask.
- Fixed issue with channel::getModes().
- Added user::getModes().
- Changed all instances of user::setMode() to user::setModes(), minus the one in user::setModes().
- Added ircd::isupport(). Handles creating and sending of the 005 RPL_ISUPPORT message.
- MODE now works almost to RFC. You can check channel modes and your own user mode, as well as set your own user mode and channel modes (assuming privs).
- Fixed an issue causing hostmasking to be applied twice upon connection.
- Made 004 RPL_MYINFO list actual usermodes available.
- Added missing config options.
- Version is now 0.4.11 (edit 1)
- Added all usermodes that will be used.
- Version is now 0.4.12 (edit 2)
- Fixed hostmasking- now masks IPv4 addresses, short addresses like slowbro.org, and long addresses like node01.phx.somecompany.com differently.
- Fixed ircd::__destruct() still using a socket function.
- Added ircd::$ipv4Regex and replaced faulty IPv4 regex in ircd::createSocket().
- Fixed Channel::hasMode().
- Fixed TYPE_A and TYPE_P modes not ignoring unsetting values that aren't set.
- Version is now 0.4.13
01/10/2012 -
- Cleaned up channel::setModes() a bit.
- Added 'set' and 'unset' hookpoints for channel modes.
- Fixed how modes are announced when doing multiple actions (like +oo-h slo slo2 slo)
- Changed hook parameters. Now takes one array passed by ref. Can contain 'user','chan','extra' at the moment.
- Added error code 482, ERR_CHANOPRIVSNEEDED, and 485, ERR_UNIQOPRIVSNEEDED. (edit 1)
- Added hostmasking
- Added user mode x and connect hook
- Added hostmask* stuff in config.ini
01/09/2012 -
- Slowly working on converting modes to class format
- Added channel::isOwner|Aop|Op|Hop, channel::hasVoice(), channel::getUserPrefix()
- Prefix is no longer stored in channel::$users, and is instead calculated by channel::getUserPrefix()
- Made channel modes +qaohbvz work-ish.
- Added channel::isBanned() debug shell function.
- Added channel:nick() to update nicks in any array modes like +qaohv.
- Added checking for unknown mode chars.
01/08/2012 -
- Condense user and channel modes into one file.
- Add new Mode class.
- Add hookpoints for 'connect', 'privmsg', and 'join'.
- Made +m, +R, and +v channel modes, as well as +z user mode, work-ish.
- Fixed mis-spelling of User::disconnect() (was User::diconnect()).
- Fixed ircd::$rnRegex to include the period as an allowed character.
- Added User::hasMode()
- Added testing User::setMode(). Will be fixed in a future push.
- Fixed LUSERS issues.
- Added $override arg to ircd::error() to override messages.
- Fixed (read: silenced) some complaining in Channel::setMode() when un-setting modes.
- Thanks to PwnFlakes for the help testing.
01/04-05/2012 -
- Fixed MODE #channel outputting array modes.
- LUSERS now reports half-decent information
- Fixed issue #2. The server now doesn't assume line-buffering on the client side.
- Added User::readBuffer
11/08/2011 -
- Fixed user disconnect- using socket function on a stream.
- Fixed user QUIT not being acknowledged due to not calling User::writeBuffer() before disconnect.
7/24/2011 -
- Half of MODE works- at least the mode-setting part. Only for channels, too.
- WHO now works.
- Fixed bug where users attempting to join a channel they were already joined to was not ignored.
7/22/2011 -
- SSL works now.
- Switch to all stream_* functions. No more socket_*.
- Probably going to do some fancy branching things in the future. (edit 1)
- Work on channel modes.
- MODE for channels works now- will display modes and created time.
- MODE is very granular right now and only works for modes not requiring extra stuff likl +l or +L.
- MODE still does nothing for user modes. Need to find a way to set mode related stuff- such as restricted (+aoO) and whatnot. (edit 2)
- Unknown channel mode now throws error.
- New file for storing channel modes and properies.
- Channel mode missing extra (like +l, +L) is ignored.
- Going to do regex checking for extra. (edit 3)
- Added WHO support for channels.
7/21/2011 -
- Fixed PRIVMSG when PMing (Issue #1).
- Removed extraneous (and bugged) strpos in file 'ircd' (Issue #3).
- Fixed posible issue when writing to sockets- now uses user::$buffer and user::writeBuffer() (Issue #4).
- More core::* to ircd.
- core::init is now ircd::__construct.
- Moved on-die code to ircd::__destruct.
- Trying to clean up the main file as much as possible.
7/20/2011 -
- Cleaned up the main file (ircd) a bit- compiled an un-needed foreach into another, amongst other things.
- Fixed checking for 'Client Exited' socket status when quitting spontaneously.
- Fixed possible but in regex (sytax error?).
- Using ircd::$allowed instead of ircd::$forbidden.
- Cleaned up some stuff in the ircd class
- Added ircd::nickInUse() for better nick checking.
- Did away with core::$_nicks.
- I don't remember what else :( (edit 1)
- Fixed some bugs with PHP 5.1.6 - Regex escaping and finding users with keys (not preserved)
- Added ircd::getUserBySocket() (edit 2)
- Removed double read-loop in file 'ircd'- now all processed by 1.
- Moved accept code to ircd::accept().
- Fixed NAMES- was trying to access Channel::$nick which does not exist.
- Various bugfixes.
7/19/2011 -
- Thanks again to cedr and Kuro for testing.
- QUIT now works as expected. Need to tweak it for ping timeouts/etc.
- TOPIC now properly announces.
- NAMES fixed again.
- More later! (edit 1)
- Added fix for ipv6-enabled boxes with ipv4 addresses (adds ::ffff:).
- Changed config.ini to all double-qoutes, as the single quotes broke everything on some boxes.
- Changed core::close() to ircd::quit() when server full. (edit 2)
- Fixed issue with NICK where leading colon was not stripped.
- Added utility method ircd::stripColon
- Added utility method ircd::checkRealName
- Object-ized users. Each user is now stored as an object so it's cleaner (and easier) to do things. Will move methods later.
- Added messages for being disconnected on Ping Timeout/etc.
- New versioning concept: (major).(minor).(build). Still in major version 0 as we're not even a complete IRCd yet. Minor will change whenever I feel like flexing my version-changing muscle. (edit 3)
- Thanks to Pedrobear for some pointers.
- Class ircd now extends core. No more `global $core;'!
- Added Channel class and methods.
- Added methods to User class.
- Almost all sending is now done through User::send() or Channel::send().
- Channel::send(msg[, excl]) accepts optional 'excl'- a User object to exclude in sending (as in PRIVMSG).
7/18/2011 -
- Thanks for all the help from #Frantech: cedr, InsDel, Corbin, and others!
- NAMES now announces on join and tracks nick changes properly
- Fixed part of TOPIC having a wrong variable name, however TOPIC is still broken.
- PART now announces, and passes through custom PART mesages
- Some work on QUIT, however it's still hopelessly broken as well.
- NICK now announces properly to the whole channel, instead of announcing to you once for everyone in the channel (oops).
- NICK now ignores you when "changing" your nick to what it already is.
- Removed NAMESX from message 005 since we don't actually support it, yet.
4/18/2011 -
- Bored in Java class
- Fixed some weird spacing
- Added die() for config parse failure
- Fixed core::write(): was turncating at 513, not 512, characters. Derp.
- Hopefully I can make some headway on this soon
7/20/2010 -
- JOIN progress. Error checking, you can now `join' a channel, +k doesn't work yet, you can't chat on the channel, no topic, no names etc.. but it's progress. 40+ hour work weeks have me a bit tied up so I'm doing what I can with the time I have available. (edit 1)
- Added client field for ip address.
- JOIN now creates the channel in $core->_channels if it doesn't exist.
- TOPIC added, minus support for chaning the topic (so far).
- PRIVMSG now supports sending messages to channels (YAY). Bug needs to be fixed: users remain in the channel array when disconnected, casuing errors galore. (edit 2)
- Fixed issue with NICK where users were told their nick was erroneous if it was too long (instead of just shortening it for them).
- NAMES support added. Splits messages that are >510 characters.
- $core->write() automatically turncates strings at 512 characters (including \r\n) per rfc requirements.
7/17/2010 -
- PRIVMSG works for inter-user communication on the same server only.
- $core->_nicks array for keeping track of in-use nicks more efficiently.
- More error codes added.
- Fixed the PING timeout error for reals this time.
- Typo fixes. (edit 1)
- Fixed missing leading colon on PRIVMSG commands.
- Made last activity (lastpong) update on every command, valid or not.
- Fixed asthetic error where command errors were not returned uppercase.
7/13/2010 -
- NICK command now works, minus sending it to channels, seeing as JOIN hasn't been made yet.
- QUIT command also works, with the same current caveats of NICK.
- Fixed space in 005 message after PREFIX
- Fixed PING issue where command were not being treated as activity.
- Added more error messages, including ERR_NOTREGISTERED, ERR_UNKNOWNCOMMAND and ERR_NICKNAMEINUSE.
- Version is now 0.2b because I have no scheme to the version numbers and like to change them frequently.
7/12/2010 -
- Sorta-finished welcome sequence. MOTD displays, if there is one (motd.txt), if not it throws ERR_NOMOTD.
- Working on NOTICE AUTH to make the welcome complete. Not implementing ident, for reasoning read here: http://web.archive.org/web/20050828200336/http://www.clock.org/~fair/opinion/identd.html
- More configuration options added to config.ini, not implemented yet.
- opers.ini added with example syntax, though also not implemented yet.
- fixed an error with the socket becoming unavailable for re-use if the program is inturrupted mid-communication with a client or shut down with clients still connected. (edit 1)
- PING/PONG works now. Or at least the important parts (making sure the user still responds to PING).
- Users can also now PING the server.
- Pingfreq and pingout variables in the conf now utilized.
- Fixed a bug where sending multiple commands in one message (i.e. NICK slowbro\r\nUSER h h h :Real Name) would cause immense amounts of errors and headaches.
- Fixed MOTD display to remove extra newlines.
- Fixed post-registration USER command; it now throws ERR_ALREADYREGISTERED.
- NOTICE AUTH functionality complete, and working 100%.
- Fixed an bug causing external networks to not be able to remain connected to the server due to using PHP_NORMAL_READ instead of PHP_BINARY_READ on the socket_read() function.
- Version is now 0.2a
7/11/2010 -
- Fixed security hole (already) in ircd.class.php that would allow clients to call functions they weren't supposed to such as newConnection().
- Fixed a performance issue with socket_select() and its if bracket.
7/10/2010 -
- Error handling function introduced. (edit 1)
- Welcome message(s) progress. Need to figure out the 005 numeric which is now RPL_ISUPPORT, probably going to just fill it with nonsense for now until the server is more complete and it is needed.
- More error checking added on initial connect, check for parameter amount, and checks params against some regex.
- Dicks everywhere.
7/9/2010 -
- Basically a plain socket server at the moment. (edit 1)
- Babysteps towards actual irc stuff. Closes link on ping timeout, working on initial connect sequence.
- Expect ircd.class.php rolled out within a day or so. (edit 2)
- Initial ircd class release.
- NICK error checking working for initial connect. USER next.
- Still need to legitimately NOTICE AUTH instead of just sending that junk.
7/8/2010 -
- Initial alpha-absolutely-nothing-is-done-at-all release.