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