-Chat subsystem information
-Brian Costello <btx@calyx.net>
-[Edits in brackets by Michael Hampton <error@citadel.org>]
-
-Chat / Messaging system
------------------------
-
-I envision a chat system that can be used for a variety of uses, from
-chatting in realtime to file exchange to slide presentations.
-
-Rooms will be able to have invitation lists -- perfect for scheduling a
-private meeting with various people around the world. [This could apply to
-both private and public rooms; though we already have chat on-demand, this
-would allow specific participants to indicate their interest in a given chat.]
-
-Meetings will be scheduled by the system scheduler. The scheduler is not
-part of this project -- the scheduler will do the work of determining a time
-when all participants are free. When a time is decided on, the scheduler
-will call the chat subsystem which will write this schedule to a file. This
-is to make sure that if the chat subsystem is shut down for some reason, it
-will remember the reserved rooms and invite lists.
-
-Rooms
------
-I think a conference call-like system would be good. Chat sessions can be
-scheduled with a predetermined list of people or started manually and their
-invite lists manually made. Either someone is designated a conference
-leader or whoever created the room is the conference leader. The conference
-leader(s) can invite new people to the room, and kick & ban people out of
-the room.
-
-Messages should be able to be sent to any logged in user from the page system
-to the chat system and vice versa.
-
-This can be implemented with the current citadel clients. [I can't send a
-message from a user to a chat unless that user is already in the chat or has
-access to it. The other way round is just fine, though.]
-
-Transfers
----------
-An addition that would be useful here would be the ability to send a file to
-everyone in a room as well as individual users.
-
-This cannot be implemented with the current citadel clients -- I DON'T
-THINK. I'm not sure. [You're right. We have no way to "push" files to
-users at present.]
-
-Graphics transfers
-------------------
-The idea is to allow slides to be shown to clients. The transfers mechanism
-will be used to send the graphics so you would be able to send slides to
-everyone or just one user.
-
-This will have to be written into the client (Unix client calls xv, for
-example). [I've already started on file/graphics viewing for the text client.]
-
-Structures
-----------
-
-/* hold the invite / ban info in this structure. Username and host are each
- * used only if they are specified. This allows banning all hosts from a
- * particular site.
- */
-
-typedef struct s_chat_userlist
-{
- char username[32];
- char host[64];
- struct s_chat_userlist *next;
-} chat_userlist;
-
-typedef struct s_chat_joinlist
-{
- struct CitContext *user_context;
- struct s_chat_joinlist *next;
-} chat_joinlist;
-
-/* Simple chatroom definition */
-
-typedef struct s_chatroom
-{
- char room_name[20];
- char room_password[20];
- time_t scheduled_start;
- time_t scheduled_stop;
- int room_flags;
- chat_userlist *invite_list;
- chat_userlist *ban_list;
- chat_joinlist *join_list; /* Context's of who's in this room */
- chat_joinlist *chanops_list; /* Context's of channel ops */
- struct s_chatroom *next;
-} chatroom;
-
-
-Definitions
------------
-#define CHATROOM_PRIVATE 1 /* Invite only */
-#define CHATROOM_HIDDEN 2 /* Hidden from listing */
-#define CHATROOM_PASSWORD 4 /* Password protected */
-
-Schedule
---------
-The stuff that can be implemented in terms of the current client will go
-first. The transfers will come next.