--- a/genericopenlibs/openenvcore/backend/src/corebackend/usocket.cpp Wed Sep 15 14:02:55 2010 +0300
+++ b/genericopenlibs/openenvcore/backend/src/corebackend/usocket.cpp Wed Oct 13 16:27:53 2010 +0300
@@ -232,11 +232,7 @@
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];
- 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];
+ *(TUint32*)sp->sa_data=fromaddr;
*len=8;
return;
}
@@ -960,7 +956,7 @@
ATOMICSOCKETOP(ret=iSocket.GetOpt(KSoTcpRcvAtMark,KSolInetTcp,*param), ret = KErrBadHandle)
break;
case SIOCGIFADDR:
- ret = GetInterfaceAttributes(aParam, EACTIVE_GETIP);
+ ret = GetIpAddress(aParam);
break;
case SIOCGIFNUM:
ret = GetInterafceNumber(aParam);
@@ -977,37 +973,7 @@
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;
@@ -1051,7 +1017,7 @@
return CSockDescBase::Fcntl(anArg, aCmd);
}
-/*
+
TInt CSocketDesc :: GetIpAddress( void *aParam )
{
TInetAddr myAddr;
@@ -1065,7 +1031,7 @@
ifreq *ifr = (ifreq *)aParam;
((struct sockaddr_in *)&ifr->ifr_addr)->sin_addr.s_addr = myIP;
return KErrNone;
- }*/
+ }
TInt CSocketDesc :: GetRemoteIpAddress( void *aParam )
{
@@ -1218,310 +1184,279 @@
CleanupStack::PopAndDestroy(iapDatabase);
return;
}
-#endif // __SYMBIAN_COMPILE_UNUSED__
-
-
-TInt CSocketDesc::GetInterfaceInfo(TSoInetInterfaceInfo& aIfInfo, TInt aIapId )
+TInt CSocketDesc :: SetInterfaceDetails( void *aParam ,TInt aFlag, TInt aType )
{
- TPckgBuf<TSoInetInterfaceInfo> info;
+ ifreq *ifr = (ifreq *)aParam;
+ TPckgBuf<TSoInetIfQuery> ifq;
+ TBuf8 <25> ipBuf8;
+ TName aBuf;
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(""))
- {
- 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)
+ 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 )) )
{
- ifInfo.iSpeedMetric = ifr->ifr_metric;
- }
- break;
+ 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;
+
+ 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;
+ }
+
+ // Loopback
+ if(ifr->ifr_flags & IFF_LOOPBACK)
+ {
+ info().iFeatures |= KIfIsLoopback;
+ }
- 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;
+ // point to point support
+ if(ifr->ifr_flags & IFF_POINTOPOINT)
+ {
+ info().iFeatures |= KIfIsPointToPoint;
+ }
+
+ // Broadcast
+ if(ifr->ifr_flags & IFF_BROADCAST)
+ {
+ info().iFeatures |=KIfCanBroadcast;
+ }
+
+
+ // 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;
+ }
}
- 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);
- ATOMICSOCKETOP(ret = iSocket.SetOpt(KSoInetConfigInterface,KSolInetIfCtrl,configInfo), ret = KErrBadHandle)
-
- 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;
- }
-
- default:
- return KErrArgument;
+ ATOMICSOCKETOP( ret = iSocket.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, info), ret = KErrBadHandle )
}
- TPckgBuf<TSoInet6InterfaceInfo> pkgIfInfo(ifInfo);
- ATOMICSOCKETOP(ret = iSocket.SetOpt(KSoInetConfigInterface, KSolInetIfCtrl,pkgIfInfo), ret = KErrBadHandle)
+ setout:
+ TPckgBuf<TSoInet6InterfaceInfo> changeToNew(info());
+ ATOMICSOCKETOP(ret = iSocket.SetOpt(KSoInetConfigInterface, KSolInetIfCtrl,changeToNew), return KErrBadHandle )
return ret;
}
+#endif // __SYMBIAN_COMPILE_UNUSED__
-//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 )
+TInt CSocketDesc::GetInterfaceDetails( void *aParam ,TInt aFlag, TInt aType )
{
-
- ifreq *ifr = (ifreq *)aParam;
- *(ifr->ifr_addr.sa_data) = '\0';
- TInt ret = 0;
-
- TSoInetInterfaceInfo ifInfo;
+ TPckgBuf<TSoInetIfQuery> ifq;
- if((ret = GetInterfaceInfo(ifInfo,aIapId)) != KErrNone)
+ TInt ret = KErrNone;
+ ATOMICSOCKETOP( ret = iSocket.SetOpt(KSoInetEnumInterfaces, KSolInetIfCtrl), ret = KErrBadHandle )
+ if (ret != KErrNone)
{
- return ret;
+ return KErrGeneral;
}
+
+ ifreq *ifr = (ifreq *)aParam;
+ *(ifr->ifr_addr.sa_data) = '\0';
- switch(aType)
+ TPckgBuf<TSoInetInterfaceInfo> info;
+ ATOMICSOCKETOP( ret = iSocket.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, info), ret = KErrBadHandle )
+ while( ret == KErrNone)
{
- 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)
+ 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 )) )
{
- 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:
- {
+ 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))
+ {
- 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)
- }
+ //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;
+ }
- 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;
+ // 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) */
+
+ break;
+
+ }
}
- 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;
-
- case EACCESS_GETDEFGATEWAY:
- if(ifInfo.iState == EIfUp)
- {
- ret = ConvertTInetToSockAddr(ifInfo.iDefGate,&ifr->ifr_defgatewayaddr);
- return ret;
- }
- 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;
- }
-
- // 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;
+ ATOMICSOCKETOP( ret = iSocket.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, info), ret = KErrBadHandle )
}
-
- return KErrNotFound;
-
+ return KErrNone;
}
TInt CSocketDesc::Poll(TPollMode aMode,TBool& aReadyStatus,TInt& aErrno)
@@ -1738,7 +1673,7 @@
{
servFlag = 1;
}
- GetInterfaceDetails(ifr,servFlag,EACTIVE_GETIP,ref.iId);
+ GetInterfaceDetails(ifr,servFlag,EACTIVE_GETIP);
}
}
ifc->ifc_len = sizeof(ifreq) * apIndex;
@@ -2311,154 +2246,3 @@
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;
- }