--- a/realtimenetprots/sipfw/ProfileAgent/ApnManager/inc/sipapnconfigurationhandler.h Fri Jun 11 14:01:23 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/ApnManager/inc/sipapnconfigurationhandler.h Wed Jun 23 18:36:31 2010 +0300
@@ -140,10 +140,8 @@
/**
* Reads the APN of specified IAP.
- * @param aIapId IAP id
- * @return APN or NULL if not found. Ownership is transferred.
*/
- HBufC8* ReadCurrentApnL();
+ void ReadCurrentApnL();
private: // Constructors
--- a/realtimenetprots/sipfw/ProfileAgent/ApnManager/src/sipapnconfigurationhandler.cpp Fri Jun 11 14:01:23 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/ApnManager/src/sipapnconfigurationhandler.cpp Wed Jun 23 18:36:31 2010 +0300
@@ -126,7 +126,7 @@
// CSIPApnConfigurationHandler::ReadCurrentApnL
// -----------------------------------------------------------------------------
//
-HBufC8* CSIPApnConfigurationHandler::ReadCurrentApnL()
+void CSIPApnConfigurationHandler::ReadCurrentApnL()
{
HBufC8* apn(NULL);
@@ -193,15 +193,13 @@
delete iCurrentApn;
iCurrentApn = NULL;
- iCurrentApn = apn->AllocL();
+ iCurrentApn = apn;
}
db->ClearAttributeMask( ECDHidden );
CleanupStack::PopAndDestroy( iapRecord );
CleanupStack::PopAndDestroy( db );
-
- return apn;
}
// -----------------------------------------------------------------------------
@@ -327,6 +325,7 @@
User::LeaveIfError( iSocketSrv.Connect() );
iRepository = CRepository::NewL( KCRUidCmManager );
+ ReadCurrentApnL();
PROFILE_DEBUG1(
"CSIPApnConfigurationHandler::ConstructL() exit" )
}
@@ -478,16 +477,12 @@
"CSIPApnConfigurationHandler::ApnChangeNeededL()" )
TBool apnChangeNeeded( EFalse );
- HBufC8* currentApn = ReadCurrentApnL();
-
- if ( currentApn && currentApn->Compare( aApn ) != 0 )
+ if ( iCurrentApn && iCurrentApn->Compare( aApn ) != 0 )
{
// Apn is not the same as wanted
apnChangeNeeded = ETrue;
}
- delete currentApn;
-
PROFILE_DEBUG3(
"CSIPApnConfigurationHandler::ApnChangeNeededL(), apnChangeNeeded",
apnChangeNeeded )
@@ -796,13 +791,12 @@
const TDesC8& aNewApn,
TInt aError )
{
- if ( !IsPrimaryApnUsed() )
+ HBufC8* currentApn = aNewApn.AllocL();
+ delete iCurrentApn;
+ iCurrentApn = NULL;
+ iCurrentApn = currentApn;
+ if ( IsPrimaryApnUsed() )
{
- HBufC8* currentApn = aNewApn.AllocL();
- delete iCurrentApn;
- iCurrentApn = NULL;
- iCurrentApn = currentApn;
-
iObserver.ApnChanged( *iCurrentApn, iIapId, aError );
}
}
--- a/realtimenetprots/sipfw/ProfileAgent/IETF_Agent/src/Sipietfprofilecontext.cpp Fri Jun 11 14:01:23 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/IETF_Agent/src/Sipietfprofilecontext.cpp Wed Jun 23 18:36:31 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 Fri Jun 11 14:01:23 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Src/Sipimsprofilecontext.cpp Wed Jun 23 18:36:31 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 Fri Jun 11 14:01:23 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileCacheItem.cpp Wed Jun 23 18:36:31 2010 +0300
@@ -571,6 +571,7 @@
void CSIPProfileCacheItem::VpnInUse(TBool aStatus)
{
iIsVpnInUse = aStatus;
+ iCurrentState->ShutdownInitiated(*this);
}
// -----------------------------------------------------------------------------
--- a/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileServerCore.cpp Fri Jun 11 14:01:23 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/Server/Src/SipProfileServerCore.cpp Wed Jun 23 18:36:31 2010 +0300
@@ -242,6 +242,15 @@
TUint32 aContextId)
{
CSIPProfileCacheItem* item = ProfileCacheItem(aProfile.Id());
+
+ if(aContextId == 0 && item)
+ {
+ if(item->IsApnSwitchEnabled())
+ {
+ UsePrimaryApn(aProfile.IapId());
+ }
+ }
+
TRAPD(err, SIPProfileStatusEventL(aProfile.Id(), aContextId));
if (err != KErrNone)
@@ -336,7 +345,20 @@
item->IsVpnInUse()))
ConfirmSystemstateMonitor(CSipSystemStateMonitor::EVpnState);
}
- }
+
+ if(FeatureManager::FeatureSupported( KFeatureIdFfSipApnSwitching))
+ {
+ if(item && item->IsApnSwitchEnabled() && aContextId)
+ {
+ CSIPConcreteProfile::TStatus status;
+ iPluginDirector->State( status, item->Profile() );
+ if(status == CSIPConcreteProfile::EUnregistered)
+ {
+ UseBackupApn(item->Profile().IapId(), EFalse);
+ }
+ }
+ }
+ }
CheckServerStatus();
}
@@ -475,11 +497,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 +537,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 +586,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)
{
@@ -1646,26 +1667,33 @@
CSIPConcreteProfile::TStatus aStatus,
TInt aError)
{
- TInt err(aError);
- if (aStatus == CSIPConcreteProfile::EUnregistrationInProgress)
+ PROFILE_DEBUG3("CSIPProfileServerCore::HandleAsyncError, error", aError)
+ TBool isFatal(EFalse);
+ if(aError != KErrSIPApnSwitchNonFatalFailure)
{
- err = KErrNone;
- }
+ TInt err(aError);
+ if (aStatus == CSIPConcreteProfile::EUnregistrationInProgress)
+ {
+ err = KErrNone;
+ }
- if (HandleProfileError(aItem, err))
- {
- if (err == KErrTotalLossOfPrecision)
- {
- TRAP_IGNORE(SendUnregisteredStatusEventL(aItem))
- }
- else
- {
- SendErrorEvent(aItem, aStatus, aError);
- }
- }
+ if (HandleProfileError(aItem, err))
+ {
+ if (err == KErrTotalLossOfPrecision)
+ {
+ TRAP_IGNORE(SendUnregisteredStatusEventL(aItem))
+ }
+ else
+ {
+ SendErrorEvent(aItem, aStatus, aError);
+ isFatal = ETrue;
+ }
+ }
+ }
+
if(aItem.IsApnSwitchEnabled())
{
- UseBackupApn(aItem.Profile().IapId(), ETrue);
+ UseBackupApn(aItem.Profile().IapId(), isFatal);
}
}
@@ -2401,7 +2429,7 @@
{
PROFILE_DEBUG1("CSIPProfileServerCore::UseBackupApn")
- if ( iApnManager->IsFailed( aIapId ) || aFatalFailure )
+ if ( !iApnManager->IsFailed( aIapId ) || aFatalFailure )
{
iApnManager->SetFailed( aIapId, ETrue, aFatalFailure );
}
--- a/realtimenetprots/sipfw/ProfileAgent/profile_fsm/src/Sipprflregisteredstate.cpp Fri Jun 11 14:01:23 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/profile_fsm/src/Sipprflregisteredstate.cpp Wed Jun 23 18:36:31 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 Fri Jun 11 14:01:23 2010 +0300
+++ b/realtimenetprots/sipfw/ProfileAgent/profile_fsm/src/sipprflregistrationinprogressstate.cpp Wed Jun 23 18:36:31 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 Fri Jun 11 14:01:23 2010 +0300
+++ b/realtimenetprots/sipfw/SIP/Codec/src/CSIPAcceptEncodingHeader.cpp Wed Jun 23 18:36:31 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 Fri Jun 11 14:01:23 2010 +0300
+++ b/realtimenetprots/sipfw/SIP/Codec/src/SIPSyntaxCheck.cpp Wed Jun 23 18:36:31 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 Fri Jun 11 14:01:23 2010 +0300
+++ b/realtimenetprots/sipfw/SIP/Codec/src/SIPSyntaxCheck.h Wed Jun 23 18:36:31 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 Fri Jun 11 14:01:23 2010 +0300
+++ b/realtimenetprots/sipfw/SIP/Codec/src/TSIPChar.h Wed Jun 23 18:36:31 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 Fri Jun 11 14:01:23 2010 +0300
+++ b/realtimenetprots/sipfw/SIP/Codec/src/TSIPChar.inl Wed Jun 23 18:36:31 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 Fri Jun 11 14:01:23 2010 +0300
+++ b/realtimenetprots/sipfw/SIP/ConnectionMgr/src/CTransport.cpp Wed Jun 23 18:36:31 2010 +0300
@@ -274,7 +274,7 @@
if ( IsConnectedTransport() )
{
TResponseRoute route( id, aRemoteAddr );
- iIDArray.Append( route );
+ iIDArray.AppendL( route );
}
TRAP( leaveValue,
receiver->ReceiveL( static_cast<CSIPRequest*>( aMessage ) ) );
--- a/realtimenetprots/sipfw/SIP/ConnectionMgr/src/TTlsTransTlsConnecting.cpp Fri Jun 11 14:01:23 2010 +0300
+++ b/realtimenetprots/sipfw/SIP/ConnectionMgr/src/TTlsTransTlsConnecting.cpp Wed Jun 23 18:36:31 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 Fri Jun 11 14:01:23 2010 +0300
+++ b/realtimenetprots/sipfw/SIP/Group/sipcodec.mmp Wed Jun 23 18:36:31 2010 +0300
@@ -135,7 +135,8 @@
LIBRARY estor.lib
LIBRARY charconv.lib
LIBRARY inetprotutil.lib
-
+LIBRARY featdiscovery.lib
+
VENDORID 0x70000001
CAPABILITY All -Tcb
--- a/realtimenetprots/sipfw/SIP/Server/src/CSipCSSession.cpp Fri Jun 11 14:01:23 2010 +0300
+++ b/realtimenetprots/sipfw/SIP/Server/src/CSipCSSession.cpp Wed Jun 23 18:36:31 2010 +0300
@@ -252,7 +252,10 @@
{
TInt handle = 0;
ITC().ReadL(aMessage,handle,ESipItcArgSubSessionHandle);
- CloseSubSession (handle);
+ if(iSubSessionIndex->AtL(handle))
+ CloseSubSession (handle);
+ else
+ {}
}
break;
--- a/realtimenetprots/sipfw/SIP/sipapi/api/siperr.h Fri Jun 11 14:01:23 2010 +0300
+++ b/realtimenetprots/sipfw/SIP/sipapi/api/siperr.h Wed Jun 23 18:36:31 2010 +0300
@@ -93,4 +93,7 @@
/** ICMP error has occured */
const TInt KErrSIPICMPFailure = -17718;
+/** Error code to indicate switching to secondary APN on non fatal error */
+const TInt KErrSIPApnSwitchNonFatalFailure = -17719;
+
#endif //SIPERR_H
--- a/rtp/srtpstack/inc/srtputils.h Fri Jun 11 14:01:23 2010 +0300
+++ b/rtp/srtpstack/inc/srtputils.h Wed Jun 23 18:36:31 2010 +0300
@@ -29,6 +29,7 @@
#include <e32std.h>
#include <f32file.h>
+#include <e32hal.h>
#ifdef SRTP_UNIT_TEST_COVERAGE
--- a/sipplugins/sippsystemstatemonitor/src/sipdevicestateaware.cpp Fri Jun 11 14:01:23 2010 +0300
+++ b/sipplugins/sippsystemstatemonitor/src/sipdevicestateaware.cpp Wed Jun 23 18:36:31 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 Fri Jun 11 14:01:23 2010 +0300
+++ b/sipplugins/sippsystemstatemonitor/src/sipvpnmonitorao.cpp Wed Jun 23 18:36:31 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;
+ }
}
// -----------------------------------------------------------------------------