00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00035 #include "secureclientandserver.h"
00036 #include "secureserver.h"
00037
00042 void CSecureServer::PanicServer(TSecureServerPanic aPanic)
00043 {
00044 _LIT(KTxTSecureServer,"SecureServer");
00045 User::Panic(KTxTSecureServer,aPanic);
00046 }
00047
00053 CSecureServer* CSecureServer::NewL(CActive::TPriority aActiveObjectPriority)
00054 {
00055 CSecureServer* self = new (ELeave) CSecureServer(aActiveObjectPriority);
00056 CleanupStack::PushL(self);
00057 self->ConstructL();
00058 CleanupStack::Pop();
00059 return self;
00060 }
00061
00066 CObjectCon* CSecureServer::NewContainerL()
00067 {
00068 return iContainerIndex->CreateL();
00069 }
00070
00075 void CSecureServer::RemoveContainer(CObjectCon *aCon)
00076 {
00077 iContainerIndex->Remove(aCon);
00078 }
00079
00088 CSecureServer::CSecureServer(CActive::TPriority aActiveObjectPriority)
00089 : CPolicyServer(aActiveObjectPriority, KSecureServerPolicy, ESharableSessions)
00090 {
00091
00092 }
00093
00103 void CSecureServer::ConstructL()
00104 {
00105 iContainerIndex = CObjectConIx::NewL();
00106 }
00107
00111 CSecureServer::~CSecureServer()
00112 {
00113 delete iContainerIndex;
00114 }
00115
00121 CSession2* CSecureServer::NewSessionL(const TVersion &aVersion,const RMessage2& ) const
00122 {
00123 TVersion v(KSecureServMajorVersionNumber,KSecureServMinorVersionNumber,KSecureServBuildVersionNumber);
00124 if (!User::QueryVersionSupported(v,aVersion))
00125 {
00126 User::Leave(KErrNotSupported);
00127 }
00128 return new (ELeave) CSecureServerSession;
00129 }
00130
00149 CPolicyServer::TCustomResult CSecureServer:: CustomSecurityCheckL(const RMessage2 &aMsg, TInt &aAction, TSecurityInfo &aMissing)
00150 {
00151 TInt sid;
00152 RMessagePtr2 msg = aMsg;
00153 sid = msg.SecureId();
00154 switch(aMsg.Function())
00155 {
00156 case ESecureServerIncreaseBy:
00157 case ESecureServerDecreaseBy:
00158 {
00159 TInt val = aMsg.Int0();
00160 if(val > 10)
00161 {
00162 if(sid > 0x70fffff5)
00163 {
00164 return EFail;
00165 }
00166 }
00167 }
00168 break;
00169 case ESecureServerReset:
00170 case ESecureServerDecrease:
00171 case ESecureServerIncrease:
00172 {
00173 }
00174 break;
00175 default:
00176 {
00177 aAction = EPanicClient;
00178 CheckFailedL(aMsg,aAction,aMissing);
00179 return EFail;
00180 }
00181 }
00182 return EPass;
00183 }