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

TFTP_Sender Class Reference

#include <TFTP_Sender.hpp>

Inheritance diagram for TFTP_Sender::

Basic_PThread List of all members.

Public Methods

 TFTP_Sender ()
virtual void run ()

Private Methods

void sendData ()
 TFTP_Sender (const TFTP_Sender &src)
const TFTP_Sender & operator= (const TFTP_Sender &src)

Private Attributes

size_t blocksize
size_t windowsize
size_t currentDataNo
size_t currentBlockNo
double timeout
TFTP_Packetpacket

Constructor & Destructor Documentation

TFTP_Sender::TFTP_Sender  
 

Definition at line 14 of file TFTP_Sender.cpp.

00014                          : Basic_PThread() 
00015 {
00016    timeout = (double)option.getTimeOutValue();
00017    packet  = NULL;
00018    currentDataNo = 0;
00019 
00020    // Incremented by Acknowledge packet
00021    option.windowsizeLeft = option.getWindowSizeValue();
00022 
00023    printf("Creating Sender...\n");
00024    fflush( stdout );
00025 }

TFTP_Sender::TFTP_Sender const TFTP_Sender &    src [private]
 


Member Function Documentation

const TFTP_Sender& TFTP_Sender::operator= const TFTP_Sender &    src [private]
 

void TFTP_Sender::run   [virtual]
 

Reimplemented from Basic_PThread.

Definition at line 49 of file TFTP_Sender.cpp.

00050 {
00051     printf("Starting Sender...\n");
00052     fflush( stdout );
00053     
00054 
00055   for( currentDataNo = 1;
00056        currentDataNo <= option.LastData; //  && option.Done == FALSE;
00057        currentDataNo++ )
00058   {
00059 
00060       
00061     // If there is nothing then let other folks run.
00062     while( option.data_queue->isEmpty() ) {
00063       sched_yield();
00064     }
00065 
00066     //If the there window size is 0, then wait till it get's bigger
00067     while( option.windowsizeLeft < 1  )
00068     {
00069        sched_yield();             
00070     }    
00071       
00072     sendData();    
00073     sched_yield();
00074     
00075   }
00076   
00077    printf("Ending Sender...\n");
00078    exit(1);
00079 
00080    fflush( stdout );
00081 }

void TFTP_Sender::sendData   [private]
 

Definition at line 27 of file TFTP_Sender.cpp.

Referenced by run().

00028 {
00029     option.rwlock5_data_queue.read();
00030     packet = option.data_queue->dequeue();
00031     option.rwlock5_data_queue.releaseRead();
00032 
00033     packet->send();
00034 
00035     option.rwlock6_wait_queue.write();
00036     packet->setTimeStamp( option.currentTime + timeout );
00037 
00038     // First time sent.
00039     packet->resent = 0;
00040     //printf("The windowsizeLeft is %d\n",option.windowsizeLeft);
00041     option.rwlock1_global.write();
00042     option.windowsizeLeft--;
00043     option.rwlock1_global.releaseWrite();
00044 
00045     option.waitingAck_queue->enqueue( packet );
00046     option.rwlock6_wait_queue.releaseWrite();
00047 }


Member Data Documentation

size_t TFTP_Sender::blocksize [private]
 

Definition at line 23 of file TFTP_Sender.hpp.

size_t TFTP_Sender::currentBlockNo [private]
 

Definition at line 26 of file TFTP_Sender.hpp.

size_t TFTP_Sender::currentDataNo [private]
 

Definition at line 25 of file TFTP_Sender.hpp.

TFTP_Packet* TFTP_Sender::packet [private]
 

Definition at line 30 of file TFTP_Sender.hpp.

double TFTP_Sender::timeout [private]
 

Definition at line 28 of file TFTP_Sender.hpp.

size_t TFTP_Sender::windowsize [private]
 

Definition at line 24 of file TFTP_Sender.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