19 #include <utl/UtlDefs.h> 20 #include <utl/UtlSListIterator.h> 21 #include <os/OsSocket.h> 22 #include <os/OsNatConnectionSocket.h> 24 #include <sdp/SdpMediaLine.h> 27 #include <sdp/SdpCodec.h> 30 #define SDP_AUDIO_MEDIA_TYPE "audio" 31 #define SDP_VIDEO_MEDIA_TYPE "video" 32 #define SDP_APPLICATION_MEDIA_TYPE "application" 35 #define AES_CM_128_HMAC_SHA1_80 1 36 #define AES_CM_128_HMAC_SHA1_32 2 37 #define F8_128_HMAC_SHA1_80 3 39 #define SRTP_ENCRYPTION 0x0001 40 #define SRTP_AUTHENTICATION 0x0002 41 #define SRTP_SEND 0x0004 42 #define SRTP_RECEIVE 0x0008 44 #define SRTP_ON (SRTP_ENCRYPTION|SRTP_AUTHENTICATION|SRTP_SEND|SRTP_RECEIVE) 45 #define SRTP_SECURITY_MASK (SRTP_ENCRYPTION|SRTP_AUTHENTICATION) 47 #define SRTP_KEY_LENGTH 30 53 #define SDP_CONTENT_TYPE "application/sdp" 107 SdpBody(
const char* bytes = NULL,
127 virtual int getLength()
const;
131 virtual void getBytes(
const char** bytes,
136 virtual void getBytes(UtlString* bytes,
150 void setStandardHeaderFields(
const char* sessionName,
151 const char* emailAddress,
152 const char* phoneNumber,
153 const char* originatorAddress
157 void setSessionNameField(
const char* sessionName);
159 void setOriginator(
const char* userId,
167 void setEmailAddressField(
const char* emailAddress);
169 void setPhoneNumberField(
const char* phoneNumber);
172 void addEpochTime(
unsigned long epochStartTime,
173 unsigned long epochEndTime = 0
177 void addNtpTime(
unsigned long ntpStartTime,
178 unsigned long ntpEndTime = 0
182 UtlBoolean getMediaStreamDirection(
int mediaIndex,
183 SessionDirection& direction)
const;
186 void setRtpTcpRole(RtpTcpRoles role);
187 UtlString getRtpTcpRole()
const;
199 void addCodecsOffer(
int iNumAddresses,
201 const UtlString mediaAddresses[],
203 int rtcpAudioPorts[],
205 int rtcpVideoPorts[],
206 RTP_TRANSPORT transportTypes[],
208 SdpCodec* rtpCodecs[],
212 RTP_TRANSPORT transportOffering
221 static void buildMediaLine(SdpMediaLine::SdpMediaType mediaType,
224 UtlString hostAddresses[],
228 SdpCodec* rtpCodecs[],
229 SdpMediaLine& mediaLine);
232 void addCodecsAnswer(
int iNumAddresses,
233 UtlString mediaAddresses[],
235 int rtcpAudioPorts[],
237 int rtcpVideoPorts[],
238 RTP_TRANSPORT transportTypes[],
240 SdpCodec* rtpCodecs[],
252 void addMediaLinesAnswer(
int numMediaLines,
const SdpMediaLine* mediaLines[],
const SdpBody& offer);
255 void addMediaData(
const char* mediaType,
258 const char* mediaTransportType,
267 void addCodecParameters(
int numRtpCodecs,
268 SdpCodec* rtpCodecs[],
269 const char* szMimeType =
"audio" 273 void addConnectionAddress(
const char* ipAddress
281 void addConnectionAddress(
const char* networkType,
282 const char* addressType,
283 const char* ipAddress
287 void setConnectionAddress(
const char* ipAddress
294 void setConnectionAddress(
const char* networkType,
295 const char* addressType,
296 const char* ipAddress
299 void addRtpmap(
int payloadType,
300 const char* mimeSubtype,
307 void addFormatParameters(
int payloadType,
308 const char* formatParameters
312 void addPtime(
int pTime);
317 void addCandidateAttribute(
int candidateId,
318 const char* transportId,
319 const char* transportType,
321 const char* candidateIp,
334 int getMediaSetCount()
const;
338 int findMediaType(
const char* mediaType,
339 int startMediaIndex = 0
348 UtlBoolean getMediaData(
int mediaIndex,
350 UtlString* mediaType,
353 UtlString* mediaTransportType,
355 int* numPayloadTypes,
356 int payloadTypes[])
const;
360 const bool isTransportAvailable(
const OsSocket::IpProtocolSocketType protocol,
364 UtlBoolean getMediaNetworkType(
int mediaIndex,
365 UtlString* networkType)
const;
368 UtlBoolean getMediaAddress(
int mediaIndex,
369 UtlString* address)
const;
372 UtlBoolean getMediaType(
int mediaIndex,
377 UtlBoolean getMediaPort(
int mediaIndex,
381 UtlBoolean getMediaRtcpPort(
int mediaIndex,
385 UtlBoolean getMediaPortCount(
int mediaIndex,
386 int* numPorts)
const;
393 UtlBoolean getMediaProtocol(
int mediaIndex,
395 UtlString* transportProtocol
399 UtlBoolean getMediaPayloadType(
int mediaIndex,
406 UtlBoolean getPtime(
int mediaIndex,
int& ptime)
const;
409 UtlBoolean getMediaSubfield(
int mediaIndex,
415 UtlBoolean getPayloadRtpMap(
int mediaIndex,
417 UtlString& mimeSubtype,
423 UtlBoolean getPayloadFormat(
int mediaIndex,
425 UtlString& fmtp)
const;
431 UtlBoolean getSrtpCryptoField(
int mediaIndex,
436 UtlBoolean getControlTrackId(
int mediaLineIndex, UtlString& trackId)
const;
439 UtlBoolean getFramerateField(
int mediaIndex,
440 int& videoFramerate)
const;
442 UtlBoolean getBandwidthField(
int& bandwidth)
const;
451 void getBestAudioCodecs(
int numRtpCodecs,
453 SdpCodec rtpCodecs[],
454 UtlString* rtpAddress,
457 int* receiveCodecIndex)
const;
463 void getBestAudioCodecs(SdpCodecList& localRtpCodecs,
464 int& numCodecsInCommon,
465 SdpCodec**& commonCodecsForEncoder,
467 UtlString& rtpAddress,
475 int& matchingBandwidth,
476 int localVideoFramerate,
477 int& matchingVideoFramerate)
const;
482 void getCodecsInCommon(
int audioMediaSetIndex,
483 int videoMediaSetIndex,
484 int audioPayloadIdCount,
485 int videoPayloadIdCount,
486 int audioPayloadTypes[],
487 int videoPayloadTypes[],
489 SdpCodecList& localRtpCodecs,
490 int& numCodecsInCommon,
491 SdpCodec* commonCodecsForEncoder[],
492 SdpCodec* commonCodecsForDecoder[])
const;
495 int getCodecsInCommon(
const SdpMediaLine& localMediaLine,
496 int remoteMediaLineIndex,
497 SdpMediaLine& remoteMediaLine,
498 SdpCodecList& localDecodeCodecs)
const;
514 UtlBoolean getMediaLine(
int remoteMediaLineIndex, SdpMediaLine& mediaLine,
const SdpCodecList* codecFactory)
const;
517 void addMediaLine(
const SdpMediaLine& mediaLine,
SdpBody& sdpBody);
525 void getBandwidthInCommon(
int localBandwidth,
527 int& commonBandwidth)
const;
530 void getVideoFramerateInCommon(
int localVideoFramerate,
531 int remoteVideoFramerate,
532 int& commonVideoFramerate)
const;
537 UtlBoolean getCandidateAttribute(
int mediaIndex,
540 UtlString& rTransportId,
541 UtlString& rTransportType,
543 UtlString& rCandidateIp,
544 int& rCandidatePort)
const ;
547 UtlBoolean getCandidateAttributes(
const char* szMimeType,
550 UtlString transportIds[],
551 UtlString transportTypes[],
553 UtlString candidateIps[],
554 int candidatePorts[],
555 int& nActualAddresses)
const ;
557 UtlBoolean getCandidateAttributes(
int mediaIndex,
560 UtlString transportIds[],
561 UtlString transportTypes[],
563 UtlString candidateIps[],
564 int candidatePorts[],
565 int& nActualAddresses)
const ;
571 UtlBoolean findValueInField(
const char* pField,
const char* pvalue)
const;
578 friend class SdpBodyTest;
589 int getFieldCount()
const;
593 UtlBoolean getValue(
int fieldIndex,
595 UtlString* value)
const;
603 void setValue(
const char* name,
611 void parseBody(
const char* bytes = NULL,
620 size_t findFirstOf(
const char* headers );
633 bool isOptionalField(
const char* name)
const;
637 void addValue(
const char* name,
638 const char* value = NULL,
645 static NameValuePair* positionFieldInstance(
int fieldInstanceIndex,
646 UtlSListIterator* iter,
648 const char* fieldName
655 static NameValuePair* findFieldNameBefore(UtlSListIterator* iter,
656 const char* targetFieldName,
657 const char* beforeFieldName);
666 #endif // _SdpBody_h_
unsigned char masterKey[SRTP_KEY_LENGTH+1]
Definition: SdpBody.h:60
sipXtapi event declarations
struct SdpSrtpParameters SdpSrtpParameters
SessionDirection
Definition: SdpBody.h:94
Definition: NameValuePair.h:35
SIPX_MEDIA_TYPE
Enumeration of possible media event types.
Definition: sipXtapiEvents.h:660
int cipherType
Definition: SdpBody.h:58
int securityLevel
Definition: SdpBody.h:59
#define SRTP_KEY_LENGTH
Definition: SdpBody.h:47
class to contain an HTTP body
Definition: HttpBody.h:55
Container for MIME type application/sdp.
Definition: SdpBody.h:89