--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/mmcesrv/mmcemediamanager/inc/mcesdpcodec.h Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,331 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+
+
+
+#ifndef CMESDPCODEC_H
+#define CMESDPCODEC_H
+
+// INCLUDES
+#include <e32base.h>
+#include <stringpool.h>
+#include <sdpattributefield.h>
+#include <sdpbandwidthfield.h>
+#include "mcesip.h"
+#include "mcemmlogs.h"
+
+// FORWARD DECLARATIONS
+class CSdpDocument;
+class CSdpMediaField;
+class CMceComSession;
+class CMceComMediaStream;
+class CSdpMediaField;
+class CSdpFmtAttributeField;
+
+
+
+#define SDP_STRING( stringIndex )\
+ iStringPool.StringF( stringIndex, *iStringTable )
+
+
+
+/**
+* Class for encoding and decoding media lines and creating server streams
+*
+*/
+class CMceSdpCodec : public CBase
+ {
+
+ public:
+
+ /**
+ * destructor
+ */
+ ~CMceSdpCodec();
+
+ /**
+ * returns media(line) which is supported by this SDP codec
+ * @return media(line) which is supported by this SDP codec
+ */
+ RStringF Media();
+
+ /**
+ * returns ETrue, if media is decoded by this codec
+ * @return ETrue, if media is decoded by this codec
+ */
+ virtual TBool Decodes( const CSdpMediaField& aMedia ) const;
+
+ /**
+ * Adds capability
+ * @param aCapability capability
+ */
+ void AddCapabilityL( const TDesC8& aCapability );
+
+ /**
+ * Adds capability payload type
+ * @param aPayloadType capability payload type
+ */
+ void AddCapabilityPayloadTypeL( const TUint aPayloadType );
+
+ /**
+ * Returns ETrue, if capability is supported
+ * @param aCapability capability
+ * @return ETrue, if capability is supported
+ */
+ TBool IsSupported( const TDesC8& aCapability ) const;
+
+ /**
+ * Returns ETrue, if payload is supported
+ * @param aSdpName SDP name
+ * @param aPayload payload of codec
+ * @return ETrue, if payload is supported
+ */
+ TBool IsPayloadTypeSupported( const TDesC8& aCapability, const TUint aPayloadType ) const;
+
+public: //abstract interface
+
+ /**
+ * Returns ETrue, if media is encoded by this codec
+ * @return ETrue, if media is encoded by this codec
+ */
+ virtual TBool Encodes( const CMceComMediaStream& aStream ) const = 0;
+
+ /**
+ * Encodes a media line.
+ * @param aStream media stream
+ * @param aMediaLine media line
+ * @param aSdpDocument sdp document
+ * @leave system wide error
+ */
+ virtual void EncodeMediaOfferL( CMceComMediaStream& aStream,
+ CSdpMediaField& aMediaLine,
+ CSdpDocument& aSdpDocument ) = 0;
+
+ /**
+ * Decodes the media answer.
+ * @param aStream media stream
+ * @param aSdpDocument sdp document
+ * @return warning if any
+ * @leave system wide error
+ */
+ virtual TMceSipWarningCode DecodeMediaAnswerL( CSdpMediaField& aMediaLine,
+ CMceComMediaStream& aStream,
+ CSdpDocument& aSdpDocument ) = 0;
+
+ /**
+ * Decodes media offer and creates media stream. The stream is appended
+ * into the media session, if aStream is NULL
+ * @param aMediaLine media line
+ * @param aStream stream added to session
+ * @param aSession media session
+ * @param aSdpDocument sdp document
+ * @param aStream stream to updated, if any
+ * @return warning if any
+ * @leave system wide error
+ */
+ virtual TMceSipWarningCode DecodeMediaOfferL( CSdpMediaField& aMediaLine,
+ CMceComMediaStream*& aStream,
+ CMceComSession& aSession,
+ CSdpDocument& aSdpDocument ) = 0;
+
+ /**
+ * Decodes media update by updating media stream
+ * @param aMediaLine media line
+ * @param aStream stream to be updated
+ * @param aSdpDocument sdp document
+ * @return warning if any
+ * @leave system wide error
+ */
+ virtual TMceSipWarningCode DecodeMediaUpdateL( CSdpMediaField& aMediaLine,
+ CMceComMediaStream& aStream,
+ CSdpDocument& aSdpDocument ) = 0;
+
+
+ /**
+ * Creates a encoded media line based on the offer received earlier.
+ * @param aStream media stream
+ * @param aMediaLine media line
+ * @param aSdpDocument sdp document
+ * @leave system wide error
+ */
+ virtual void EncodeMediaAnswerL( CMceComMediaStream& aStream,
+ CSdpMediaField& aMediaLine,
+ CSdpDocument& aSdpDocument ) = 0;
+
+ /**
+ * Prepares media line before offer/answer will be decoded
+ * @param aMediaLine media line
+ * @param aStream media stream
+ * @leave system wide error
+ */
+ virtual void PrepareForDecodeL( CSdpMediaField& aMediaLine,
+ CMceComMediaStream* aStream ) = 0;
+
+ /**
+ * Clean attributes
+ * @param aMedia Media line
+ */
+ virtual void CleanAttributes( CSdpMediaField& aMedia ) = 0;
+
+
+public: //interface cont
+
+
+ /**
+ * Prepares media line before offer/re-offer will be encoded
+ * @param aStream media stream
+ * @param aMediaLine media line
+ * @leave system wide error
+ */
+ virtual void PrepareForEncodeL( CMceComMediaStream& aStream,
+ CSdpMediaField& aMediaLine );
+
+
+
+ public: //common static like API
+
+ /**
+ * Encodes rtpmap field
+ * @param aPayloadType payload type
+ * @param aEncodingName encoding name
+ * @param aClockRate clock rate
+ * @param aEncodingParam optional encoding paramteter
+ * @return rtpmap
+ * @leave system wide error
+ */
+ CSdpFmtAttributeField* EncodeRtpMapFieldsL( const TUint8 aPayloadType,
+ const TDesC8& aEncodingName,
+ const TUint aClockRate,
+ const TDesC8& aEncodingParam ) const;
+
+ /**
+ * Gets the direction attribute
+ * @param aMedia media line
+ * @param aSessionAttributes session attributes
+ * @return Direction attribute.
+ */
+ TInt Direction( CSdpMediaField& aMedia,
+ RPointerArray<CSdpAttributeField>& aSessionAttributes ) const;
+
+
+
+ /**
+ * Finds attribute from media line
+ * @param aAttribute the attribute as string pool index
+ * @param aMediaLine sdp document
+ * @return attribute or NULL
+ */
+ CSdpAttributeField* FindAttribute( TInt aAttribute,
+ CSdpMediaField& aMediaLine ) const;
+
+ /**
+ * Converts Descriptor into TUint
+ * @param aConv descriptor
+ * @return converted value.
+ */
+ static TUint ConvertDesToUintL( const TDesC8& aConv );
+
+ /**
+ * Converts Descriptor into TInt
+ * @param aConv descriptor
+ * @return converted value.
+ */
+ static TInt ConvertDesToIntL( const TDesC8& aConv );
+
+ /**
+ * Converts TReal to HBuf
+ * @param aConv descriptor
+ * @return converted value.
+ */
+ static HBufC8* ConvertTRealToDesLC( const TReal& aConv );
+
+ /**
+ * Converts Descriptor into TReal
+ * @param aConv descriptor
+ * @return converted value.
+ */
+ static TReal ConvertDesToRealL( const TDesC8& aConv );
+
+
+ /**
+ * Encodes media sdp fields client is willing to insert
+ * @param aClientSdp sdp fields
+ * @param aContainer media line / sdp document
+ */
+ template <class T>
+ static void EncodeClientSdpFieldsL( const CDesC8Array& aClientSdp,
+ T& aContainer )
+ {
+ MCEMM_DEBUG("CMceSdpCodec::EncodeClientSdpFieldsL, Entry" );
+
+ for ( TInt i = 0; i < aClientSdp.Count(); i++ )
+ {
+ MCEMM_DEBUG_SVALUE("adding", aClientSdp.MdcaPoint( i ) );
+ TPtrC8 sdpFieldLine = aClientSdp.MdcaPoint( i );
+ if ( sdpFieldLine.Find( KMceSdpAttributeLineMarker ) == 0 )
+ {
+ CSdpAttributeField* attribute =
+ CSdpAttributeField::DecodeLC( sdpFieldLine );
+ aContainer.AttributeFields().AppendL( attribute );
+ CleanupStack::Pop( attribute );
+ }
+ else if ( sdpFieldLine.Find( KMceSdpBandwidthLineMarker ) == 0 )
+ {
+ CSdpBandwidthField* bandwidth =
+ CSdpBandwidthField::DecodeLC( sdpFieldLine );
+ aContainer.BandwidthFields().AppendL( bandwidth );
+ CleanupStack::Pop( bandwidth );
+ }
+ else
+ {
+ User::Leave( KErrNotSupported );
+ }
+ }
+ MCEMM_DEBUG("CMceSdpCodec::EncodeClientSdpFieldsL, Exit" );
+ }
+
+
+ protected:
+
+
+ CMceSdpCodec( RStringF aMedia );
+ void ConstructL();
+
+ protected://data
+
+ RStringPool iStringPool;
+ const TStringTable* iStringTable;
+
+ private:
+
+ RStringF iMedia;
+ CDesC8Array* iCapabilities;
+ RArray<TUint> iCapabilitiesPT;
+
+
+ friend class UT_CMceSdpCodec;
+ friend class UT_CMceMediaManager;
+ friend class UT_CMceSdpSession;
+
+
+ };
+
+#endif // CMESDPCODEC_H
+
+// End of File