--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/wsdescription/src/senservicepolicy.cpp Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,184 @@
+/*
+* Copyright (c) 2002-2005 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: This class represents the policy information
+*
+*/
+
+
+
+
+
+
+
+
+// INCLUDE FILES
+#include <e32std.h>
+#include <s32strm.h>
+#include "sendebug.h"
+#include "senservicepolicy.h"
+#include "SenXmlElement.h"
+#include "senguidgen.h"
+#include "SenXmlServiceDescription.h"
+#include "senlogger.h"
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+namespace
+ {
+ _LIT8(KServicePolicyLocalName, "ServicePolicy");
+ _LIT8(KSenNsUri, "urn:com.nokia.Sen.config.1.0");
+ _LIT8(KPolicyLocalName, "Policy");
+ _LIT8(KPolicyArrayLocalName, "PolicyArray");
+ _LIT8(KWsPolicyNsUri , "http://schemas.xmlsoap.org/ws/2004/09/policy"); // Namespace of WS-Policy
+ _LIT8(KClientServicePolicyLocalName, "ClientPolicy");
+ }
+
+
+CSenServicePolicy* CSenServicePolicy::NewL()
+ {
+ CSenServicePolicy* pNew = NewLC();
+ CleanupStack::Pop();
+ return(pNew) ;
+ }
+
+CSenServicePolicy* CSenServicePolicy::NewLC()
+ {
+ CSenServicePolicy* pNew = new (ELeave) CSenServicePolicy();
+ CleanupStack::PushL(pNew);
+ pNew->BaseConstructL();
+ return pNew;
+ }
+
+CSenServicePolicy::CSenServicePolicy()
+ {
+ }
+
+CSenServicePolicy::~CSenServicePolicy()
+ {
+ }
+
+void CSenServicePolicy::BaseConstructL()
+ {
+ CServicePolicy::BaseConstructL(KServicePolicyLocalName());
+ }
+
+//Rebuild both client and Service Policy from the given Template
+TInt CSenServicePolicy::RebuildServicePolicyFrom(MSenServicePolicy& aTemplate)
+{
+ TInt retVal(KErrNone);
+ TInt err( KErrNone );
+ // check for possible policies definition
+ CSenServicePolicy* policy = (CSenServicePolicy*)&aTemplate;
+ CSenElement& pServicePolicyElement = policy->AsElement();
+ CSenElement* copy = NULL;
+ TRAP( err, copy = CSenXmlElement::NewL(KServicePolicyLocalName); )
+ if( !copy )
+ {
+ return KErrNoMemory;
+ }
+ else if( !err )
+ {
+ TRAP( err, copy->CopyFromL( pServicePolicyElement ); )
+ if( !err )
+ {
+#ifdef _SENDEBUG
+ { // parenthesis -pair added to avoid local variable visibility scope collision
+ TLSLOG_L(KSenServConnLogChannelBase,KMaxLogLevel,"TInt CSenServicePolicy::RebuildServicePolicyFrom POLICY");
+ TLSLOG_L(KSenServConnLogChannelBase,KMaxLogLevel,"-----------COPY----------------------------------------");
+ TLSLOG_L(KSenServConnLogChannelBase,KMaxLogLevel,"-------------------------------------------------------");
+ TLSLOG_L(KSenServConnLogChannelBase,KMaxLogLevel,"-------------------------------------------------------");
+ HBufC8* pXml = NULL;
+ TRAP_IGNORE
+ (
+ pXml = copy->AsXmlL();
+ if( pXml )
+ {
+ TLSLOG_ALL(KSenServConnLogChannelBase,KMaxLogLevel,( *pXml ));
+ }
+ )
+ delete pXml;
+ }
+#endif // _SENDEBUG
+ // UpdateClientPolicy
+ CSenElement* pClientPolicy = copy->Element( KClientServicePolicyLocalName );
+ if(!pClientPolicy)
+ {
+ pClientPolicy = copy->Element( KSenNsUri, KClientServicePolicyLocalName );
+ }
+ if( pClientPolicy )
+ {
+ TRAP( err, retVal = AddClientPolicyL( pClientPolicy ); )
+ //if( err )
+ // {
+ // retVal = err;
+ // }
+ }
+
+ // UpdateServicePolicyArray
+ CSenElement* pPolicyArray = copy->Element( KPolicyArrayLocalName );
+ if(!pPolicyArray)
+ {
+ pPolicyArray = copy->Element( KSenNsUri, KPolicyArrayLocalName );
+ }
+
+ if(!pPolicyArray)
+ {
+ pPolicyArray = copy->Element( KNullDesC8, KPolicyArrayLocalName );
+ }
+
+ if(pPolicyArray)
+ {
+ RPointerArray<CSenElement> elements;
+ TRAP( err, pPolicyArray->ElementsL( elements, KWsPolicyNsUri, KPolicyLocalName ); )
+ // -- CleanupClosePushL(elements); // not needed, since array is living in non-leaving code
+ if( !err )
+ {
+ TInt count = elements.Count();
+ CSenElement* pPolicy = NULL;
+ for( TInt i = 0; i < count; i++ )
+ {
+ pPolicy = elements[i];
+ if( pPolicy )
+ {
+ TRAP( err, AddPolicyL( pPolicy ); )
+ }
+ }
+ // -- CleanupStack::PopAndDestroy(&elements);
+ }
+ }
+ }
+ }
+ delete copy;
+ return retVal;
+ }
+
+//Do nuthing
+TBool CSenServicePolicy::Accepts(MSenServicePolicy& aPolicyPattern)
+{
+ return Accepts(aPolicyPattern);
+}
+
+CSenElement* CSenServicePolicy::ClientPolicy()
+{
+ CSenElement* pClientPolicyElement = AsElement().Element(KClientServicePolicyLocalName);
+
+ if(!pClientPolicyElement)
+ {
+ pClientPolicyElement = AsElement().Element(KSenNsUri, KClientServicePolicyLocalName);
+ }
+
+ return pClientPolicyElement;
+}
+
+// End of file