The InspIRCd Project
Home | Developers | Wiki | Forums | Bug Tracker | SVN | Download | Blog | Stats

Roadmap

From the makers of InspIRCd.

Jump to: navigation, search
Development Development Material - Information posted here is for developer reference only. This material is subject to possible change and will be technical in nature.

Contents

Introduction

This page is to provide a general roadmap for future InspIRCd development.

Please note that this page may be quite technically oriented, as it is intended primarily as a developer reference.

Releases

This is where features that have been implemented are moved. This also serves as a high-level changelog of major versions

Planned Features

New Modules

These features may be included as third-party for existing releases.

  • Bug #684 (and others): "rmtkl"
  • censor support for multiple lists (+GG racism cursing)
  • Allow replacement using glob-regexes instead of just blocking or <censored> (+g s/shirt/pants/)
  • Bug #873: Kill chasing
  • Bug #873: Mode (or more likely extban) for amsg usage
  • Bug #925: SSL Client Certificate for Authentication & Nickname Enforcing
  • Add SNMP support to show some basic statistics (user count, etc)
  • Connect block specifiers
    • X-line based system (mapping i@h to name), to reduce the normal duplication of many allow="" items
    • System based on some kind of metadata to set class using services (triggered during SASL, perhaps)
    • "IRCd Virtual hosts" - matches based on server specified in USER
    • Add n: extban for matching based on connect class name (i.e. for tor connect class)
  • Module to scan clients for open proxies (to complement m_dnsbl)
  • m_owner to mark channel owners (+r account) and (optionally) allow them to banwalk and mode-override in channel
  • channel CLEAR of users, listmodes, prefixes, etc.
  • ECHO command for use in aliases to send replies (or for users to echo things to themselves...)
  • m_fakeclient to allow more complex aliases that are done by PRIVMSGing a nick, similar to the "IRCD" nick in some ircds.
  • Reduced moderation mode, similar to +m but instead of being blocked, message are sent to @#channel. Useful for conference or similar where users post questions that are then selected by a moderator and answered.
  • RE2 regex engine for regex bans/spamfilters settable by non-opers

Module Changes

Changes and updates to existing modules, which can be done without changing the core.

  • Easy aliasing of existing commands, possibly with a module, such as: <ealias target="NICK" alias="N">
  • SNOTICE filtering for log channels, to filter out SearchIRC bots (or similar)
  • Temporary override: require umode +O to be set to override, have it auto unset after 5 minutes (configurable)
  • Add /STATS h to list all users with umode +h set (help list) - or perhaps have HELPOP command itself do this
  • blockcaps percentage setting, e.g. +B 95 for blocking 95% of caps per channel.. perhaps 5:93 type setting, 5 min chars, 93% to block..
    • Extban syntax thoughts: +b B:5,93:banmask
  • more flexible +j that allows you to specify how long you are prevented from joining once you fail to join
  • dnsbl exceptions - can be done now if the dnsbl only changes connect class, but E:line check may be easier.
  • Bug #930: improve m_connectban rate-limiting
  • Bug #873: Make m_nopartmsg block quit messages too (needs thought on what to do for people in multiple common channels)
  • Make timed ban notices configurable (notice to all, notice to %#chan, no notices)
  • give spanningtree the capability to keep an opercount per-server
  • Show recently split servers at the end of /map output, i.e. * irc.dereferenced.org [split 4m2s ago]. Possibly only for opers, although it is useful for users to know that the network is smaller than it should be.
  • Initial queries for databases (mysql has it, others need it)
  • Move LDAP lookups to a worker thread like SQL, so they don't block the IRCd

Core

  • Bug #643: more comprehensible/user-friendly x:line messages (date, time, banner?, expiry)
  • Split "can send" to a separate hook for easier blocking of stuff. Bug #729 and others.
  • Bug #873: Think about making /join #channelname keyhere bypass +il..
  • Add information (possibly to 005 line, possibly elsewhere) on the available named modes, similar to the CHANMODES list
  • Register action extbans, allow the choice of activating them as listmodes (so you can choose between +b S:PostBot!*@* or +S PostBot!*@*).
    • This needs another matching extban for exemptions, which will need to stack with other matching extbans.
  • Prevent /INVITE when there is already a pending /INVITE
  • State storage on restart (/lusers output, for example)
  • OS-level sendq checking? ioctl SIOCOUTQ, or reduce the SO_SNDBUF size.

Module+Core Changes

Module updates that rely on changing something in the core

  • Redirect fixup using OnJoinFailed event
  • "Safer" operoverride that has less code and less problems:
    • Create CMD_PERMISSION return to replace CMD_FAILURE where needed
    • Hook OnPostCommand, check for failure, rerun with overrides similar to SA* family
  • Add a CAP to replace MODE lines with PROP lines on s2c.
  • Allow "* -foo -bar" to be used where "*" is currently used, to represent "everything but foo and bar"
  • Split riding: handle splitride into +i/+k/banned channel via KICK resolution

Linking

Changes that require changing the server-to-server protocol.

  • Bug #739: Topic change needs to include channel TS
  • Hot fallback links to reduce user-visible affects of netsplit (handshake and mini-burst?)

Accounts

  • m_account_nicks
    • Restricts a nick to an account, similar to Q:line.
    • ACCOUNT phil ADDM 12347 nick :phil
    • ACCOUNT phil ADDM 12348 nick :phil-away
    • Catch /NICK <user> <password> to log in, force-UID the occupant, and change nicks
    • If multiple accounts try to reserve a nick, most recent timestamp wins.
  • m_account_vhost
    • Sets a vhost when you log in
    • ACCOUNT SET phil vhost phil.is.cool
  • Other user state persistence - SILENCE, WATCH, channel join list
  • m_ghost - BNC-style replacement of ghosts. Ties to m_account_nicks
    • User command /GHOST <nick> [<password>]
      • Password, if specified, will ask authcache to identify to the nick's account
    • Only works if the source and target are both signed in to the same account
    • May also copy user state such as modes, SILENCE, WATCH, ACCEPT
    • Example:
      • bob is the existing user (197AAAAAB), signed in as bob, sitting in #foo,@#bar
      • User 197AAAAAC connects and sends /GHOST bob password
      • User 197AAAAAC sees themselves change nick to "bob", join #foo,@#bar
      • User 197AAAAAB sees themselves change nick to 197AAAAAB and part all channels. They also get a server notice explaining that they were ghosted
      • Other users in the channel see a quit-join-mode if enabled, otherwise nothing
      • Channel history replay possible, similar to +H. Should prevent seeing anything older than when the ghosted user joined.
  • Allow LDAP to set account information

General

  • code review
    • data structure use
      • vector is good for lists where you only insert/remove at the end, and rarely try to find an element in a large list
      • deque is nearly identical to vector, but also make insert/remove at the beginning efficient, at the cost of ~16 bytes and less efficient slack space
      • list is best if you need to remove items from the middle, and iterate the list rather than find it. Not good for short-term storage, too many heap allocations
      • std::set/std::map are best if you want sorting and fast insert/delete/find
      • hash_set/hash_map are best if you just want fast insert/delete/find
    • duplicated code that needs to be extracted to common functions
      • m_watch
      • PART and KICK
      • Use SimpleUserModeHandler for oper-only modes.
  • Allow /RELOADMODULE to persist modes, metadata, etc.
  • Allow modules to be selected for compilation (integrate with modulemanager?)
  • Modules providing a local-acting-only umode (cloaking, most message blocking umodes)
  • Codepage conversion (Phoenix, w00t)

Other ideas

These are ideas that we aren't yet sure about, need discussion, or don't seem practical. They are all open to discussion, and most would make good third-party modules.

  • configuration option for cloak depth (is this still needed with 2.0 cloaking?)
  • Merge CBAN and QLINE so they're the same code, essentially
  • Scripting language bindings (allow modules to be written in other languages like python/perl)
  • Header file cleanup - have modules include only the headers for features they use, which makes the build faster.
  • Bug #420: Syncing of channel ban details (setter/time). This could also make TBAN easier to implement
  • XML-RPC stuff (ala atheme)?
  • SQL logging of XLines Bug #357 (not a must now with xline db, according to owine)
  • Web configuration frontend
  • Bug #521: RMTKL/RMXLINE (done via third party, by Phoenix)
  • Bug #528: Restrict oper to particular login (done via third party, by Phoenix)
  • Restriction of kills to local server (done via third party, by Om)
  • Presence extension:
    • AWAY broadcast in a numeric, possibly including AWAY timestamp info
    • Numeric for changing host, rather than forcing a fake quit/join
    • Support for extended client-client notifications (typing notice? charybdis is considering some of this)
Personal tools
head
Navigation
head
head
head
head
 
head
head
Toolbox
head
head