--- a/genericopenlibs/openenvcore/backend/bwins/backendu.def Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/backend/bwins/backendu.def Wed Sep 15 14:02:55 2010 +0300
@@ -171,3 +171,6 @@
_memmove_r @ 170 NONAME
_lstat_r @ 171 NONAME
_unsetdefaultif_r @ 172 NONAME
+ ?freednssuffixes@CLocalSystemInterface@@QAEXPAUif_dns_suffixes@@@Z @ 173 NONAME ; void CLocalSystemInterface::freednssuffixes(struct if_dns_suffixes *)
+ ?TZServer@CLocalSystemInterface@@QAEAAVRTz@@AAH@Z @ 174 NONAME ; class RTz & CLocalSystemInterface::TZServer(int &)
+
--- a/genericopenlibs/openenvcore/backend/bwins/backendwolibrtu.def Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/backend/bwins/backendwolibrtu.def Wed Sep 15 14:02:55 2010 +0300
@@ -171,3 +171,6 @@
_memmove_r @ 170 NONAME
_lstat_r @ 171 NONAME
_unsetdefaultif_r @ 172 NONAME
+ ?freednssuffixes@CLocalSystemInterface@@QAEXPAUif_dns_suffixes@@@Z @ 173 NONAME ; void CLocalSystemInterface::freednssuffixes(struct if_dns_suffixes *)
+ ?TZServer@CLocalSystemInterface@@QAEAAVRTz@@AAH@Z @ 174 NONAME ; class RTz & CLocalSystemInterface::TZServer(int &)
+
--- a/genericopenlibs/openenvcore/backend/bwins/old_backendu.def Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/backend/bwins/old_backendu.def Wed Sep 15 14:02:55 2010 +0300
@@ -171,3 +171,6 @@
_memmove_r @ 170 NONAME
_lstat_r @ 171 NONAME
_unsetdefaultif_r @ 172 NONAME
+ ?freednssuffixes@CLocalSystemInterface@@QAEXPAUif_dns_suffixes@@@Z @ 173 NONAME ; void CLocalSystemInterface::freednssuffixes(struct if_dns_suffixes *)
+ ?TZServer@CLocalSystemInterface@@QAEAAVRTz@@AAH@Z @ 174 NONAME ; class RTz & CLocalSystemInterface::TZServer(int &)
+
--- a/genericopenlibs/openenvcore/backend/eabi/backendu.def Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/backend/eabi/backendu.def Wed Sep 15 14:02:55 2010 +0300
@@ -175,3 +175,6 @@
_memmove_r @ 174 NONAME
_lstat_r @ 175 NONAME
_unsetdefaultif_r @ 176 NONAME
+ _ZN21CLocalSystemInterface15freednssuffixesEP15if_dns_suffixes @ 177 NONAME
+ _ZN21CLocalSystemInterface8TZServerERi @ 178 NONAME
+
--- a/genericopenlibs/openenvcore/backend/eabi/backendwolibrtu.def Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/backend/eabi/backendwolibrtu.def Wed Sep 15 14:02:55 2010 +0300
@@ -175,3 +175,6 @@
_memmove_r @ 174 NONAME
_lstat_r @ 175 NONAME
_unsetdefaultif_r @ 176 NONAME
+ _ZN21CLocalSystemInterface15freednssuffixesEP15if_dns_suffixes @ 177 NONAME
+ _ZN21CLocalSystemInterface8TZServerERi @ 178 NONAME
+
--- a/genericopenlibs/openenvcore/backend/eabi/old_backendu.def Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/backend/eabi/old_backendu.def Wed Sep 15 14:02:55 2010 +0300
@@ -174,4 +174,7 @@
_memcpy_r @ 173 NONAME
_memmove_r @ 174 NONAME
_lstat_r @ 175 NONAME
- _unsetdefaultif_r @ 176 NONAME
+ _unsetdefaultif_r @ 176 NONAME
+ _ZN21CLocalSystemInterface15freednssuffixesEP15if_dns_suffixes @ 177 NONAME
+ _ZN21CLocalSystemInterface8TZServerERi @ 178 NONAME
+
--- a/genericopenlibs/openenvcore/backend/inc/fdesc.h Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/backend/inc/fdesc.h Wed Sep 15 14:02:55 2010 +0300
@@ -641,7 +641,7 @@
{
return ESocketDesc;
}
-
+ static void FreeDNSSuffixes(char ** suffixes);
protected:
TInt FinalClose();
private:
@@ -671,8 +671,10 @@
TInt StartSubConnection(void *aParam);
TInt GetInterface(void *Param, TInt aType);
TInt GetInterafceNumber(void *aParam);
- TInt GetIpAddress( void *aParam );
+ TInt EnumerateRoutes(void* aParam);
+ TInt SetNameServer(void *aParam, int aFlag);
+ TInt GetNameServer(void *aParam, int aFlag);
TInt RouteRequest(TInt aReq, void *aParam);
TInt GetInterfaceHWAddress(void *aParam);
@@ -686,11 +688,16 @@
TInt GetInterafceParamInfo( void *aParam,TInt aType);
void FindConnectionDetailsL(CArrayFixFlat<TAccessPointRecord>*& aRecordPtr, TInt& aCount);
void FindConnectionInfoL(TAccessPointRecord &aRecord,char *ptr);
- TInt GetInterfaceDetails( void *aParam ,TInt aFlag, TInt aType );
+ TInt GetInterfaceDetails( void *aParam ,TInt aFlag, TInt aType, TInt aIapId );
TInt SetInterafceParamInfo( void *aParam,TInt aType);
- TInt SetInterfaceDetails( void *aParam ,TInt aFlag, TInt aType );
-
- TInt maybe_reopen_socket()
+ TInt SetInterfaceDetails( void *aParam ,TInt aFlag, TInt aType,TInt aIapId );
+ TInt GetInterfaceAttributes(void *aParam, int aFlag);
+ TInt GetActiveInterfaceIAPIdByName(const char *aIapName,TInt& aIapId);
+ TInt SetInterfaceAttributes(void *aParam, int aFlag);
+ TInt ConvertTInetToSockAddr(const TInetAddr& aInetAddr, sockaddr * aSockAddr );
+ TInt ConvertSockToTInetAddr(const sockaddr * aSockAddr, TInetAddr& aInetAddr);
+ TInt GetInterfaceInfo(TSoInetInterfaceInfo& aIfInfo, TInt aIapId );
+ TInt maybe_reopen_socket()
{
TInt err = KErrNone;
if (!__e32_atomic_load_acq32(&iSocketPtr))
@@ -716,13 +723,18 @@
EACCESS_GETBROADCAST,
EACCESS_GETPHYSADDR,
EACCESS_GETFLAGS,
+ EACCESS_GETDEFGATEWAY,
EACCESS_SETMETRIC,
EACCESS_SETMTU,
EACCESS_SETFLAGS,
EACCESS_SETPHYSADDR,
EACTIVE_SETIP,
EACCESS_SETNETMASK,
- EACCESS_SETBROADCAST
+ EACCESS_SETBROADCAST,
+ EACCESS_GETDNSSUFFIX,
+ EACCESS_SETDNSSUFFIX,
+ EACCESS_SETNAMESERVERS,
+ EACCESS_GETNAMESERVERS
};
TPtr8 iIoctlBuf;
--- a/genericopenlibs/openenvcore/backend/inc/sysif.h Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/backend/inc/sysif.h Wed Sep 15 14:02:55 2010 +0300
@@ -36,6 +36,7 @@
#include <rpipe.h>
#include<tz.h>
+#include <e32atomics.h>
#ifdef SYMBIAN_OE_POSIX_SIGNALS
#include "signalclient.h"
@@ -114,7 +115,7 @@
*/
{
public:
- void StorePtrs(RHeap* aHeap, RFs* aFs, RSocketServ* aSs, RCommServ* aCs, RFastLock* aSsLock, RFastLock* aCsLock,RFastLock* aDefConnLock,RFastLock* aAESelectLock)
+ void StorePtrs(RHeap* aHeap, RFs* aFs, RSocketServ* aSs, RCommServ* aCs, RFastLock* aSsLock, RFastLock* aCsLock,RFastLock* aDefConnLock,RFastLock* aAESelectLock,RFastLock* aTzServerLock)
{
iHeap = aHeap;
iFs = aFs;
@@ -124,6 +125,7 @@
iCsLock = aCsLock;
iDefConnLock = aDefConnLock;
iAESelectLock = aAESelectLock;
+ iTzServerLock = aTzServerLock;
}
~TCLSICleanup()
@@ -136,6 +138,7 @@
iHeap->Close();
iDefConnLock->Close();
iAESelectLock->Close();
+ iTzServerLock->Close();
}
private:
RHeap* iHeap;
@@ -145,7 +148,8 @@
RFastLock* iSsLock;
RFastLock* iCsLock;
RFastLock* iDefConnLock;
- RFastLock* iAESelectLock;
+ RFastLock* iAESelectLock;
+ RFastLock* iTzServerLock;
};
@@ -453,6 +457,8 @@
int popen (const wchar_t* file, const wchar_t* cmd, const char* mode, int& anErrno);
int pclose (int aFid, int& anErrno);
IMPORT_C void CheckOrigins (wchar_t**& wenvp, int& aCount);
+ IMPORT_C void freednssuffixes(if_dns_suffixes * suffixes);
+
#ifdef SYMBIAN_OE_POSIX_SIGNALS
TInt SignalHandler();
IMPORT_C void InitSignalHandler();
@@ -591,6 +597,8 @@
//Save the file server session path
TInt SaveSessionPath(const TDesC& aPath);
+ static void WaitForNRequest(TRequestStatus **aStatusArray, TInt aNum);
+
static void WaitForNRequest(TRequestStatus aStatusArray[], TInt aNum);
private:
@@ -613,6 +621,8 @@
// default RConnection with the new settings.
TInt StartDefConnection();
+ // Helper function for doing an on-demand connection to RTz server
+ TInt OnDemandTZServerConnection();
private:
// NOTE: iCleanup should be the first member of CLSI, since iPrivateHeap
// will be destroyed from within iCleanup destructor.
@@ -689,6 +699,8 @@
// Default connection settings, set/cleared using setdefaultif
TConnPref* iDefConnPref;
RTz iTzServer;
+ RFastLock iTzServerLock;
+ TBool iIsRTzConnected;
RPointerArray<CSocketDesc> iSocketArray;
#ifdef SYMBIAN_OE_POSIX_SIGNALS
// Signal handler thread
@@ -842,10 +854,8 @@
#endif // SYMBIAN_OE_POSIX_SIGNALS
public:
- inline RTz & TZServer()
- {
- return iTzServer;
- }
+ IMPORT_C RTz & TZServer(TInt& aStatus);
+
//ipc server session
RIpcSession iIpcS;
friend class RFileDesTransferSession;
@@ -956,6 +966,7 @@
TUSockAddr() : TSockAddr(), iError(0) {}
TUSockAddr(TAny* addr); // constructor form of Prepare
+ TUSockAddr(const TSockAddr& aSockAddr):TSockAddr(aSockAddr),iError(0){};
IMPORT_C TUSockAddr(const TAny* addr, TUint len); // constructor form of Set
private:
void Prepare(TAny* addr);
--- a/genericopenlibs/openenvcore/backend/src/corebackend/localif.cpp Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/backend/src/corebackend/localif.cpp Wed Sep 15 14:02:55 2010 +0300
@@ -79,10 +79,42 @@
return &backend;
#endif
}
+
+EXPORT_C RTz& CLocalSystemInterface::TZServer(TInt &aStatus)
+ {
+ aStatus = OnDemandTZServerConnection();
+ return iTzServer;
+ }
+
+TInt CLocalSystemInterface::OnDemandTZServerConnection()
+ {
+ TInt v = EFalse;
+ TInt err = KErrNone;
+
+ if(__e32_atomic_load_acq32(&iIsRTzConnected))
+ return err;
+
+ iTzServerLock.Wait();
+ if (!iIsRTzConnected)
+ {
+ err = iTzServer.Connect();
+ if ( err == KErrNone )
+ {
+ err = iTzServer.ShareAuto();
+ if( err == KErrNone) {
+ v = ETrue;
+ }
+ }
+ __e32_atomic_store_rel32(&iIsRTzConnected, v);
+ }
+ iTzServerLock.Signal();
+
+ return err;
+ }
// Construction of Backend Object which is going to be singleton object for the process
EXPORT_C CLocalSystemInterface::CLocalSystemInterface() : iOpenDirList(CLocalSystemInterface::KDirGran),
-iTLDInfoList(CLocalSystemInterface::KTLDInfoListGran), iDefConnResurrect(ETrue), iDefConnPref(NULL)
+iTLDInfoList(CLocalSystemInterface::KTLDInfoListGran), iDefConnResurrect(ETrue), iDefConnPref(NULL), iIsRTzConnected(EFalse)
{
#ifdef SYMBIAN_OE_POSIX_SIGNALS
iSignalsInitialized = EFalse;
@@ -165,25 +197,17 @@
err |= iASelectLock.CreateLocal();
//Protect the iDefConnection from concurrent GetDefaultConnection calls
err |= iDefConnLock.CreateLocal();
+ //Protect the time zone server while connecting
+ err |= iTzServerLock.CreateLocal();
}
- if(err == KErrNone)
- {
- err = iTzServer.Connect();
- if(!err)
- {
- err = iTzServer.ShareAuto();
- }
- }
-
-
//Panic if any of the above operation returns with error
if (err)
{
User::Panic(KEstlibInit, err);
}
- iCleanup.StorePtrs(iPrivateHeap, &iFs, &iSs, &iCs, &iSSLock, &iCSLock,&iDefConnLock,&iASelectLock);
+ iCleanup.StorePtrs(iPrivateHeap, &iFs, &iSs, &iCs, &iSSLock, &iCSLock,&iDefConnLock,&iASelectLock,&iTzServerLock);
}
@@ -219,7 +243,6 @@
//close the RTz connection
iTzServer.Close();
-
if( iDefConnPref )
{
switch( iDefConnPref->ExtensionId() )
@@ -1740,6 +1763,11 @@
return MapError(err,anErrno);
}
+EXPORT_C void CLocalSystemInterface::freednssuffixes(if_dns_suffixes * suffixes)
+ {
+ CSocketDesc::FreeDNSSuffixes(suffixes->suffixes);
+ }
+
int CLocalSystemInterface::ioctl_complete (int fid, int cmd, void* param, TRequestStatus& aStatus, int& anErrno)
{
return iFids.ioctlcomplete(fid,cmd,param,aStatus,anErrno);
@@ -2166,7 +2194,7 @@
{
timer.After(*reqarray[numReqs+arraycount], timeout);
// Wait for any request to complete
- CLocalSystemInterface::WaitForNRequest(*reqarray, numReqs+arraycount+1);
+ CLocalSystemInterface::WaitForNRequest(reqarray, numReqs+arraycount+1);
if( (*reqarray[numReqs+arraycount]).Int() == KRequestPending)
{
// The timer hasn't fired yet.
@@ -2181,7 +2209,7 @@
}
else
{
- CLocalSystemInterface::WaitForNRequest(*reqarray, numReqs+arraycount);
+ CLocalSystemInterface::WaitForNRequest(reqarray, numReqs+arraycount);
// Completion Status of one request has been gathered
onedown = ETrue;
}
@@ -3627,6 +3655,47 @@
// Used in lieu of User::WaitForNRequest because of need to support pre-Argus builds
// ---------------------------------------------------------------------------------
//
+void CLocalSystemInterface::WaitForNRequest(TRequestStatus **aStatusArray, TInt aNum)
+ {
+ if (aNum)
+ {
+ // used to keep count of requests we have not been asked to wait for
+ TInt nOther = -1;
+ TBool done = EFalse;
+
+ do
+ {
+ ++nOther;
+ User::WaitForAnyRequest();
+ for (TInt i = 0; i < aNum; ++i)
+ {
+ if ((*aStatusArray[i]).Int() != KRequestPending)
+ {
+ done = ETrue;
+ break;
+ }
+ }
+ } while (!done);
+
+ if (nOther)
+ {
+ // Adjust the thread's signal semaphore to account for the requests
+ // we were not asked to wait for.
+ RThread thrd;
+ for (TInt i = 0; i < nOther; ++i)
+ {
+ thrd.RequestSignal();
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------------
+// CLocalSystemInterface::WaitForNRequest
+// Wait for any one of the input asynchronous requests to complete
+// Used in lieu of User::WaitForNRequest because of need to support pre-Argus builds
+// ---------------------------------------------------------------------------------
+//
void CLocalSystemInterface::WaitForNRequest(TRequestStatus aStatusArray[], TInt aNum)
{
if (aNum)
--- a/genericopenlibs/openenvcore/backend/src/corebackend/usocket.cpp Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/backend/src/corebackend/usocket.cpp Wed Sep 15 14:02:55 2010 +0300
@@ -232,7 +232,11 @@
fromaddr = (from[15]<<24)+(from[14]<<16)+(from[13]<<8)+from[12];
else
fromaddr = (from[0]<<24)+(from[1]<<16)+(from[2]<<8)+ from[3];
- *(TUint32*)sp->sa_data=fromaddr;
+ unsigned char * ptr = (unsigned char *)&fromaddr;
+ sp->sa_data[0] = ptr[0];
+ sp->sa_data[1] = ptr[1];
+ sp->sa_data[2] = ptr[2];
+ sp->sa_data[3] = ptr[3];
*len=8;
return;
}
@@ -956,7 +960,7 @@
ATOMICSOCKETOP(ret=iSocket.GetOpt(KSoTcpRcvAtMark,KSolInetTcp,*param), ret = KErrBadHandle)
break;
case SIOCGIFADDR:
- ret = GetIpAddress(aParam);
+ ret = GetInterfaceAttributes(aParam, EACTIVE_GETIP);
break;
case SIOCGIFNUM:
ret = GetInterafceNumber(aParam);
@@ -973,7 +977,37 @@
case SIOCGIFACTIVEIAP:
ret = GetActiveInterface( aParam);
break;
-
+ case SIOCGIFFLAGS:
+ ret = GetInterfaceAttributes(aParam, EACCESS_GETFLAGS);
+ break;
+ case SIOCGIFMTU:
+ ret = GetInterfaceAttributes(aParam, EACCESS_GETMTU);
+ break;
+ case SIOCGIFNETMASK:
+ ret = GetInterfaceAttributes(aParam, EACCESS_GETNETMASK);
+ break;
+ case SIOCGIFDEFGATEWAY:
+ ret = GetInterfaceAttributes(aParam, EACCESS_GETDEFGATEWAY);
+ break;
+
+ case SIOCSIFMTU:
+ ret = SetInterfaceAttributes(aParam, EACCESS_SETMTU);
+ break;
+ case SIOCENUMROUTES:
+ ret = EnumerateRoutes(aParam);
+ break;
+ case SIOCSETDNSSUFFIX:
+ ret = SetInterfaceAttributes(aParam, EACCESS_SETDNSSUFFIX);
+ break;
+ case SIOCGETDNSSUFFIX:
+ ret = GetInterfaceAttributes(aParam, EACCESS_GETDNSSUFFIX);
+ break;
+ case SIOCSNAMESERVER:
+ ret = SetNameServer(aParam,EACCESS_SETNAMESERVERS );
+ break;
+ case SIOCGNAMESERVER:
+ ret = GetNameServer(aParam, EACCESS_GETNAMESERVERS);
+ break;
default:
ret=KErrNotSupported;
break;
@@ -1017,7 +1051,7 @@
return CSockDescBase::Fcntl(anArg, aCmd);
}
-
+/*
TInt CSocketDesc :: GetIpAddress( void *aParam )
{
TInetAddr myAddr;
@@ -1031,7 +1065,7 @@
ifreq *ifr = (ifreq *)aParam;
((struct sockaddr_in *)&ifr->ifr_addr)->sin_addr.s_addr = myIP;
return KErrNone;
- }
+ }*/
TInt CSocketDesc :: GetRemoteIpAddress( void *aParam )
{
@@ -1184,279 +1218,310 @@
CleanupStack::PopAndDestroy(iapDatabase);
return;
}
+#endif // __SYMBIAN_COMPILE_UNUSED__
-TInt CSocketDesc :: SetInterfaceDetails( void *aParam ,TInt aFlag, TInt aType )
+
+
+TInt CSocketDesc::GetInterfaceInfo(TSoInetInterfaceInfo& aIfInfo, TInt aIapId )
{
- ifreq *ifr = (ifreq *)aParam;
- TPckgBuf<TSoInetIfQuery> ifq;
- TBuf8 <25> ipBuf8;
- TName aBuf;
+ TPckgBuf<TSoInetInterfaceInfo> info;
TInt ret = KErrNone;
ATOMICSOCKETOP( ret = iSocket.SetOpt(KSoInetEnumInterfaces, KSolInetIfCtrl), ret = KErrBadHandle )
if (ret != KErrNone)
{
return KErrGeneral;
}
- TPckgBuf<TSoInet6InterfaceInfo> info;
- TSoInet6InterfaceInfo &in = info();
ATOMICSOCKETOP( ret = iSocket.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, info), ret = KErrBadHandle )
while(ret == KErrNone)
{
- if(info().iName != _L("") && info().iName != _L("loop6") && info().iName != _L("loop4"))
- {
- TDes16& aName = info().iName;
- if( ((aFlag == 0 ) && ( aName.FindC(_L("WLAN")) != KErrNotFound )) ||
- ((aFlag == 1) && (aName.FindC(_L("Generic")) != KErrNotFound )) )
+ if(info().iName != _L(""))
+ {
+ TPckgBuf<TSoInetIfQuery> optifquery;
+ optifquery().iName = info().iName;
+ ATOMICSOCKETOP( ret = iSocket.GetOpt(KSoInetIfQueryByName, KSolInetIfQuery, optifquery), ret = KErrBadHandle )
+ if( ret == KErrNone)
+ {
+ if(optifquery().iZone[1] == aIapId && info().iAddress.Address() != NULL)
+ {
+ aIfInfo = info();
+ return KErrNone;
+ }
+ }
+ }
+ ATOMICSOCKETOP( ret = iSocket.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, info), ret = KErrBadHandle )
+ }
+ return KErrNotFound;
+ }
+TInt CSocketDesc :: SetInterfaceDetails( void *aParam ,TInt /*aFlag*/, TInt aType, TInt aIapId )
+ {
+ TSoInet6InterfaceInfo ifInfo;
+ TInt ret = KErrNone;
+ if((ret = GetInterfaceInfo(ifInfo,aIapId)) != KErrNone)
+ {
+ return ret;
+ }
+ ifreq *ifr = (ifreq *)aParam;
+ switch(aType)
+ {
+ case EACCESS_SETMETRIC:
+ if(ifInfo.iState == EIfUp)
{
- switch(aType)
- {
- case EACCESS_SETMETRIC:
- if(info().iState == EIfUp)
- {
- info().iSpeedMetric = ifr->ifr_metric;
- }
- goto setout;
-
- case EACCESS_SETMTU:
- if(info().iState == EIfUp)
- {
- info().iMtu = ifr->ifr_mtu ;
- }
- goto setout;
+ ifInfo.iSpeedMetric = ifr->ifr_metric;
+ }
+ break;
- case EACCESS_SETNETMASK :
- // Presently netmask address is NULL
- if((info().iState == EIfUp) && (ifr->ifr_addr.sa_data !=NULL))
- {
- /*
- CharToTBuf8(ifr->ifr_addr.sa_data,ipBuf8);
- if (CnvUtfConverter::ConvertToUnicodeFromUtf8( aBuf,ipBuf8 ) == KErrNone)
- {
- ret = info().iNetMask.Input(aBuf);
- }
- info().iNetMask.SetAddress(INET_ADDR(255,255,255,0));
- */
- return KErrNotSupported;
- }
- break;
- case EACCESS_SETBROADCAST :
- if((info().iState == EIfUp) && (ifr->ifr_broadaddr.sa_data !=NULL))
- {
- /*CharToTBuf8(ifr->ifr_broadaddr.sa_data,ipBuf8);
- if (CnvUtfConverter::ConvertToUnicodeFromUtf8( aBuf,ipBuf8 ) == KErrNone)
- {
- ret = info().iBrdAddr.Input(aBuf);
- }
- */
- return KErrNotSupported;
- }
+ case EACCESS_SETMTU:
+ if(ifInfo.iState == EIfUp)
+ {
+ ifInfo.iMtu = ifr->ifr_mtu ;
+ }
+ break;
- break;
- case EACCESS_SETPHYSADDR :
- // Currently no imeplentation is given as KIfHasHardwareAddr is always
- // set to 0 for wlan and GPRS
- if(info().iFeatures&KIfHasHardwareAddr)
- {
- return KErrNotSupported;
- }
- break;
- case EACCESS_SETFLAGS :
- info().iFeatures = 0;
- // Interface UP
- if((ifr->ifr_flags & IFF_UP) && (ifr->ifr_flags & IFF_DRV_RUNNING))
- {
- info().iState = EIfUp;
- }
- else
- {
- info().iState = EIfDown;
- }
+ case EACCESS_SETPHYSADDR :
+ // Currently no imeplentation is given as KIfHasHardwareAddr is always
+ // set to 0 for wlan and GPRS
+ if(ifInfo.iFeatures&KIfHasHardwareAddr)
+ {
+ return KErrNotSupported;
+ }
+ break;
+ case EACCESS_SETDNSSUFFIX:
+ {
+ if_dns_suffixes * dns_suffix = static_cast<if_dns_suffixes *>(aParam);
+ char **suffixes = dns_suffix->suffixes;
+ TSoInetInterfaceInfoExtnDnsSuffix interfaceInfo;
+ (TSoInetInterfaceInfo &)interfaceInfo = ifInfo;
+ interfaceInfo.iDomainSuffix.DeleteAll();
+ TPckgBuf<TSoInetInterfaceInfoExtnDnsSuffix> configInfo(interfaceInfo);
- // Loopback
- if(ifr->ifr_flags & IFF_LOOPBACK)
- {
- info().iFeatures |= KIfIsLoopback;
- }
+ ATOMICSOCKETOP(ret = iSocket.SetOpt(KSoInetConfigInterface,KSolInetIfCtrl,configInfo), ret = KErrBadHandle)
- // point to point support
- if(ifr->ifr_flags & IFF_POINTOPOINT)
- {
- info().iFeatures |= KIfIsPointToPoint;
- }
-
- // Broadcast
- if(ifr->ifr_flags & IFF_BROADCAST)
- {
- info().iFeatures |=KIfCanBroadcast;
- }
-
+ for(int i = 0; suffixes[i]; i++) //check the number of suffixes that can be configured
+ {
+ TPtrC8 suffix((const unsigned char *)suffixes[i]);
+ /*ret = configInfo().iDomainSuffix.Copy(suffix);
+ if(ret != KErrNone)
+ {
+ return ret;
+ }*/
+ ret = CnvUtfConverter::ConvertToUnicodeFromUtf8(configInfo().iDomainSuffix.iSuffixName,suffix);
+ configInfo().iDomainSuffix.iDomainSuffixFunction = EInetAddSuffix;
+ ATOMICSOCKETOP( ret = iSocket.SetOpt(KSoInetConfigInterface,KSolInetIfCtrl,configInfo), ret = KErrBadHandle)
+ if(ret != KErrNone)
+ {
+ return ret;
+ }
+
+ }
+ return ret;
+ }
+ case EACCESS_SETNAMESERVERS:
+ {
+ if_name_servers *name_server = static_cast<if_name_servers*>(aParam);
+ if((ret = ConvertSockToTInetAddr(&name_server->nameserver1,ifInfo.iNameSer1)) != KErrNone)
+ {
+ return ret;
+ }
+ if((ret = ConvertSockToTInetAddr(&name_server->nameserver2,ifInfo.iNameSer2)) != KErrNone)
+ {
+ return ret;
+ }
+ break;
+ }
- // Multicast
- if(ifr->ifr_flagshigh & IFF_MULTICAST)
- {
- info().iFeatures = KIfCanMulticast;
- }
- //these flags details are available in symbian but not used by lib layer.
- /* if(info().iFeatures&KIfCanSetMTU)
- if(info().iFeatures&KIfHasHardwareAddr)
- if(info().iFeatures&KIfCanSetHardwareAddr) */
- goto setout;
-
- default:
- break;
- }
- }
-
- }
- ATOMICSOCKETOP( ret = iSocket.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, info), ret = KErrBadHandle )
+ default:
+ return KErrArgument;
}
- setout:
- TPckgBuf<TSoInet6InterfaceInfo> changeToNew(info());
- ATOMICSOCKETOP(ret = iSocket.SetOpt(KSoInetConfigInterface, KSolInetIfCtrl,changeToNew), return KErrBadHandle )
+ TPckgBuf<TSoInet6InterfaceInfo> pkgIfInfo(ifInfo);
+ ATOMICSOCKETOP(ret = iSocket.SetOpt(KSoInetConfigInterface, KSolInetIfCtrl,pkgIfInfo), ret = KErrBadHandle)
return ret;
}
-#endif // __SYMBIAN_COMPILE_UNUSED__
-TInt CSocketDesc::GetInterfaceDetails( void *aParam ,TInt aFlag, TInt aType )
+//This function frees the memory allocated by SIOCGETDNSSUFFIX ioctl
+void CSocketDesc::FreeDNSSuffixes(char ** suffixes)
+ {
+ for(int i = 0; suffixes[i]; i++)
+ {
+ delete[] suffixes[i];
+ }
+ delete[] suffixes;
+ }
+
+TInt CSocketDesc::GetInterfaceDetails( void *aParam ,TInt /*aFlag*/, TInt aType, TInt aIapId )
{
- TPckgBuf<TSoInetIfQuery> ifq;
- TInt ret = KErrNone;
- ATOMICSOCKETOP( ret = iSocket.SetOpt(KSoInetEnumInterfaces, KSolInetIfCtrl), ret = KErrBadHandle )
- if (ret != KErrNone)
+ ifreq *ifr = (ifreq *)aParam;
+ *(ifr->ifr_addr.sa_data) = '\0';
+ TInt ret = 0;
+
+ TSoInetInterfaceInfo ifInfo;
+
+ if((ret = GetInterfaceInfo(ifInfo,aIapId)) != KErrNone)
{
- return KErrGeneral;
+ return ret;
}
-
- ifreq *ifr = (ifreq *)aParam;
- *(ifr->ifr_addr.sa_data) = '\0';
- TPckgBuf<TSoInetInterfaceInfo> info;
- ATOMICSOCKETOP( ret = iSocket.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, info), ret = KErrBadHandle )
- while( ret == KErrNone)
+ switch(aType)
{
- if(info().iName != _L("") && info().iName != _L("loop6") && info().iName != _L("loop4"))
- {
- TDes16& aName = info().iName;
- TName aBuf;
- TBuf8<KMaxName> ipAddr;
- if( ((aFlag == 0 ) && ( aName.FindC(_L("WLAN")) != KErrNotFound )) ||
- ((aFlag == 1) && (aName.FindC(_L("Generic")) != KErrNotFound )) )
+ case EACTIVE_GETIP :
+ if(ifInfo.iState == EIfUp)
+ {
+ ret = ConvertTInetToSockAddr(ifInfo.iAddress,&ifr->ifr_addr);
+ return ret;
+ }
+ break;
+ case EACCESS_GETMETRIC:
+ if(ifInfo.iState == EIfUp)
+ {
+ ifr->ifr_metric = ifInfo.iSpeedMetric;
+ return KErrNone;
+ }
+ break;
+ case EACCESS_GETMTU:
+ if(ifInfo.iState == EIfUp)
{
- switch(aType)
- {
-
- case EACTIVE_GETIP :
- if((info().iState == EIfUp) && (info().iAddress.Address() != NULL))
- {
- if(!((info().iAddress.IsLinkLocal()) || (info().iAddress.IsSiteLocal())))
- {
- info().iAddress.Output(aBuf);
- if (CnvUtfConverter::ConvertFromUnicodeToUtf8( ipAddr, aBuf ) == KErrNone)
- {
- StrlCopy(ifr->ifr_addr.sa_data,(const char *) ipAddr.PtrZ(),ipAddr.Length()+1);
- }
- }
- }
- break;
- case EACCESS_GETMETRIC:
- ifr->ifr_metric = 0;
- if (info().iState == EIfUp)
- {
- ifr->ifr_metric = info().iSpeedMetric;
- }
- break;
- case EACCESS_GETMTU:
- ifr->ifr_mtu = 0;
- if (info().iState == EIfUp)
- {
- ifr->ifr_mtu = info().iMtu;
- }
- break;
- case EACCESS_GETNETMASK :
- *(ifr->ifr_addr.sa_data) = '\0';
- // Presently netmask address is NULL
- if((info().iState == EIfUp) && (info().iNetMask.Address() != NULL))
- {
- //anAddr = info().iNetMask.Address();
- info().iNetMask.Output(aBuf);
- if (CnvUtfConverter::ConvertFromUnicodeToUtf8( ipAddr, aBuf ) == KErrNone)
- {
- StrlCopy(ifr->ifr_addr.sa_data,(const char *) ipAddr.PtrZ(),ipAddr.Length()+1);
- }
- }
- break;
- case EACCESS_GETBROADCAST :
- *(ifr->ifr_broadaddr.sa_data) = '\0';
- // Presently Breaodcast address is NULL
- if((info().iState == EIfUp) && (info().iBrdAddr.Address() != NULL))
- {
+ ifr->ifr_mtu = ifInfo.iMtu;
+ return KErrNone;
+ }
+ break;
+ case EACCESS_GETNETMASK :
+ // Presently netmask address is NULL
+ if(ifInfo.iState == EIfUp)
+ {
+ ret = ConvertTInetToSockAddr(ifInfo.iNetMask,&ifr->ifr_addr);
+ return ret;
+ }
+ break;
+ case EACCESS_GETBROADCAST :
+ // Presently Breaodcast address is NULL
+ if(ifInfo.iState == EIfUp)
+ {
+ ret = ConvertTInetToSockAddr(ifInfo.iBrdAddr,&ifr->ifr_broadaddr);
+ return ret;
+ }
+ break;
+ case EACCESS_GETDNSSUFFIX:
+ {
- //anAddr = info().iBrdAddr.Address();
- info().iBrdAddr.Output(aBuf);
- if (CnvUtfConverter::ConvertFromUnicodeToUtf8( ipAddr, aBuf ) == KErrNone)
- {
- StrlCopy(ifr->ifr_broadaddr.sa_data,(const char *) ipAddr.PtrZ(),ipAddr.Length()+1);
- }
- }
- break;
- case EACCESS_GETPHYSADDR :
- ifr->ifr_phys = 0;
- // Currently no imeplentation is given as KIfHasHardwareAddr is always
- // set to 0 for wlan and GPRS
- if(info().iFeatures&KIfHasHardwareAddr)
- {
- //nada.
- }
- break;
- case EACCESS_GETFLAGS :
- ifr->ifr_flags = 0;
- ifr->ifr_flagshigh=0;
- // Interface UP
- if(info().iState == EIfUp)
- {
- ifr->ifr_flags |= IFF_UP;
- ifr->ifr_flags |= IFF_DRV_RUNNING;
- }
- // Loopback
- if(info().iFeatures&KIfIsLoopback)
- {
- ifr->ifr_flags |= IFF_LOOPBACK;
- }
+ TInetSuffix data;
+ TPckgBuf<TInetSuffix> opt(data);
+ // Set the option to start enumeration of domain suffix on the active interface
+ TInt err = KErrNone;
+ ATOMICSOCKETOP( err = iSocket.SetOpt(KSoInetEnumDomainSuffix, KSolInetIfCtrl), err = KErrBadHandle)
+ if(err != KErrNone)
+ {
+ return err;
+ }
+ struct if_dns_suffixes * dns_suffix = static_cast<if_dns_suffixes *>(aParam);
+ RPointerArray<char> suffixArray;
+ ATOMICSOCKETOP (err = iSocket.GetOpt(KSoInetNextDomainSuffix, KSolInetIfCtrl, opt),err = KErrBadHandle)
+ while(err == KErrNone)
+ {
+ char *suffix = new char[opt().iSuffixName.Length()+1];
+ if((ret = suffixArray.Append(suffix)) != KErrNone)
+ {
+ suffixArray.ResetAndDestroy();
+ return ret;
+ }
+ TPtr8 ptr((unsigned char *)suffix,opt().iSuffixName.Length()+1);
+ ret = CnvUtfConverter::ConvertFromUnicodeToUtf8(ptr,opt().iSuffixName);
+ //ptr.Copy(opt().iSuffixName);
+ if(ret != KErrNone)
+ {
+ suffixArray.ResetAndDestroy();
+ return ret;
+ }
+ ptr.ZeroTerminate();
+ ATOMICSOCKETOP (err = iSocket.GetOpt(KSoInetNextDomainSuffix, KSolInetIfCtrl, opt),err = KErrBadHandle)
+ }
+
+ dns_suffix->suffixes = new char*[suffixArray.Count() + 1];
+ for(int i = 0 ; i< suffixArray.Count(); i++)
+ {
+ dns_suffix->suffixes[i] = suffixArray[i];
+ }
+ dns_suffix->suffixes[suffixArray.Count()] = NULL;
+ suffixArray.Close();
+ return KErrNone;
- // point to point support
- if(info().iFeatures&KIfIsPointToPoint)
- {
- ifr->ifr_flags |= IFF_POINTOPOINT;
- }
-
- // Broadcast
- if(info().iFeatures&KIfCanBroadcast)
- {
- ifr->ifr_flags |= IFF_BROADCAST;
- }
+ }
+
+ case EACCESS_GETNAMESERVERS:
+ {
+ if_name_servers *name_server = static_cast<if_name_servers*>(aParam);
+ if((ret = ConvertTInetToSockAddr(ifInfo.iNameSer1, &name_server->nameserver1)) != KErrNone)
+ {
+ return ret;
+ }
+ if((ret = ConvertTInetToSockAddr(ifInfo.iNameSer2, &name_server->nameserver2)) != KErrNone)
+ {
+ return ret;
+ }
+ return KErrNone;
+
+ }
+
+ case EACCESS_GETPHYSADDR :
+ ifr->ifr_phys = 0;
+ // Currently no imeplentation is given as KIfHasHardwareAddr is always
+ // set to 0 for wlan and GPRS
+ if(ifInfo.iFeatures&KIfHasHardwareAddr)
+ {
+ //nada.
+ }
+ return KErrNotSupported;
- // Multicast
- if(info().iFeatures&KIfCanMulticast)
- {
- ifr->ifr_flagshigh |= ((IFF_MULTICAST & 0xff00) >> 8);
- }
- //these flags details are available in symbian but not used by lib layer.
- /* if(info().iFeatures&KIfCanSetMTU)
- if(info().iFeatures&KIfHasHardwareAddr)
- if(info().iFeatures&KIfCanSetHardwareAddr) */
+ case EACCESS_GETDEFGATEWAY:
+ if(ifInfo.iState == EIfUp)
+ {
+ ret = ConvertTInetToSockAddr(ifInfo.iDefGate,&ifr->ifr_defgatewayaddr);
+ return ret;
+ }
+ break;
+
- break;
-
- }
+ case EACCESS_GETFLAGS :
+ ifr->ifr_flags = 0;
+ ifr->ifr_flagshigh=0;
+ // Interface UP
+ if(ifInfo.iState == EIfUp)
+ {
+ ifr->ifr_flags |= IFF_UP;
+ ifr->ifr_flags |= IFF_DRV_RUNNING;
+ }
+ // Loopback
+ if(ifInfo.iFeatures&KIfIsLoopback)
+ {
+ ifr->ifr_flags |= IFF_LOOPBACK;
+ }
+
+ // point to point support
+ if(ifInfo.iFeatures&KIfIsPointToPoint)
+ {
+ ifr->ifr_flags |= IFF_POINTOPOINT;
}
- }
- ATOMICSOCKETOP( ret = iSocket.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, info), ret = KErrBadHandle )
+ // Broadcast
+ if(ifInfo.iFeatures&KIfCanBroadcast)
+ {
+ ifr->ifr_flags |= IFF_BROADCAST;
+ }
+
+ // Multicast
+ if(ifInfo.iFeatures&KIfCanMulticast)
+ {
+ ifr->ifr_flagshigh |= ((IFF_MULTICAST & 0xff00) >> 8);
+ }
+ return KErrNone;
+
+ default:
+ return KErrArgument;
}
- return KErrNone;
+
+ return KErrNotFound;
+
}
TInt CSocketDesc::Poll(TPollMode aMode,TBool& aReadyStatus,TInt& aErrno)
@@ -1673,7 +1738,7 @@
{
servFlag = 1;
}
- GetInterfaceDetails(ifr,servFlag,EACTIVE_GETIP);
+ GetInterfaceDetails(ifr,servFlag,EACTIVE_GETIP,ref.iId);
}
}
ifc->ifc_len = sizeof(ifreq) * apIndex;
@@ -2246,3 +2311,154 @@
ifr->ifr_index = opt().iZone[1]; //IAP_ID
return KErrNone;
}
+
+
+TInt CSocketDesc::GetActiveInterfaceIAPIdByName(const char *aIapName,TInt& aIapId)
+ {
+
+ TInt rcIndex = 0;
+ RConnection *rc;
+ TAccessPointRecord tempRecord;
+ char iapName[IFNAMSIZ];
+ TInt ret = KErrNotFound;
+// ifreq * ifr = static_cast<ifreq *> (aParam); //may not work, will have to reinterper_cast
+
+ while(((CFileTable*)iFids)->RConnectionAt(rcIndex++, rc) == KErrNone)
+ {
+ if( GetRConnectionDetails(rc, tempRecord) != KErrNone )
+ {
+ continue;
+ }
+ TPtr8 ptr((TText8*)iapName, IFNAMSIZ-1);
+
+ ret = CnvUtfConverter::ConvertFromUnicodeToUtf8(ptr, tempRecord.iName);
+ if(ret == KErrNone)
+ {
+ ptr.ZeroTerminate();
+ if(StrCmp(iapName, aIapName) == 0)
+ {
+ aIapId = tempRecord.iId;
+ return KErrNone;
+ }
+ }
+ }
+ return ret; //is it okay? ret contains rite val?
+ }
+//converts Symbian Inetaddres structure to posix sockaddr structure
+TInt CSocketDesc::ConvertTInetToSockAddr(const TInetAddr& aInetAddr, sockaddr * aSockAddr )
+ {
+ TUSockAddr addr(aInetAddr);
+ unsigned long len = sizeof(sockaddr);
+ addr.Get(aSockAddr,&len);
+ return addr.iError;
+ }
+
+//converts posix sockaddr structure to Symbian Inetaddres structure
+TInt CSocketDesc::ConvertSockToTInetAddr(const sockaddr * aSockAddr, TInetAddr& aInetAddr)
+ {
+ unsigned int len = sizeof(sockaddr);
+ TUSockAddr addr(aSockAddr,len);
+ aInetAddr = addr;
+ return addr.iError;
+ }
+
+//Gets the Iap id by IAP name and using iap id gets the interface details
+TInt CSocketDesc::GetInterfaceAttributes(void *aParam, int aFlag)
+ {
+ ifreq * ifr = static_cast<ifreq *> (aParam); //may not work, will have to reinterper_cast
+ TInt ret = KErrGeneral, iapId;
+ ret = GetActiveInterfaceIAPIdByName(ifr->ifr_name,iapId);
+ if(ret == KErrNone)
+ {
+ ret = GetInterfaceDetails( ifr ,0, aFlag, iapId); //what to do with return value
+ }
+ return ret;
+
+ }
+
+//Gets the Iap id by IAP name and using iap id sets the interface details
+TInt CSocketDesc::SetInterfaceAttributes(void *aParam, int aFlag)
+ {
+ ifreq * ifr = static_cast<ifreq *> (aParam); //access of only if_name guaranteed to work.
+ TInt ret = KErrGeneral, iapId;
+ ret = GetActiveInterfaceIAPIdByName(ifr->ifr_name,iapId);
+ if(ret == KErrNone)
+ {
+ ret = SetInterfaceDetails( aParam ,0, aFlag, iapId); //what to do with return value
+ }
+ return ret;
+ }
+
+//Enumerates the routes configured on the system
+TInt CSocketDesc::EnumerateRoutes(void *aParam)
+ {
+ TInt ret = KErrNone;
+ rtconf *rtc = (rtconf*)aParam;
+ TInt routeCount = (rtc->rt_len) /sizeof (route_entry);
+ route_entry *rtentry = rtc->rtc_rtcu.rtcu_entry;
+ ATOMICSOCKETOP(ret = iSocket.SetOpt(KSoInetEnumRoutes, KSolInetRtCtrl),ret = KErrBadHandle)
+ if(ret != KErrNone )
+ {
+ return ret;
+ }
+ //If the length is zero, we fill the number of routes available information
+ TInt count = 0;
+ TPckgBuf<TSoInetRouteInfo> route;
+ if(routeCount <=0 || rtc->rtc_buf ==NULL)
+ {
+ ATOMICSOCKETOP(ret = iSocket.GetOpt(KSoInetNextRoute, KSolInetRtCtrl, route), ret = KErrBadHandle)
+ while(ret == KErrNone)
+ {
+ count++;
+ ATOMICSOCKETOP(ret = iSocket.GetOpt(KSoInetNextRoute, KSolInetRtCtrl, route), ret = KErrBadHandle)
+ }
+ rtc->rt_len = count * sizeof(route_entry) ;
+ return KErrNone;
+ }
+ for(TInt i=0; i<routeCount ; i++)
+ {
+ ATOMICSOCKETOP(ret = iSocket.GetOpt(KSoInetNextRoute, KSolInetRtCtrl, route),ret = KErrBadHandle)
+ if(ret != KErrNone)
+ {
+ break;
+ }
+ ConvertTInetToSockAddr(route().iDstAddr, &rtentry[i].dst_addr);
+ ConvertTInetToSockAddr(route().iIfAddr, &rtentry[i].ifaddr);
+ ConvertTInetToSockAddr(route().iGateway, &rtentry[i].gateway_addr);
+ ConvertTInetToSockAddr(route().iNetMask, &rtentry[i].dst_netmask);
+ TInt state = route().iState;
+ TInt type = route().iType;
+ rtentry[i].rt_metric = route().iMetric;
+ rtentry[i].rt_flags.state = state;
+ rtentry[i].rt_flags.type = type;
+
+ }
+
+ return KErrNone;
+ }
+
+//Sets the nameserver of an interface
+TInt CSocketDesc::SetNameServer(void *aParam, int aFlag)
+ {
+ if_name_servers * dns_server = static_cast<if_name_servers *> (aParam); //access of only if_name guaranteed to work.
+ TInt iapId;
+ TInt ret = GetActiveInterfaceIAPIdByName(dns_server->if_name, iapId);
+ if(ret == KErrNone)
+ {
+ ret = SetInterfaceDetails( aParam ,0, aFlag, iapId); //what to do with return value
+ }
+ return ret;
+ }
+
+//Gets the nameserver of an interface
+TInt CSocketDesc::GetNameServer(void *aParam, int aFlag)
+ {
+ if_name_servers * dns_server = static_cast<if_name_servers *> (aParam); //access of only if_name guaranteed to work.
+ TInt iapId;
+ TInt ret = GetActiveInterfaceIAPIdByName(dns_server->if_name, iapId);
+ if(ret == KErrNone)
+ {
+ ret = GetInterfaceDetails( dns_server ,0, aFlag, iapId); //what to do with return value
+ }
+ return ret;
+ }
--- a/genericopenlibs/openenvcore/backend/src/corebackend/usocketbase.cpp Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/backend/src/corebackend/usocketbase.cpp Wed Sep 15 14:02:55 2010 +0300
@@ -114,7 +114,7 @@
{
ATOMICSOCKETOP(iSocket.Send(aBuf.Mid(bytesWritten), 0, tempStatus, len),Complete(tempStatus,KErrBadHandle))
User::WaitForRequest(tempStatus);
- if (len() == 0)
+ if (len() == 0 || tempStatus.Int() == KErrDisconnected )
{
break;
}
--- a/genericopenlibs/openenvcore/include/net/if.h Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/include/net/if.h Wed Sep 15 14:02:55 2010 +0300
@@ -277,7 +277,8 @@
struct sockaddr ifru_addr;
struct sockaddr ifru_dstaddr;
struct sockaddr ifru_broadaddr;
- struct sockaddr ifru_hwaddr;
+ struct sockaddr ifru_hwaddr;
+ struct sockaddr ifru_defgatewayaddr;
short ifru_flags[2];
short ifru_index;
int ifru_metric;
@@ -304,6 +305,7 @@
#define ifr_reqcap ifr_ifru.ifru_cap[0] /* requested capabilities */
#define ifr_curcap ifr_ifru.ifru_cap[1] /* current capabilities */
#define ifr_index ifr_ifru.ifru_index /* interface index */
+#define ifr_defgatewayaddr ifr_ifru.ifru_defgatewayaddr /* default gateway address*/
};
#define _SIZEOF_ADDR_IFREQ(ifr) \
@@ -408,6 +410,25 @@
IMPORT_C int unsetdefaultif();
#endif
+#ifdef __SYMBIAN32__
+
+#define MAXDNSSUFFIXES 16
+
+struct if_dns_suffixes
+{
+char if_name[IFNAMSIZ];
+char ** suffixes;
+};
+
+void freednssuffixes(struct if_dns_suffixes *);
+struct if_name_servers
+ {
+ char if_name[IFNAMSIZ];
+ struct sockaddr nameserver1;
+ struct sockaddr nameserver2;
+ };
+#endif
+
#ifdef __SYMBIAN32__
#ifdef __cplusplus
}
--- a/genericopenlibs/openenvcore/include/net/route.h Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/include/net/route.h Wed Sep 15 14:02:55 2010 +0300
@@ -138,6 +138,36 @@
#endif //__SYMBIAN32__
};
+#ifdef __SYMBIAN32__
+struct rtconf
+ {
+ int rt_len; //size of the allocated buffer
+ union
+ {
+ caddr_t rtcu_buf;
+ struct route_entry * rtcu_entry;
+ }rtc_rtcu;
+#define rtc_buf rtc_rtcu.rtcu_buf /* buffer address */
+#define rtc_req rtc_rtcu.rtcu_entry /* array of structures returned */
+ };
+
+struct route_entry
+ {
+ struct sockaddr ifaddr; //address of the interface
+ struct sockaddr dst_addr; //destination address
+ struct sockaddr gateway_addr;
+ struct sockaddr dst_netmask;
+ struct
+ {
+ int state;
+ int type;
+ }rt_flags;
+ short int rt_metric;
+ char rt_dev[IFNAMSIZ]; //name of the interface
+ };
+#endif
+
+
#define RTF_UP 0x1 /* route usable */
#define RTF_GATEWAY 0x2 /* destination is a gateway */
#define RTF_HOST 0x4 /* host entry (net otherwise) */
--- a/genericopenlibs/openenvcore/include/sys/sockio.dosc Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/include/sys/sockio.dosc Wed Sep 15 14:02:55 2010 +0300
@@ -98,3 +98,76 @@
@released
*/
+/** @def SIOCGIFFLAGS
+Socket Ioctl option. Gets MAC address.
+
+@publishedAll
+@released
+*/
+
+/** @def SIOCGIFMTU
+
+Socket Ioctl option. Gets IF MTU .
+
+@publishedAll
+@released
+*/
+
+
+/** @def SIOCGIFNETMASK
+Socket Ioctl option. Gets net addr mask .
+
+@publishedAll
+@released
+*/
+
+/** @def SIOCGIFDEFGATEWAY
+Socket Ioctl option. Gets the default gateway of the interface .
+
+@publishedAll
+@released
+*/
+
+
+/** @def SIOCSIFMTU
+Socket Ioctl option. set IF mtu .
+
+@publishedAll
+@released
+*/
+
+/** @def SIOCENUMROUTES
+Socket Ioctl option. Enumerate routes .
+
+@publishedAll
+@released
+*/
+
+/** @def SIOCSETDNSSUFFIX
+Socket Ioctl option. Sets the dns suffixes of the interface .
+
+@publishedAll
+@released
+*/
+
+/** @def SIOCGETDNSSUFFIX
+Socket Ioctl option. Gets the dns suffixes of the interface .
+
+@publishedAll
+@released
+*/
+
+/** @def SIOCSNAMESERVER
+Socket Ioctl option. Sets the name server on the interface .
+
+@publishedAll
+@released
+*/
+
+
+/** @def SIOCGNAMESERVER
+Socket Ioctl option. Get the name server on the interface .
+
+@publishedAll
+@released
+*/
\ No newline at end of file
--- a/genericopenlibs/openenvcore/include/sys/sockio.h Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/include/sys/sockio.h Wed Sep 15 14:02:55 2010 +0300
@@ -53,7 +53,20 @@
#define SIOCGIFNUM _IOR('i', 87, int) /* get interface numbers */
#define SIOCADDRT _IOW('r', 12, struct rtentry) /* add route */
#define SIOCDELRT _IOW('r', 13, struct rtentry) /* delete route */
+#define SIOCENUMROUTES _IOWR('r', 14, struct rtentry) /*enumerate routes*/
#define SIOCGIFHWADDR _IOW('s', 14, struct ifreq) /* get MAC address*/
+#define SIOCGIFFLAGS _IOWR('i', 17, struct ifreq) /* get ifnet flags */
+#define SIOCGIFMTU _IOWR('i', 51, struct ifreq) /* get IF mtu */
+#define SIOCGIFNETMASK _IOWR('i', 37, struct ifreq) /* get net addr mask */
+#define SIOCSIFADDR _IOW('i', 12, struct ifreq) /* set ifnet address */
+#define SIOCSIFFLAGS _IOW('i', 16, struct ifreq) /* set ifnet flags */
+#define SIOCSIFMTU _IOW('i', 52, struct ifreq) /* set IF mtu */
+#define SIOCSIFNETMASK _IOW('i', 22, struct ifreq) /* set net addr mask */
+#define SIOCGIFDEFGATEWAY _IOWR('i',123,struct ifreq) /* get the default gateway of the interface */
+#define SIOCSETDNSSUFFIX _IOWR('i',124,struct if_dns_suffixes) /* set the dns suffixes of the interface */
+#define SIOCGETDNSSUFFIX _IOWR('i',125,struct if_dns_suffixes) /* get the dns suffixes of the interface */
+#define SIOCSNAMESERVER _IOWR('i', 41, struct if_name_servers) /*Set the name server on the interface */
+#define SIOCGNAMESERVER _IOWR('i', 42, struct if_name_servers) /*Get the name server on the interface*/
#else // __SYMBIAN32__
#define SIOCSHIWAT _IOW('s', 0, int) /* set high watermark */
#define SIOCGHIWAT _IOR('s', 1, int) /* get high watermark */
--- a/genericopenlibs/openenvcore/libc/bwins/libcu.def Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/libc/bwins/libcu.def Wed Sep 15 14:02:55 2010 +0300
@@ -595,4 +595,6 @@
set_fmode @ 594 NONAME
get_fmode @ 595 NONAME
sigenable @ 596 NONAME
- unsetdefaultif @ 597 NONAME
+ unsetdefaultif @ 597 NONAME
+ freednssuffixes @ 598 NONAME
+
--- a/genericopenlibs/openenvcore/libc/bwins/old_libcu.def Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/libc/bwins/old_libcu.def Wed Sep 15 14:02:55 2010 +0300
@@ -595,4 +595,6 @@
set_fmode @ 594 NONAME
get_fmode @ 595 NONAME
sigenable @ 596 NONAME
- unsetdefaultif @ 597 NONAME
+ unsetdefaultif @ 597 NONAME
+ freednssuffixes @ 598 NONAME
+
--- a/genericopenlibs/openenvcore/libc/eabi/libcu.def Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/libc/eabi/libcu.def Wed Sep 15 14:02:55 2010 +0300
@@ -595,4 +595,6 @@
set_fmode @ 594 NONAME
get_fmode @ 595 NONAME
sigenable @ 596 NONAME
- unsetdefaultif @ 597 NONAME
+ unsetdefaultif @ 597 NONAME
+ freednssuffixes @ 598 NONAME
+
--- a/genericopenlibs/openenvcore/libc/eabi/old_libcu.def Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/libc/eabi/old_libcu.def Wed Sep 15 14:02:55 2010 +0300
@@ -595,4 +595,6 @@
set_fmode @ 594 NONAME
get_fmode @ 595 NONAME
sigenable @ 596 NONAME
- unsetdefaultif @ 597 NONAME
+ unsetdefaultif @ 597 NONAME
+ freednssuffixes @ 598 NONAME
+
--- a/genericopenlibs/openenvcore/libc/src/Fmscalls.cpp Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/libc/src/Fmscalls.cpp Wed Sep 15 14:02:55 2010 +0300
@@ -333,6 +333,10 @@
}
+EXPORT_C void freednssuffixes(if_dns_suffixes * suffixes)
+ {
+ return Backend()->freednssuffixes(suffixes);
+ }
/*
Gets the path name of the current working directory.
--- a/genericopenlibs/openenvcore/libc/src/timefuncs.cpp Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/libc/src/timefuncs.cpp Wed Sep 15 14:02:55 2010 +0300
@@ -221,7 +221,12 @@
TDateTime tdt = time.DateTime();
//enable the cache
- CTzConverter* ctzConverter = CTzConverter::NewL(Backend()->TZServer());
+ TInt status = KErrNone;
+ RTz& rtzServer = Backend()->TZServer(status);
+ if(status != KErrNone)
+ User::Leave(status);
+
+ CTzConverter* ctzConverter = CTzConverter::NewL(rtzServer);
CleanupStack::PushL(ctzConverter);
if(ctzConverter->ConvertToLocalTime(time) == KErrNone)
@@ -243,7 +248,7 @@
CleanupStack::PushL(zoneid);
atmStruct->tm_isdst = -1;
- UpdateDstAndTznameL(Backend()->TZServer(), *zoneid, atmStruct, time, Utime, tdt, ETzWallTimeReference);
+ UpdateDstAndTznameL(rtzServer, *zoneid, atmStruct, time, Utime, tdt, ETzWallTimeReference);
CleanupStack::PopAndDestroy(zoneid);
}
@@ -280,8 +285,12 @@
return;
}
+ TInt status = KErrNone;
+ RTz& rtzServer = Backend()->TZServer(status);
+ if(status != KErrNone)
+ User::Leave(status);
- CTzConverter* ctzConverter = CTzConverter::NewL(Backend()->TZServer());
+ CTzConverter* ctzConverter = CTzConverter::NewL(rtzServer);
CleanupStack::PushL(ctzConverter);
/* Following fields are updated if successful:
* tm_wday
@@ -305,7 +314,7 @@
CleanupStack::PushL(zoneid);
aTmStruct->tm_isdst = -1;
- UpdateDstAndTznameL(Backend()->TZServer(), *zoneid, aTmStruct, oldTime, time, tdt, ETzUtcTimeReference);
+ UpdateDstAndTznameL(rtzServer, *zoneid, aTmStruct, oldTime, time, tdt, ETzUtcTimeReference);
CleanupStack::PopAndDestroy(zoneid);
}
cachetm = *aTmStruct;
--- a/genericopenlibs/openenvcore/libc/test/testifioctls/data/tifioctls.ini Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/libc/test/testifioctls/data/tifioctls.ini Wed Sep 15 14:02:55 2010 +0300
@@ -41,3 +41,17 @@
Param1 = eth[0x000000]
[SectionNullIFName]
Param1 = \0
+
+[SectionIAPDetails]
+IAPName = Ethernet with Daemon Dynamic IP
+
+[SectionSetIfDNSSuffix]
+DNSSuffix0 = noe.nokia.com
+DNSSuffix1 = apac.nokia.com
+DNSSuffix2 = symbian.intra
+Hostname1 = uklondabs02
+Hostname2 = uklondabs02.symbian.intra
+
+[SectionSetIfNameServer]
+NameServer1 = 172.30.251.135
+NameServer2 = 172.30.251.142
--- a/genericopenlibs/openenvcore/libc/test/testifioctls/inc/tifioctls.h Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/libc/test/testifioctls/inc/tifioctls.h Wed Sep 15 14:02:55 2010 +0300
@@ -43,6 +43,15 @@
_LIT(KTestMacAddressNegative1, "TestMacAddressNegative1");
_LIT(KTestioctlfile, "Testioctlfile");
_LIT(KTestioctl1, "Testioctl1");
+_LIT(KTestioctlGetIfIpAddr, "TestGetIfIPAddr");
+_LIT(KTestioctlGetIfAttributes, "TestGetIfAttributes");
+_LIT(KTestioctlSetIfAttributes, "TestSetIfAttributes");
+_LIT(KTestioctlSetIfDNSSuffix, "TestSetIfDNSSuffix");
+_LIT(KTestioctlGetIfDNSSuffix, "TestGetIfDNSSuffix");
+_LIT(KTestRouteIoctl, "TestRouteIoctl");
+_LIT(KTestNumberOfRoutesIoctl, "TestNumberOfRoutesIoctl");
+_LIT(KTestSetNameServers, "TestSetNameServers");
+_LIT(KTestGetNameServers, "TestGetNameServers");
class CTestIfioctls : public CTestStep
@@ -75,7 +84,20 @@
TInt TestMacAddressNegative1();
TInt Testioctlfile();
TInt Testioctl1();
-
+ TInt TestGetIfIPAddr();
+ TInt GetIapName(char * aIapName,int len);
+ TInt StartIap(const char *aIapName, int &fd);
+ TInt TestGetIfAttributes();
+ void printFlags(TInt flags);
+ TInt TestSetIfAttributes();
+ void FreeDnsSuffixes(char ** suffixes);
+ TInt TestSetIfDNSSuffix();
+ TInt TestGetIfDNSSuffix();
+ TInt TestRouteIoctl();
+ TInt TestNumberOfRoutesIoctl();
+ TInt TestSetNameServers();
+ TInt TestGetNameServers();
+
// util function
void ReadStringParam(char* aString);
public:
--- a/genericopenlibs/openenvcore/libc/test/testifioctls/scripts/tifioctls.script Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/libc/test/testifioctls/scripts/tifioctls.script Wed Sep 15 14:02:55 2010 +0300
@@ -112,3 +112,71 @@
RUN_TEST_STEP !Result=0 50 tifioctls Testioctl1
END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0021
+START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0022
+//! @SYMTestCaseID OPENENV-LIBC-CIT-TIFIOCTLS-0022
+//! @SYMTestStatus 3.Released
+RUN_TEST_STEP !Result=0 50 tifioctls TestGetIfIPAddr \tstdapis\tifioctls.ini
+END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0022
+
+START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0023
+//! @SYMTestCaseID OPENENV-LIBC-CIT-TIFIOCTLS-0023
+//! @SYMTestStatus 3.Released
+RUN_TEST_STEP !Result=0 50 tifioctls TestGetIfAttributes \tstdapis\tifioctls.ini
+END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0023
+
+START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0024
+//! @SYMTestCaseID OPENENV-LIBC-CIT-TIFIOCTLS-0024
+//! @SYMTestStatus 3.Released
+RUN_TEST_STEP !Result=0 50 tifioctls TestSetIfAttributes \tstdapis\tifioctls.ini
+END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0024
+
+START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0025
+//! @SYMTestCaseID OPENENV-LIBC-CIT-TIFIOCTLS-0025
+//! @SYMTestStatus 3.Released
+RUN_TEST_STEP !Result=0 100 tifioctls TestSetIfDNSSuffix \tstdapis\tifioctls.ini SectionSetIfDNSSuffix
+END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0025
+
+START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0026
+//! @SYMTestCaseID OPENENV-LIBC-CIT-TIFIOCTLS-0026
+//! @SYMTestStatus 3.Released
+RUN_TEST_STEP !Result=0 50 tifioctls TestGetIfDNSSuffix \tstdapis\tifioctls.ini
+END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0026
+
+START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0027
+//! @SYMTestCaseID OPENENV-LIBC-CIT-TIFIOCTLS-0027
+//! @SYMTestStatus 3.Released
+RUN_TEST_STEP !Result=0 50 tifioctls TestRouteIoctl \tstdapis\tifioctls.ini
+END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0027
+
+START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0028
+//! @SYMTestCaseID OPENENV-LIBC-CIT-TIFIOCTLS-0028
+//! @SYMTestStatus 3.Released
+RUN_TEST_STEP !Result=0 50 tifioctls TestNumberOfRoutesIoctl \tstdapis\tifioctls.ini
+END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0028
+
+START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0029
+//! @SYMTestCaseID OPENENV-LIBC-CIT-TIFIOCTLS-0029
+//! @SYMTestStatus 3.Released
+RUN_TEST_STEP !Result=0 50 tifioctls TestGetNameServers \tstdapis\tifioctls.ini
+END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0029
+
+START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0030
+//! @SYMTestCaseID OPENENV-LIBC-CIT-TIFIOCTLS-0030
+//! @SYMTestStatus 3.Released
+RUN_TEST_STEP !Result=0 50 tifioctls TestSetNameServers \tstdapis\tifioctls.ini SectionSetIfNameServer
+END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0030
+
+START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0031
+//! @SYMTestCaseID OPENENV-LIBC-CIT-TIFIOCTLS-0031
+//! @SYMTestStatus 3.Released
+RUN_TEST_STEP !Result=0 50 tifioctls TestGetNameServers \tstdapis\tifioctls.ini SectionSetIfNameServer
+END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0031
+
+
+
+
+
+
+
+
+
--- a/genericopenlibs/openenvcore/libc/test/testifioctls/scripts/tifioctls_hw.script Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/libc/test/testifioctls/scripts/tifioctls_hw.script Wed Sep 15 14:02:55 2010 +0300
@@ -53,31 +53,31 @@
START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLSHW-0008
//! @SYMTestCaseID OPENENV-LIBC-CIT-TIFIOCTLSHW-0008
//! @SYMTestStatus 3.Released
-RUN_TEST_STEP !Result=0 5 tifioctls TestIfNameIndex
+RUN_TEST_STEP !Result=0 10 tifioctls TestIfNameIndex
END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLSHW-0008
START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLSHW-0009
//! @SYMTestCaseID OPENENV-LIBC-CIT-TIFIOCTLSHW-0009
//! @SYMTestStatus 3.Released
-RUN_TEST_STEP !Result=0 5 tifioctls TestIfIndexToName \tstdapis\tifioctls.ini SectionTestIfIndexToName_1
+RUN_TEST_STEP !Result=0 10 tifioctls TestIfIndexToName \tstdapis\tifioctls.ini SectionTestIfIndexToName_1
END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLSHW-0009
START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLSHW-0010
//! @SYMTestCaseID OPENENV-LIBC-CIT-TIFIOCTLSHW-0010
//! @SYMTestStatus 3.Released
-RUN_TEST_STEP !Result=0 5 tifioctls TestIfIndexToName \tstdapis\tifioctls.ini SectionTestIfIndexToName_2
+RUN_TEST_STEP !Result=0 10 tifioctls TestIfIndexToName \tstdapis\tifioctls.ini SectionTestIfIndexToName_2
END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLSHW-0010
START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLSHW-0011
//! @SYMTestCaseID OPENENV-LIBC-CIT-TIFIOCTLSHW-0011
//! @SYMTestStatus 3.Released
-RUN_TEST_STEP !Result=0 5 tifioctls TestIfNameToIndex \tstdapis\tifioctls.ini SectionTestIfNameToIndex_1
+RUN_TEST_STEP !Result=0 10 tifioctls TestIfNameToIndex \tstdapis\tifioctls.ini SectionTestIfNameToIndex_1
END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLSHW-0011
START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLSHW-0012
//! @SYMTestCaseID OPENENV-LIBC-CIT-TIFIOCTLSHW-0012
//! @SYMTestStatus 3.Released
-RUN_TEST_STEP !Result=0 5 tifioctls TestSiocGIfIndex \tstdapis\tifioctls.ini SectionTestSiocGIfIndex
+RUN_TEST_STEP !Result=0 10 tifioctls TestSiocGIfIndex \tstdapis\tifioctls.ini SectionTestSiocGIfIndex
END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLSHW-0012
START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLSHW-0013
@@ -92,3 +92,63 @@
RUN_TEST_STEP !Result=0 50 tifioctls Testioctl1
END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLSHW-0014
+START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0015
+//! @SYMTestCaseID OPENENV-LIBC-CIT-TIFIOCTLS-0015
+//! @SYMTestStatus 3.Released
+RUN_TEST_STEP !Result=0 50 tifioctls TestGetIfIPAddr \tstdapis\tifioctls.ini
+END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0015
+
+START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0016
+//! @SYMTestCaseID OPENENV-LIBC-CIT-TIFIOCTLS-0016
+//! @SYMTestStatus 3.Released
+RUN_TEST_STEP !Result=0 50 tifioctls TestGetIfAttributes \tstdapis\tifioctls.ini
+END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0016
+
+START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0017
+//! @SYMTestCaseID OPENENV-LIBC-CIT-TIFIOCTLS-0017
+//! @SYMTestStatus 3.Released
+RUN_TEST_STEP !Result=0 50 tifioctls TestSetIfAttributes \tstdapis\tifioctls.ini
+END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0017
+
+START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0018
+//! @SYMTestCaseID OPENENV-LIBC-CIT-TIFIOCTLS-0018
+//! @SYMTestStatus 3.Released
+RUN_TEST_STEP !Result=0 100 tifioctls TestSetIfDNSSuffix \tstdapis\tifioctls.ini SectionSetIfDNSSuffix
+END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0018
+
+START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0019
+//! @SYMTestCaseID OPENENV-LIBC-CIT-TIFIOCTLS-0019
+//! @SYMTestStatus 3.Released
+RUN_TEST_STEP !Result=0 50 tifioctls TestGetIfDNSSuffix \tstdapis\tifioctls.ini
+END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0019
+
+START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0020
+//! @SYMTestCaseID OPENENV-LIBC-CIT-TIFIOCTLS-0020
+//! @SYMTestStatus 3.Released
+RUN_TEST_STEP !Result=0 50 tifioctls TestRouteIoctl \tstdapis\tifioctls.ini
+END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0020
+
+START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0021
+//! @SYMTestCaseID OPENENV-LIBC-CIT-TIFIOCTLS-0021
+//! @SYMTestStatus 3.Released
+RUN_TEST_STEP !Result=0 50 tifioctls TestNumberOfRoutesIoctl \tstdapis\tifioctls.ini
+END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0021
+
+START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0022
+//! @SYMTestCaseID OPENENV-LIBC-CIT-TIFIOCTLS-0022
+//! @SYMTestStatus 3.Released
+RUN_TEST_STEP !Result=0 50 tifioctls TestGetNameServers \tstdapis\tifioctls.ini
+END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0022
+
+START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0023
+//! @SYMTestCaseID OPENENV-LIBC-CIT-TIFIOCTLS-0023
+//! @SYMTestStatus 3.Released
+RUN_TEST_STEP !Result=0 50 tifioctls TestSetNameServers \tstdapis\tifioctls.ini SectionSetIfNameServer
+END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0023
+
+START_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0024
+//! @SYMTestCaseID OPENENV-LIBC-CIT-TIFIOCTLS-0024
+//! @SYMTestStatus 3.Released
+RUN_TEST_STEP !Result=0 50 tifioctls TestGetNameServers \tstdapis\tifioctls.ini
+END_TESTCASE OPENENV-LIBC-CIT-TIFIOCTLS-0024
+
--- a/genericopenlibs/openenvcore/libc/test/testifioctls/src/tifioctls.cpp Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/libc/test/testifioctls/src/tifioctls.cpp Wed Sep 15 14:02:55 2010 +0300
@@ -181,7 +181,65 @@
err = Testioctl1();
SetTestStepResult(err ? static_cast<TVerdict>(err) : EPass);
}
- return TestStepResult();
+ else if(TestStepName() == KTestioctlGetIfIpAddr)
+ {
+ INFO_PRINTF1(_L("TestGetIfIPAddr():"));
+ err = TestGetIfIPAddr();
+ SetTestStepResult(err ? static_cast<TVerdict>(err) : EPass);
+
+ }
+ else if(TestStepName() == KTestioctlGetIfAttributes)
+ {
+ INFO_PRINTF1(_L("TestGetIfAttributes():"));
+ err = TestGetIfAttributes();
+ SetTestStepResult(err ? static_cast<TVerdict>(err) : EPass);
+
+ }
+ else if(TestStepName() == KTestioctlSetIfAttributes)
+ {
+ INFO_PRINTF1(_L("TestSetIfAttributes():"));
+ err = TestSetIfAttributes();
+ SetTestStepResult(err ? static_cast<TVerdict>(err) : EPass);
+
+ }
+ else if(TestStepName() == KTestioctlSetIfDNSSuffix)
+ {
+ INFO_PRINTF1(_L("TestSetIfDNSSuffix():"));
+ err = TestSetIfDNSSuffix();
+ SetTestStepResult(err ? static_cast<TVerdict>(err) : EPass);
+
+ }
+ else if(TestStepName() == KTestioctlGetIfDNSSuffix)
+ {
+ INFO_PRINTF1(_L("TestGetIfDNSSuffix():"));
+ err = TestGetIfDNSSuffix();
+ SetTestStepResult(err ? static_cast<TVerdict>(err) : EPass);
+ }
+ else if(TestStepName() == KTestRouteIoctl)
+ {
+ INFO_PRINTF1(_L("TestRouteIoctl():"));
+ err = TestRouteIoctl();
+ SetTestStepResult(err ? static_cast<TVerdict>(err) : EPass);
+ }
+ else if(TestStepName() == KTestNumberOfRoutesIoctl)
+ {
+ INFO_PRINTF1(_L("TestNumberOfRoutesIoctl():"));
+ err = TestNumberOfRoutesIoctl();
+ SetTestStepResult(err ? static_cast<TVerdict>(err) : EPass);
+ }
+ else if(TestStepName() == KTestSetNameServers)
+ {
+ INFO_PRINTF1(_L("TestSetNameServers():"));
+ err = TestSetNameServers();
+ SetTestStepResult(err ? static_cast<TVerdict>(err) : EPass);
+ }
+ else if(TestStepName() == KTestGetNameServers)
+ {
+ INFO_PRINTF1(_L("TestGetNameServers():"));
+ err = TestGetNameServers();
+ SetTestStepResult(err ? static_cast<TVerdict>(err) : EPass);
+ }
+ return TestStepResult();
}
--- a/genericopenlibs/openenvcore/libc/test/testifioctls/src/tifioctlsblocks.cpp Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/libc/test/testifioctls/src/tifioctlsblocks.cpp Wed Sep 15 14:02:55 2010 +0300
@@ -1188,5 +1188,608 @@
res=KErrGeneral;
}
- return res;
- }
+ return res;
+ }
+
+TInt CTestIfioctls::GetIapName(char * aIapName, int len)
+ {
+ _LIT(KIAPSectionName, "SectionIAPDetails");
+ _LIT(KIAPName,"IAPName");
+ TPtrC iapName;
+ TBool res = GetStringFromConfig(KIAPSectionName, KIAPName, iapName);
+ if (!res)
+ {
+ INFO_PRINTF1(_L("Unable to read the iapname fro the ini file.")) ;
+ return KErrGeneral;
+ }
+ TPtr8 iap((unsigned char *)aIapName, len);
+ iap.Copy(iapName);
+ iap.ZeroTerminate();
+ return KErrNone;
+ }
+
+TInt CTestIfioctls::StartIap(const char *aIapName, int &fd)
+ {
+ TPtr8 iapName8((TUint8 * )aIapName,strlen(aIapName),strlen(aIapName)+1);
+ TBuf<IFNAMSIZ> iapName16;
+ iapName16.Copy(iapName8);
+ INFO_PRINTF2(_L("starting iap = %S"), &iapName16);
+
+ if((fd = socket(AF_INET, SOCK_DGRAM , 0)) < 0)
+ {
+ INFO_PRINTF2(_L("Error creating scocket errno = %d\n "),errno);
+ return -1;
+ }
+
+ if(ioctl(fd,SIOCSIFNAME,aIapName) == -1)
+ {
+ INFO_PRINTF2(_L("unable to set the interface name, reason = %d\n"), errno);
+ close(fd);
+ return -1;
+ }
+
+ if(ioctl(fd,SIOCIFSTART,aIapName) == -1)
+ {
+ INFO_PRINTF2(_L("unable to start the interface, reason = %d\n"),errno);
+ close(fd);
+ return -1;
+ }
+ return KErrNone;
+ }
+
+TInt CTestIfioctls::TestGetIfIPAddr()
+ {
+ char iapName[IFNAMSIZ];
+ GetIapName(iapName, sizeof(iapName));
+ int fd;
+ ifreq ifr;
+
+
+ if(StartIap(iapName, fd) != KErrNone)
+ {
+ INFO_PRINTF2(_L("unable to start the iap, reason = %d\n"),errno);
+ return -1;
+ }
+ strcpy(ifr.ifr_name,iapName);
+ if(ioctl(fd,SIOCGIFADDR,&ifr) == -1) //getting the interface ip
+ {
+ INFO_PRINTF2(_L("unable to get ip of the interface, reason = %d\n"),errno);
+ close(fd);
+ return -1;
+ }
+ char address[50];
+
+ if(inet_ntop(ifr.ifr_ifru.ifru_addr.sa_family,&(ifr.ifr_ifru.ifru_addr.sa_data),address,sizeof(address)) == NULL)
+ {
+ INFO_PRINTF2(_L("cannot convert to address to string, reason = %d \n"), errno);
+ close(fd);
+ return -1;
+ }
+ TPtr8 ipAddr8((TUint8*)address,strlen(address),strlen(address)+1);
+ TBuf<50> ipAddr16;
+ ipAddr16.Copy(ipAddr8);
+ INFO_PRINTF3(_L("family = %d, ipaddr = %S\n"),ifr.ifr_ifru.ifru_addr.sa_family,&ipAddr16);
+
+ sockaddr_in addr;
+ memcpy(&addr,&ifr.ifr_ifru.ifru_addr,sizeof(sockaddr_in));
+ addr.sin_port = 12346;
+
+ if (bind(fd,(sockaddr*)&addr,sizeof(addr)) < 0)
+ {
+ INFO_PRINTF2(_L("Error binding to socket, errno = %d\n"),errno);
+ close(fd);
+ return -1;
+ }
+ close(fd);
+ return KErrNone;
+
+ }
+
+void CTestIfioctls::printFlags(TInt flags)
+ {
+ if(flags & IFF_UP)
+ {
+ INFO_PRINTF1(_L("\t\tThe inteface is up\n"));
+ }
+ else
+ {
+ INFO_PRINTF1(_L("\t\tThe inteface is down\n"));
+ }
+ if(flags & IFF_LOOPBACK)
+ {
+ INFO_PRINTF1(_L("\t\tThe inteface a loopback\n"));
+ }
+ if(flags & IFF_POINTOPOINT)
+ {
+ INFO_PRINTF1(_L("\t\tThe inteface a P2P\n"));
+ }
+ if(flags & IFF_BROADCAST)
+ {
+ INFO_PRINTF1(_L("\t\tThe inteface a Broadcast\n"));
+ }
+ }
+
+TInt CTestIfioctls::TestGetIfAttributes()
+ {
+ char iapName[IFNAMSIZ];
+ GetIapName(iapName, sizeof(iapName));
+ int fd;
+ ifreq ifr;
+
+
+ if(StartIap(iapName, fd) != KErrNone)
+ {
+ INFO_PRINTF2(_L("unable to start the iap, reason = %d\n"),errno);
+ return -1;
+ }
+ strcpy(ifr.ifr_name,iapName);
+
+ if(ioctl(fd,SIOCGIFFLAGS,&ifr) == -1)
+ {
+ INFO_PRINTF2(_L("unable to get the flags for iap , reason = %d\n"),errno);
+ close(fd);
+ return -1;
+ }
+
+ printFlags(*((int *)ifr.ifr_ifru.ifru_flags));
+
+ if(ioctl(fd,SIOCGIFMTU,&ifr) == -1)
+ {
+ INFO_PRINTF2(_L("unable to get the mtu for the iap, reason = %d"),errno);
+ close(fd);
+ return -1;
+ }
+ INFO_PRINTF2(_L("The current MTU = %d\n"),ifr.ifr_ifru.ifru_mtu);
+
+ if(ioctl(fd,SIOCGIFNETMASK,&ifr) == -1)
+ {
+ INFO_PRINTF2(_L("unable to get the netmask for the iap reason = %d\n"), errno);
+ close(fd);
+ return -1;
+ }
+ char addr[50];
+ addr[0] = '\0';
+
+ if(inet_ntop(ifr.ifr_ifru.ifru_addr.sa_family,&(ifr.ifr_ifru.ifru_addr.sa_data),addr,sizeof(addr)) == NULL)
+ {
+ INFO_PRINTF2(_L("cannot convert to address to string, error no = %d\n"),errno);
+ close(fd);
+ return -1;
+ }
+ TPtr8 addr8((TUint8 *)addr, strlen(addr), strlen(addr)+1);
+ TBuf<50> addr16;
+ addr16.Copy(addr8);
+ INFO_PRINTF2(_L("netmask for the iap = %S \n"),&addr16);
+
+ if(ioctl(fd,SIOCGIFDEFGATEWAY,&ifr) == -1)
+ {
+ INFO_PRINTF2(_L("unable to get the gateway for the iap, reason = %d\n"),errno);
+ close(fd);
+ return -1;
+ }
+ addr[0] = '\0';
+ if(inet_ntop(ifr.ifr_ifru.ifru_addr.sa_family,&(ifr.ifr_ifru.ifru_defgatewayaddr),addr,sizeof(addr)) == NULL)
+ {
+ INFO_PRINTF2(_L("cannot convert to address to string, error no = %d\n"),errno);
+ close(fd);
+ return -1;
+ }
+ addr8.Set((TUint8 *)addr, strlen(addr), strlen(addr)+1);
+ addr16.Copy(addr8);
+ INFO_PRINTF2(_L("gateway for the iap = %S\n"),&addr16);
+ close(fd);
+ return KErrNone;
+ }
+
+TInt CTestIfioctls::TestSetIfAttributes()
+ {
+ char iapName[IFNAMSIZ];
+ GetIapName(iapName, sizeof(iapName));
+ int fd;
+ ifreq ifr;
+
+
+ if(StartIap(iapName, fd) != KErrNone)
+ {
+ INFO_PRINTF2(_L("unable to start the iap, reason = %d\n"),errno);
+ return -1;
+ }
+ strcpy(ifr.ifr_name,iapName);
+
+
+ ifreq ifr1;
+ strcpy(ifr1.ifr_name,iapName);
+
+ if(ioctl(fd,SIOCGIFMTU,&ifr) == -1)
+ {
+ INFO_PRINTF2(_L("unable to get the mtu for the iap, reason = %d"),errno);
+ close(fd);
+ return -1;
+ }
+ ifr.ifr_ifru.ifru_mtu++;
+
+ if(ioctl(fd,SIOCSIFMTU,&ifr) == -1)
+ {
+ INFO_PRINTF2(_L("unable to set the mtu for the iap, reason = %d"),errno);
+ close(fd);
+ return -1;
+ }
+
+ if(ioctl(fd,SIOCGIFMTU,&ifr1) == -1)
+ {
+ INFO_PRINTF2(_L("unable to get the mtu for the iap , reason = %d"),errno);
+ close(fd);
+ return -1;
+ }
+
+ if(ifr.ifr_ifru.ifru_mtu != ifr1.ifr_ifru.ifru_mtu)
+ {
+ INFO_PRINTF2(_L("unable to set the mtu for the iap = %s"),ifr.ifr_name);
+ close(fd);
+ return -1;
+ }
+ close(fd);
+ return KErrNone;
+ }
+
+void CTestIfioctls::FreeDnsSuffixes(char ** suffixes)
+ {
+ for(int i = 0; suffixes[i]; i++)
+ {
+ delete [] suffixes[i];
+ }
+ delete []suffixes;
+ }
+
+#define MAX_SUFFIXES 3
+#define SUFFIXLEN 50
+TInt CTestIfioctls::TestSetIfDNSSuffix()
+ {
+ char iapName[IFNAMSIZ];
+ // ifreq ifr1;
+ GetIapName(iapName, sizeof(iapName));
+ int fd;
+
+ struct if_dns_suffixes dns_suffixes;
+ strcpy(dns_suffixes.if_name,iapName);
+
+ if(StartIap(iapName, fd) != KErrNone)
+ {
+ INFO_PRINTF2(_L("unable to start the iap, reason = %d\n"),errno);
+ return -1;
+ }
+
+ char **&suffixes = dns_suffixes.suffixes;
+
+ suffixes = new char*[MAX_SUFFIXES+1];
+ suffixes[MAX_SUFFIXES] = NULL;
+
+ _LIT(KDNSSuffix, "DNSSuffix");
+
+ for(int i = 0; i < MAX_SUFFIXES; i++)
+ {
+ TPtrC suffix16;
+ TBuf<20> suffixTag(KDNSSuffix);
+ suffixTag.AppendNum(i);
+ suffixes[i] = NULL;
+ TBool res = GetStringFromConfig(ConfigSection(), suffixTag, suffix16);
+ if (!res)
+ {
+ INFO_PRINTF1(_L("Unable to read the iapname from the ini file.")) ;
+ FreeDnsSuffixes(suffixes);
+ close(fd);
+ return KErrGeneral;
+ }
+ suffixes[i] = new char[suffix16.Length() + 1];
+ TPtr8 suffix8((TUint8*)suffixes[i],suffix16.Length() + 1);
+ suffix8.Copy(suffix16);
+ suffix8.ZeroTerminate();
+ }
+
+ if(ioctl(fd,SIOCSETDNSSUFFIX,&dns_suffixes) == -1)
+ {
+ INFO_PRINTF2(_L("unable to set the dbs suffixes , reason = %d\n"),errno);
+ close(fd);
+ FreeDnsSuffixes(suffixes);
+ return -1;
+ }
+ _LIT(KHostname1, "Hostname1");
+ TPtrC hostname16;
+ char hostname[50];
+ TPtr8 hostname8((TUint8*)hostname, sizeof(hostname));
+
+ TBool res = GetStringFromConfig(ConfigSection(), KHostname1, hostname16);
+ if (!res)
+ {
+ INFO_PRINTF1(_L("Unable to read the hostname from the ini file.")) ;
+ FreeDnsSuffixes(suffixes);
+ close(fd);
+ return KErrGeneral;
+ }
+ hostname8.Copy(hostname16);
+ hostname8.ZeroTerminate();
+ hostent * hentry;
+ ifreq defaultif;
+ strcpy(defaultif.ifr_name, iapName);
+ if(setdefaultif(&defaultif) != KErrNone)
+ {
+ INFO_PRINTF2(_L("setdefaultif failed, reason = %d "),errno) ;
+ FreeDnsSuffixes(suffixes);
+ close(fd);
+ return KErrGeneral;
+ }
+
+ if((hentry = gethostbyname(hostname)) == NULL)
+ {
+ INFO_PRINTF3(_L("getbyhostname failed for %S with errno = %d"),&hostname16,errno) ;
+ // FreeDnsSuffixes(suffixes);
+ // close(fd);
+ // return KErrGeneral;
+
+ }
+ _LIT(KHostname2, "Hostname2");
+
+ res = GetStringFromConfig(ConfigSection(), KHostname2, hostname16);
+ if (!res)
+ {
+ INFO_PRINTF1(_L("Unable to read the hostname from the ini file.")) ;
+ FreeDnsSuffixes(suffixes);
+ close(fd);
+ return KErrGeneral;
+ }
+ hostname8.Copy(hostname16);
+ hostname8.ZeroTerminate();
+ if((hentry = gethostbyname(hostname)) == NULL)
+ {
+ INFO_PRINTF3(_L("getbyhostname failed for %S with errno = %d "),&hostname16,errno) ;
+ // FreeDnsSuffixes(suffixes);
+ // close(fd);
+ // return KErrGeneral;
+
+ }
+
+ hostname8.Copy(_L8("2IND04966"));
+ hostname8.ZeroTerminate();
+ if((hentry = gethostbyname(hostname)) == NULL)
+ {
+ INFO_PRINTF3(_L("getbyhostname failed for %s, errno = %d "),&hostname8, errno) ;
+ }
+
+
+ FreeDnsSuffixes(suffixes);
+ close(fd);
+ return KErrNone;
+
+ }
+
+
+TInt CTestIfioctls::TestGetIfDNSSuffix()
+ {
+ char iapName[IFNAMSIZ];
+ GetIapName(iapName, sizeof(iapName));
+ int fd;
+
+ if(StartIap(iapName, fd) != KErrNone)
+ {
+ INFO_PRINTF2(_L("unable to start the iap, reason = %d\n"),errno);
+ return -1;
+ }
+
+ struct if_dns_suffixes dns_suffixes;
+ strcpy(dns_suffixes.if_name,iapName);
+
+ if(ioctl(fd,SIOCGETDNSSUFFIX,&dns_suffixes) == -1)
+ {
+ INFO_PRINTF2(_L("unable to get the dns suffixes , reason = %d\n"),errno);
+ close(fd);
+ return -1;
+ }
+
+ INFO_PRINTF1(_L("printing dns suffixes"));
+ for(int i = 0; dns_suffixes.suffixes[i]; i++)
+ {
+ TPtr8 suffix8((TUint8 *)dns_suffixes.suffixes[i],strlen(dns_suffixes.suffixes[i]),strlen(dns_suffixes.suffixes[i])+1);
+ TBuf<SUFFIXLEN> suffix16;
+ suffix16.Copy(suffix8);
+ INFO_PRINTF3(_L("suffixes %d = %S"),i,&suffix16);
+ }
+ freednssuffixes(&dns_suffixes);
+ close(fd);
+ return KErrNone;
+ }
+
+TInt CTestIfioctls::TestGetNameServers()
+ {
+ if_name_servers dns_server;
+ char iapName[IFNAMSIZ];
+ GetIapName(iapName, sizeof(iapName));
+ int sockfd;
+ strcpy(dns_server.if_name, iapName);
+
+ if(StartIap(iapName, sockfd) != KErrNone)
+ {
+ INFO_PRINTF2(_L("unable to start the iap, reason = %d\n"),errno);
+ return -1;
+ }
+
+ TInt ret = ioctl(sockfd, SIOCGNAMESERVER, &dns_server);
+ if(ret == -1)
+ {
+ INFO_PRINTF2(_L("IOCTL option failed with errno =%d"), errno);
+ close(sockfd);
+ return errno;
+ }
+ char addr[50];
+ addr[0] = '\0';
+
+ if(inet_ntop(dns_server.nameserver1.sa_family,&(dns_server.nameserver1.sa_data),addr,sizeof(addr)) == NULL)
+ {
+ INFO_PRINTF2(_L("cannot convert to address to string, error no = %d\n"),errno);
+ close(sockfd);
+ return -1;
+ }
+ TPtr8 addr8((TUint8 *)addr, strlen(addr), strlen(addr)+1);
+ TBuf<50> addr16;
+ addr16.Copy(addr8);
+ INFO_PRINTF2(_L("nameserver2 for the iap = %S \n"),&addr16);
+ if(inet_ntop(dns_server.nameserver2.sa_family,&(dns_server.nameserver2.sa_data),addr,sizeof(addr)) == NULL)
+ {
+ INFO_PRINTF2(_L("cannot convert to address to string, error no = %d\n"),errno);
+ close(sockfd);
+ return -1;
+ }
+ addr8.Set((TUint8 *)addr, strlen(addr), strlen(addr)+1 );
+ addr16.Copy(addr8);
+ INFO_PRINTF2(_L("nameserver2 for the iap = %S \n"),&addr16);
+ close(sockfd);
+
+ return KErrNone;
+ }
+
+TInt CTestIfioctls::TestSetNameServers()
+ {
+ if_name_servers dns_server;
+
+ char iapName[IFNAMSIZ];
+ GetIapName(iapName, sizeof(iapName));
+
+ memset(&dns_server,0, sizeof(dns_server));
+ strcpy(dns_server.if_name, iapName);
+ TPtrC nameServer16;
+ _LIT(KNameSrv1, "NameServer1");
+ _LIT(KNameSrv2, "NameServer2");
+
+ TBool res = GetStringFromConfig(ConfigSection(), KNameSrv1, nameServer16);
+ if (!res)
+ {
+ INFO_PRINTF1(_L("Unable to read the nameserver1 from the ini file.")) ;
+ return KErrGeneral;
+ }
+ char nameServer1[50];
+ TPtr8 nameServer8((TUint8 *)nameServer1, sizeof(nameServer1));
+ nameServer8.Copy(nameServer16);
+ nameServer8.ZeroTerminate();
+ res = GetStringFromConfig(ConfigSection(), KNameSrv2, nameServer16);
+ if (!res)
+ {
+ INFO_PRINTF1(_L("Unable to read nameserver2 from the ini file.")) ;
+ return KErrGeneral;
+ }
+
+ char nameServer2[50];
+ nameServer8.Set((TUint8 *)nameServer2, 0, sizeof(nameServer2));
+ nameServer8.Copy(nameServer16);
+ nameServer8.ZeroTerminate();
+
+ dns_server.nameserver1.sa_family = AF_INET;
+ dns_server.nameserver2.sa_family = AF_INET;
+ TInt addr1 = inet_addr(nameServer1);
+ TInt addr2 = inet_addr(nameServer2);
+ unsigned char * ptr = (unsigned char *)&addr1;
+ dns_server.nameserver1.sa_data[0] = ptr[0];
+ dns_server.nameserver1.sa_data[1] = ptr[1];
+ dns_server.nameserver1.sa_data[2] = ptr[2];
+ dns_server.nameserver1.sa_data[3] = ptr[3];
+
+ ptr = (unsigned char *)&addr2;
+ dns_server.nameserver2.sa_data[0] = ptr[0];
+ dns_server.nameserver2.sa_data[1] = ptr[1];
+ dns_server.nameserver2.sa_data[2] = ptr[2];
+ dns_server.nameserver2.sa_data[3] = ptr[3];
+
+ TInt sockfd;
+ if(StartIap(iapName, sockfd) != KErrNone)
+ {
+ INFO_PRINTF2(_L("unable to start the iap, reason = %d\n"),errno);
+ return -1;
+ }
+
+
+ TInt ret = ioctl(sockfd, SIOCSNAMESERVER, &dns_server);
+ if(ret == -1)
+ {
+ INFO_PRINTF2(_L("IOCTL option failed with errno =%d"), errno);
+ close(sockfd);
+ return errno;
+ }
+
+ return KErrNone;
+
+ }
+
+//Testcase added to enumerate routes configured on the device.
+//Use Ioctl option SIOCENUMROUTES to get the route details.
+//PreCondition: User needs to allocate space for the buffer.
+TInt CTestIfioctls::TestRouteIoctl()
+ {
+ rtconf rtc;
+ TInt ret = 0;
+ rtc.rt_len = 0;
+ TInt sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
+ if(sockfd < 0)
+ {
+ INFO_PRINTF2(_L("Unable to create the socket errno =%d"), errno);
+ return -1;
+ }
+ if((ret = ioctl (sockfd, SIOCENUMROUTES,&rtc)) == -1)
+ {
+ INFO_PRINTF2(_L("Unable to get the routes configured, errno = %d"), errno);
+ close(sockfd);
+ return -1;
+ }
+
+ if (rtc.rt_len == 0)
+ {
+ INFO_PRINTF1(_L("No routes were found,"));
+ close(sockfd);
+ return KErrNone;
+ }
+ if((rtc.rtc_buf = (caddr_t)malloc( rtc.rt_len )) == NULL)
+ {
+ INFO_PRINTF1(_L("Unable to allocate memory "));
+ close(sockfd);
+ return KErrNoMemory;
+ }
+
+ INFO_PRINTF1(_L("Now will fetch the routes!\n"));
+ if((ret = ioctl (sockfd, SIOCENUMROUTES,&rtc)) == -1)
+ {
+ INFO_PRINTF2(_L("Unable to get the routs configured, errno = %d"), errno);
+ close(sockfd);
+ free(rtc.rtc_buf);
+ return -1;
+ }
+ close(sockfd);
+ free(rtc.rtc_buf);
+ return KErrNone;
+ }
+
+
+//With the route_entry buffer size zero, it should return the number of routes present on the system
+//To use this ioctl effectively, we can find the number of routes by passing length as Zero and then
+//pass the count*sizeof(route_entry) as the len the next time to fecth the route information.
+TInt CTestIfioctls::TestNumberOfRoutesIoctl()
+ {
+ rtconf rtc;
+ rtc.rt_len = 0;
+ TInt ret = 0;
+
+ TInt sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
+ if(sockfd < 0)
+ {
+ INFO_PRINTF2(_L("Unable to create the socket errno =%d"), errno);
+ return -1;
+ }
+ if((ret = ioctl (sockfd, SIOCENUMROUTES,&rtc)) == -1)
+ {
+ INFO_PRINTF2(_L("Unable to get the routs configures, errno = %d"), errno);
+ return -1;
+ }
+
+ INFO_PRINTF2(_L("The number of routes available is %d\n"), rtc.rt_len/sizeof(route_entry));
+ close(sockfd);
+ return KErrNone;
+
+ }
+
+
--- a/genericopenlibs/openenvcore/libc/test/testifioctls/src/tifioctlsserver.cpp Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/libc/test/testifioctls/src/tifioctlsserver.cpp Wed Sep 15 14:02:55 2010 +0300
@@ -202,6 +202,42 @@
{
testStep = new CTestIfioctls(aStepName);
}
+ if(aStepName == KTestioctlGetIfIpAddr)
+ {
+ testStep = new CTestIfioctls(aStepName);
+ }
+ if(aStepName == KTestioctlGetIfAttributes)
+ {
+ testStep = new CTestIfioctls(aStepName);
+ }
+ if(aStepName == KTestioctlSetIfAttributes)
+ {
+ testStep = new CTestIfioctls(aStepName);
+ }
+ if(aStepName == KTestioctlSetIfDNSSuffix)
+ {
+ testStep = new CTestIfioctls(aStepName);
+ }
+ if(aStepName == KTestioctlGetIfDNSSuffix)
+ {
+ testStep = new CTestIfioctls(aStepName);
+ }
+ if(aStepName == KTestRouteIoctl)
+ {
+ testStep = new CTestIfioctls(aStepName);
+ }
+ if(aStepName == KTestNumberOfRoutesIoctl)
+ {
+ testStep = new CTestIfioctls(aStepName);
+ }
+ if(aStepName == KTestSetNameServers)
+ {
+ testStep = new CTestIfioctls(aStepName);
+ }
+ if(aStepName == KTestGetNameServers)
+ {
+ testStep = new CTestIfioctls(aStepName);
+ }
return testStep;
}
--- a/genericopenlibs/openenvcore/libc/test/testsocket/inc/tsocket.h Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/libc/test/testsocket/inc/tsocket.h Wed Sep 15 14:02:55 2010 +0300
@@ -135,6 +135,7 @@
_LIT(KTestSockIoctl, "TestSockIoctl");
_LIT(KSockErrnoTest, "SockErrnoTest");
_LIT(KSockSendOnClosedConn,"SockSendOnClosedConn");
+_LIT(KSockWriteOnClosedConn,"SockWriteOnClosedConn");
class CTestSocket : public CTestStep
{
public:
@@ -232,5 +233,6 @@
TInt close_socket(int fd);
TInt SockErrnoTest();
TInt SockSendOnClosedConn();
+ TInt SockWriteOnClosedConn();
};
#endif
--- a/genericopenlibs/openenvcore/libc/test/testsocket/scripts/tsocket.script Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/libc/test/testsocket/scripts/tsocket.script Wed Sep 15 14:02:55 2010 +0300
@@ -619,3 +619,11 @@
//commeneted because of network test
RUN_TEST_STEP !Result=0 50 tsocket SockSendOnClosedConn
END_TESTCASE OPENENV-LIBC-CIT-TESTSOCKET-00100
+
+
+START_TESTCASE OPENENV-LIBC-CIT-TESTSOCKET-00101
+//! @SYMTestCaseID OPENENV-LIBC-CIT-TESTSOCKET-00101
+//! @SYMTestStatus 3.Released
+//commeneted because of network test
+RUN_TEST_STEP !Result=0 50 tsocket SockWriteOnClosedConn
+END_TESTCASE OPENENV-LIBC-CIT-TESTSOCKET-00101
--- a/genericopenlibs/openenvcore/libc/test/testsocket/scripts/tsocket_hw.script Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/libc/test/testsocket/scripts/tsocket_hw.script Wed Sep 15 14:02:55 2010 +0300
@@ -621,3 +621,8 @@
START_TESTCASE OPENENV-LIBC-CIT-TESTSOCKET-00101
RUN_TEST_STEP !Result=0 50 tsocket SockSendOnClosedConn
END_TESTCASE OPENENV-LIBC-CIT-TESTSOCKET-00101
+
+START_TESTCASE OPENENV-LIBC-CIT-TESTSOCKET-00102
+RUN_TEST_STEP !Result=0 50 tsocket SockWriteOnClosedConn
+END_TESTCASE OPENENV-LIBC-CIT-TESTSOCKET-00101
+
--- a/genericopenlibs/openenvcore/libc/test/testsocket/src/tsocket.cpp Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/libc/test/testsocket/src/tsocket.cpp Wed Sep 15 14:02:55 2010 +0300
@@ -637,6 +637,13 @@
err = SockSendOnClosedConn();
SetTestStepResult(err ? static_cast<TVerdict>(err) : EPass);
}
+ if(TestStepName() == KSockWriteOnClosedConn )
+ {
+ INFO_PRINTF1(_L("SockWriteOnClosedConn():"));
+ err = SockWriteOnClosedConn();
+ SetTestStepResult(err ? static_cast<TVerdict>(err) : EPass);
+ }
+
return TestStepResult();
--- a/genericopenlibs/openenvcore/libc/test/testsocket/src/tsocketblocks.cpp Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/libc/test/testsocket/src/tsocketblocks.cpp Wed Sep 15 14:02:55 2010 +0300
@@ -5204,6 +5204,100 @@
return ret;
}
+
+void* createNwrite_socket(TAny* aParam)
+ {
+ sockaddr_in serv_addr;
+ int err1;
+ int ret = 0;
+ char *msg ="testing socket send";
+ int sock_fd;
+ serv_addr.sin_family = AF_INET;
+ serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
+ serv_addr.sin_port = (int)aParam;
+ sock_fd = socket(AF_INET,SOCK_STREAM,0);
+ if (sock_fd < 0)
+ {
+ ret = -1;
+ goto close;
+ }
+ if (connect(sock_fd,(sockaddr*)&serv_addr,sizeof(serv_addr)) < 0)
+ {
+ ret = -1;
+ goto close;
+ }
+ sleep(5);
+ err1 = write(sock_fd, msg, strlen(msg)+1);
+ if(err1 < 0)
+ {
+ ret = -1;
+ goto close;
+ }
+ sleep(5);
+ err1 = write(sock_fd, msg,strlen(msg)+1);
+ if(err1 == -1 )
+ {
+ printf("write() failed returned errno = %d", errno);
+ }
+ else
+ {
+ ret = -1;
+ }
+ close:
+ close(sock_fd);
+ return (void*)ret;
+
+ }
+TInt CTestSocket::SockWriteOnClosedConn()
+ {
+
+ int sock_fd,newsock_fd;
+ unsigned int addr_len;
+ sockaddr_in serv_addr,new_socket;
+ TInt ret = KErrNone;
+ int threadRetVal = 0;
+ void *threadRetValPtr = (void*)&threadRetVal;
+ sock_fd = socket(AF_INET,SOCK_STREAM,0);
+ if (sock_fd < 0)
+ {
+ return KErrSocket;
+ }
+ serv_addr.sin_family = AF_INET;
+ serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
+ serv_addr.sin_port = htons(12350);
+ pthread_t clientThread;
+ if (bind(sock_fd,(sockaddr*)&serv_addr,sizeof(serv_addr)) < 0)
+ {
+ INFO_PRINTF2(_L("bind return with errno = %d"), errno);
+ return KErrBind;
+ }
+ if(-1 == listen(sock_fd, 1))
+ {
+ printf("error listen failed");
+ close(sock_fd);
+ return -1;
+ }
+ pthread_create(&clientThread, NULL, &createNwrite_socket, (void*)(serv_addr.sin_port));
+ addr_len = sizeof(new_socket);
+ newsock_fd = accept(sock_fd,(sockaddr*)&new_socket,&addr_len);
+ if (errno != 0 )
+ {
+ INFO_PRINTF2(_L("Accept return with errno = %d"), errno);
+ ret = -1;
+ }
+
+ close(newsock_fd);
+ close(sock_fd);
+ pthread_join(clientThread, &threadRetValPtr );
+ if (threadRetVal < 0)
+ {
+ INFO_PRINTF1(_L("SockWriteOnClosedConn failed"));
+ ret = threadRetVal;
+ }
+ return ret;
+ }
+
+
// ========================== OTHER EXPORTED FUNCTIONS =========================
// None
--- a/genericopenlibs/openenvcore/libc/test/testsocket/src/tsocketserver.cpp Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/libc/test/testsocket/src/tsocketserver.cpp Wed Sep 15 14:02:55 2010 +0300
@@ -455,6 +455,10 @@
{
testStep = new CTestSocket(aStepName);
}
+ if(aStepName == KSockWriteOnClosedConn )
+ {
+ testStep = new CTestSocket(aStepName);
+ }
return testStep;
}
--- a/genericopenlibs/openenvcore/test/utils/OEtests_hw.bat Wed Sep 15 00:31:55 2010 +0300
+++ b/genericopenlibs/openenvcore/test/utils/OEtests_hw.bat Wed Sep 15 14:02:55 2010 +0300
@@ -162,3 +162,4 @@
del e:\sys$rom.zip
del c:\logs\testexecute\TestResults.htm
copy c:\logs\testexecute\*.* e:\
+copy c:\ced.log e:\
--- a/genericservices/taskscheduler/SCHSVR/SchTimer.cpp Wed Sep 15 00:31:55 2010 +0300
+++ b/genericservices/taskscheduler/SCHSVR/SchTimer.cpp Wed Sep 15 14:02:55 2010 +0300
@@ -404,6 +404,7 @@
CPropertyNotifier::~CPropertyNotifier()
{
Cancel();
+ iProperty.Close();
}
void CPropertyNotifier::AttachL()
@@ -416,7 +417,10 @@
void CPropertyNotifier::SetPropertyL(const TUid& aCategory, TUint aKey)
{
if (IsActive())
+ {
Cancel();
+ iProperty.Close();
+ }
iCategory = aCategory;
iKey = aKey;
AttachL();
--- a/lowlevellibsandfws/pluginfw/Framework/frame/RegistryData.cpp Wed Sep 15 00:31:55 2010 +0300
+++ b/lowlevellibsandfws/pluginfw/Framework/frame/RegistryData.cpp Wed Sep 15 14:02:55 2010 +0300
@@ -681,6 +681,7 @@
return EFalse;
}
err = loader.CheckLibraryHash(dllFullName, ETrue);
+ loader.Close();
if(err != KErrNone)
{
#ifdef __ECOM_TRACE