Main Page | Class Hierarchy | Class List | File List | Class Members

SendingPort Class Reference

SendingPort is an subclass of Port for sending purpose. More...

#include <common.h>

Inheritance diagram for SendingPort:

Port List of all members.

Public Member Functions

 SendingPort (char *hostname, short port)
 Another constructor with local address given.
virtual ~SendingPort ()
 Deconstructor.
void init ()
void sendPacket (Packet *pkt)
void setBroadcast ()
void setBroadcastOff ()
virtual void timerHandler ()=0

Public Attributes

TxTimer timer_

Protected Attributes

int bcastflag_
 this flag indicates the port ought to broadcast or unicast a packet.
char * sendingbuf_

Detailed Description

SendingPort is an subclass of Port for sending purpose.

SendingPort is an subclass of Port for sending purpose

Definition at line 307 of file common.h.


Member Function Documentation

void SendingPort::init  )  [virtual]
 

Function to initialize the port

Implements Port.

Definition at line 365 of file common.cpp.

References bcastflag_, Address::getPort(), Address::isSet(), Port::itsaddr_, Port::myaddr_, Port::mySockAddress_, sendingbuf_, Port::setHostname(), Port::setPort(), Port::setSockAddress(), and Port::sockfd_.

00366 {
00367   //"0" shows the sockfd is uninitialized, -1 means error
00368   if (sockfd_ != 0) {
00369     cout << "socket has not been properly initialized!" << endl;
00370     return;
00371   }
00372   if ( myaddr_.isSet() == false) {
00373     setHostname("localhost");
00374     setPort(DEFAULT_SEND_PORT);
00375   }
00376   //check if itsaddr_ is set
00377   if ( itsaddr_.isSet() == false)
00378     throw "Destination address of a sending port is not set!";
00379 
00380   if ((sockfd_ = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
00381     perror("socket");
00382     throw "Error while opening a UDP socket";
00383   }
00384   Address *emptyAddr = new Address("", myaddr_.getPort());
00385   struct sockaddr* addr = setSockAddress(emptyAddr, &mySockAddress_);
00386   if (  bind(sockfd_, addr, sizeof(struct sockaddr_in))  < 0 ){
00387     perror("bind");
00388     throw "Scoket Bind Error";
00389   }
00390    
00391   if (bcastflag_ == 1) 
00392     if (setsockopt(sockfd_,SOL_SOCKET,SO_BROADCAST,&bcastflag_,sizeof(bcastflag_)) == -1   )
00393          {
00394            perror("setsockopt");
00395            throw "Set broadcast option failed.";
00396          }; 
00397 
00398   //create sending buffer
00399   sendingbuf_ = new char[MTU_SIZE+1];
00400   return; 
00401 
00402 }

void SendingPort::sendPacket Packet pkt  ) 
 

Function to send a packet. The default socket file descriptor will always be used for send() only a sockfd used by the port.

Definition at line 409 of file common.cpp.

References Port::dstSockAddress_, Port::getRemoteAddr(), Packet::makePacket(), sendingbuf_, Port::setSockAddress(), and Port::sockfd_.

00410 {  
00411    int pktlen = pkt->makePacket(sendingbuf_); 
00412    Address *dst = getRemoteAddr();
00413    int  length = sizeof(struct sockaddr_in); 
00414    struct sockaddr *dest = setSockAddress(dst, &dstSockAddress_);
00415    int len = sendto(sockfd_, sendingbuf_, pktlen, 0, dest, length); 
00416    if (len == -1) 
00417    { 
00418          perror("send");
00419          throw "Sending Error.";
00420    }
00421 }

void SendingPort::setBroadcast  )  [inline]
 

toggle broadcast option on

Definition at line 328 of file common.h.

References bcastflag_.

00328 {bcastflag_ = 1;}

void SendingPort::setBroadcastOff  )  [inline]
 

toggle broadcast option off

Definition at line 332 of file common.h.

References bcastflag_.

00332 {bcastflag_ = 0;}

virtual void SendingPort::timerHandler  )  [pure virtual]
 

TimerHandler is called when the TxTimer expires. This function is virtual. So another child class has to be derived from this base class to use the timer.

Referenced by TxTimer::timerProc().


Member Data Documentation

int SendingPort::bcastflag_ [protected]
 

this flag indicates the port ought to broadcast or unicast a packet.

If broadcast, an broadcast IP address (192.168.255.255, etc) need to be supplied

Definition at line 346 of file common.h.

Referenced by init(), setBroadcast(), and setBroadcastOff().

char* SendingPort::sendingbuf_ [protected]
 

Sending buffer

Definition at line 350 of file common.h.

Referenced by init(), and sendPacket().

TxTimer SendingPort::timer_
 

The timer used to schedule future events in a sending port. When this timer expires, the timerHandler will be called.

Definition at line 357 of file common.h.


The documentation for this class was generated from the following files:
Generated on Fri Feb 17 17:55:49 2006 for Common_Classes_Projects_ECE544 by  doxygen 1.4.2