Main Page   Packages   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

C:/temp/src/j2k/Net/TFTP/TFTP_design.hpp

Go to the documentation of this file.
00001 /*
00002 Contains everything related to the TFTP protocol/layer
00003 HDLC, 
00004 */
00005 
00006 TFTP_Option option;
00007 
00008 class Buffer
00009 {
00010 private:
00011     char* buf;
00012 public:
00013     Buffer()
00014     {
00015     }
00016     ~Buffer();
00017 };
00018 
00019 
00020 class TFTPpacket {
00021 
00022 };
00023 
00024 /*
00025 Deals with the file to send/receive
00026 */
00027 
00028 class TFTPfile {
00029 public:
00030     void open();
00031   void close();
00032   
00033   FILE*   fichier;
00034 
00035   Buffer* toNetascii();
00036   Buffer* toMail();
00037   Buffer* toOctet();
00038 };
00039 
00040 /*
00041 Deals with opening and binding each socket
00042 */
00043 
00044 class UnixSocket;
00045 
00046 
00047 
00048 /*
00049 Deals with Receiving socket packet from UDP using
00050 a High priority PThread
00051 */
00052 
00053 class UnixSocketReceiver;
00054 
00055 
00056 
00057 /*
00058 Deals with Sending socket packet from UDP using
00059 a High priority PThread
00060 */
00061 
00062 class UnixSocketSender;
00063 
00064 
00065 
00066 #define printError( s ) sprintf( stderr, char* s )
00067 
00068 struct tftp_rrq_wrq_t {
00069         short opcode;
00070    char*   filename;
00071    char    null1;
00072    char*   mode;
00073    char    null2;
00074 }rrq_wrq;
00075 
00076 class TFTPRequestPacket
00077 {
00078 private:
00079     tftp_rrq_wrq_t rrq_wrq_packet;
00080 public:
00081     TFTPRequestPacket(short opcode, char* filename)
00082     {
00083         rrq_wrq_packet.opcode= opcode;
00084         rrq_wrq_packet.filename = filename;
00085         rrq_wrq_packet.null1= '0';
00086         rrq_wrq_packet.mode = "octect";
00087         rrq_wrq_packet.null2= '0';
00088         
00089     }
00090     ~TFTPRequestPacket()
00091     {
00092     }
00093     
00094     short getopcode()
00095     {
00096         return rrq_wrq_packet.opcode;
00097     }
00098 
00099     void setfilename(char* filename)
00100     {
00101         rrq_wrq_packet.filename = filename;
00102     }
00103 
00104     char* getfilename()
00105     {
00106         return rrq_wrq_packet.filename;
00107     }
00108     tftp_rrq_wrq_t* get_rrq_wrq_packet()
00109     {
00110         return &rrq_wrq_packet;
00111     }
00112 };
00113     
00114 
00115 #define TFTP_RRQ_WRQ_INIT  { 1 , NULL, 0, NULL, 0 }
00116 
00117 struct tftp_optext_t {
00118     char*   opt1;
00119     char    null1;
00120     char*   value1;
00121     char    null2;
00122 };
00123 
00124 #define TFTP_OPTEXT_INIT { NULL, 0, NULL, 0}
00125 
00126 /*
00127   Data Packet Class
00128 */
00129 struct tftp_data_t {
00130    short  opcode;
00131    short blockNo;
00132    char*   data;
00133 };
00134 
00135 
00136  #define TFTP_DATA_INIT { 3, 0, NULL }
00137 class TFTPDataPacket
00138 {
00139 private:
00140     tftp_data_t datapacket;
00141 public:
00142     TFTPDataPacket (short num, char* data){
00143         datapacket.opcode = 3;
00144         datapacket.blockNo= num;
00145         datapacket.data= data;
00146     }
00147 
00148     ~TFTPDataPacket()
00149     {
00150     }
00151 
00152     short getblockNo()
00153     {
00154         return datapacket.blockNo;
00155     }
00156     void  setblockNo(short num)
00157     {
00158         datapacket.blockNo=num;
00159         
00160     }
00161     void setdata(char* data)
00162     {
00163         datapacket.data = data;
00164     }
00165     
00166 
00167     tftp_data_t* getdatapacket() 
00168     {
00169         return &datapacket;
00170     }
00171     
00172 };
00173 
00174 /*
00175   Ack Packet Class
00176 */
00177 struct tftp_ack_t {
00178    short  opcode; 
00179    short  blockNo;
00180 };
00181 
00182 #define TFTP_ACK_INIT { 4, 0 }
00183 
00184 class TFTPAckPacket
00185 {
00186 private:
00187     tftp_ack_t ackpacket;
00188 public:
00189     TFTPAckPacket (short num){
00190         ackpacket.opcode = 4;
00191         ackpacket.blockNo= num;
00192     }
00193 
00194     ~TFTPAckPacket()
00195     {
00196     }
00197 
00198     short getblockNo()
00199     {
00200         return ackpacket.blockNo;
00201     }
00202     void  setblockNo(short num)
00203     {
00204         ackpacket.blockNo=num;
00205         
00206     }
00207 
00208     tftp_ack_t* getackpacket() 
00209     {
00210         return &ackpacket;
00211     }
00212     
00213     
00214 };
00215 
00216 struct tftp_error_t {
00217    short opcode;
00218    short errorCode;
00219    char* errorMsg;
00220    char    null1;
00221 };
00222 
00223 class TFTPErrorPacket
00224 {
00225 private:
00226     tftp_error_t errorpacket;
00227  
00228             
00229 public:
00230     TFTPErrorPacket( short errorcode)
00231     {
00232         errorpacket.opcode = 5;
00233         errorpacket.errorCode = errorcode;
00234         errorpacket.errorMsg = NULL;
00235         errorpacket.null1= '0';
00236 
00237     }
00238     ~TFTPErrorPacket()
00239     {
00240     }
00241 
00242     short geterrorCode()
00243     {
00244         return errorpacket.errorCode;
00245     }
00246     void seterrorCode(errorcode)
00247     {
00248         errorpacket.errorCode = errorcode;
00249     }
00250     
00251 
00252     char* getErrorMsg()
00253     {
00254         return "Error";
00255     }
00256     tftp_error_t* geterrorpacket()
00257     {
00258         return &errorpacket;
00259     }
00260     
00261 };
00262 #define TFTP_ERROR_INIT { 5, 0, NULL, 0 }
00263 
00264 enum tftp_error_code_t {
00265    NotDefined        = 0,
00266    FileNotFound      = 1,
00267    AccessViolation   = 2,
00268    DiskFull          = 3,
00269    AllocationExceed  = 3,
00270    IllegalOperation  = 4,
00271    UnknownTransferID = 5,
00272    FileAlreadyExists = 6,
00273    NoSuchUser        = 7
00274 };
00275 
00276 struct StringData_t 
00277 {
00278     char*  s;
00279     size_t len;
00280 };
00281 
00282 StringData_t tftp_error_msg[8] = {
00283     { "Not defined.", 12 },
00284     { "File not found", 14 },
00285     { "Access violation", 15 },
00286     { "Disk full", 9 },
00287     { "Allocation exceeded", 19},
00288     { "Illegal operation", 17 },
00289     { "Unknown transfer id", 19 },
00290     { "File already exists", 19 },
00291     { "No such user", 12 }
00292 };
00293 
00294 enum tftp_opcode {
00295    ReadRequest     = 1,
00296    WriteRequest    = 2,
00297    Data            = 3,
00298    Acknowledgement = 4,
00299    Error           = 5
00300 };
00301 
00302 
00303 class TFTP {
00304     Buffer*   buffer; 
00305     UCHAR     windowSize;
00306     ULONG     blockSize;
00307     char*     filename;
00308     int       Opt;
00309     
00310     Packet* pkt;
00311 
00312     TFTP(short listenport, short destport, char* desthost, char* f, int o)
00313     {
00314         //Unitializes connection
00315         UnixSocketReceiver Receiver( listeningport );
00316         UnixSocketSender   Sender( desthost, destport );
00317         //Gives the Sender the socket of the receiver
00318         Sender.setSocket( Receiver.getSocket());
00319         pkt = new Packet( Sender);
00320         char* filename= f;
00321         int Opt;
00322     }
00323     
00324     ~TFTP()
00325     {
00326     }
00327     //Sending Packet
00328     int Negotiate ( UnixSocketSender Sender) 
00329     {
00330         pkt.SendRRQ(3,filename,mode,Opt_None);
00331         
00332         pkt.SendError( 23); 
00333         //Sender.SendMsg((void*) packet.getpacket(),sizeof (packet.getpacket()));
00334     }
00335     void negotatiate()
00336     {
00337         //Send requets
00338         //wait for Ack
00339         //send data
00340         //wait for Ack
00341 };
00342         
00343     
00344 
00345     
00346     
00347     
00348 
00349 void sendPacket( siz1e_t begin, size_t length ) {
00350      char* pkt = new char[ blockSize ];
00351      char* pos = buffer.getPtr();
00352      memcpy( pkt, pos+begin, length );
00353      sender.send( pkt, length );
00354   }
00355 
00356     void sendRRQ_WRQ( char opcode, char* filename)
00357         
00358     void sendRR(   int frameNo);
00359     void sendErr();
00360 
00361 };

Generated on Sun Oct 14 18:46:34 2001 for Standard J2K Library by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001