webservices/wscore/inc/sencoreservicemanager.h
changeset 0 62f9d29f7211
child 14 ab1e518f96da
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/wscore/inc/sencoreservicemanager.h	Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,460 @@
+/*
+* 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:    Header declaration
+*
+*/
+
+
+
+
+
+
+
+
+
+
+
+#ifndef SEN_CORE_SERVICE_MANAGER_H
+#define SEN_CORE_SERVICE_MANAGER_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <badesca.h>
+#include <f32file.h>
+#include <imcvcodc.h> // for base64 codec
+#include <flogger.h>
+#include <etelmm.h>
+
+#include <SenXmlReader.h>
+
+#include "senservicemanagerdefines.h"
+#include "msencoreservicemanager.h"
+#include "senxmldao.h"
+#include "msentransport.h"
+
+// CONSTANTS
+#ifdef EKA2 
+
+// Server's policy here
+
+// Total number of ranges
+const TUint KCoreServiceManagerRangeCount = 11;	//CodeScannerWarnings
+
+// Definition of the ranges of IPC numbers
+// NOTE: ranges MUST start from request number 0  (!)
+const TInt coreServiceManagerRanges[KCoreServiceManagerRangeCount] = 
+        {
+        0,  // ESenServInitialize,
+        1,  // ESenServTransaction,
+        2,  // ESenServInstallFramework,
+        3,  // ESenServAssociateService,
+            // ESenServDissociateService, 
+            // ESenServRegisterIdentityProvider,
+            // ESenServUnregisterIdentityProvider,
+            // ESenServRegisterServiceDescription,
+            // ESenServUnregisterServiceDescription,
+        9,  // ESenServGetServiceDescriptionsByPattern, 
+            // ESenServGetServiceDescriptionsByUri,
+        11, // ESenServIsReady,
+            // ESenServHasFacet,
+            // ESenServServerMessagesOnOff,
+        14, // ESenServGetLengthOfServiceDescriptionByUri,
+            // ESenServGetLengthOfServiceDescriptionByPattern,
+        16, // ESenServRequestServiceDescription,
+            // ESenServReceiveServiceDescription,
+        18, // ESenServSendMsgAndGetTxnId,
+            // ESenServSendSoapMsgAndGetTxnId,
+        20, // ESenServStartTransaction,
+            // ESenServTransactionCompleted,
+            // ESenServCancelSession,
+            // ESenServSetTransportProperties,
+            // ESenServTransportProperties
+            // ESenServCreateHostletConnection, 
+            // ESenServWaitForHostletRequest    
+            // ESenServProvideHostletResponse   
+            // ESenServMoveChunk
+            // ESenServMoveFile
+            // ESenServSendFileHandle
+            // ESenServGetGredentials
+            // ESenServAddCredential
+            // ESenServRemoveCredential
+            // ESenServCancelRequest
+            // ESenServConnectionID
+            // ESenServConnectionIdentityProvider
+            // ESenObserveTransfer
+            // ESenObserveAuthCallback
+            // ESenTransferProgress
+        	// ESenServSearchIdentityProvider
+            // ESenServTrafficDetails
+	    // ESenObserveCoBranding	
+        	// ESenServGetIdentityProviders
+#ifdef __ENABLE_ALR__
+			// ESenServRegisterMobiltyObserver
+			//ESenServMigrateToPreffredCarrier
+			//ESenServNewCarrierAccepted
+        47
+#else
+		44
+#endif
+        }; 
+
+// Policy to implement for each of the above ranges        
+const TUint8 coreServiceManagerElementsIndex[KCoreServiceManagerRangeCount] = 
+        {
+        2,                           //applies to 1st range  <=>  0
+        CPolicyServer::EAlwaysPass,  //applies to 2nd range  <=>  1
+        1,                           //applies to 3rd range  <=>  2
+        3,                           //applies to 4th range  <=>  3 - 8
+        0,                           //applies to 5th range  <=>  9 - 10
+        CPolicyServer::EAlwaysPass,  //applies to 6th range  <=> 11 - 13
+        0,                           //applies to 7th range  <=> 14 - 15
+        CPolicyServer::EAlwaysPass,  //applies to 8th range  <=> 16 - 17
+        2,                           //applies to 9th range  <=> 18 - 19
+        CPolicyServer::EAlwaysPass,  //applies to 10th range <=> 20 - 35
+        CPolicyServer::ENotSupported //applies to 11th range (out of range IPC; >35)
+        };
+
+// Specific capability checks
+const CPolicyServer::TPolicyElement coreServiceManagerElements[] = 
+        {
+        //policy "0"; fail call if ReadUserData not present
+        {_INIT_SECURITY_POLICY_C1(ECapabilityReadUserData), CPolicyServer::EFailClient},  
+        //policy "1"; fail call if WriteUserData not present
+        {_INIT_SECURITY_POLICY_C1(ECapabilityWriteUserData), CPolicyServer::EFailClient}, 
+        //policy "2"; fail call if NetworkServices not present
+        {_INIT_SECURITY_POLICY_C1(ECapabilityNetworkServices), CPolicyServer::EFailClient}, 
+        //policy "3"; fail call if ReadUserData, WriteUserData not present
+        {_INIT_SECURITY_POLICY_C2(ECapabilityReadUserData, ECapabilityWriteUserData), CPolicyServer::EFailClient}
+        };
+
+// Package all the above together into a policy
+const CPolicyServer::TPolicy coreServiceManagerPolicy =
+        {
+        CPolicyServer::EAlwaysPass,         // specifies all connect attempts should pass 
+        KCoreServiceManagerRangeCount,       // number of ranges                                   
+        coreServiceManagerRanges,           // ranges array
+        coreServiceManagerElementsIndex,    // elements<->ranges index
+        coreServiceManagerElements,         // array of elements
+        };
+
+#endif //EKA2
+
+// FORWARD DECLARATIONS
+class CSenGuidGen;
+class CSenBaseIdentityManager;
+class CSenCredentialManager;
+class CSenServerContext;
+class CSenCoreShutdownTimer;
+
+// CLASS DECLARATION
+
+#ifdef EKA2  
+class CSenCoreServiceManager : public CPolicyServer,
+                               public MSenCoreServiceManager
+#else
+class CSenCoreServiceManager : public CServer2,
+                               public MSenCoreServiceManager
+#endif
+    {
+    public: 
+        
+        // Constructors
+        static CSenCoreServiceManager* NewL();
+        static CSenCoreServiceManager* NewLC();
+
+        // C++ destructor
+        virtual ~CSenCoreServiceManager();
+
+
+        // From MSenIdentityManager:
+
+        virtual MSenIdentity& IdentityL();
+        virtual TInt UserNameL(HBufC8*& aUserName);
+        virtual CSenIdentityProvider* IdentityProviderL();
+        virtual CSenIdentityProvider* IdentityProviderL(const TDesC8& aURI);
+        virtual CSenIdentityProvider* IdentityProviderL(const CDesC8Array& aIdpList,
+                                                        TBool aStrict);
+
+        virtual CSenIdentityProvider* IdentityProviderL(MSenServiceDescription& aSD);
+
+        virtual CSenIdentityProvider* IdentityProviderL(MSenServiceDescription& aSD,
+                                                        const CDesC8Array& aIdpList,
+                                                        TBool aStrict);
+        virtual const RPointerArray<CSenIdentityProvider>& IdentityProvidersL();
+
+        virtual TInt RegisterIdentityProviderL(CSenIdentityProvider* apIdp);
+        virtual TInt UnregisterIdentityProviderL(CSenIdentityProvider& aIdp);
+        virtual TBool AssociateServiceL(const TDesC8& aServiceID, const TDesC8& aProviderID);
+        virtual TBool DissociateServiceL(const TDesC8& aServiceID, const TDesC8& aProviderID);
+        virtual TInt IdentitiesL(CDesC8Array& aIdentitiesList);
+        virtual TInt AuthenticationForL(CSenIdentityProvider& aAccount, TPckgBuf<TSenAuthentication>& aResponse);
+        virtual TPtrC8 SenSecurityMechanismNames8L();
+        virtual void SetShowPasswordDialog(const TBool aState);
+        virtual CSenSecurityMechanism* MechanismNamedL(const TDesC8& aName);
+
+        // From MSenServiceManager
+        virtual TInt InitServiceConnectionL(MSenRemoteServiceConsumer& aServiceConsumer,
+                                            CSenWSDescription& aPattern,
+                                            HBufC8*& aErrorMsg);
+
+        virtual TInt ServiceDescriptionsL(RWSDescriptionArray& aMatches,
+                                          const TDesC8& aContract);
+
+        virtual TInt ServiceDescriptionsL(RWSDescriptionArray& aMatches,
+                                          MSenServiceDescription& aPattern);
+
+        virtual TInt RegisterServiceDescriptionL(CSenWSDescription* apSD);
+        virtual TInt UnregisterServiceDescriptionL(MSenServiceDescription& aSD);
+        virtual CSenBaseFragment* InstallFrameworkL(const TDesC8& aFrameworkId);
+        
+        virtual TPtrC8 IMSI();
+        
+        virtual TPtrC8 IMEI();
+
+        virtual CSenXmlReader* XMLReader();
+        virtual HBufC8* RandomGuidL(); 
+        virtual RFileLogger* Log() const;
+        virtual void IncrementConnections();
+        virtual void DecrementConnections();
+
+
+        virtual TInt ContainsServiceDescriptionL(TBool& aContains,
+                                                 CSenWSDescription& aPattern);
+
+        virtual TInt ContainsIdentityProviderL(TBool& aContains,
+                                               CSenIdentityProvider& aIDP);
+                                               
+        virtual TInt FindMatchingIdentityProviderL(CSenIdentityProvider &aIdp,
+                                                   CSenIdentityProvider*& apMatch);
+                                                   
+        virtual TInt UpdateIdentityProviderL(CSenIdentityProvider& aIdp);
+
+        virtual TInt NextTransactionId();
+
+        /**
+        * Notifies *ALL* framework plug-ins about certain event
+        * @return some system-wide error code, if an error occurred
+        */
+        virtual TInt NotifyFrameworksL(const TInt aEvent);
+
+        /**
+        * Notifies *ALL* framework plug-ins about certain event,
+        * an additional object pointer may be passed
+        * NULL is also accepted
+        * @return some system-wide error code, if an error occurred
+        */
+        virtual TInt NotifyFrameworksL(const TInt aEvent, TAny* aArgument);
+
+        /**
+        * Notifies only those frameworks plug-ins, which match
+        * with given framework ID (aFrameworkID)
+        * If aFrameworkID == KNullDesC8 (zero-length),
+        * then *all* known framework plug-ins are notified about the event.
+        * @return some system-wide error code, if an error occurred
+        */
+        virtual TInt NotifyFrameworksL(const TDesC8& aFrameworkID, 
+                                       const TInt aEvent);
+
+        /**
+        * Notifies only those frameworks plug-ins, which match
+        * with given framework ID (aFrameworkID)
+        * If aFrameworkID == KNullDesC8 (zero-length),
+        * then *all* known framework plug-ins are notified about the event,
+        * an additional object pointer may be passed
+        * NULL is also accepted
+        * @return some system-wide error code, if an error occurred
+        */
+        virtual TInt NotifyFrameworksL(const TDesC8& aFrameworkID,
+                                       const TInt aEvent,
+                                       TAny* aArgument);
+
+
+        virtual TInt SizeOfServiceDescriptionsL(RWSDescriptionArray& aArray);
+        
+        virtual TInt SizeOfCredentialsL(RSenCredentialArray& aArray);
+        virtual TInt SizeOfIdentityProvidersL(const RPointerArray<CSenIdentityProvider>& aArray);
+
+        // From MSenCoreServiceManager
+    
+        /**
+        * Takes the ownership of apServiceDescription
+        * @return KErrNone on success
+        *         KErrArgument, if aServiceDescription is NULL
+        *         KErrSenNoContractNoEndPoint, if both endpoint and
+        *            contract are of zero-lenght, making SD invalid
+        *         KErrGeneral if duplicate (blocking), service description
+        *         with equal primary keys could not be removed.
+        */
+        virtual TInt AddServiceDescriptionL(CSenWSDescription* apServiceDescription);
+
+        virtual TInt RemoveServiceDescriptionL(CSenWSDescription& aServiceDescription);
+
+        virtual TInt SaveL(const CSenServiceSession& aServiceSession);
+        virtual TInt SaveL(const CSIF& aServiceInvocationFramework);
+
+        virtual CDesC8Array& SupportedFrameworksL();
+
+        virtual MSenProvider& LookupHostletForL(const TDesC8& aHostletEndpoint,
+                                                const TDesC& aReqThreadId,
+                                                const TDesC8& aReqConsumerId);
+
+        virtual TInt ReleaseHostletL(const MSenProvider* aHostlet,
+                                     const TDesC& aReqThreadId,
+                                     const TDesC8& aReqConsumerId);
+
+
+        // From MSenTransportFactory:
+        virtual CSenTransportBase* CreateL(CSenWSDescription& aInitializer,
+                                           CSenServiceSession* apSession);
+        
+        // from CServer
+        
+        CSession2* NewSessionL(const TVersion &aVersion,
+                               const RMessage2& aMessage) const; 
+
+        static TInt ThreadFunction(TAny* sStarted);
+
+        
+        virtual HBufC8* EncodeToBase64LC(const TDesC8& aSource);
+        virtual HBufC8* DecodeFromBase64LC(const TDesC8& aSource);
+
+        // New functions
+        virtual RStringPool& StringPool();
+
+/*
+        // New functions
+        virtual TInt AddActiveHostletConnectionEndpointL(const TDesC8& aEndpoint);
+        virtual TInt RemoveActiveHostletConnectionEndpoint(const TDesC8& aEndpoint);
+*/
+
+        // From MSenCredentialManager
+        
+        virtual TInt SaveCredentialDB();
+        
+		virtual TInt CredentialsL(const CSenWSDescription& aPattern,
+                                  RSenCredentialArray& aCredentials);
+
+		virtual TInt CredentialsL(const CSenWSDescription& aPattern,
+                                  const CSenIdentityProvider& aIdP,
+                                  RSenCredentialArray& aCredentials);
+
+		virtual TInt CredentialsL(const CSenWSDescription& aPattern,
+                                  RSenCredentialPtrArray& aCredentials);
+
+		virtual TInt CredentialsL(const CSenWSDescription& aPattern,
+                                  const CSenIdentityProvider& aIdP,
+                                  RSenCredentialPtrArray& aCredentials);
+
+		virtual RSenCredentialPtr AddCredentialL(CSenInternalCredential* apCredential,
+                                                 TInt& aErrorTo);
+
+		virtual RSenCredentialPtr AddCredentialL(CSenIdentityProvider* apIdP,
+                                                 CSenInternalCredential* apCredential,
+	                                             TInt& aErrorTo);
+
+		virtual RSenCredentialPtr AddCredentialL(const TDesC8& aCredential,
+                                                 TInt& aErrorTo);
+
+		virtual RSenCredentialPtr AddCredentialL(CSenIdentityProvider* apIdP,
+                                                 const TDesC8& aCredential,
+                                                 TInt& aErrorTo);
+
+		virtual TInt RemoveCredentialsL(const CSenWSDescription& aPattern);
+
+		virtual TInt RemoveCredentialsL(const CSenWSDescription& aPattern,
+										const CSenIdentityProvider& aIdP);
+										
+        virtual TInt RemoveCredentialsL(const TDesC8& aProviderId);
+
+        virtual TInt RemoveCredentialL(TInt aInternalCredentialId);	//codescannerwarnings
+        
+        virtual RSenCredentialPtr CredentialL(TInt aInternalCredentialId,
+                                              TInt& aErrorTo);
+
+        virtual RSenCredentialPtr UpdateCredentialL(TInt aInternalCredentialId,
+                                                    CSenInternalCredential* apCredential,
+                                                    TInt& aErrorTo);
+        
+        virtual RSenCredentialPtr UpdateCredentialL(TInt aInternalCredentialId,
+                                                    const TDesC8& aCredential,
+                                                    TInt& aErrorTo);
+
+        virtual TInt NextConnectionID();
+
+    protected:  
+        
+        // From CActive
+        TInt RunError(TInt aError);
+
+    private: 
+        
+        /**
+        * C++ default constructor.
+        */
+        CSenCoreServiceManager(TInt aPriority);
+        
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        // New functions
+        
+        MSIF* Framework(const TDesC8& aFrameworkID);
+        TImCodecB64& Base64Codec();
+
+//        RPointerArray<HBufC8>& ActiveHostletEndpointsL();
+
+    private: 
+        
+        // CS framework:
+        static void PanicClient(const RMessage2& aMessage,
+                                TWsfServPanic aReason);
+
+        static void PanicServer(TWsfServPanic aPanic);
+        static void ThreadFunctionL();
+        void UpdateTouchL(CSenServiceSession* aSession);
+        
+        void GetImsiImeiL();
+
+
+    private: // Data
+        CSenXMLDAO*              iDAO;                      // owned
+        CSenBaseIdentityManager* iIdentityManager;          // owned
+        RFileLogger              iLog;                      // owned
+        TInt                     iConnectionCount;
+        CSenGuidGen*             iGuidGenerator;            // owned
+        CSenXmlReader*           iReader;                   // owned
+        TImCodecB64 iBase64Codec; 
+        RStringPool iStringPool;                            // owned
+//        RPointerArray<HBufC8>*   ipActiveHostletEndpoints;  // owned
+
+        TInt iNextTransactionId;
+
+        CSenCredentialManager*   iCredentialManager;        // owned
+        
+        CSenTransportBase* ipVtcpTransport; // not owned
+//        HBufC8*        ipVtcpEndpoint;  // owned
+
+        TInt                     iConnectionID;
+        
+        CSenServerContext* ipServerContext; // owned
+        CSenCoreShutdownTimer* iShutdownTimer;
+        TBuf8<15> iIMSI;
+        TBuf8<50> iIMEI;
+    };
+
+#endif // SEN_CORE_SERVICE_MANAGER_H
+
+// End of File