00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
#ifndef SDP_MEDIA_DESCRIPTION_H
00025
#define SDP_MEDIA_DESCRIPTION_H
00026
00027
#include <stdlib.h>
00028
#include <vector>
00029
00030
#include "MNString.h"
00031
#include "MNArrayList.h"
00032
#include "MNList.h"
00033
#include "MNValid.h"
00034
#include "GCPtr.h"
00035
#include "sdp/PayloadTypes.h"
00036
#include "sdp/PayloadTypeEntry.h"
00037
00038
namespace SDP
00039 {
00040
00041
00042
00043
00044 enum MNMediaType
00045 {
00046
audio,
00047
video,
00048
application,
00049
data,
00050
control,
00051
INVALIDTYPE
00052 };
00053
00054
00055
00056
00057
00058 enum SessionFieldName
00059 {
00060
Version,
00061
Origin,
00062
SessionName,
00063
Information,
00064
Uri,
00065
Email,
00066
Phone,
00067
00076
A_Range
00077 };
00078
00079
00080
00081
00082
00083 class Bandwidth
00084 {
00085 DECLARE_VALID
00086
private:
00087
static const size_t _default = 150;
00088
00090
char* _s;
00091
00092
unsigned _ok : 1;
00093
unsigned _ct : 1;
00094
unsigned _as : 1;
00095
unsigned _x : 1;
00096 size_t _bw;
00097
00098
public:
00099
Bandwidth( );
00100
Bandwidth(
const char* in );
00101
Bandwidth(
const Bandwidth& orig );
00102
00103
~Bandwidth( );
00104
00105
Bandwidth&
operator=(
const Bandwidth& orig );
00106
00107
void dump( ostream& ostr )
const;
00108
00109 inline const char*
getS()
const {
00110
return _s;
00111 }
00112
00113 inline bool isCT()
const {
00114
return ( _ct == 1 );
00115 }
00116
00117 inline bool isAS()
const {
00118
return ( _as == 1 );
00119 }
00120
00121 inline size_t
getBW()
const {
00122
if( _ok )
return _bw;
00123
else return _default;
00124 }
00125
00126
friend ostream&
operator<<( ostream& ostr,
const Bandwidth& o );
00127
00128
private:
00129
void private_parse( );
00130 };
00131
00132
00133
00134
00135
00136 typedef std::vector<Bandwidth>
Bandwidths;
00137 typedef std::vector<Bandwidth>::iterator
Bandwidth_it;
00138 typedef std::vector<Bandwidth>::const_iterator
Bandwidth_cit;
00139
00140 ostream&
operator<<( ostream& ostr,
const Bandwidths& orig );
00141
00142
00143
00144
00145
00146 struct RangeAttribute
00147 {
00148 size_t
_from_seconds;
00149 size_t
_from_fraction;
00150 size_t
_to_seconds;
00151 size_t
_to_fraction;
00152 };
00153
00154 };
00155
00156 enum MNTransportProtocol
00157 {
00158
RTP_AVP,
00159
UDP,
00160
INVALIDPROT
00161 };
00162
00163 class Formatswitch
00164 {
00165
public:
00166 Formatswitch()
00167 {
00168
Ssrc_old=-1;
00169
Ssrc_new=-1;
00170
Bytepos_old=-1;
00171
Bytepos_new=-1;
00172 }
00173
00174 Formatswitch(
const Formatswitch& orig )
00175 {
00176
Ssrc_old=orig.
Ssrc_old;
00177
Ssrc_new=orig.
Ssrc_new;
00178
Bytepos_old=orig.
Bytepos_old;
00179
Bytepos_new=orig.
Bytepos_new;
00180 }
00181
00182 long Ssrc_old;
00183 long Ssrc_new;
00184 long Bytepos_old;
00185 long Bytepos_new;
00186 };
00187
00188
00189
00190
00191
00192 class SDPMediaDescription
00193 {
00194
00195
00196
00197
public:
00198 class MediaField
00199 {
00200
MNString _s;
00201 SDP::MNMediaType _mediaType;
00202
int _port;
00203
MNTransportProtocol _protocol;
00204
MNString _payloadFormatEntries;
00205
00206 DECLARE_VALID
00207
00208
public:
00209
MediaField(
const MNString& in );
00210
MediaField(
const MediaField& );
00211
00212
~MediaField( );
00213
00214
MediaField&
operator=(
const MediaField& );
00215
00216 inline const MNString&
getField()
const {
00217 CHECK_VALID
00218
return _s;
00219 }
00220
00221 inline SDP::MNMediaType
getMediaType()
const {
00222 CHECK_VALID
00223
return _mediaType;
00224 }
00225
00226 inline int getPort()
const {
00227 CHECK_VALID
00228
return _port;
00229 }
00230
00231 inline MNTransportProtocol getProtocol()
const {
00232 CHECK_VALID
00233
return _protocol;
00234 }
00235
00236 inline const MNString&
getPayloadFormatEntries()
const {
00237 CHECK_VALID
00238
return _payloadFormatEntries;
00239 }
00240
00241
void dump( ostream& ostr )
const;
00242
00243
friend ostream&
operator<<( ostream& ostr,
const MediaField& o );
00244 };
00245
00246 MediaField*
_media_field;
00247
00248 MNString*
_information_field;
00249 MNString*
_connection_field;
00250
00251 SDP::Bandwidths _bandwidths;
00252
00253 MNString*
_key_field;
00254 MNList<MNString>*
_attribute_fields;
00255 SDP::PayloadTypeTable _payloadTypes;
00256 Formatswitch*
_f_switch;
00257 MNString*
_trackIDString;
00258
00259 DECLARE_VALID
00260
00261
public:
00262
00263
SDPMediaDescription();
00264
SDPMediaDescription(
const SDPMediaDescription& orig );
00265
SDPMediaDescription(
const char* media );
00266
virtual ~SDPMediaDescription();
00267
00268
SDPMediaDescription&
operator=(
const SDPMediaDescription& orig );
00269
00270
bool hasMedia() const;
00271
void setMedia( const
MNString& in );
00272
void setMedia( const
char* in );
00273 const
MNString& getMedia() const;
00274 SDP::MNMediaType getMediaType() const;
00275
int getPort() const;
00276 MNTransportProtocol getTransportProtocol() const;
00277 const
MNString& getPayloadFormatEntries() const;
00278
00279
00280
bool hasInformation() const;
00281
void setInformation( const
MNString& in );
00282
void setInformation( const
char* in );
00283 const
MNString& getInformation() const;
00284
00285
bool hasConnection() const;
00286
void setConnection( const
MNString& in );
00287
void setConnection( const
char* in );
00288 const
MNString& getConnection() const;
00289
00290
void addBandwidth( const
char* in );
00291
bool hasASBandwidth() const;
00292 size_t getASBandwidth();
00293
00294
bool hasKey() const;
00295
void setKey( const
MNString& in );
00296
void setKey( const
char* in );
00297 const
MNString& getKey() const;
00298
00299
bool hasAttributes() const;
00300
void insertAttribute( const
MNString& in );
00301
void insertAttribute( const
char* in );
00302
void insertRtpmapAttribute( const
char* in );
00303 const
MNList<
MNString>& getAttributes() const;
00304
bool hasLCRTPAttribute();
00305
00306
00307
00308
00309
00310
int getNbFormats() const;
00311
00312 const SDP::PayloadTypeTable* getPayloadTypes()
const
00313
{
00314 CHECK_VALID
00315
return &
_payloadTypes;
00316 }
00317
00318 inline bool hasFormatswitch()
const
00319
{
00320
return (
_f_switch!=NULL );
00321 }
00322
00323 inline Formatswitch getFormatswitch()
00324 {
00325
return ( *_f_switch );
00326 }
00327
00328 inline bool hasTrackIDString()
const
00329
{
00330
return (
_trackIDString != NULL );
00331 }
00332
00333 inline const MNString&
getTrackIDString()
const
00334
{
00335
return ( *_trackIDString );
00336 }
00337
00338
void dump(
MNString& desc );
00339
00340
MNString toString();
00341
00342
private:
00344
void private_delete_fields( );
00345
00347
void private_clear_fields( );
00348
00350
void private_copy_fields(
const SDPMediaDescription& orig );
00351
00353
00354
00355 };
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367 typedef OS::GCPtr<SDPMediaDescription> MDescPtr;
00368
00369
00370
00371
00372
00373
00374 typedef std::vector<MDescPtr>
MDescList;
00375
00376
#endif
00377