Skip to content
/ jirc Public

A basic Internet Relay Chat written in Java that implements the IRC protocol specified in the RFC 1459 & RFC 2812.

Notifications You must be signed in to change notification settings

zachbroad/jirc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JIRC: Java IRC Server

JIRC is an Internet Relay Chat (IRC) server written in Java. IRC is a protocol that provides a way for people to communicate in real time. It's primarily designed for group communication in discussion forums, known as channels, but also allows one-on-one communication via private messages.

Current Features

  • Server Configuration: The server uses a hardcoded configuration with a hostname, port, name, and password.

  • Channel Management: The server supports the creation and management of channels. Users connected to the server can join these channels to participate in group communication.

  • Client Handling: The server handles multiple clients concurrently. It processes messages from connected clients and sends each message for further processing.

  • Broadcasting Messages: The server can broadcast a message to all connected clients, or to all clients in a specific channel.

  • Direct Messages: The server supports direct one-on-one communication between users.

  • Sending Messages to Specific Clients: The server can send a message to a specific client.

Implemented Commands

  • AWAY: Marks user as away or returns them.
  • DIE: Shuts the server down.
  • INFO: Returns information about a server's configuration.
  • INVITE: Invites a user to a channel.
  • ISON: Checks if certain nicks are online.
  • JOIN: Joins one or more channels.
  • KICK: Removes a user from a channel.
  • KILL: Removes a user from the server (used by operators).
  • LIST: Lists channels and their topics.
  • MODE: Sets or retrieves user or channel mode.
  • MOTD: Retrieves the "Message of the Day".
  • NAMES: Lists users in a channel or all channels.
  • NICK: Changes or sets a user's nickname.
  • NOTICE: Sends a notice message to a user or channel.
  • OPER: Authenticates as an IRC operator.
  • PART: Leaves one or more channels.
  • PING: Checks for an active client or server connection.
  • PRIVMSG: Sends a private message to a user or channel.
  • QUIT: Quits from the server.
  • RESTART: Restarts the server.
  • TIME: Requests the local time from a server.
  • TOPIC: Gets or sets the topic for a channel.
  • USER: Used at login to specify user information.
  • WHO: Returns a list of users matching a criteria.
  • WHOIS: Returns information about a user.

Unimplemented Commands (RFC 1459 & RFC 2812):

  • ADMIN: Retrieves administrative details about a server.
  • ERROR: Reports an error message.
  • PASS: Sets a connection password during registration.
  • PONG: Response to a PING message, confirming the connection is alive.
  • REHASH: Forces the server to reload or update its configuration.
  • STATS: Requests server statistics.
  • USERHOST: Returns a list of hostnames for the specified nicknames.
  • USERS: Returns a list of users logged into the system.
  • VERSION: Queries the version of a server.
  • WALLOPS: Sends a message to all operators.
  • WHOWAS: Returns information about a user who was previously online.

Unimplemented Commands (Unformal):

  • KNOCK: Sends a NOTICE to an invite-only channel requesting an invite

Commands planned for future

These commands are unimplemented as they are related to server-to-server communication which is not the current focus.

  • CONNECT: Forces a server to try to establish a new connection to another server.
  • LINKS: Lists all server links known by the server answering the query.
  • LUSERS: Returns statistics about the size of the network.
  • SERVICE: Registers a new service.
  • SERVLIST: Lists services currently connected to the network.
  • SQUERY: Sends a message to a service.
  • SQUIT: Disconnects server links.
  • SUMMON: Summons a user to IRC.
  • TRACE: Finds the route to a user or server.

Planned Server Features

  • User Authentication: Implement a user authentication system to allow each user to have their own username and password. Implement NickServ.

  • Persistent Data: Integrate a database to store persistent data such as chat history or user information.

  • Server Configuration File: Move the server's configuration to a configuration file that the server reads on startup.

  • Security Features: Implement security features like encryption for messages.

  • Extending IRC Features: Implement more IRC features like user modes, channel modes, etc.

  • Server Commands: Implement commands that administrators can use to manage the server (like kicking or banning users, changing server settings, etc.).

  • Logging: Implement more extensive logging to help with debugging and understanding server operation.

  • Desktop or Web UI: Implement a desktop UI for simple server management or a web UI for remote management.

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

License

MIT

About

A basic Internet Relay Chat written in Java that implements the IRC protocol specified in the RFC 1459 & RFC 2812.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages