00001 #ifndef __J2K__TFTP_OptionSaved_CPP__ 00002 #define __J2K__TFTP_OptionSaved_CPP__ 00003 00004 #include <j2k/Net/TFTP/TFTP_OptionSaved.hpp> 00005 00006 00007 TFTP_OptionSaved::TFTP_OptionSaved() 00008 : mode( NULL ), 00009 timeout( NULL ), 00010 blocksize( NULL ), 00011 windowsize( NULL ), 00012 windowsizeLength( 0 ), 00013 blocksizeLength( 0 ), 00014 timeoutLength( 0 ), 00015 modeLength( 0 ) { } 00016 00017 TFTP_OptionSaved::~TFTP_OptionSaved() 00018 { 00019 if ( mode != NULL ) delete [] mode; 00020 if ( timeout != NULL ) delete [] timeout; 00021 if ( blocksize != NULL ) delete [] blocksize; 00022 if ( windowsize != NULL ) delete [] windowsize; 00023 } 00024 00025 void TFTP_OptionSaved::save() 00026 { 00027 option.rwlock1_global.read(); 00028 rwlock4_saved.write(); 00029 00030 if ( mode != NULL ) delete [] mode; 00031 if ( timeout != NULL ) delete [] timeout; 00032 if ( blocksize != NULL ) delete [] blocksize; 00033 if ( windowsize != NULL ) delete [] windowsize; 00034 00035 mode = new char[ option.modeLength ]; 00036 timeout = new char[ option.timeoutLength ]; 00037 blocksize = new char[ option.blocksizeLength ]; 00038 windowsize = new char[ option.windowsizeLength ]; 00039 00040 windowsizeLength = option.windowsizeLength; 00041 blocksizeLength = option.blocksizeLength; 00042 timeoutLength = option.timeoutLength; 00043 modeLength = option.modeLength; 00044 00045 memcpy( mode, option.mode, option.modeLength ); 00046 memcpy( timeout, option.timeout, option.timeoutLength ); 00047 memcpy( blocksize, option.blocksize, option.blocksizeLength ); 00048 memcpy( windowsize, option.windowsize, option.windowsizeLength ); 00049 00050 rwlock4_saved.releaseWrite(); 00051 option.rwlock1_global.releaseRead(); 00052 } 00053 00054 void TFTP_OptionSaved::load() 00055 { 00056 option.rwlock1_global.write(); 00057 rwlock4_saved.read(); 00058 00059 if ( option.mode != NULL ) delete [] option.mode; 00060 if ( option.timeout != NULL ) delete [] option.timeout; 00061 if ( option.blocksize != NULL ) delete [] option.blocksize; 00062 if ( option.windowsize != NULL ) delete [] option.windowsize; 00063 00064 option.windowsizeLength = windowsizeLength; 00065 option.blocksizeLength = blocksizeLength; 00066 option.timeoutLength = timeoutLength; 00067 option.modeLength = modeLength; 00068 00069 memcpy( option.mode, mode, modeLength ); 00070 memcpy( option.timeout, timeout, timeoutLength ); 00071 memcpy( option.blocksize, blocksize, blocksizeLength ); 00072 memcpy( option.windowsize, windowsize, windowsizeLength ); 00073 00074 rwlock4_saved.releaseRead(); 00075 option.rwlock1_global.write(); 00076 } 00077 00078 #endif