// Help function for address loading, returns // = 0, if address did not change // = 1, if address has changed // static TInt ChangedAddress(TInetAddr &aAddr, const TInetAddr &aNewAddr) { // "Normalize" new address // - convert IPv4 addresess into IPv4 mapped // - anything other then KAfInet6 will be set as None TInetAddr tmp(aNewAddr); if (tmp.Family() == KAfInet) { tmp.ConvertToV4Mapped(); tmp.SetScope(0); // [is already part of "convert" in newer insocks] } else if (tmp.Family() != KAfInet6) tmp.SetAddress(KInet6AddrNone); if (tmp.CmpAddr(aAddr) && // address and port same? tmp.FlowLabel() == aAddr.FlowLabel()) { // If the scope id in new addres is zero, then the // scope id is not part the address compare. // (this will optimize unconnected sockets where application // gives destination without scope -- eliminates unnecessary // flow connect operations. if (tmp.Scope() == aAddr.Scope() || tmp.Scope() == 0) return 0; // No Change to the previous value } // Address is being changed aAddr = tmp; return 1; }
TBool CDnsSocketWriter::Match(const TInetAddr &aServer) const { // The match applies only to connected TCP readers/writers return iTCP && !iListen && aServer.CmpAddr(iTo) && aServer.Scope() == iTo.Scope(); }