--- a/realtimenetprots/sipfw/ProfileAgent/ApnManager/inc/sipapnconfigurationhandler.h Tue May 25 13:04:58 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/ApnManager/inc/sipapnconfigurationhandler.h Wed Jun 09 10:04:26 2010 +0300
@@ -24,10 +24,11 @@
#include <etelpckt.h>
#include <es_enum.h>
#include <es_enum_partner.h>
+#include <centralrepository.h>
#include "sipapnmanager.h"
// CONSTANTS
-const TInt KSecondaryApnMaxRetryCount = 100;
+const TInt KDBMaxRetryCount = 100;
// FORWARD DECLARATIONS
class CCommsDatabase;
@@ -107,7 +108,7 @@
void WatchConnectionStatusChange();
- void WatchDatabaseStatusChangeL( TUint32 aIapId );
+ void WatchDatabaseStatusChangeL();
TBool ApnChangeNeededL( const TDesC8& aApn );
@@ -153,39 +154,39 @@
/// 2nd phase constructor
void ConstructL();
+
+ void BlockCellularDataUsageL();
+
+ void AllowCellularDataUsage();
+
+
+ /**
+ * Rollsback db in case of failure
+ * @param aDb
+ */
+ static void RollBackDBTransaction(TAny* aDb);
private: // Data
- MSIPApnChangeObserver& iObserver;
-
- TSipApnMonitoringState iMonitoringState;
-
- RSocketServ iSocketSrv;
-
- RConnection iConnection;
-
- TPckgBuf<TConnectionInfo> iConnectionInfo;
-
- TNifProgressBuf iProgress;
-
- HBufC8* iApnProposal;
-
- TUint32 iIapId;
-
- CCommsDatabase* iCommsDatabase;
-
- TInt iMonitoringRetryCount;
-
- HBufC8* iCurrentApn;
-
- TBool iApnUseSecureAuthProposal;
-
- TBool iIsFailed;
-
- TBool iIsFatalFailure;
-
- HBufC8* iPrimaryApn;
- HBufC8* iSecondaryApn;
+ MSIPApnChangeObserver& iObserver;
+ TSipApnMonitoringState iMonitoringState;
+ RSocketServ iSocketSrv;
+ RConnection iConnection;
+ TPckgBuf<TConnectionInfo> iConnectionInfo;
+ TNifProgressBuf iProgress;
+ HBufC8* iApnProposal;
+ TUint32 iIapId;
+ CCommsDatabase* iCommsDatabase;
+ TInt iDBMonitoringRetryCount;
+ HBufC8* iCurrentApn;
+ TBool iApnUseSecureAuthProposal;
+ TBool iIsFailed;
+ TBool iIsFatalFailure;
+ HBufC8* iPrimaryApn;
+ HBufC8* iSecondaryApn;
+ CRepository* iRepository;
+ TInt iCurrentUsageStatus;
+ TBool iCellularDataBlocked;
#ifdef CPPUNIT_TEST
friend class CSIPApnManagerTest;
--- a/realtimenetprots/sipfw/ProfileAgent/ApnManager/src/sipapnconfigurationhandler.cpp Tue May 25 13:04:58 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/ApnManager/src/sipapnconfigurationhandler.cpp Wed Jun 09 10:04:26 2010 +0300
@@ -19,6 +19,8 @@
#include <commsdattypesv1_1.h>
#include <commdb.h>
#include <commsdat.h>
+#include <cmgenconnsettings.h>
+#include <cmmanagerkeys.h>
#include "sipapnconfigurationhandler.h"
#include "SipProfileLog.h"
@@ -58,17 +60,15 @@
{
PROFILE_DEBUG1(
"CSIPApnConfigurationHandler::~CSIPApnConfigurationHandler()" )
-
+
Cancel();
iConnection.Close();
iSocketSrv.Close();
-
delete iApnProposal;
delete iCurrentApn;
-
delete iPrimaryApn;
delete iSecondaryApn;
-
+ delete iRepository;
delete iCommsDatabase;
PROFILE_DEBUG1(
@@ -105,7 +105,7 @@
return;
}
- iMonitoringRetryCount = 0;
+ iDBMonitoringRetryCount = 0;
ChangeApnIfNotInUseL( aAllowAsync );
@@ -285,6 +285,11 @@
PROFILE_DEBUG3(
"CSIPApnConfigurationHandler::RunError() err", aError );
+ if(iCellularDataBlocked)
+ {
+ AllowCellularDataUsage();
+ }
+
if ( aError != KErrNoMemory && aError != KErrNone )
{
iObserver.ApnChanged( *iApnProposal, iIapId, aError );
@@ -307,7 +312,8 @@
CActiveScheduler::Add( this );
iIapId = aIapId;
iIsFailed = EFalse;
- iIsFatalFailure = EFalse;
+ iIsFatalFailure = EFalse;
+ iCellularDataBlocked = EFalse;
}
// -----------------------------------------------------------------------------
@@ -320,7 +326,7 @@
"CSIPApnConfigurationHandler::ConstructL()" )
User::LeaveIfError( iSocketSrv.Connect() );
-
+ iRepository = CRepository::NewL( KCRUidCmManager );
PROFILE_DEBUG1(
"CSIPApnConfigurationHandler::ConstructL() exit" )
}
@@ -426,7 +432,7 @@
// CSIPApnConfigurationHandler::WatchDatabaseStatusChangeL
// -----------------------------------------------------------------------------
//
-void CSIPApnConfigurationHandler::WatchDatabaseStatusChangeL( TUint32 aIapId )
+void CSIPApnConfigurationHandler::WatchDatabaseStatusChangeL()
{
PROFILE_DEBUG1(
"CSIPApnConfigurationHandler::WatchDatabaseStatusChangeL()" )
@@ -436,22 +442,26 @@
if ( !iCommsDatabase )
{
PROFILE_DEBUG1(
- "CSIPApnConfigurationHandler:: create commsdb" )
+ "CSIPApnConfigurationHandler::WatchDatabaseStatusChangeL create commsdb" )
iCommsDatabase = CCommsDatabase::NewL();
}
PROFILE_DEBUG1(
- "CSIPApnConfigurationHandler:: request notification" )
+ "CSIPApnConfigurationHandler::WatchDatabaseStatusChangeL request notification" )
// Start monitoring for db events, there will be lots of them pouring in
// as there's no filtering feature. We are interested only in
// unlocked events.
+
+ if(iDBMonitoringRetryCount > KDBMaxRetryCount)
+ {
+ PROFILE_DEBUG1("CSIPApnConfigurationHandler::WatchDatabaseStatusChangeL max retries reached!" )
+ User::Leave( KErrAbort );
+ }
+
User::LeaveIfError( iCommsDatabase->RequestNotification( iStatus ) );
-
SetActive();
-
- iIapId = aIapId;
-
+
SetMonitoringState( EMonitoringDatabase );
PROFILE_DEBUG1(
@@ -542,7 +552,7 @@
__ASSERT_ALWAYS( aAllowAsync, User::Leave( KErrInUse ) );
- WatchDatabaseStatusChangeL( iIapId );
+ WatchDatabaseStatusChangeL();
}
else
{
@@ -570,8 +580,12 @@
using namespace CommsDat;
- CMDBSession* db = CMDBSession::NewL( CMDBSession::LatestVersion() );
+ CMDBSession* db = CMDBSession::NewL( KCDVersion1_1 );
CleanupStack::PushL( db );
+
+ db->OpenTransactionL();
+ CleanupStack::PushL(TCleanupItem(RollBackDBTransaction, db));
+
// Set attributes so that also protected iaps can be accessed
db->SetAttributeMask( ECDHidden | ECDProtectedWrite );
@@ -647,9 +661,19 @@
db->ClearAttributeMask( ECDHidden | ECDProtectedWrite );
CleanupStack::PopAndDestroy( iapRecord );
+
+ db->CommitTransactionL();
+
+ CleanupStack::Pop(); //cleanup item
+
CleanupStack::PopAndDestroy( db );
- SendApnChangedNotificationL( aApn );
+ if (iCellularDataBlocked)
+ {
+ AllowCellularDataUsage();
+ }
+
+ SendApnChangedNotificationL( aApn );
PROFILE_DEBUG1(
"CSIPApnConfigurationHandler::ChangeApnL(), exit" )
@@ -701,10 +725,10 @@
void CSIPApnConfigurationHandler::ConnectionMonitoringCompletedL( TInt aError )
{
PROFILE_DEBUG3(
- "CSIPApnConfigurationHandler:: progress.err",
+ "CSIPApnConfigurationHandler::ConnectionMonitoringCompletedL progress.err",
iProgress().iError );
PROFILE_DEBUG3(
- "CSIPApnConfigurationHandler:: progress.stage",
+ "CSIPApnConfigurationHandler::ConnectionMonitoringCompletedL progress.stage",
iProgress().iStage );
if ( !aError )
@@ -748,30 +772,19 @@
{
// Changing may be now possible, if not, db notifications or connection
// monitoring is re-enabled inside following method
+ PROFILE_DEBUG1("DatabaseMonitoringCompletedL::DatabaseMonitoringCompletedL BlockCellularDataUsageL" );
+ BlockCellularDataUsageL();
apnChanged = ChangeApnIfNotInUseL();
}
else
{
- WatchDatabaseStatusChangeL( iIapId );
+ iDBMonitoringRetryCount++;
+ WatchDatabaseStatusChangeL();
}
- // Have some safety limit for monitoring as it's not guaranteed that
- // db lock is ever released -> avoid unnecessary battery consumption
- if ( !apnChanged )
+ if(apnChanged)
{
- iMonitoringRetryCount++;
- PROFILE_DEBUG3(
- "DatabaseMonitoringCompletedL:: retrycount",
- iMonitoringRetryCount );
-
- if ( iMonitoringRetryCount > KSecondaryApnMaxRetryCount )
- {
- PROFILE_DEBUG1(
- "CSIPApnConfigurationHandler:: max retries reached!" )
- Cancel();
-
- User::Leave( KErrAbort );
- }
+ iDBMonitoringRetryCount = 0;
}
}
@@ -902,4 +915,40 @@
}
}
+// -----------------------------------------------------------------------------
+// CSIPApnConfigurationHandler::BlockCellularDataUsageL
+// -----------------------------------------------------------------------------
+//
+void CSIPApnConfigurationHandler::BlockCellularDataUsageL()
+ {
+ PROFILE_DEBUG1("DatabaseMonitoringCompletedL::BlockCellularDataUsageL Enter" );
+ //Current Usage Status;
+ iRepository->Get( KCurrentCellularDataUsage, iCurrentUsageStatus );
+ iRepository->Set( KCurrentCellularDataUsage, ECmCellularDataUsageDisabled );
+ iCellularDataBlocked = ETrue;
+ PROFILE_DEBUG1("DatabaseMonitoringCompletedL::BlockCellularDataUsageL Exit" );
+ }
+// -----------------------------------------------------------------------------
+// CSIPApnConfigurationHandler::AllowCellularDataUsage
+// -----------------------------------------------------------------------------
+//
+void CSIPApnConfigurationHandler::AllowCellularDataUsage()
+ {
+ PROFILE_DEBUG1("DatabaseMonitoringCompletedL::AllowCellularDataUsage Enter" );
+ iRepository->Set( KCurrentCellularDataUsage, iCurrentUsageStatus );
+ iDBMonitoringRetryCount = 0;
+ iCellularDataBlocked = EFalse;
+ PROFILE_DEBUG1("DatabaseMonitoringCompletedL::AllowCellularDataUsage Exit" );
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPApnConfigurationHandler::RollBackDBTransaction
+// -----------------------------------------------------------------------------
+//
+void CSIPApnConfigurationHandler::RollBackDBTransaction(TAny* aDb)
+ {
+ CMDBSession* db = static_cast<CMDBSession*>(aDb);
+ TRAP_IGNORE(db->RollbackTransactionL());
+ }
+
// End of file
--- a/realtimenetprots/sipfw/ProfileAgent/ApnManager/src/sipapnmanager.cpp Tue May 25 13:04:58 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/ApnManager/src/sipapnmanager.cpp Wed Jun 09 10:04:26 2010 +0300
@@ -216,7 +216,7 @@
{
TBool isIapGPRS(EFalse);
using namespace CommsDat;
- CMDBSession* db = CMDBSession::NewL( CMDBSession::LatestVersion() );
+ CMDBSession* db = CMDBSession::NewL( KCDVersion1_1 );
CleanupStack::PushL( db );
// Set any attributes if any
db->SetAttributeMask( ECDHidden );
--- a/realtimenetprots/sipfw/ProfileAgent/IETF_Agent/src/Sipietfprofilecontext.cpp Tue May 25 13:04:58 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/IETF_Agent/src/Sipietfprofilecontext.cpp Wed Jun 09 10:04:26 2010 +0300
@@ -494,11 +494,11 @@
return (aError == K503ServiceUnavailable ||
aError == K408TimeOut ||
aError == K500ServerInternalError ||
- aError == KErrSIPOutboundProxyNotResponding ||
aError == KErrTimedOut ||
((aError == KErrSIPResolvingFailure ||
aError == KErrSIPTransportFailure ||
- aError == KErrSIPICMPFailure) &&
+ aError == KErrSIPICMPFailure ||
+ aError == KErrSIPOutboundProxyNotResponding ) &&
iConnection.State() != CSIPConnection::ESuspended));
}
--- a/realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Src/Sipimsprofilecontext.cpp Tue May 25 13:04:58 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Src/Sipimsprofilecontext.cpp Wed Jun 09 10:04:26 2010 +0300
@@ -785,12 +785,12 @@
aError == K408TimeOut ||
aError == K480TemporarilyUnavailable ||
aError == K500ServerInternalError ||
- aError == K504ServerTimeOut ||
- aError == KErrSIPOutboundProxyNotResponding ||
+ aError == K504ServerTimeOut ||
aError == KErrTimedOut ||
((aError == KErrSIPResolvingFailure ||
aError == KErrSIPTransportFailure ||
- aError == KErrSIPICMPFailure) &&
+ aError == KErrSIPICMPFailure ||
+ aError == KErrSIPOutboundProxyNotResponding ) &&
iConnection.State() != CSIPConnection::ESuspended));
}
--- a/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileCacheItem.cpp Tue May 25 13:04:58 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileCacheItem.cpp Wed Jun 09 10:04:26 2010 +0300
@@ -571,6 +571,7 @@
void CSIPProfileCacheItem::VpnInUse(TBool aStatus)
{
iIsVpnInUse = aStatus;
+ iCurrentState->ShutdownInitiated(*this);
}
// -----------------------------------------------------------------------------
--- a/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileServerCore.cpp Tue May 25 13:04:58 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileServerCore.cpp Wed Jun 09 10:04:26 2010 +0300
@@ -475,11 +475,11 @@
TBool waitForDeregistration = EFalse;
for (TInt i = 0; i < iProfileCache.Count(); i++)
{
- iProfileCache[i]->OfflineInitiated(ETrue);
CSIPConcreteProfile::TStatus status;
iPluginDirector->State(status, iProfileCache[i]->UsedProfile());
if(status != CSIPConcreteProfile::EUnregistered)
- waitForDeregistration = ETrue;
+ waitForDeregistration = ETrue;
+ iProfileCache[i]->OfflineInitiated(ETrue);
}
if(!waitForDeregistration)
{
@@ -515,11 +515,11 @@
TBool waitForDeregistration = EFalse;
for (TInt i = 0; i < iProfileCache.Count(); i++)
{
- iProfileCache[i]->RfsInprogress(ETrue);
CSIPConcreteProfile::TStatus status;
iPluginDirector->State(status, iProfileCache[i]->UsedProfile());
if (status != CSIPConcreteProfile::EUnregistered)
waitForDeregistration = ETrue;
+ iProfileCache[i]->RfsInprogress(ETrue);
}
if(!waitForDeregistration)
{
@@ -564,12 +564,11 @@
TBool waitForDeregistration = EFalse;
for (TInt i = 0; i < iProfileCache.Count(); i++)
{
- iProfileCache[i]->VpnInUse( ETrue );
- iProfileCache[i]->ShutdownInitiated();
CSIPConcreteProfile::TStatus status;
iPluginDirector->State(status, iProfileCache[i]->UsedProfile());
if (status != CSIPConcreteProfile::EUnregistered)
waitForDeregistration = ETrue;
+ iProfileCache[i]->VpnInUse( ETrue );
}
if (!waitForDeregistration)
{
--- a/realtimenetprots/sipfw/ProfileAgent/profile_fsm/inc/sipprflderegisterrequestedstate.h Tue May 25 13:04:58 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/profile_fsm/inc/sipprflderegisterrequestedstate.h Wed Jun 09 10:04:26 2010 +0300
@@ -14,7 +14,7 @@
* Description:
* Name : sipprflderegisterrequestedstate.h
* Part of : sip profile fsm
-* Version : %version: 2.1.1 %
+* Version : %version: 2.1.2 %
*
*/
@@ -72,6 +72,13 @@
CSIPConcreteProfile::TStatus ConcreteProfileState() const;
+ /* DeRegister requested
+ * update on multiple profile issue, when update on the previous profile is pending.
+ * 07 May 2010
+ * */
+ void DeregisterL(
+ MSIPProfileContext& aContext);
+
/**
* Moves back the profile to "Registered" state
* @param aContext a profile context
--- a/realtimenetprots/sipfw/ProfileAgent/profile_fsm/src/Sipprflderegisterrequestedstate.cpp Tue May 25 13:04:58 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/profile_fsm/src/Sipprflderegisterrequestedstate.cpp Wed Jun 09 10:04:26 2010 +0300
@@ -14,7 +14,7 @@
// Name : sipprflderegisterrequestedstate.cpp
// Part of : sip profile fsm
// implementation
-// Version : %version: 2.1.1 %
+// Version : %version: 2.1.2 %
//
@@ -98,6 +98,41 @@
}
// -----------------------------------------------------------------------------
+// CSIPPrflDeregisterRequestedState::DeregisterL()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CSIPPrflDeregisterRequestedState::DeregisterL(
+ MSIPProfileContext& aContext)
+ {
+ __ASSERT_DEBUG(aContext.Profile()!=0, User::Invariant());
+ __ASSERT_DEBUG(aContext.Registration()!=0, User::Invariant());
+ if (aContext.Connection().State()==CSIPConnection::EActive)
+ {
+ if (iUser.AddProfileIntoQueue(*aContext.Profile())) //compares the registrar of the present profile with the other profiles existing in the connection context array.
+ {
+ iUser.DeregisterProfileL(*aContext.Profile());
+
+ }
+ else
+ {
+ CSIPMessageElements* elements =
+ aContext.CreateDeRegisterElementsL();
+ CleanupStack::PushL(elements);
+ CSIPClientTransaction* tx =
+ aContext.Registration()->DeregisterL(elements);
+ CleanupStack::Pop(elements);
+ aContext.SetTransaction(tx);
+ aContext.SetNextState(*iDeregistrationInProgressState);
+ }
+ }
+ aContext.AgentObserver().SIPProfileStatusEvent(
+ *aContext.Profile(),
+ aContext.Registration()->ContextId());
+ }
+
+
+// -----------------------------------------------------------------------------
// CSIPPrflDeregisterRequestedState::ErrorOccured()
// This can happen if the de-register was reguested while the connection is
// suspended (registered->de-register requested). SIP stack has removed
--- a/realtimenetprots/sipfw/ProfileAgent/profile_fsm/src/Sipprflregisteredstate.cpp Tue May 25 13:04:58 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/profile_fsm/src/Sipprflregisteredstate.cpp Wed Jun 09 10:04:26 2010 +0300
@@ -14,7 +14,7 @@
// Name : sipprflregisteredstate.cpp
// Part of : sip profile fsm
// implementation
-// Version : %version: 2.1.2 %
+// Version : %version: 2.1.3 %
//
@@ -370,7 +370,8 @@
}
else if ((aError == KErrSIPTransportFailure ||
aError == KErrSIPResolvingFailure ||
- aError == KErrSIPICMPFailure) &&
+ aError == KErrSIPICMPFailure ||
+ aError == KErrSIPOutboundProxyNotResponding ) &&
aContext.Connection().State() == CSIPConnection::ESuspended)
{
//registration was dropped due to the expired
--- a/realtimenetprots/sipfw/ProfileAgent/profile_fsm/src/sipprflregistrationinprogressstate.cpp Tue May 25 13:04:58 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/profile_fsm/src/sipprflregistrationinprogressstate.cpp Wed Jun 09 10:04:26 2010 +0300
@@ -14,7 +14,7 @@
// Name : sipprflregistrationinprogressstate.cpp
// Part of : sip profile fsm
// implementation
-// Version : %version: 2.1.1 %
+// Version : %version: 2.1.2 %
//
@@ -174,7 +174,8 @@
}
else if ((aError == KErrSIPTransportFailure ||
aError == KErrSIPResolvingFailure ||
- aError == KErrSIPICMPFailure) &&
+ aError == KErrSIPICMPFailure ||
+ aError == KErrSIPOutboundProxyNotResponding ) &&
aContext.Connection().State()==CSIPConnection::ESuspended)
{
//registration failed due to the suspended connection, re-try later
--- a/realtimenetprots/sipfw/SIP/Codec/src/CSIPAcceptEncodingHeader.cpp Tue May 25 13:04:58 2010 +0300
+++ b/realtimenetprots/sipfw/SIP/Codec/src/CSIPAcceptEncodingHeader.cpp Wed Jun 09 10:04:26 2010 +0300
@@ -28,6 +28,7 @@
#include "sipstrconsts.h"
#include "sipcodecutils.h"
#include "_sipcodecdefs.h"
+#include <featdiscovery.h>
// ----------------------------------------------------------------------------
@@ -161,10 +162,19 @@
{
HBufC8* tmp = aCodings.AllocLC();
tmp->Des().Trim();
- if (tmp->Length() > 0 && !SIPSyntaxCheck::Token(*tmp))
+ //Allowing '/' token for interoperability issues
+ RArray<TSIPChar> array;
+ if(CFeatureDiscovery::IsFeatureSupportedL(TUid::Uid(KFeatureIdFfSipApnSwitching)))
+ {
+ array.Append('/');
+ }
+
+ if (tmp->Length() > 0 && !SIPSyntaxCheck::Token(*tmp,&array))
{
+ array.Close();
User::Leave(KErrSipCodecAcceptEncodingHeader);
}
+ array.Close();
CleanupStack::Pop(tmp);
delete iCodings;
iCodings = tmp;
--- a/realtimenetprots/sipfw/SIP/Codec/src/SIPSyntaxCheck.cpp Tue May 25 13:04:58 2010 +0300
+++ b/realtimenetprots/sipfw/SIP/Codec/src/SIPSyntaxCheck.cpp Wed Jun 09 10:04:26 2010 +0300
@@ -20,7 +20,6 @@
#include "SIPSyntaxCheck.h"
-#include "TSIPChar.h"
#include "sipcodecerr.h"
#include <uriutils.h>
@@ -31,8 +30,9 @@
// SIPSyntaxCheck::Token
// -----------------------------------------------------------------------------
//
-TBool SIPSyntaxCheck::Token (const TDesC8& aValue)
+TBool SIPSyntaxCheck::Token (const TDesC8& aValue, RArray<TSIPChar>* aArray)
{
+
if (aValue.Length() == 0)
{
return EFalse;
@@ -41,7 +41,7 @@
TSIPChar sipChr = lex.Get();
while (sipChr)
{
- if (!sipChr.IsTokenChar())
+ if (!sipChr.IsTokenChar( aArray ) )
{
return EFalse;
}
--- a/realtimenetprots/sipfw/SIP/Codec/src/SIPSyntaxCheck.h Tue May 25 13:04:58 2010 +0300
+++ b/realtimenetprots/sipfw/SIP/Codec/src/SIPSyntaxCheck.h Wed Jun 09 10:04:26 2010 +0300
@@ -31,6 +31,7 @@
#define SIPSYNTAXCHECK_H
#include "siphostport.h"
+#include "TSIPChar.h"
#include <e32std.h>
@@ -39,7 +40,7 @@
{
public:
- static TBool Token (const TDesC8& aValue);
+ static TBool Token (const TDesC8& aValue , RArray<TSIPChar>* aArray = NULL );
static TBool AlphaMaxSize8 (const TDesC8& aValue);
static TBool Host (const TDesC8& aValue);
static TBool Word (const TDesC8& aValue);
--- a/realtimenetprots/sipfw/SIP/Codec/src/TSIPChar.h Tue May 25 13:04:58 2010 +0300
+++ b/realtimenetprots/sipfw/SIP/Codec/src/TSIPChar.h Wed Jun 09 10:04:26 2010 +0300
@@ -45,7 +45,7 @@
inline TBool IsReserved() const;
inline TBool IsUnreserved() const;
inline TBool IsMark() const;
- inline TBool IsTokenChar() const;
+ inline TBool IsTokenChar(RArray<TSIPChar>* aArray = NULL) const;
inline TBool IsSeparator() const;
inline TBool IsWordChar() const;
inline TBool IsQuotedPairChar() const;
--- a/realtimenetprots/sipfw/SIP/Codec/src/TSIPChar.inl Tue May 25 13:04:58 2010 +0300
+++ b/realtimenetprots/sipfw/SIP/Codec/src/TSIPChar.inl Wed Jun 09 10:04:26 2010 +0300
@@ -112,20 +112,33 @@
// TSIPChar::IsTokenChar
// -----------------------------------------------------------------------------
//
-inline TBool TSIPChar::IsTokenChar () const
+inline TBool TSIPChar::IsTokenChar (RArray<TSIPChar>* aArray) const
{
if (IsAlphaDigit())
{
return ETrue;
}
- TSIPChar val = *this;
- if (val == '-' || val == '.' || val == '!' || val == '%' || val == '*' ||
+ TInt length= 0;
+ TSIPChar val = *this;
+ //Allowing '/' token for interoperability issues
+ if (aArray)
+ length = aArray->Count();
+ if(length)
+ {
+ for (TInt i =0; i<length;i++)
+ {
+ if(val == aArray->operator [](i))
+ return ETrue;
+ }
+ }
+ if (val == '-' || val == '.' || val == '!' || val == '%' || val == '*' ||
val == '_' || val == '+' || val == '\'' || val == '~' || val == '`')
- {
- return ETrue;
- }
- return EFalse;
- }
+ {
+ return ETrue;
+ }
+
+ return EFalse;
+ }
// -----------------------------------------------------------------------------
// TSIPChar::IsSeparator
--- a/realtimenetprots/sipfw/SIP/ConnectionMgr/src/CTransport.cpp Tue May 25 13:04:58 2010 +0300
+++ b/realtimenetprots/sipfw/SIP/ConnectionMgr/src/CTransport.cpp Wed Jun 09 10:04:26 2010 +0300
@@ -1459,11 +1459,23 @@
if ( Protocol() == KProtocolTls )
{
RStringF tls = SIPStrings::StringF( SipStrConsts::ETLS );
- // SIP-URI with transport=TLS must not use sips scheme
- uri.SIPURI()->SetSIPS( transportParam != tls );
+ // SIP Scheme in Contact header should be same as From Header
+ CURIContainer& FromUri = (((aMessage->From())->SIPAddress()).URI());
+ if(FromUri.IsSIPURI())
+ {
+ CSIPURI* FromSIPUri =FromUri.SIPURI();
+ if(FromSIPUri->IsSIPSURI())
+ {
+ uri.SIPURI()->SetSIPS( ETrue );
+ }
+ else
+ {
+ uri.SIPURI()->SetSIPS( EFalse );
+ }
+ }
if(transportParam == tls)
{
- uri.SIPURI()->SetSIPS(EFalse);
+ //uri.SIPURI()->SetSIPS(EFalse);
//Delete the param transport=tls from the URI as it is deprecated in RFC 3261
uri.SIPURI()->DeleteParam(SIPStrings::StringF( SipStrConsts::ETransport ));
}
--- a/realtimenetprots/sipfw/SIP/ConnectionMgr/src/TTlsTransTlsConnecting.cpp Tue May 25 13:04:58 2010 +0300
+++ b/realtimenetprots/sipfw/SIP/ConnectionMgr/src/TTlsTransTlsConnecting.cpp Wed Jun 09 10:04:26 2010 +0300
@@ -22,8 +22,10 @@
#include "TTlsTransTlsConnecting.h"
#include "MTlsTransStateOwner.h"
-
-const TInt KConnectTLSTimeout = 10000; // 10 seconds
+// SIP layer waits 30 seconds for TLS Handshake to happen, if the timer
+// fires and negotiation does not happen, it cancels the handshake assuming
+// some problem while handshaking.
+const TInt KConnectTLSTimeout = 30000; // 30 seconds
// -----------------------------------------------------------------------------
// TTlsTransTlsConnecting::EnterL
--- a/realtimenetprots/sipfw/SIP/Group/sipcodec.mmp Tue May 25 13:04:58 2010 +0300
+++ b/realtimenetprots/sipfw/SIP/Group/sipcodec.mmp Wed Jun 09 10:04:26 2010 +0300
@@ -135,7 +135,8 @@
LIBRARY estor.lib
LIBRARY charconv.lib
LIBRARY inetprotutil.lib
-
+LIBRARY featdiscovery.lib
+
VENDORID 0x70000001
CAPABILITY All -Tcb
--- a/sipplugins/sippsystemstatemonitor/src/sipdevicestateaware.cpp Tue May 25 13:04:58 2010 +0300
+++ b/sipplugins/sippsystemstatemonitor/src/sipdevicestateaware.cpp Wed Jun 09 10:04:26 2010 +0300
@@ -219,8 +219,11 @@
if( iObservers.Count() == iCount)
{
iGuardTimer->Cancel();
- iStateAwareSession.AcknowledgeStateNotification(KErrNone);
- iCount = 0;
+ if(iState == CSipSystemStateMonitor::ESystemOffline)
+ {
+ iStateAwareSession.AcknowledgeStateNotification(KErrNone);
+ iCount = 0;
+ }
}
}
@@ -231,7 +234,10 @@
void CSipDeviceStateAware::EventProcessingCompleted()
{
iGuardTimer->Cancel();
- iStateAwareSession.AcknowledgeStateNotification(KErrNone);
- iCount = 0;
+ if(iState == CSipSystemStateMonitor::ESystemOffline)
+ {
+ iStateAwareSession.AcknowledgeStateNotification(KErrNone);
+ iCount = 0;
+ }
}
--- a/sipplugins/sippsystemstatemonitor/src/sipvpnmonitorao.cpp Tue May 25 13:04:58 2010 +0300
+++ b/sipplugins/sippsystemstatemonitor/src/sipvpnmonitorao.cpp Wed Jun 09 10:04:26 2010 +0300
@@ -191,9 +191,11 @@
// SIP deregistration has been completed. Stop the guard timer and tell
// the VPN client about it.
iGuardTimer->Cancel();
-
- iProperty.Set( KPSVpnSipUid, KVpnSipState, ESipDeregisterCompleted );
- iCount = 0;
+ if (iState == CSipSystemStateMonitor::EVpnInitiating)
+ {
+ iProperty.Set( KPSVpnSipUid, KVpnSipState, ESipDeregisterCompleted );
+ iCount = 0;
+ }
}
// -----------------------------------------------------------------------------