Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages  

SAR.cpp

Go to the documentation of this file.
00001 #include "headers.h"
00002 
00012 
00018 SAR::SAR(PacketWriter* packetWriter, int serviceNumber)
00019 {       
00020     m_serviceNumber = serviceNumber;
00021     m_packetWriter = packetWriter;
00022     m_receive = new ReceiveWindow(WINDOW_SIZE, this); //(WINDOW_SIZE/2, this);
00023     MEMCHECK(m_receive);
00024     m_send = new SendWindow(WINDOW_SIZE, this); //(WINDOW_SIZE/2, this);
00025     MEMCHECK(m_send);
00026     m_buffer = NULL;
00027 } // constructor
00028 
00029 
00033 SAR::~SAR()
00034 {
00035     // must call this first due to the threads within the send and recv windows
00036     connectionClosed();
00037     delete m_receive;
00038         m_receive = NULL;
00039     delete m_send;
00040         m_send = NULL;
00041 } // destructor
00042 
00043 
00049 int 
00050 SAR::reliableSend(u_char* data, int dataLength)
00051 {
00052     // send all the data 
00053     int bytesSent = m_send->reliableSend(data, dataLength);
00054 
00055     return bytesSent;
00056 } // fn segment
00057 
00058 
00070 int
00071 SAR::receive(u_char* buffer, int bufferLength) {
00072     return m_receive->receive(buffer, bufferLength);
00073 } // fn receive
00074 
00075 
00081 void 
00082 SAR::receivePacket(TpPacket* packet)
00083 {
00084     if (packet->isAck())
00085     {
00086         // if its an ack, give it to the send window
00087         debug(DEBUG_SAR, "receivePacket: Got ACK %d", packet->getAckNum());
00088         m_send->onAckRecvd(packet->getAckNum(), packet->getCredits(), packet->isRetrans());
00089         delete packet;
00090     }
00091     else
00092     {
00093         // if it is data, give it to the receive window
00094         debug(DEBUG_SAR, "receivePacket: Got data");
00095         m_receive->addReceive(packet);
00096     }
00097 } // fn receivePacket
00098 
00099 
00104 int 
00105 SAR::sendDataPacket(TpPacket* packet)
00106 {
00107     return m_packetWriter->sendDataPacket(m_serviceNumber, packet);
00108 } // fn sendDataPacket
00109 
00110 
00114 TimeValue 
00115 SAR::getAverageRtt() {
00116     return m_send->getRtt();
00117 } // fn getAverageRtt
00118 
00119 
00123 void
00124 SAR::connectionClosed() {
00125     m_send->end();
00126     m_receive->close();
00127 } // fn connectionClosed
00128 
00129 
00130 void
00131 SAR::toStream(std::ostream& s) {
00132     s << "SAR\n";
00133     s << "---\n";
00134     s << "Receive Window:\n";
00135     s << *m_receive;
00136     s << "Send Window:\n";
00137     s << *m_send;
00138 } // fn toStream

Generated at Thu Jul 11 13:31:51 2002 for Peekabooty by doxygen1.2.9 written by Dimitri van Heesch, © 1997-2001