================================================================================ Test... Are you using 80 columns of text 12345678901234567890123456789012345678901234567890123456789012345678901234567890 ================================================================================ CSC 442F: SOFTWARE ENGINEERING ============================== Course Project: Part 0 Application-Level Network Protocol Version 1.1 By: Joveria Asif Khalid Mufti David Tam 1.0 INTRODUCTION ================ Changes from version 1.0 to version 1.1 of this protocol are described at the end, in section 4.0. This document describes the application-level network protocol implemented to produce the Desk Calendar/Scheduler. This document describes the client server interaction rules, client and server states, transaction rules, valid commands issued by the client, and appropriate responses generated by the server. The polling method of interaction is used by the client. That is, the client must explicitly ask for data from the server. The server will only send information to the client when it is explicitly requested. The server may use any valid port number following the general unix guidelines of TCP/UDP port usage. The port is specified upon startup of the server. The server can handle multiple, simultaneous clients. Currently, the smallest unit of time for event scheduling is 1 hour. 1.1 Client Server Interaction ----------------------------- All communication is initiated by the client. The client must periodically poll the server for information. It polls the server to obtain event information for each hour, day, or month. It polls the notification box to obtain the following information from invitors: - new meetings - modifications to meetings - cancellations of meetings It polls the notification box to obtain the following information from invitees: - acceptances - rejections - acceptance with shortened attendance When the client wants to create an event as a personal or group event the appropriate SET or CREATE command is issued. 1.2 Client and Server States ---------------------------- State information from one session to the next is not stored on the client. Instead, it is stored on the server through the SET PREFS command mentioned in proceeding section. Clients may save state information such as which view the user selected in the last session, sizes of windows, colour settings, font sizes, etc... When a connection is made between the client and server, the server is in the login state and does not proceed any further until a valid login name and password are specified. Once validated as a normal end-user, the server responds to normal user commands, as mentioned in preceeding section below. There is a root account similar to the unix root account. Login as root is similar to the unix approach. The username "root" is specified and the correct password must be suplied. If the root user logs in, the server responds to normal user commands as well to an addition set of administrative commands. Once the logout command is issued the server will disconnect from the client. A normal connection is explicited terminated with a logout command. However, a connection may be accidentally lost due to a client crash, line noise, network problems, etc. In such a case, if the server has received the complete command (i.e. the command was terminated with a carriage return ), it will execute the command. If only part of a request command is received from the client (i.e. the command was not followed by a ), the server will not execute the command. When the connection is re-established, the server will be in the login state mentioned in the previous paragraph. From the client's point of view, when a complete command is sent (with a ) but a connection is lost to a network disconnection, the client should check side effects to determine if the command was executed. (E.g. look for the scheduled meeting). Even if the client has sent the , there is no way of knowing if the server received the . However, *** EITHER THE TRANSACTION WAS PROCESSED COMPLETELY, OR IT WAS NOT PROCESSED AT ALL. *** 2.0 SERVER RESPONSES ==================== All server responses have the following format: ... Server Msg ID: Each message response generated from the server has a unique ID. The following series of IDs are used. 1xx OKs 2xx Results show no success due to server-side control 3xx Errors 5xx Invalid state to issue command Description: A quick description of what the ID refers to. (256 chars) Requested Info: If the client requested any information, that information will follow. Since each function returns specific information, please refer to the appropriate function. If any data has to be clumped together, it will be stored within the || pipe symbols. CR: This is a carrage return which marks the end of the requested data message. It has the standard ASCII code decimal value of 13. **NOTE** Since this symbol is placed at the end of each and every server response, it will not be explicitly indicated in the commands mentioned below. 2.1 Client Requests/Functions ----------------------------- This section examines all possible requests that a client can send to the server, with all required parameters and appropriate server responses. Please note that the command keywords must be issued in UPPERCASE. Words in angel brackets < and > specify parameters that must be entered. Pipe symbols | denote that spaces are allowed in the field value, however, the value must be encapsulated by the pipe symbols. Obviously, the pipe symbol itself can no longer be used as part of the contents of the field. Again, please note that all responses from the server will be terminated with a carrage return. This symbol will not be explicitedly indicated in the commands below. This omission will help to improve clarity of the protocol description. There are a few restrictions that apply to the system that affect this protocol. 1. A room can not have the same name as a user 2. The maximum command length is 4096 chars. This length can be easily upgraded by changing a constant value in the server source code. 3. Meetings can not take place for more than 24 hours, nor can they cross the day boundaries (e.g. 11pm to 1am). If this is necessary, two separate meeting events should be scheduled by the client. 4. For parameters that are delimited by the "|" pipe symbols, neither carriage returns nor "|" symbols are allowed in between the original "|" pipe symbols. 5. The command sent to the server must consist of exactly one carriage return placed at the end of the transmitted command. s placed anywhere else will cause the server to interpret it as the end of command transmission. ================================================================================ LOGIN USER -------------------------------------------------------------------------------- Description ----------- Before the server accepts any client requests, the client must register by logging in. This must be the first command for all existing users, aside from the administrator. After 3 unsuccessful logins, the connection is closed. Parameters ---------- Username: The user name, assigned when the account was created, for the client. (8 chars max) Server Responses ---------------- 100 OK Hello please enter your password. 300 Invalid Username. Failed attempt #1. 301 Invalid Username. Failed attempt #2. 302 Invalid Username. *** Security alert *** Closing connection. 500 Error. Please log out first. ================================================================================ LOGIN ROOT -------------------------------------------------------------------------------- Description ----------- This login request is the same as the one for clients, but is strictly for system administrators. After 3 unsuccessful logins, the connection is closed. Parameters ---------- None. Server Responses ---------------- 100 OK Hello root please enter your password. 300 Invalid Username. Failed attempt #1. 301 Invalid Username. Failed attempt #2. 302 Invalid Username. *** Security alert *** Closing connection. 500 Error. Please log out first. ================================================================================ LOGIN NEWUSER -------------------------------------------------------------------------------- Description ----------- This request can be used for new users to log in. The password is sent as clear text and not encrypted. Although it is recommended to use Root access for creating new users, the client, nevertheless, can accomplish the same task by using this command. Parameters ---------- Username: The user name to be assigned. (8 chars max) Password: The password for this user name. (16 chars) Server Responses ---------------- 100 OK account has been created. Thank you. You are now logged in. 303 Invalid. already exists! Please choose another username. 500 Error. Please log out first. ================================================================================ LOGIN PASSWORD -------------------------------------------------------------------------------- Description ----------- After logging in, the next command requires the proper password be entered for the user, except for new users logging in. After 3 unsuccessful attempts, the connection is closed. The password is sent as clear text and not encrypted. Parameters ---------- Password: The password for the user name entered. (16 chars) Server Responses ---------------- 100 OK Welcome back . Please request now. 304 Invalid. Failed attempt #1. 305 Invalid. Failed attempt #2. 306 Invalid. *** Security alert *** Closing connection. 500 Error. Please log out first. 501 Error. Please log in first. ================================================================================ USER CHANGEPASSWORD -------------------------------------------------------------------------------- Description ----------- This command is used to change the user's password. The passwords are sent as clear text and not encrypted. As an obvious security feature, the user may only change his/her own password. Only the administrator can change another user's password. Administrators should examine the ADMIN CHANGEPASSWORD command. Parameters ---------- OldPassword: The old password for the user. (16 chars) NewPassword: The new password for the user. (16 chars) Server Responses ---------------- 100 OK Password changed. 307 Invalid. Failed attempt. Old password incorrect. 501 Error. Please log in first. 502 Error. Please execute PASSWORD command first. ================================================================================ USER LOGOUT -------------------------------------------------------------------------------- Description ----------- This command ends the user session. Parameters ---------- None. Server Responses ---------------- 100 OK Goodbye 501 Error. Please log in first. ================================================================================ USER HELP -------------------------------------------------------------------------------- Description ----------- This command prints out a list of commands and their parameters. Parameters ---------- None. Server Responses ---------------- 100 OK I will help you. Here is a list of commands. HELP --- LOGIN --- LOGIN root --- LOGIN NEWUSER --- PASSWORD --- CHANGEPASSWORD --- LOGOUT --- ... etc ... ================================================================================ ADMIN DELETE -------------------------------------------------------------------------------- ************************************ Description ----------- This function deletes an existing username from the server. However, corresponding files and directories are not erased. The user is only prohibitted from logging into the system. To entirely remove the user from the system, the files must be manually removed by the system administrator through standard unix commands. Before issuing this command, the user must log in and cancel all meetings with other users. This important step is necessary to solve complex dependency problems inherent to the system. Parameters ---------- Username: The user name, assigned when the account was created, for the client. (8 chars) Server Responses ---------------- 100 OK Successful deletion of 308 Invalid Username. 338 Error. Can not delete root. 501 Error. Please log in first. 502 Error. Please execute LOGIN PASSWORD command first. 504 Error. Administrator access only! ================================================================================ ADMIN ADD -------------------------------------------------------------------------------- Description ----------- This function creates a new user for the server. It has the equivalent functionality of the LOGIN NEWUSER command but allows the administrator to stay connected as the root user. This may be useful if the administrator would like to create several users without the need to log in and log out every time. The password is sent as clear text and not encrypted. Parameters ---------- Username: The user name to be assigned. (8 chars max) Password: The password for this user name. (16 chars) Server Responses ---------------- 100 OK account has been created. Thank you. 308 Invalid Username. 502 Error. Please execute PASSWORD command first. 504 Error. Administrator access only! ================================================================================ ADMIN CHANGEPASSWORD -------------------------------------------------------------------------------- Description ----------- This command is used by the administrator to change a user's password. It may come in handy when a user forgets his/her password. The administrator can reset the password to a generic one and restore the user's access. As an obvious security feature, only the administrator may issue this command. The password is sent as clear text and not encrypted. Parameters ---------- Username: The username whose password will be changed. NewPassword: The new password for the user. (16 chars) Server Responses ---------------- 100 OK Password changed. 310 Username does not exist. 502 Error. Please execute PASSWORD command first. 504 Error. Administrator access only! ================================================================================ ADMIN CREATE ROOM -------------------------------------------------------------------------------- Description ----------- This command is used by the administrator to add new rooms to the system. The room name and its capacity must be specified. Parameters ---------- Room: This is the room name. (12 chars max) Capacity: This is the room capacity. (unsigned int) Server Responses ---------------- 100 OK New room added to room list. 502 Error. Please execute PASSWORD command first. 504 Error. Administrator access only! ================================================================================ ADMIN DELETE ROOM ------------------------------------------------------------------------------- Description ----------- This command is used by the administrator to delete rooms from the system. The room name must be specified. Parameters ---------- Room: This is the room name . (12 chars max) Server Responses ---------------- 100 OK Room delete from room list. 337 Error. Invalid Room. 502 Error. Please execute PASSWORD command first. 504 Error. Administrator access only! ================================================================================ REQUEST QUICKHOURINFO -------------------------------------------------------------------------------- Description ----------- This function is used to request quick information (description) for a particular hour for any date. If there is no event, an empty string ‘’, for the description, will be returned. The creator of the meeting, length, and quick description are returned as a result. As mentioned in the introduction this command must be periodically issued by the client to obtain up-to-date information in the user's schedule. Quick information is publicly accessible by all users of the server. Consequently, private information should be kept in the || field. Retrieval from the that field is discussed in the next command. Parameters ---------- EventId: This structure has the form Username.Year.Month.Day.Hour. For example, bill.1998.6.3.2 Server Responses ---------------- 100 OK || 201 No event exists. 502 Error. Please execute PASSWORD command first. ================================================================================ REQUEST DETAILEDHOURINFO -------------------------------------------------------------------------------- Description ----------- This function is used to request detailed, information (description) regarding a particular EventId. If there is no event, an error will be returned. Since the field contains private, detailed information, this command is only accessible by the owner of the event. If the event happens to be a meeting, members who were invited to the meeting may also access this command to obtain the private information. When this command is issued successfully, all information fields for the event are returned. These consist of the length of the event, the quick description, the detailed description, the location of the event, the total number of internal and external invitees (including the creator), the creator, the number of internal invitees other than the creator, and the username and status of each internal invitee. The attendance status can have the following values: 0 = username has not responded or decided yet 1 = Ok, username will attend 2 = No, username will not attend 4 = username will attend but will shorten his/her attendance and make an early departure / late entrance. Parameters ---------- EventId: This structure has the form Username.Year.Month.Day.Hour. For example, bill.1998.6.3.2 Server Responses ---------------- 100 OK || || <# of Users> ... 201 No event exists. 501 Error. Please log in first. 502 Error. Please execute PASSWORD command first. 505 Error. Not authorized to look at 's schedule. ================================================================================ REQUEST INFODAY -------------------------------------------------------------------------------- Description ----------- This function is used to request quick information (description) for a particular day for any date. The creator of the meeting, length, and quick description are returned as a result. If there is no event, a negative integer will be returned for each of the fields. For each day, 24 triplets will be returned. Parameters ---------- Username: A valid username. (8 chars max) Year: The 4 digit year of the day. (unsigned int) Month: The 2 digit month of the day. (unsigned int) Day: The 2 digit number for the day. (unsigned int) Server Responses ---------------- 100 OK || ... || 501 Error. Please log in first. 502 Error. Please execute PASSWORD command first. ================================================================================ REQUEST CALENDAR -------------------------------------------------------------------------------- Description ----------- This function, given a month and year simply determines on which day the first and last of the month lie (2 unsigned int). Each of the 2 numbers returned varies from 0-6, with 0 being Sunday and 6 being Saturday. Parameters ---------- Year: The 4 digit year of the day. (unsigned int) Month: The 2 digit month of the day. (unsigned int) Server Responses ---------------- 100 OK 501 Error. Please log in first. 502 Error. Please execute PASSWORD command first. ================================================================================ REQUEST INFOMONTH -------------------------------------------------------------------------------- Description ----------- This function, given a username, year, and month returns a 1, unsigned int, for each day of the month on which the username has at least one appointment. If there are no events on a day, then a 0, unsigned int, is returned. The marker (not shown) should be used to detect the end of data since the number of days varies from month to month. Parameters ---------- Username: The user name, assigned when the account was created, for the client. (8 chars max) Year: The 4 digit year of the day. (unsigned int) Month: The 2 digit month of the day. (unsigned int) Server Responses ---------------- 100 OK ... 501 Error. Please log in first. 502 Error. Please execute PASSWORD command first. ================================================================================ REQUEST USERINFO -------------------------------------------------------------------------------- Description ----------- This function simply returns information for the provided username. The information returned depends on the following FieldVal values: FieldVal #0: All items. FieldVal #1: First name. (max of 25 chars) FieldVal #2: Last name. (max of 25 chars) FieldVal #3: Address. (max of 128 chars) FieldVal #4: Phone #. (max of 15 chars) FieldVal #5: Fax #. (max of 15 chars) FieldVal #6: Email. (max of 50 chars) FieldVal #7: Comment. (max of 256 chars) Initially, when the user is first created, the string "" is placed in each field. Parameters ---------- Username: The user name, assigned when the account was created, for the client. (8 chars max) FieldVal: The particular information item, 0-7, required. (unsigned int) Server Responses ---------------- 100 OK || || |
| || || || || 100 OK || 100 OK || 100 OK |
| 100 OK || 100 OK || 100 OK || 100 OK || 501 Error. Please log in first. 502 Error. Please execute PASSWORD command first. ================================================================================ REQUEST NOTIFICATION -------------------------------------------------------------------------------- Description ----------- This function checks if any new notifications are present for the current username. If so, the notifications are returned as quadruplets of (1) an originator field, (2) type of notification, (3) associated EventId, and (4) a description of the notification. The response will be terminated by a (not shown below). If no new notifications are present, an error message is generated. The type of notifications are as follows: 0 = it is a request sent by the creator of the meeting 1 = it is an acceptance sent from an invitee 2 = it is a rejection sent from an invitee 3 = it is a deletion sent by the creator of the meeting 4 = it is a an acceptance but with shortened attendance (invitee's reponse) 5 = it is a change in room location of the meeting Old notifications that were accepted in the past are automatically placed into the proper event slot(s) in the calendar server (in the events.dat file). Thus, old notifications are automatically deleted from the notify.dat file by the server. The client must periodically issue this command to update the user's notification box. If a client does not use this command, the end user may not have up-to-date information. It is suggested that the client issue this command every 30 seconds, however, there is no restriction placed on the time interval. The operation of the server is not affected by the lack of client polling. UNRESPONDED NOTIFICATIONS ARE RESENT TO THE CLIENT EVERY TIME THIS COMMAND IS ISSUED. It is up to the client to make sure that the user does not get the duplicates of the same message. Parameters ---------- None. Server Responses ---------------- 100 OK || ... || 202 No new notifications yet. 501 Error. Please log in first. 502 Error. Please execute PASSWORD command first. ================================================================================ REQUEST NOTES -------------------------------------------------------------------------------- Description ----------- This function returns a 256 char max notes list. This area is provided to write down general comments, e.g., "Received assignment #1", etc. Parameters ---------- Username: The user name, assigned when the account was created, for the client. (8 chars) Year: The 4 digit year of the day. (unsigned int) Month: The 2 digit month of the day. (unsigned int) Day: The 2 digit number for the day. (unsigned int) Server Responses ---------------- 100 OK || 501 Error. Please log in first. 502 Error. Please execute PASSWORD command first. ================================================================================ REQUEST TODOLIST -------------------------------------------------------------------------------- Description ----------- This function returns a 256 char max To Do List which corresponds to items that have to be done during the day but do not have a specific time. For example, "buy textbooks". Parameters ---------- Username: The user name, assigned when the account was created, for the client. (8 chars) Year: The 4 digit year of the day. (unsigned int) Month: The 2 digit month of the day. (unsigned int) Day: The 2 digit number for the day. (unsigned int) Server Responses ---------------- 100 OK || 501 Error. Please log in first. 505 Error. Not authorized to look at 's schedule. ================================================================================ REQUEST USERLIST -------------------------------------------------------------------------------- Description ----------- This function returns all the usernames registered with the server. The CR marker (not shown below) should be used to detect the end of data since the number of users can vary. Parameters ---------- None. Server Responses ---------------- 100 OK ... 203 No users registered yet --- registry empty. 501 Error. Please log in first. 502 Error. Please execute PASSWORD command first. ================================================================================ REQUEST ROOMLIST -------------------------------------------------------------------------------- Description ----------- This function simply returns a list of rooms and their maximum capacities. The response is sent back as pairs consisting of rooms and their capacities. Parameters ---------- None Server Responses ---------------- 100 OK ... 339 No rooms defined yet. 501 Error. Please log in first. 502 Error. Please execute PASSWORD command first. ================================================================================ REQUEST PREFS -------------------------------------------------------------------------------- Description ----------- This function returns a block of client-definable text that is used to save client preferences and state information. Initially, it is empty. Parameters ---------- None. Server Responses ---------------- 100 OK || 205 Prefs are empty. 501 Error. Please log in first. 502 Error. Please execute PASSWORD command first. ================================================================================ SET USERINFO || -------------------------------------------------------------------------------- Description ----------- This function simply sets the information for the provided username. The particular information to set, depends on the following FieldVal values: FieldVal #1: First name. (max of 25 chars) FieldVal #2: Last name. (max of 25 chars) FieldVal #3: Address. (max of 128 chars) FieldVal #4: Phone #. (max of 15 chars) FieldVal #5: Fax #. (max of 15 chars) FieldVal #6: Email. (max of 50 chars) FieldVal #7: Comment. (max of 256 chars) Initially, when the user is first created, the string "" is placed in each field. Parameters ---------- Username: The user name, assigned when the account was created, for the client. (8 chars max) FieldVal: The particular information item, 1-7, required. (unsigned int) NewVal: See list above. Server Responses ---------------- 100 OK Address set. 100 OK Comment set. 100 OK Email set. 100 OK Fax # set. 100 OK First Name set. 100 OK Last Name set. 100 OK Phone # set. 315 Invalid FieldVal. 506 Error. Not authorized to set 's info. ================================================================================ SET TODOLIST || -------------------------------------------------------------------------------- Description ----------- This function sets the 256 char max To Do List which correspond to items that have to be done during the day but do not have a specific time. For example, "buy textbooks". Parameters ---------- Username: The user name, assigned when the account was created, for the client. (8 chars) Year: The 4 digit year of the day. (unsigned int) Month: The 2 digit month of the day. (unsigned int) Day: The 2 digit number for the day. (unsigned int) NewVal: The new text block for the To Do List. (256 chars) Server Responses ---------------- 100 OK To Do List set. 501 Error. Please log in first. 502 Error. Please execute PASSWORD command first. ================================================================================ SET NOTES || -------------------------------------------------------------------------------- Description ----------- This function sets the 256 char max notes list. This area is provided to write down general comments, e.g., "Received assignment #1", etc. Parameters ---------- Username: The user name, assigned when the account was created, for the client. (8 chars) Year: The 4 digit year of the day. (unsigned int) Month: The 2 digit month of the day. (unsigned int) Day: The 2 digit number for the day. (unsigned int) NewVal: The new text block for the To Do List. (256 chars) Server Responses ---------------- 100 OK Note List set. 501 Error. Please log in first. 502 Error. Please execute PASSWORD command first. 506 Error. Not authorized to set 's info. ================================================================================ SET PREFS || -------------------------------------------------------------------------------- Description ----------- This function sets the block of client-definable text that is used to save client preferences and state information. Note that this command will overwrite the previous contents of PREFS. If a client wishes to modify the contents, it should first request the contents (REQUEST PREFS), make modifications, and then save the new contents using SET PREFS. Parameters ---------- None. Server Responses ---------------- 100 OK Block of client-definable text accepted. 501 Error. Please log in first. 502 Error. Please execute PASSWORD command first. ================================================================================ CREATE PEREVENT || || -------------------------------------------------------------------------------- Description ----------- This function creates a personal event entry in the scheduler. This includes personal appointments or meetings with people external to the office. Either the quick description or detailed description field should be used to record external people names. If the external names are confidential, names should be entered in the detailed description field. Parameters ---------- EventId: This structure has the form Username.Year.Month.Day.Hour. For example, bill.1998.6.3.2 Len: The length of the meeting. (unsigned int) QuickDes: The quick description of the event. (256 chars) DetailDes: The detailed description of the event. (256 chars) Room: The room which the event will take place. (12 char) If you want the server to automatically find a room within capacity, specify YES_ROOM. If you do not want the server to do this, specify NO_ROOM. NumInRoom: The total number of people who will meet in that room. (max val of int=999) Server Responses ---------------- 100 OK Personal event scheduled. 501 Error. Please log in first. 502 Error. Please execute PASSWORD command first. 506 Error. Not authorized to set 's info. 508 Error. Schedule conflict. ================================================================================ CREATE MEETEVENT || || [ ... ] -------------------------------------------------------------------------------- Description ----------- This function creates a group meeting event entry in the scheduler. This function should not be used to create non-meeting events (e.g. a meeting with zero other members which is really just a personal event). The CREATE PEREVENT command should be used instead. After this command is called, the server will take care of sending notification requests to all invited users. The client does not have to manually send these notification requests. There is a limit on the maximum number of invitees since the command length is limited to 4096 characters (as mentioned in section 1.1). Given that each invitee's username is approximately 10 characters in length, 100 invitees would consume 1000 characters. This situation would leave approximately 3000 characters for the eventid, length, quick description, detailed description, room, total in room, and numer of internal invitees. Since the number of invitees will typcally exceed 100 users, this restriction should not create any problems. The server will maintain a meeting as pending indefinitely and will not discard it due to staleness. The invitor of the meeting may choose to delete the meeting by issuing the DELETE command mentioned further in this document. Parameters ---------- EventId: This structure has the form Username.Year.Month.Day.Hour. For example, bill.1998.6.3.2 Len: The length of the meeting. (unsigned int) QuickDes: The quick description of the event. (256 chars) DetailDes: The detailed description of the event. (256 chars) Room: The room which the event will take place. (12 chars) If you want the server to automatically find a room within capacity, specify YES_ROOM. If you do not want the server to do this, specify NO_ROOM. NumInRoom: The total number of people who will meet in that room. (max val of int=999) Num: The number of other internal people invited to this meeting. (unsigned int greater than 0) Username: The username of each person invited to the meeting. Server Responses ---------------- 100 OK Notifications sent. Meeting Pending. 321 Invalid Length. 322 Invalid Number of Users. 340 SORRY NO ROOM FOUND 341 SORRY ROOM DOES NOT EXIST 501 Error. Please log in first. 502 Error. Please execute PASSWORD command first. 506 Error. Not authorized to set 508 Error. Schedule conflict. ================================================================================ CREATE RESPONSE || || -------------------------------------------------------------------------------- Description ----------- This command is used by invitees to respond to meeting invitations. (e.g. For sending accept/reject responses to the initiator of a meeting.) Once a user responds, the appropriate notification entry is automatically removed from the user's notification box. As well, if the user creates an "accept" response, the appropriate event slot in the user's schedule is automatically updated. Parameters ---------- Type: This field is an unsigned int that identifies the type of notification message. A 1 identifies that the meeting was accepted by username, a 2 identifies that the meeting was rejected by username, and a 4 means the meeting was accepted but username's attendance will be shortened. EventId: This structure has the form Username.Year.Month.Day.Hour. For example, bill.1998.6.3.2 Length: This is the length of the meeting that the user is responding to. OldDescription: This field is the text message that was received in the original notification. This field is needed in order to delete the proper notification. NewDescription: This field holds the descriptions of the response. If the parameter is set to 2 (rejection), a description of why the meeting was rejected must be provided (max 256 chars). Similarly, if the parameter is set to 4, a description must be provided as well. If the parameter is set to 1 (accept), the client may optionally provide a description. If no description is given, the server will insert the value "Meeting accepted". Server Responses ---------------- 100 OK Notification sent. 324 Invalid Type. 342 Error, meeting does not exist. 501 Error. Please log in first. 502 Error. Please execute PASSWORD command first. 507 Error. Not authorized to send response to event ================================================================================ DELETE PEREVENT -------------------------------------------------------------------------------- Description ----------- This function deletes a personal event entered in the scheduler. Parameters ---------- EventId: This structure has the form Username.Year.Month.Day.Hour. For example, bill.1998.6.3.2 Server Responses ---------------- 100 OK Personal event deleted. 501 Error. Please log in first. 502 Error. Please execute PASSWORD command first. 509 Error. No existing personal event scheduled. 512 Error. Not authorized to delete event ================================================================================ DELETE MEETEVENT -------------------------------------------------------------------------------- Description ----------- This function deletes a group meeting event entered in the scheduler. Aside, from removing the event from everyone’s schedule, notification messages are also generated. Parameters ---------- EventId: This structure has the form Username.Year.Month.Day.Hour. For example, bill.1998.6.3.2 Desc: A string stating why the meeting was cancelled. (256 chars) Server Responses ---------------- 100 OK Group meeting event deleted. 501 Error. Please log in first. 502 Error. Please execute PASSWORD command first. 511 Error. No existing meeting event scheduled. 512 Error. Not authorized to delete event ================================================================================ DELETE NOTIFICATION -------------------------------------------------------------------------------- Description ----------- This function deletes a notification message that is currently in the user’s notification box. The parameters specified are used to identify the exact notification to delete. If the field has not been answered (set to 0), then the notification will not be deleted. This prevents a client from deleting a notification that he/she has not responded to. Note that the if the client responds to a meeting invitation by using the CREATE RESPONSE command, the appropriate notification is automatically deleted by the server. The DELETE NOTIFICATION command is only used to delete response notifications that are generated when invitees respond to the client's invitation. This command is also used to delete "Canceled meeting" notifications that are sent when a meeting has been cancelled. Parameters ---------- From: The username of the creator of the notification. Type: In order for this command to be accepted, the field of the notification must be set to either 1, 2, 3, 4, or 5. This command will not be accepted when the notification is of type 0 because it means the user has not responded to another user's request. As a reminder, the type of notifications are as follows: 0 = it is a request sent by the creator of the meeting 1 = it is an acceptance sent from an invitee 2 = it is a rejection sent from an invitee 3 = it is a deletion sent by the creator of the meeting 4 = it is a an acceptance but with shortened attendance (invitee's reponse) 5 = it is a change in room location of the meeting EventId: This structure has the form Username.Year.Month.Day.Hour. For example, bill.1998.6.3.2 Description: This is field must contain an exact replica of the data stored in the corresponding field on the server. Server Responses ---------------- 100 OK Notification deleted. 324 Invalid Type. 501 Error. Please log in first. 502 Error. Please execute PASSWORD command first. 511 Error. No existing meeting event scheduled. ================================================================================ CREATE AUTOMEET || || [ ... ] -------------------------------------------------------------------------------- Description ----------- This function is a cool function in that given a whole set of parameters, it attempts to find a slot to schedule an appointment for all the usernames. If no such slot exists, then an error message is returned. This function will not book any of the meetings nor issue any notifications, it will however, return the EventId identifying the location of a possible meeting. The CREATE MEETEVENT command should be used to create the appropriate meeting. Due to multiple concurrent users, the returned slot may become occupied if the client does not schedule the meeting quickly after obtaining this answer. Parameters ---------- Year1: The starting year that the meeting can be booked. (unsigned int) Month1: The starting month that the meeting can be booked. (unsigned int) Day1: The starting day that the meeting can be booked. (unsigned int) Year2: The ending year that the meeting can be booked. A 0 implies there is no restriction on the ending year. (unsigned int) Month2: The ending month that the meeting can be booked. A 0 implies there is no restriction on the ending month. (unsigned int) Day2: The ending day that the meeting can be booked. A 0 implies there is no restriction on the ending day. (unsigned int) T1: The earliest that the meeting can be scheduled from. This parameter is a 2 digit value. (unsigned integer) A 0 implies no restriction on the starting time. T2: The latest that the meeting can be scheduled till. This parameter has is a 2 digit value. (unsigned integer) A 0 implies no restriction on the ending time. Len: The length of the meeting. Room: The room of the meeting. NumInRoom: The total number of people who will meet in that room. (max val of int=999) Num: The number of other people invited to this meeting (unsigned int) Username: The username of each person invited to the meeting. (8 char) Server Responses ---------------- 100 OK Slot found at 204 No suitable meeting found. 323 Invalid user names. 501 Error. Please log in first. 502 Error. Please execute PASSWORD command first. ================================================================================ 3.0 STATUS CODE LISTING ======================= 100 OKs 200 Active . User is currently logged on. 201 No event exists. 202 No new notifications yet. 203 No users registered yet --- registry empty. 204 No suitable meeting found. 205 Prefs are empty. 300 Invalid Username. Failed attempt #1. 301 Invalid Username. Failed attempt #2. 302 Invalid Username. *** Security alert *** Closing connection. 303 Invalid. already exists! Please choose another username. 304 Invalid. Failed attempt #1. 305 Invalid. Failed attempt #2. 306 Invalid. *** Security alert *** Closing connection. 307 Invalid. Failed attempt. Old password incorrect. 308 Invalid Username. 309 Invalid Password. 310 Username does not exist. 311 Invalid Year. 312 Invalid Month. 313 Invalid Day. 314 Invalid Hour. 315 Invalid FieldVal. 316 Invalid NewVal. 317 Invalid Username in EventId. 318 Invalid Year in EventId. 319 Invalid Month in EventId. 320 Invalid Day in EventId. 321 Invalid Length. 322 Invalid Number of Users. 323 Invalid Usernames. 324 Invalid Type. 325 Invalid Description. 326 Invalid OldEventId. 327 Invalid From. 328 Invalid Year1. 329 Invalid Year2. 330 Invalid Month1. 331 Invalid Month2. 332 Invalid Day1. 333 Invalid Day2. 334 Invalid T1. 335 Invalid T2. 336 Invalid Room. 337 Error. Can not delete root. 338 Error. Invalid room. 339 No rooms defined yet. 340 SORRY NO ROOM FOUND 341 SORRY ROOM DOES NOT EXIST 342 Error, meeting does not exist. 400 Missing argument 401 Missing arguments 402 Missing argument 403 Missing arguments 404 Missing arguments 405 Missing argument 406 Missing arguments 407 Missing arguments 408 Missing arguments 409 Missing arguments 410 Missing arguments || 411 Missing arguments || 412 Missing arguments || || 413 Missing argument 414 Missing arguments 415 Missing arguments [ ... ] 416 Missing arguments || || [ ... ] 417 Missing arguments || || 418 Missing arguments || 419 Missing arguments || || ... 500 Error. Please log out first. 501 Error. Please log in first. 502 Error. Please execute PASSWORD command first. 503 Error. Not logged in. Therefore, you can not be logged out. 504 Error. Administrator access only! 505 Error. Not authorized to look at 's schedule. 506 Error. Not authorized to set 's info. 507 Error. Not authorized to send response to event 508 Error. Schedule conflict. 509 Error. No existing personal event scheduled. 510 Error. Not authorized to set event 511 Error. No existing meeting event scheduled. 512 Error. Not authorized to delete event 4.0 CHANGES MADE TO PROTOCOL ============================ This section briefly describes changes made from version 1.0 to version 1.1 of this application-level protocol. Internal implementation details have been removed from the application-level protocol specification. These internal details can be found in the NOTES document. Room scheduling has been added to the protocol due to new requirment specifications. This new feature involves adding the REQUEST ROOMLIST, ADMIN CREATE ROOM, ADMIN DELETE ROOM, ADMIN MODIFY ROOM, and FIND NEWROOM commands. It also involves modifying some of the existing commands to add two extras paramteters for room name and room capacity. Client and server states which were implicit in the previous version are explicitly described in the current version. Information regarding client server interaction is explicitly described as well. A change in the terminal character has been made. To signify the end of a server response, the carriage return symbol (ASCII value 13) is used at the end of every every response, as opposed to the symbol (ASCII value 23). This change means that the response from the server can be viewed as consisting of one line of text, which is terminated with a single . An addition type status has been added to the notification string to allow for the indication of a change in room location of a meeting. This new type have the value 5. The ADMIN DELETE user command has been altered to reduce the complexity of design. Instead of removing the user from every event, the user is simply prevented from logging onto the server. Another reason is that valuable information regarding use of time can be retained and analyzed by the administration staff. To entirely remove all records of the user, the system administrator must enter into the system as the deleted user, answer all notification messages, exit the system, and remove the user's directory via a unix shell. Error codes and error outputs have also been altered to simplify and reduce the type of error messages.