DXIRCd now supports a wide range of features, encompassing core IRC functionality, server management, and server-to-server (S2S) linking capabilities.
Here's a summary of its current features:
Core IRC Protocol & User Management:
User Registration:
NICK: Set/change nicknames.
USER: Register user details (username, realname).
Automatic +o (operator) status for the first user to join/create a channel.
Messaging:
PRIVMSG: Send private messages to users or channels, with checks for away status and channel moderation.
NOTICE: Send messages without generating error replies.
CNOTICE/CPRIVMSG: Simplified to act as NOTICE/PRIVMSG.
Channel Operations:
JOIN: Join or create channels, including checks for banned users (+b) and invite-only (+i) channels.
PART: Leave channels.
TOPIC: Set and retrieve channel topics (requires channel operator to set).
MODE:
User Modes: Set/query (+i invisible, +w wallop, +s server notice).
Channel Modes: Set/query (+i invite-only, +m moderated, +s secret, +p private, +k key/password, +l user limit, +b ban mask, +o operator, +v voice).
INVITE: Invite users to channels, with checks for invite-only channels and operator status.
KICK: Remove users from channels (requires channel operator status).
NAMES: List users in a channel.
User & Server Information:
WHOIS: Retrieve detailed user information (real name, host, idle time, channels, operator status).
WHO: List users in a channel with basic status (away, operator, voiced).
USERHOST: Retrieve a user's host and status.
AWAY: Set/clear away status with a message.
ISON: Check if specified users are online.
LUSERS: Display server-wide user statistics.
INFO: Display general server information.
MOTD: Display the Message of the Day.
ADMIN: Display server administrative contact information.
LINKS: List known linked servers (currently displays local server).
LIST: List active channels.
TIME: Display local server time.
RULES: Display hardcoded server rules.
SERVLIST/SQUERY: (Currently stubbed) for service queries.
Server Operator Commands:
OPER: Grant IRC operator status (requires password).
REHASH: Reload server configuration and MOTD files (requires operator status).
KILL: Forcefully disconnect a user (requires operator status).
DIE: Shut down the server (requires operator status).
SQUIT: Disconnect a linked server (requires operator status, currently stubbed as no external servers are fully implemented).
CONNECT: Initiate server links (requires operator status, currently stubbed).
Client/Server Interaction:
PING/PONG: Keep-alive mechanism between clients and the server.
QUOTE: Allows sending raw IRC commands for direct processing.
ERROR: (Server-generated, client can send as raw, logged).
Miscellaneous:
SETNAME: Change user's real name.
KNOCK/SILENCE: (Currently stubbed).
ENCAP: (S2S-related, currently stubbed for client use).
Server Infrastructure & Management:
Configuration File: Uses ircd.ini for all server settings (name, port, bind IP, max users, operator password, MOTD, admin details, linked server configurations).
Logging: Activity logging to console, designed for easy integration with SysLog.
Real-time Statistics: Displays active connections, channels, linked servers (placeholder), and total bytes sent/received every 5 minutes.
DXSock6 Integration: Utilizes the DXSock6 library for robust low-level network communication.
Non-Blocking I/O: Leverages DXSock_GenericServer and non-blocking sockets for efficient concurrent client handling.
Thread-Safe Data Structures: Uses TThreadList and TCriticalSection for safe access to user and channel lists.
Cross-Platform: Designed to run on Raspberry Pi, Linux, Mac OSX or Windows (with FPC 3.2.2).
Server-to-Server (S2S) Linking (via IRCServerLink unit):
Configuration: Reads linked server details (name, host, port, password, auto-connect) from ircd.ini.
Connection Management: Actively tries to connect to configured outbound servers, and handles inbound server connections (though the specific inbound listener part would reside in the main server's OnAccept logic).
Handshake Protocol: Implements basic SERVER and PASS commands for authenticating linked servers.
State Tracking: Tracks the connection state (disconnected, connecting, handshaking, connected) for each linked server.
Broadcast Mechanism: Provides methods to propagate local client events (like NICK changes, JOINs, PARTs, PRIVMSGs, etc.) to all connected linked servers.
Remote Event Handling: Includes internal handlers (HandleNICK, HandleJOIN, etc.) for processing messages received from linked servers.
Event Notifications: Exposes event properties (OnRemoteUserJoin, OnRemoteNickChange, etc.) for the main IRC server to be notified of and react to changes originating from linked servers.
This robust set of features makes DXIRCd v1.3.2b a highly functional IRC server, capable of managing clients, channels, and establishing a basic network of linked servers. To kick the tires, point your IRC client to irc.modernpascal.com:6667 ~ we are in the #brainpatchworkdx channel.