RTPParticipantInfo.cc

Go to the documentation of this file.
00001 /***************************************************************************
00002                           RTPParticipantInfo.cc  -  description
00003                              -------------------
00004     begin                : Wed Oct 24 2001
00005     copyright            : (C) 2001 by Matthias Oppitz
00006     email                : Matthias.Oppitz@gmx.de
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This program is free software; you can redistribute it and/or modify  *
00012  *   it under the terms of the GNU General Public License as published by  *
00013  *   the Free Software Foundation; either version 2 of the License, or     *
00014  *   (at your option) any later version.                                   *
00015  *                                                                         *
00016  ***************************************************************************/
00017 
00023 #include "RTPParticipantInfo.h"
00024 #include "reports.h"
00025 
00026 
00027 Register_Class(RTPParticipantInfo);
00028 
00029 
00030 RTPParticipantInfo::RTPParticipantInfo(uint32 ssrc) : cObject()
00031 {
00032     _sdesChunk = new SDESChunk("SDESChunk", ssrc);
00033     // because there haven't been sent any rtp packets
00034     // by this endsystem at all, the number of silent
00035     // intervals would be undefined; to calculate with
00036     // it but not to regard this endsystem as a sender
00037     // it is set to 3; see isSender() for details
00038     _silentIntervals = 3;
00039     _address = IPAddress::UNSPECIFIED_ADDRESS;
00040     _rtpPort = PORT_UNDEF;
00041     _rtcpPort = PORT_UNDEF;
00042 }
00043 
00044 
00045 RTPParticipantInfo::RTPParticipantInfo(const RTPParticipantInfo& participantInfo) : cObject()
00046 {
00047     operator=(participantInfo);
00048 }
00049 
00050 
00051 RTPParticipantInfo::~RTPParticipantInfo()
00052 {
00053     delete _sdesChunk;
00054 }
00055 
00056 
00057 RTPParticipantInfo& RTPParticipantInfo::operator=(const RTPParticipantInfo& participantInfo)
00058 {
00059     cObject::operator=(participantInfo);
00060     _sdesChunk = new SDESChunk(*(participantInfo._sdesChunk));
00061     _address = participantInfo._address;
00062     _rtpPort = participantInfo._rtpPort;
00063     _rtcpPort = participantInfo._rtcpPort;
00064     return *this;
00065 }
00066 
00067 
00068 RTPParticipantInfo *RTPParticipantInfo::dup() const
00069 {
00070     return new RTPParticipantInfo(*this);
00071 }
00072 
00073 
00074 void RTPParticipantInfo::processRTPPacket(RTPPacket *packet, int id, simtime_t arrivalTime)
00075 {
00076     _silentIntervals = 0;
00077     delete packet;
00078 }
00079 
00080 
00081 void RTPParticipantInfo::processSenderReport(SenderReport *report, simtime_t arrivalTime)
00082 {
00083     // useful code can be found in subclasses
00084     delete report;
00085 }
00086 
00087 
00088 void RTPParticipantInfo::processReceptionReport(ReceptionReport *report, simtime_t arrivalTime)
00089 {
00090     // useful code can be found in subclasses
00091     delete report;
00092 }
00093 
00094 
00095 void RTPParticipantInfo::processSDESChunk(SDESChunk *sdesChunk, simtime_t arrivalTime)
00096 {
00097     for (int i = 0; i < sdesChunk->size(); i++) {
00098         if (sdesChunk->exist(i)) {
00099             SDESItem *sdesItem = (SDESItem *)(sdesChunk->remove(i));
00100             addSDESItem(sdesItem);
00101         }
00102     }
00103     delete sdesChunk;
00104 }
00105 
00106 
00107 SDESChunk *RTPParticipantInfo::getSDESChunk()
00108 {
00109     return new SDESChunk(*_sdesChunk);
00110 }
00111 
00112 
00113 void RTPParticipantInfo::addSDESItem(SDESItem *sdesItem)
00114 {
00115     _sdesChunk->addSDESItem(sdesItem);
00116 }
00117 
00118 
00119 bool RTPParticipantInfo::isSender()
00120 {
00121     return (_silentIntervals <= 1);
00122 }
00123 
00124 
00125 ReceptionReport *RTPParticipantInfo::receptionReport(simtime_t now)
00126 {
00127     return NULL;
00128 }
00129 
00130 
00131 SenderReport *RTPParticipantInfo::senderReport(simtime_t now)
00132 {
00133     return NULL;
00134 }
00135 
00136 
00137 void RTPParticipantInfo::nextInterval(simtime_t now)
00138 {
00139     _silentIntervals++;
00140 }
00141 
00142 
00143 bool RTPParticipantInfo::toBeDeleted(simtime_t now)
00144 {
00145     return false;
00146 }
00147 
00148 
00149 uint32 RTPParticipantInfo::getSSRC()
00150 {
00151     return _sdesChunk->getSSRC();
00152 }
00153 
00154 
00155 void RTPParticipantInfo::setSSRC(uint32 ssrc)
00156 {
00157     _sdesChunk->setSSRC(ssrc);
00158 }
00159 
00160 
00161 void RTPParticipantInfo::addSDESItem(SDESItem::SDES_ITEM_TYPE type, const char *content)
00162 {
00163     _sdesChunk->addSDESItem(new SDESItem(type, content));
00164 }
00165 
00166 
00167 IPAddress RTPParticipantInfo::getAddress()
00168 {
00169     return _address;
00170 }
00171 
00172 
00173 void RTPParticipantInfo::setAddress(IPAddress address)
00174 {
00175     _address = address;
00176 }
00177 
00178 
00179 int RTPParticipantInfo::getRTPPort()
00180 {
00181     return _rtpPort;
00182 }
00183 
00184 
00185 void RTPParticipantInfo::setRTPPort(int rtpPort)
00186 {
00187     _rtpPort = rtpPort;
00188 }
00189 
00190 
00191 int RTPParticipantInfo::getRTCPPort()
00192 {
00193     return _rtcpPort;
00194 }
00195 
00196 
00197 void RTPParticipantInfo::setRTCPPort(int rtcpPort)
00198 {
00199     _rtcpPort = rtcpPort;
00200 }
00201 
00202 
00203 char *RTPParticipantInfo::ssrcToName(uint32 ssrc)
00204 {
00205     char name[9];
00206     sprintf(name, "%08x", ssrc);
00207     return opp_strdup(name);
00208 }
00209 
00210 
00211 void RTPParticipantInfo::dump() const
00212 {
00213     std::cout <<" adress= "<< _address
00214               <<" rtpPort= "<< _rtpPort
00215               <<" rtcpPort= "<< _rtcpPort
00216               << endl;
00217 }