#include <DataFactory.hpp>
Inheritance diagram for DataFactory::
Public Methods | |
DataFactory () | |
virtual | ~DataFactory () |
virtual void | run () |
void | init () |
void | createDataPacket () |
void | dummyPacket () |
Private Methods | |
DataFactory (const DataFactory &) | |
const DataFactory & | operator= (const DataFactory &) |
Private Attributes | |
TFTP_Packet * | packet |
ULONG | blocksize |
char * | buffer |
char * | data |
ULONG | blockNo |
long | sz |
long | totalSize |
long | neof |
bool | initialized |
bool | dummySended |
|
Definition at line 7 of file DataFactory.cpp. 00008 : buffer( NULL ), packet( NULL ), blocksize( 0 ), 00009 totalSize( 0 ), dummySended( FALSE ), 00010 data( NULL ), blockNo( 0 ), sz( 0 ), neof( 1 ), 00011 initialized( FALSE ), 00012 Basic_PThread() 00013 { 00014 option.rwlock5_data_queue.write(); 00015 option.data_queue = new DList_pPacket(); 00016 option.rwlock5_data_queue.releaseWrite(); 00017 blocksize = option.getBlockSizeValue(); 00018 printf( "DataFactory Created.\n"); 00019 fflush( stdout ); 00020 } |
|
Definition at line 19 of file DataFactory.hpp. 00019 { } |
|
|
|
Definition at line 63 of file DataFactory.cpp. Referenced by run().
00064 { 00065 blockNo++; 00066 00067 // Read data 00068 option.rwlock2_file.read(); 00069 sz = option.myFile->getData( buffer, blocksize ); 00070 00071 if ( sz < 0 ) { 00072 neof = -1; 00073 sz *= -1; 00074 } 00075 00076 if ( sz > 0 && buffer[sz-1] == '\0' ) sz--; 00077 totalSize += sz; 00078 #ifdef DEBUG 00079 printf("DataFact:[%d|%d|%s|%d]", neof, sz, buffer+4, blocksize ); 00080 #endif 00081 option.rwlock2_file.releaseRead(); 00082 00083 printf( "enqueuing data\n" ); 00084 fflush( stdout ); 00085 00086 packet = new TFTP_Packet(); 00087 packet->createData( blockNo, buffer, sz ); 00088 00089 option.rwlock5_data_queue.write(); 00090 option.data_queue->enqueue( packet ); 00091 option.rwlock5_data_queue.releaseWrite(); 00092 00093 if ( (neof < 0) && (( totalSize % blocksize ) == 0) ) 00094 { 00095 dummyPacket(); 00096 } 00097 00098 } |
|
Definition at line 100 of file DataFactory.cpp. Referenced by createDataPacket().
00101 { 00102 if ( dummySended ) return; 00103 dummySended = TRUE; 00104 00105 packet = new TFTP_Packet(); 00106 memset( buffer, 0 , sz ); 00107 00108 blockNo++; 00109 packet->createData( blockNo, buffer, 0 ); 00110 00111 option.rwlock5_data_queue.write(); 00112 option.data_queue->enqueue( packet ); 00113 option.rwlock5_data_queue.releaseWrite(); 00114 } |
|
Definition at line 22 of file DataFactory.cpp. Referenced by run().
00023 { 00024 if ( initialized == TRUE ) return; 00025 00026 initialized = TRUE; 00027 blocksize = option.getBlockSizeValue(); 00028 sz = blocksize; 00029 neof = 1; 00030 00031 option.rwlock2_file.read(); 00032 option.myFile->setBegin(); 00033 option.rwlock2_file.releaseRead(); 00034 00035 buffer = new char[ blocksize + 1 ]; 00036 } |
|
|
|
Reimplemented from Basic_PThread. Definition at line 38 of file DataFactory.cpp. 00039 { 00040 init(); 00041 00042 while( sz >= blocksize && neof > -1 ) 00043 { 00044 createDataPacket(); 00045 if ( blockNo % 2 == 0 ) sched_yield(); 00046 } 00047 00048 // Save Last 00049 option.LastData = blockNo; 00050 option.Done = FALSE; 00051 00052 option.rwlock5_data_queue.write(); 00053 #ifdef DEBUG 00054 option.data_queue->display(); 00055 #endif 00056 option.rwlock5_data_queue.releaseWrite(); 00057 00058 printf( "DataFactory Finished.Should send %d bytes\n",totalSize); 00059 00060 fflush( stdout ); 00061 } |
|
Definition at line 32 of file DataFactory.hpp. |
|
Definition at line 29 of file DataFactory.hpp. |
|
Definition at line 30 of file DataFactory.hpp. |
|
Definition at line 31 of file DataFactory.hpp. |
|
Definition at line 37 of file DataFactory.hpp. |
|
Definition at line 36 of file DataFactory.hpp. |
|
Definition at line 35 of file DataFactory.hpp. |
|
Definition at line 27 of file DataFactory.hpp. |
|
Definition at line 33 of file DataFactory.hpp. |
|
Definition at line 34 of file DataFactory.hpp. |