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

TFTP_Parser Class Reference

#include <TFTP_Parser.hpp>

List of all members.

Public Methods

 TFTP_Parser ()
virtual ~TFTP_Parser ()
void parseOptions (char *str, size_t length, size_t offset)
char * scanParam (char *str, size_t *len)
void getParams (char *str, size_t offset)
int select (int i)
void RRQ_driver (char *rawPacket, int sz)
void WRQ_driver (char *rawPacket, int sz)
int TestTimeout (short blockNo)
void DATA_driver (char *rawPacket, int sz)
void ACK_driver (char *rawPacket, int sz)
void ERROR_driver (char *rawPacket, int sz)
void OACK_driver (char *rawPacket, int sz)
void opcodeDispatcher (char *rawPacket, int sz)

Private Attributes

bool OACK_arg
int blocksizeDefault
int windowsizeDefault
int timeoutDefault
size_t expectedBlockSize
TFTP_ParserCallbackopTable
char * array [12]
size_t array_sz


Constructor & Destructor Documentation

TFTP_Parser::TFTP_Parser  
 

Definition at line 16 of file TFTP_Parser.cpp.

00017 {
00018   OACK_arg = FALSE;
00019   array_sz = 0;
00020   expectedBlockSize = option.getBlockSizeValue();
00021 
00022    blocksizeDefault = 1;
00023   windowsizeDefault = 1;
00024      timeoutDefault = 1;
00025 
00026   opTable = new TFTP_ParserCallback[6];
00027 
00028   opTable[0] = &TFTP_Parser::RRQ_driver;
00029   opTable[1] = &TFTP_Parser::WRQ_driver;
00030   opTable[2] = &TFTP_Parser::DATA_driver;
00031   opTable[3] = &TFTP_Parser::ACK_driver;
00032   opTable[4] = &TFTP_Parser::ERROR_driver;
00033   opTable[5] = &TFTP_Parser::OACK_driver;
00034 }

TFTP_Parser::~TFTP_Parser   [virtual]
 

Definition at line 36 of file TFTP_Parser.cpp.

00037 {
00038   if ( opTable != NULL ) delete[] opTable;
00039 }


Member Function Documentation

void TFTP_Parser::ACK_driver char *    rawPacket,
int    sz
[inline]
 

Definition at line 259 of file TFTP_Parser.hpp.

void TFTP_Parser::DATA_driver char *    rawPacket,
int    sz
[inline]
 

Definition at line 215 of file TFTP_Parser.hpp.

void TFTP_Parser::ERROR_driver char *    rawPacket,
int    sz
[inline]
 

Definition at line 333 of file TFTP_Parser.hpp.

void TFTP_Parser::OACK_driver char *    rawPacket,
int    sz
[inline]
 

Definition at line 343 of file TFTP_Parser.hpp.

void TFTP_Parser::RRQ_driver char *    rawPacket,
int    sz
[inline]
 

Definition at line 51 of file TFTP_Parser.hpp.

int TFTP_Parser::TestTimeout short    blockNo [inline]
 

Definition at line 181 of file TFTP_Parser.hpp.

void TFTP_Parser::WRQ_driver char *    rawPacket,
int    sz
[inline]
 

Definition at line 127 of file TFTP_Parser.hpp.

void TFTP_Parser::getParams char *    str,
size_t    offset
 

Definition at line 93 of file TFTP_Parser.cpp.

Referenced by parseOptions().

00094 {
00095    size_t l = 1;
00096    char*  f = str + offset;
00097    char*  p = f;
00098    char*  q = p;
00099 
00100    int k = 0;
00101    while( l != 0 )
00102    {
00103      // q = scanParam( p, &l );
00104      l = strlen( p );
00105      q = p + l + 1;
00106      array[ k ] = new char[ l ];
00107      memcpy( array[ k ], p, l );
00108      k++;
00109      p = q;
00110    }
00111    array_sz = k - 1;
00112 }    

void TFTP_Parser::opcodeDispatcher char *    rawPacket,
int    sz
[inline]
 

Definition at line 400 of file TFTP_Parser.hpp.

void TFTP_Parser::parseOptions char *    str,
size_t    length,
size_t    offset
 

Definition at line 41 of file TFTP_Parser.cpp.

00042 {
00043   // CORRUPTION OF THE STACK, PATCH THE STRING BY BACKUPing!
00044   char* tmp = new char[ length ];
00045   memcpy( tmp, str, length );
00046   delete [] str;
00047 
00048   array_sz = 0;
00049   
00050    blocksizeDefault = 1;
00051   windowsizeDefault = 1;
00052      timeoutDefault = 1;
00053 
00054   getParams( tmp, offset );
00055 
00056   printf( "%d", array_sz );
00057   fflush( stdout );
00058   for( int i = 0; i < array_sz; i++ ) {
00059     safePrint( array[i] );
00060     printf( "\t%d-%d\n", i, array_sz );
00061     fflush( stdout );
00062     i += select( i );
00063   }
00064 
00065   // If not defined, set TFTP default options.
00066   if (  blocksizeDefault ) {
00067     option.setBlockSize( atol( DEFAULT_BLOCKSIZE ) );
00068   }
00069 
00070   if ( windowsizeDefault ) {
00071     option.setWindowSize( atol( DEFAULT_WINDOWSIZE ) );
00072   }
00073 
00074   if (    timeoutDefault ) {
00075     option.setTimeOut( atol( DEFAULT_TIMEOUT ) );
00076   }
00077 
00078   expectedBlockSize = option.getBlockSizeValue();
00079 
00080   str = new char[ length ];
00081   memcpy( str, tmp, length );
00082 }

char * TFTP_Parser::scanParam char *    str,
size_t *    len
 

Definition at line 84 of file TFTP_Parser.cpp.

00085 {
00086   size_t l = strlen( str );
00087   char*  t = str + l + 1;
00088 
00089   *len = l;
00090   return t;
00091 }

int TFTP_Parser::select int    i
 

Definition at line 116 of file TFTP_Parser.cpp.

Referenced by parseOptions().

00117 {
00118      char* s2  = array[i];
00119 
00120      if ( s2 != NULL ) s2 = strlwr( s2 );
00121 
00122      char* opt = NULL;
00123 
00124      if ( (i+1) <= array_sz ) {
00125        opt = strlwr( array[i+1] );
00126      }
00127 
00128      if (  !strcmp( s2, "blksize" ) || !strcmp( s2, "blocksize" ) )
00129      {
00130        long bsize = atol( opt );
00131        printf("BlockSize[%d]", bsize );
00132        fflush( stdout );
00133 //       OACK_arg = TRUE;
00134        option.requestedBlockSize( bsize );  
00135        blocksizeDefault = 0;
00136        return 1;   
00137      } else
00138      if ( !strcmp( s2, "timeout" ) )
00139      {
00140        size_t t = atol( opt );
00141        printf("Timeout[%d]", t ); 
00142        fflush( stdout );
00143 //       OACK_arg = TRUE;
00144        option.requestedTimeOut( t );
00145        timeoutDefault = 0;
00146        return 1;   
00147      } else
00148      if ( !strcmp( s2, "tsize" ) )
00149      {
00150        size_t sz = atol( opt );
00151        printf("FileSize[%d]", sz ); 
00152        fflush( stdout );
00153 //       OACK_arg = TRUE;
00154        option.requestedFileSize( sz );
00155        return 1;   
00156      } else 
00157      if (  !strcmp( s2, "wsize" ) || !strcmp( s2, "windowsize" ) \
00158         || !strcmp( s2, "window" ) )
00159      {
00160        long wsize = atol( opt );
00161        printf("WindowSize[%d]", wsize ); 
00162        fflush( stdout );
00163 //       OACK_arg = TRUE;
00164        option.requestedWindowSize( wsize );     
00165        windowsizeDefault = 0;
00166        return 1;   
00167      }
00168     
00169      if ( i == 0 ) {
00170        printf("Filename[%s]\n", array[i] ); 
00171        fflush( stdout );
00172        option.setFileName( array[i] );
00173        return 0;   
00174      }
00175 
00176      if ( i == 1 ) {
00177        printf("Mode[%s]\n", array[i] ); 
00178        fflush( stdout );
00179        option.requestedMode( array[i] );
00180        return 0;   
00181      }
00182  
00183   return 0;   
00184 }


Member Data Documentation

bool TFTP_Parser::OACK_arg [private]
 

Definition at line 444 of file TFTP_Parser.hpp.

char* TFTP_Parser::array[12] [private]
 

Definition at line 454 of file TFTP_Parser.hpp.

size_t TFTP_Parser::array_sz [private]
 

Definition at line 455 of file TFTP_Parser.hpp.

int TFTP_Parser::blocksizeDefault [private]
 

Definition at line 446 of file TFTP_Parser.hpp.

size_t TFTP_Parser::expectedBlockSize [private]
 

Definition at line 450 of file TFTP_Parser.hpp.

TFTP_ParserCallback* TFTP_Parser::opTable [private]
 

Definition at line 452 of file TFTP_Parser.hpp.

int TFTP_Parser::timeoutDefault [private]
 

Definition at line 448 of file TFTP_Parser.hpp.

int TFTP_Parser::windowsizeDefault [private]
 

Definition at line 447 of file TFTP_Parser.hpp.


The documentation for this class was generated from the following files:
Generated on Sun Oct 14 18:50:09 2001 for Standard J2K Library by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001