webservices/wsutils/src/sentransportproperties.cpp
changeset 0 62f9d29f7211
child 1 272b002df977
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/wsutils/src/sentransportproperties.cpp	Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,653 @@
+/*
+* 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:         
+*
+*/
+
+
+
+
+
+
+
+
+
+
+
+#include <s32strm.h> // RWriteStream
+#include <SenXmlReader.h>
+#include <SenXmlUtils.h>
+#include <SenTransportProperties.h>
+#include "senpropertiesfragment.h"
+#include "SenBaseAttribute.h"
+#include <xml/attribute.h> // From syslibs, needed for RAttributeArray
+
+#include "senlogger.h"
+//#include "senxmldebug.h"
+
+namespace
+    {
+    _LIT8(KCid,"cid");
+    }
+
+EXPORT_C CSenTransportProperties* CSenTransportProperties::NewL()
+    {
+    CSenTransportProperties* pNew = NewLC();
+    CleanupStack::Pop(); // pNew
+    return pNew;
+    }
+
+EXPORT_C CSenTransportProperties* CSenTransportProperties::NewLC()
+    {
+    CSenTransportProperties* pNew = new (ELeave) CSenTransportProperties;
+    CleanupStack::PushL(pNew);
+
+    // omit parsing by passing zero-length descriptor
+    pNew->BaseConstructL(KSenXmlPropertiesLocalname,
+                         KNullDesC8,
+                         NULL);
+    return pNew;
+    }
+
+EXPORT_C CSenTransportProperties* CSenTransportProperties::NewL(const TDesC8& aXmlUtf8,
+                                                               CSenXmlReader& aParser)
+    {
+    CSenTransportProperties* pNew = NewLC(aXmlUtf8, aParser);
+    CleanupStack::Pop(); // pNew
+    return pNew;
+    }
+
+EXPORT_C CSenTransportProperties* CSenTransportProperties::NewLC(const TDesC8& aXmlUtf8,
+                                                                CSenXmlReader& aParser)
+    {
+    CSenTransportProperties* pNew = new (ELeave) CSenTransportProperties;
+    CleanupStack::PushL(pNew);
+
+    // parse the XML document  descriptor into DOM fragment
+    pNew->BaseConstructL(KSenXmlPropertiesLocalname,
+                         aXmlUtf8,
+                         &aParser);
+    return pNew;
+    }
+
+EXPORT_C CSenTransportProperties* CSenTransportProperties::NewL(const CSenElement& aElement)
+    {
+    CSenTransportProperties* pNew = NewLC(aElement);
+    CleanupStack::Pop(); // pNew
+    return pNew;
+    }
+
+EXPORT_C CSenTransportProperties* CSenTransportProperties::NewLC(const CSenElement& aElement)
+    {
+    CSenTransportProperties* pNew = new (ELeave) CSenTransportProperties;
+    CleanupStack::PushL(pNew);
+
+    // parse the XML document  descriptor into DOM fragment
+    pNew->BaseConstructL(aElement);
+    return pNew;
+    }
+    
+EXPORT_C void CSenTransportProperties::SetReader(CSenXmlReader& aReader)
+    {
+    CSenXmlProperties::SetReader(aReader);
+    }      
+
+EXPORT_C MSenProperties::TSenPropertiesClassType CSenTransportProperties::PropertiesClassType() 
+    {
+    return ESenTransportProperties;
+    }
+
+EXPORT_C void CSenTransportProperties::WriteToL(RWriteStream& aWriteStream)
+    {
+    CSenXmlProperties::WriteToL(aWriteStream);
+    }
+    
+EXPORT_C void CSenTransportProperties::ReadFromL(const TDesC8& aBuffer)
+    {
+    CSenXmlProperties::ReadFromL(aBuffer);
+    }    
+
+EXPORT_C HBufC8* CSenTransportProperties::AsUtf8L()
+    {
+    return CSenXmlProperties::AsUtf8L();
+    }
+
+EXPORT_C HBufC8* CSenTransportProperties::AsUtf8LC()
+    {
+    return CSenXmlProperties::AsUtf8LC();
+    }
+    
+EXPORT_C TBool CSenTransportProperties::IsSafeToCast(TSenPropertiesClassType aClass)
+    {
+    if ( aClass == MSenProperties::ESenTransportProperties )
+        {
+        return ETrue;
+        }
+    else
+        {
+        return CSenXmlProperties::IsSafeToCast(aClass);
+        }
+    }      
+    
+EXPORT_C TInt CSenTransportProperties::SetPropertyL(const TDesC8& aName,
+                                                       const TDesC8& aValue)
+    {
+    return CSenXmlProperties::SetPropertyL(aName, aValue);
+    }
+    
+EXPORT_C TInt CSenTransportProperties::PropertyL(const TDesC8& aName,
+                                                   TPtrC8& aValue)
+    {
+    return CSenXmlProperties::PropertyL(aName, aValue);
+    }
+    
+EXPORT_C TInt CSenTransportProperties::SetIntPropertyL(const TDesC8& aName,
+                                                       const TInt aValue)
+    {
+    return CSenXmlProperties::SetIntPropertyL(aName, aValue);
+    }
+
+EXPORT_C TInt CSenTransportProperties::IntPropertyL(const TDesC8& aName,
+                                                    TInt& aValue)
+    {
+    return CSenXmlProperties::IntPropertyL(aName, aValue);
+    }
+
+EXPORT_C TInt CSenTransportProperties::SetBoolPropertyL(const TDesC8& aName,
+                                                        const TBool aValue)
+    {
+    return CSenXmlProperties::SetBoolPropertyL(aName, aValue);
+    }
+
+EXPORT_C TInt CSenTransportProperties::BoolPropertyL(const TDesC8& aName,
+                                                     TBool& aValue)
+    {
+    return CSenXmlProperties::BoolPropertyL(aName, aValue);
+    }
+EXPORT_C TInt CSenTransportProperties::SetOmittedL(const TDesC8& aName, TBool aValue)
+    {
+    return CSenXmlProperties::SetOmittedL(aName, aValue);
+    }
+
+EXPORT_C TInt CSenTransportProperties::RemovePropertyL(const TDesC8& aName)
+    {
+    return CSenXmlProperties::RemovePropertyL(aName);
+    }
+
+
+EXPORT_C CSenTransportProperties::~CSenTransportProperties()
+    {
+    }
+
+EXPORT_C void CSenTransportProperties::BaseConstructL(const TDesC8& aLocalname, 
+                                                 const TDesC8& aXml,
+                                                 CSenXmlReader* aParser)
+    {
+    CSenXmlProperties::BaseConstructL(aLocalname, aXml, aParser);
+    }
+
+EXPORT_C void CSenTransportProperties::BaseConstructL(const TDesC8& aNamespace, 
+                                                 const TDesC8& aLocalname, 
+                                                 const TDesC8& aXml,
+                                                 CSenXmlReader* aParser)
+    {
+    CSenXmlProperties::BaseConstructL(aNamespace, aLocalname, aXml, aParser);
+    }
+
+void CSenTransportProperties::BaseConstructL(const TDesC8& aNamespace, 
+                                                 const TDesC8& aLocalname, 
+                                                 const TDesC8& aQualifiedName, 
+                                                 const TDesC8& aXml,
+                                                 CSenXmlReader* aParser)
+    {
+    CSenXmlProperties::BaseConstructL(aNamespace, aLocalname, aQualifiedName, aXml, aParser);
+    }
+
+EXPORT_C void CSenTransportProperties::BaseConstructL(const CSenElement& aElement)
+    {
+    CSenXmlProperties::BaseConstructL(aElement);
+    }
+
+EXPORT_C CSenTransportProperties::CSenTransportProperties()
+: iFileAttachmentNum(0)
+    {
+    }
+    
+EXPORT_C TInt CSenTransportProperties::SetPropertyL(const TDesC8& aName,
+                                                    const TDesC8& aValue,
+                                                    const TDesC8& aType)
+    {
+    return CSenXmlProperties::SetPropertyL(aName, aValue, aType);
+    }
+
+EXPORT_C TInt CSenTransportProperties::PropertyL(const TDesC8& aName,
+                                                    TPtrC8& aValue,
+                                                    TPtrC8& aType)
+    {
+    return CSenXmlProperties::PropertyL(aName, aValue, aType);
+    }
+//common properties
+EXPORT_C TInt CSenTransportProperties::IapIdL(TUint32& aCurrentIapId)
+    {
+    TPtrC8 value;
+    TInt retVal = PropertyL(KIapIdLocalName, value);
+    
+    if ( retVal == KErrNone )
+        {
+        TLex8 lex(value);
+        retVal = lex.Val(aCurrentIapId, EDecimal);
+        }
+        
+    if(aCurrentIapId > 0) return retVal;
+    else return KErrNotFound;
+    }
+
+EXPORT_C void CSenTransportProperties::SetIapIdL(TUint32 aIapId)
+    {
+    TBuf8<128> buf;
+    buf.AppendFormat(_L8("%u"), aIapId);
+    SetPropertyL(KIapIdLocalName, buf);
+    }
+
+// Setter for Service Network Access Point (SNAP) ID
+EXPORT_C void CSenTransportProperties::SetSnapIdL(TUint32 aSnapId)
+    {
+	TBuf8<128> buf;
+    buf.AppendFormat(_L8("%u"), aSnapId);
+    SetPropertyL(KSnapIdLocalName, buf);
+    }
+
+// Getter for SNAP ID
+EXPORT_C TInt CSenTransportProperties::SnapIdL(TUint32& aCurrentSnapId)
+    {
+    TPtrC8 value;
+    TInt retVal = PropertyL(KSnapIdLocalName, value);
+    
+    if ( retVal == KErrNone )
+        {
+        TLex8 lex(value);
+        retVal = lex.Val(aCurrentSnapId, EDecimal);
+        }
+        
+    if(aCurrentSnapId > 0) return retVal;
+    else return KErrNotFound;
+    }
+EXPORT_C TInt CSenTransportProperties::ProxyPortL(TInt& aProxyPort)
+    {
+    TPtrC8 value;
+    TInt retVal = PropertyL(KProxyPortLocalName, value);
+    if ( retVal == KErrNone )
+        {
+        TLex8 lex(value);
+        TUint proxyPort;
+        retVal = lex.Val(proxyPort, EDecimal);
+        if ( retVal == KErrNone )
+            {
+            aProxyPort = proxyPort;
+            }
+        }
+
+    return retVal;
+    }
+
+EXPORT_C void CSenTransportProperties::SetProxyPortL(TInt aProxyPort)
+    {
+    SetIntPropertyL(KProxyPortLocalName, aProxyPort);
+    }
+
+EXPORT_C TInt CSenTransportProperties::ProxyHostL(TPtrC8& aProxyHost)
+    {
+    return PropertyL(KProxyHostLocalName, aProxyHost);
+    }
+
+EXPORT_C void CSenTransportProperties::SetProxyHostL(const TDesC8& aProxyHost)
+    {
+    SetPropertyL(KProxyHostLocalName, aProxyHost);
+    }
+
+EXPORT_C TInt CSenTransportProperties::ProxyUsageL(TBool& aValue)
+    {
+    return BoolPropertyL(KProxyUsageLocalName, aValue);
+    }
+
+EXPORT_C void CSenTransportProperties::SetProxyUsageL(TBool aProxyUsage)
+    {
+    SetBoolPropertyL(KProxyUsageLocalName, aProxyUsage);
+    }
+    
+EXPORT_C TInt CSenTransportProperties::SecureDialogL(TBool& aValue)
+    {
+    return BoolPropertyL(KSecureDialogLocalName, aValue);
+    }
+
+EXPORT_C void CSenTransportProperties::SetSecureDialogL(TBool aSecureDialog)
+    {
+    SetBoolPropertyL(KSecureDialogLocalName, aSecureDialog);
+    }
+/*
+EXPORT_C TInt CSenTransportProperties::IAPDialogL(TBool& aValue)
+    {
+    return BoolPropertyL(KSenIAPDoNotPrompt, aValue);
+    }
+
+EXPORT_C void CSenTransportProperties::SetIapDialogL(TBool aIapDialog)
+    {
+    SetBoolPropertyL(KSenIAPDoNotPrompt, aIapDialog);
+    }
+*/
+EXPORT_C TInt CSenTransportProperties::UserAgentL(TPtrC8& aUserAgent)
+    {
+    return PropertyL(KUserAgentLocalName, aUserAgent);
+    }
+
+EXPORT_C void CSenTransportProperties::SetUserAgentL(const TDesC8& aUserAgent)
+    {
+    SetPropertyL(KUserAgentLocalName, aUserAgent);
+    }
+
+EXPORT_C TInt CSenTransportProperties::DeviceIDL(TPtrC8& aDeviceID)
+    {
+    return PropertyL(KDeviceIDLocalName, aDeviceID);
+    }
+
+EXPORT_C void CSenTransportProperties::SetDeviceIDL(const TDesC8& aDeviceID)
+    {
+    SetPropertyL(KDeviceIDLocalName, aDeviceID);
+    }    
+
+EXPORT_C TInt CSenTransportProperties::SoapActionL(TPtrC8& aAction)
+    {
+    return PropertyL(KSoapActionLocalName, aAction);
+    }
+
+EXPORT_C void CSenTransportProperties::SetSoapActionL(const TDesC8& aAction)
+    {
+    SetPropertyL(KSoapActionLocalName, aAction);
+    }    
+
+EXPORT_C void CSenTransportProperties::ApplyBindingL(TSOAPVersion /*aSoapVersion*/)
+    {
+    }
+
+EXPORT_C TInt CSenTransportProperties::DownloadFolderL(TPtrC8& aDownloadFolder)
+    {
+    return PropertyL(KDownloadFolderLocalName, aDownloadFolder);
+    }
+EXPORT_C void CSenTransportProperties::SetDownloadFolderL(const TDesC8& aDownloadFolder)
+    {
+    SetPropertyL(KDownloadFolderLocalName, aDownloadFolder);
+    }
+
+EXPORT_C TInt CSenTransportProperties::FileAttachmentL(const TDesC8& aCid, HBufC8*& aFileName)
+    {
+    TLSLOG_L(KSenUtilsLogChannel, KMinLogLevel, "CSenTransportProperties::FileAttachmentL:");
+    TLSLOG_FORMAT((KSenUtilsLogChannel, KMinLogLevel, _L8("- CID: '%S'"), &aCid));        
+    
+//    _LIT8(KAttachment, "Attachment");
+    TPtrC8 pFileAttachments;
+    TInt retVal( KErrNotFound );
+    retVal = PropertyL( KFileAttachmentsLocalName, pFileAttachments );    
+    if ( retVal == KErrNone )
+        {
+        CSenXmlReader* reader = CSenXmlReader::NewL(KXmlParserMimeType); // use libxml2 sax parser
+        CleanupStack::PushL( reader );
+        CSenDomFragment* pFragment = CSenDomFragment::NewL();
+        CleanupStack::PushL( pFragment );
+        pFragment->SetReader( *reader );    
+        pFragment->BuildFrom( pFileAttachments );  
+        
+        if (aFileName)
+            {
+            delete aFileName;
+            aFileName = NULL;
+            }
+        
+        RPointerArray<CSenElement>& elements = pFragment->AsElement().ElementsL();
+        TInt count(elements.Count());
+        for ( TInt i=0; i<count && !aFileName; i++ )
+            {
+            CSenElement* pElement = elements[i];
+            TLSLOG_FORMAT((KSenUtilsLogChannel, KNormalLogLevel, _L8("- Processing file attachment element: '%S'"), &pElement->LocalName()));        
+
+            RPointerArray<CSenBaseAttribute>& attributes = pElement->AttributesL();
+            TInt attrCount(attributes.Count());
+            for ( TInt j=0; j<attrCount; j++ )            
+                {
+                TPtrC8 name = attributes[j]->Name();
+                TPtrC8 value = attributes[j]->Value();
+
+                TLSLOG_FORMAT((KSenUtilsLogChannel, KNormalLogLevel, _L8("- Processing file attachment attribute, name: '%S', value: '%S'"), &name, &value));        
+                if ( name == KCid && value == aCid )
+                    {
+                    TLSLOG_L(KSenUtilsLogChannel, KNormalLogLevel, "- Filename for CID found.");
+                    aFileName = HBufC8::NewL( pElement->Content().Length() );
+                    TPtr8 aFileNameDes = aFileName->Des();                
+                    aFileNameDes.Append( pElement->Content() );
+                    retVal = KErrNone;
+                    break; // no need to check rest of the attributes
+                    }
+                }
+                // if ( aFileName ) break; // no need to check rest of the child elements
+            }
+            
+        CleanupStack::PopAndDestroy(pFragment);
+        CleanupStack::PopAndDestroy(reader);
+        }
+    return retVal;
+        /*
+        HBufC8* pLocalName = HBufC8::NewLC(KAttachment().Length()+aCid.Length());
+        TPtr8 localNameDes = pLocalName->Des();
+        localNameDes.Append(KAttachment);
+        localNameDes.Append(aCid);
+        CSenElement* pElement = pFragment->AsElement().Element(*pLocalName);
+        if(pElement)
+            {
+            if (aFileName)
+                {
+                delete aFileName;
+                aFileName = NULL;
+                }
+            aFileName = HBufC8::NewL(pElement->Content().Length());
+            TPtr8 aFileNameDes = aFileName->Des();                
+            aFileNameDes.Append(pElement->Content());
+            CleanupStack::PopAndDestroy(pLocalName);
+            CleanupStack::PopAndDestroy(pFragment);
+            CleanupStack::PopAndDestroy(reader);
+            return KErrNone;
+            }
+        else
+            {
+            CleanupStack::PopAndDestroy(pLocalName);
+            CleanupStack::PopAndDestroy(pFragment);
+            CleanupStack::PopAndDestroy(reader);
+            return KErrNotFound;
+            }
+        }
+            
+        */            
+    }
+
+EXPORT_C TInt CSenTransportProperties::SetFileAttachmentL(const TDesC8& aCid, const TDesC8& aFileName)
+    {
+    TLSLOG_L(KSenUtilsLogChannel, KMinLogLevel, "CSenTransportProperties::SetFileAttachmentL:");
+    TLSLOG_FORMAT((KSenUtilsLogChannel, KMinLogLevel, _L8("- CID: '%S'"), &aCid));        
+    
+    TBuf<32> num;
+    num.AppendNum( iFileAttachmentNum );
+
+    _LIT8(KAttachments,"Attachments");
+    _LIT8(KAttachment,"Attachment");
+    TPtrC8 pFileAttachments;
+    TInt err(KErrNone);
+    err = PropertyL(KFileAttachmentsLocalName, pFileAttachments);
+    if (err != KErrNotFound)
+        {
+        // Add to existing <Attachements/> fragment:
+        CSenXmlReader* reader = CSenXmlReader::NewL(KXmlParserMimeType); // use libxml2 sax parser
+        CleanupStack::PushL(reader);
+        CSenDomFragment* pFragment = CSenDomFragment::NewL();
+        CleanupStack::PushL(pFragment);
+        pFragment->SetReader(*reader);    
+        pFragment->BuildFrom(pFileAttachments);  
+        
+        // --- //
+        HBufC8* pLocalName = HBufC8::NewLC( KAttachment().Length() + num.Length() );
+        TPtr8 localNameDes = pLocalName->Des();
+        localNameDes.Append( KAttachment );
+        localNameDes.Append( num );
+        CSenElement* pElement = pFragment->AsElement().Element(*pLocalName);
+        if (pElement)  
+            {
+            CleanupStack::PopAndDestroy(pLocalName);
+            CleanupStack::PopAndDestroy(pFragment);
+            CleanupStack::PopAndDestroy(reader);
+            return KErrAlreadyExists; 
+            }
+        else
+            {
+            CSenElement& pElement = pFragment->AsElement().AddElementL(*pLocalName);
+            pElement.SetContentL(aFileName);
+            SenXmlUtils::AddAttributeL(pElement, KCid, aCid );	//CodeScannerWarnings
+            HBufC8* pFragmentAsXml = pFragment->AsXmlL();
+            CleanupStack::PushL(pFragmentAsXml);
+            SetPropertyL( KFileAttachmentsLocalName, *pFragmentAsXml );
+            CleanupStack::PopAndDestroy( pFragmentAsXml );
+            }
+        CleanupStack::PopAndDestroy(pLocalName);
+        CleanupStack::PopAndDestroy(pFragment);
+        CleanupStack::PopAndDestroy(reader);
+        }
+    else
+        {
+        
+        // Create new <Attachements/> -fragment (container) for fileattachent properties
+        
+        CSenDomFragment* pFragment = CSenDomFragment::NewL( KAttachments );
+        CleanupStack::PushL(pFragment);
+        
+        // --- //        
+        //HBufC8* pLocalName = HBufC8::NewLC(KAttachment().Length()+aCid.Length());
+        HBufC8* pLocalName = HBufC8::NewLC( KAttachment().Length() + num.Length() );
+        TPtr8 localNameDes = pLocalName->Des();
+        localNameDes.Append(KAttachment);
+        localNameDes.Append( num );
+        CSenElement& pElement = pFragment->AsElement().AddElementL(*pLocalName);
+        pElement.SetContentL( aFileName );
+        SenXmlUtils::AddAttributeL(pElement, KCid, aCid );
+        HBufC8* pFragmentAsXml = pFragment->AsXmlL();
+        CleanupStack::PushL(pFragmentAsXml);
+        SetPropertyL( KFileAttachmentsLocalName, *pFragmentAsXml );
+        CleanupStack::PopAndDestroy(pFragmentAsXml);
+        
+        CleanupStack::PopAndDestroy(pLocalName);
+        CleanupStack::PopAndDestroy(pFragment);
+        }  
+        
+    // Increase internal count of file attachements ONLY if method is successful:         
+    iFileAttachmentNum++; 
+    return KErrNone;    
+    }
+    
+   
+EXPORT_C MSenProperties* CSenTransportProperties::CloneL() const
+    {
+    CSenElement& element = ipFragment->AsElement();
+    
+    CSenTransportProperties* pProperties = NewLC(element);
+    CleanupStack::Pop(pProperties);
+    return pProperties;
+    }
+
+EXPORT_C MSenProperties* CSenTransportProperties::Clone(TInt& aOkOrError) const
+    {
+    MSenProperties* pClone = NULL;
+    TRAP( aOkOrError, pClone = CloneL(); )
+    return pClone;
+    }
+        
+EXPORT_C TInt CSenTransportProperties::MwsNamespaceL( TPtrC8& aMwsNamespace )
+    {
+    return PropertyL( KMwsNamespaceLocalName, aMwsNamespace );
+    }
+    
+EXPORT_C void CSenTransportProperties::SetMwsNamespaceL( const TDesC8& aMwsNamespace )
+    {
+    SetPropertyL( KMwsNamespaceLocalName, aMwsNamespace );
+    }
+
+EXPORT_C TInt CSenTransportProperties::MessageIdL( TPtrC8& aMessageId )
+    {
+    return PropertyL( KSenClientGeneratedMessageId, aMessageId );
+    }      
+
+EXPORT_C void CSenTransportProperties::SetMessageIdL( const TDesC8& aMessageId )
+    {
+    SetPropertyL( KSenClientGeneratedMessageId, aMessageId );
+    }      
+
+EXPORT_C TInt CSenTransportProperties::OnewayMessageOnOffL( TBool& aOnewayMessageOnOff )
+    {
+    return BoolPropertyL( KSenOnewayMessageOnOff, aOnewayMessageOnOff );
+    }
+
+EXPORT_C void CSenTransportProperties::SetOnewayMessageOnOffL( TBool aOnewayMessageOnOff )
+    {
+    SetBoolPropertyL( KSenOnewayMessageOnOff, aOnewayMessageOnOff );
+    }
+    
+EXPORT_C TInt CSenTransportProperties::HeartbeatL(TInt& aHeartbeat) 
+    { 
+    return IntPropertyL( KSenConnectionHeartbeat, aHeartbeat ); 
+    }
+    
+EXPORT_C TInt CSenTransportProperties::SetHeartbeatL(TInt aHeartbeat) 
+    { 
+    return SetIntPropertyL( KSenConnectionHeartbeat, aHeartbeat ); 
+    }
+    
+
+EXPORT_C TInt CSenTransportProperties::SetMaxTimeToLiveL(TInt aMaxTTL) 
+    { 
+    return SetIntPropertyL( KSenConnectionHeartbeatMaxTTL, aMaxTTL ); 
+    }
+
+EXPORT_C TInt CSenTransportProperties::MaxTimeToLiveL(TInt& aMaxTTL) 
+    { 
+    return IntPropertyL( KSenConnectionHeartbeatMaxTTL, aMaxTTL ); 
+    }
+
+EXPORT_C TInt CSenTransportProperties::SetMinTimeToLiveL(TInt aMinTTL) 
+    { 
+    return SetIntPropertyL( KSenConnectionHeartbeatMinTTL, aMinTTL ); 
+    }
+
+EXPORT_C TInt CSenTransportProperties::MinTimeToLiveL(TInt& aMinTTL) 
+    { 
+    return IntPropertyL( KSenConnectionHeartbeatMinTTL, aMinTTL ); 
+    }
+
+EXPORT_C TInt CSenTransportProperties::SetEndpointResourceL(const TDesC8& aEndpointResource)
+    {
+    return SetPropertyL(KSenEndpointResource, aEndpointResource);
+    }
+
+EXPORT_C TInt CSenTransportProperties::EndpointResourceL(TPtrC8& aEndpointResource)
+    {
+    return PropertyL(KSenEndpointResource, aEndpointResource);
+    }
+
+
+// END OF FILE
+
+