CS 635 PROJECT 2 Due Date: 9pm Wednesday 05/11/2005 The purpose of this project is to gain experience with implementing a user-level application which processes input from more than one device and which utilizes the services of a device-driver that we have created. PROJECT STATEMENT Write an application program named 'nicchat.cpp' which will support peer-to-peer communication between users at any two workstations located in our Kudlick Classroom, using a character-mode LINUX device-driver for their installed RealTek 8139 network interface controllers. During a communication session, your application should display two text-mode windows of size 12 rows by 80 columns, using the line-graphics glyphs from your terminal's alternate character-set: keystrokes that are typed locally should be shown in the lower window, while keystrokes that are received over the local network should be shown in the upper window. The ASCII control-codes (for backspace, horizontal-tab, carriage-return, and line-feed) should produce the same screen effects that users expect, using line-wrap and window-scrolling to keep displayed characters within their respective borders. The cursor should remain visible in the lower window, where your local keyboard-input is being echoed. The following additional issues need to be considered: (1) How will each communication-session be initiated? (2) How will it be terminated? (3) How will potential error-conditions (missing or repeated characters) be dealt with? (4) How will extraneous network-traffic be accommodated? (5) How will you minimize the need to transmit 'broadcast' messages over the network? (6) How will your application learn the name of the person with whom it is communicating? (7) What attitude shall your application adopt regarding the privacy and authenticity of its communications? WHAT TO SUBMIT Copy your source-files ('nic.c' and 'nicchat.cpp') to your '/submit' directory, along with your compiled files (the 'nicchat' application and and the 'nic.ko' kernel-object), so that your Instructor can access them for testing and grading. And, in addition to these binaries, turn in to your instructor a fully legible paper printout of your two source-files. You may, at your option, submit a 'readme' text-file which would explain design-features of your application and/or your device-driver that might otherwise not be apparent from the comments in your source-code; but you should submit your 'readme' file in both binary and hardcopy forms. The location of the Instructor's mailbox is Room HRN-208 (for receiving your project's paper printouts). ________________________________________________________________________ (c) Allan B. Cruse University of San Francisco Spring 2005