# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1284548575 -10800 # Node ID c44f36bb61a381047ba2277a86a11dc4b6f9284a # Parent 82ca0c6a68ed953fedb8cc49c8280906d5ab93a8 Revision: 201021 Kit: 201036 diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/backend/bwins/backendu.def --- 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 &) + diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/backend/bwins/backendwolibrtu.def --- 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 &) + diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/backend/bwins/old_backendu.def --- 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 &) + diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/backend/eabi/backendu.def --- 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 + diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/backend/eabi/backendwolibrtu.def --- 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 + diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/backend/eabi/old_backendu.def --- 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 + diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/backend/inc/fdesc.h --- 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*& 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; diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/backend/inc/sysif.h --- 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 #include +#include #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 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); diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/backend/src/corebackend/localif.cpp --- 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) diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/backend/src/corebackend/usocket.cpp --- 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 ifq; - TBuf8 <25> ipBuf8; - TName aBuf; + TPckgBuf info; TInt ret = KErrNone; ATOMICSOCKETOP( ret = iSocket.SetOpt(KSoInetEnumInterfaces, KSolInetIfCtrl), ret = KErrBadHandle ) if (ret != KErrNone) { return KErrGeneral; } - TPckgBuf 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 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(aParam); + char **suffixes = dns_suffix->suffixes; + TSoInetInterfaceInfoExtnDnsSuffix interfaceInfo; + (TSoInetInterfaceInfo &)interfaceInfo = ifInfo; + interfaceInfo.iDomainSuffix.DeleteAll(); + TPckgBuf 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(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 changeToNew(info()); - ATOMICSOCKETOP(ret = iSocket.SetOpt(KSoInetConfigInterface, KSolInetIfCtrl,changeToNew), return KErrBadHandle ) + TPckgBuf 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 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 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 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 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(aParam); + RPointerArray 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(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 (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 (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 (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 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 (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 (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; + } diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/backend/src/corebackend/usocketbase.cpp --- 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; } diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/include/net/if.h --- 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 } diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/include/net/route.h --- 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) */ diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/include/sys/sockio.dosc --- 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 diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/include/sys/sockio.h --- 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 */ diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/libc/bwins/libcu.def --- 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 + diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/libc/bwins/old_libcu.def --- 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 + diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/libc/eabi/libcu.def --- 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 + diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/libc/eabi/old_libcu.def --- 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 + diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/libc/src/Fmscalls.cpp --- 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. diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/libc/src/timefuncs.cpp --- 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; diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/libc/test/testifioctls/data/tifioctls.ini --- 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 diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/libc/test/testifioctls/inc/tifioctls.h --- 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: diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/libc/test/testifioctls/scripts/tifioctls.script --- 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 + + + + + + + + + diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/libc/test/testifioctls/scripts/tifioctls_hw.script --- 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 + diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/libc/test/testifioctls/src/tifioctls.cpp --- 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(err) : EPass); } - return TestStepResult(); + else if(TestStepName() == KTestioctlGetIfIpAddr) + { + INFO_PRINTF1(_L("TestGetIfIPAddr():")); + err = TestGetIfIPAddr(); + SetTestStepResult(err ? static_cast(err) : EPass); + + } + else if(TestStepName() == KTestioctlGetIfAttributes) + { + INFO_PRINTF1(_L("TestGetIfAttributes():")); + err = TestGetIfAttributes(); + SetTestStepResult(err ? static_cast(err) : EPass); + + } + else if(TestStepName() == KTestioctlSetIfAttributes) + { + INFO_PRINTF1(_L("TestSetIfAttributes():")); + err = TestSetIfAttributes(); + SetTestStepResult(err ? static_cast(err) : EPass); + + } + else if(TestStepName() == KTestioctlSetIfDNSSuffix) + { + INFO_PRINTF1(_L("TestSetIfDNSSuffix():")); + err = TestSetIfDNSSuffix(); + SetTestStepResult(err ? static_cast(err) : EPass); + + } + else if(TestStepName() == KTestioctlGetIfDNSSuffix) + { + INFO_PRINTF1(_L("TestGetIfDNSSuffix():")); + err = TestGetIfDNSSuffix(); + SetTestStepResult(err ? static_cast(err) : EPass); + } + else if(TestStepName() == KTestRouteIoctl) + { + INFO_PRINTF1(_L("TestRouteIoctl():")); + err = TestRouteIoctl(); + SetTestStepResult(err ? static_cast(err) : EPass); + } + else if(TestStepName() == KTestNumberOfRoutesIoctl) + { + INFO_PRINTF1(_L("TestNumberOfRoutesIoctl():")); + err = TestNumberOfRoutesIoctl(); + SetTestStepResult(err ? static_cast(err) : EPass); + } + else if(TestStepName() == KTestSetNameServers) + { + INFO_PRINTF1(_L("TestSetNameServers():")); + err = TestSetNameServers(); + SetTestStepResult(err ? static_cast(err) : EPass); + } + else if(TestStepName() == KTestGetNameServers) + { + INFO_PRINTF1(_L("TestGetNameServers():")); + err = TestGetNameServers(); + SetTestStepResult(err ? static_cast(err) : EPass); + } + return TestStepResult(); } diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/libc/test/testifioctls/src/tifioctlsblocks.cpp --- 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 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 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; + + } + + diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/libc/test/testifioctls/src/tifioctlsserver.cpp --- 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; } diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/libc/test/testsocket/inc/tsocket.h --- 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 diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/libc/test/testsocket/scripts/tsocket.script --- 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 diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/libc/test/testsocket/scripts/tsocket_hw.script --- 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 + diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/libc/test/testsocket/src/tsocket.cpp --- 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(err) : EPass); } + if(TestStepName() == KSockWriteOnClosedConn ) + { + INFO_PRINTF1(_L("SockWriteOnClosedConn():")); + err = SockWriteOnClosedConn(); + SetTestStepResult(err ? static_cast(err) : EPass); + } + return TestStepResult(); diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/libc/test/testsocket/src/tsocketblocks.cpp --- 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 diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/libc/test/testsocket/src/tsocketserver.cpp --- 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; } diff -r 82ca0c6a68ed -r c44f36bb61a3 genericopenlibs/openenvcore/test/utils/OEtests_hw.bat --- 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:\ diff -r 82ca0c6a68ed -r c44f36bb61a3 genericservices/taskscheduler/SCHSVR/SchTimer.cpp --- 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(); diff -r 82ca0c6a68ed -r c44f36bb61a3 lowlevellibsandfws/pluginfw/Framework/frame/RegistryData.cpp --- 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