void SSDPCache::Add( const QString &sURI, const QString &sUSN, const QString &sLocation, long sExpiresInSecs ) { // -------------------------------------------------------------- // Calculate when this cache entry should expire. // -------------------------------------------------------------- TaskTime ttExpires; gettimeofday ( (&ttExpires), NULL ); AddSecondsToTaskTime( ttExpires, sExpiresInSecs ); // -------------------------------------------------------------- // Get a Pointer to a Entries QDict... (Create if not found) // -------------------------------------------------------------- SSDPCacheEntries *pEntries = Find( sURI ); if (pEntries == NULL) { pEntries = new SSDPCacheEntries(); pEntries->AddRef(); m_cache.insert( sURI, pEntries ); } pEntries->AddRef(); // -------------------------------------------------------------- // See if the Entries Collection contains our USN... (Create if not found) // -------------------------------------------------------------- DeviceLocation *pEntry = pEntries->Find( sUSN ); if (pEntry == NULL) { pEntry = new DeviceLocation( sURI, sUSN, sLocation, ttExpires ); Lock(); pEntries->Insert( sUSN, pEntry ); Unlock(); NotifyAdd( sURI, sUSN, sLocation ); } else { pEntry->AddRef(); pEntry->m_sLocation = sLocation; pEntry->m_ttExpires = ttExpires; pEntry->Release(); } pEntries->Release(); }
DeviceLocation *SSDPCache::Find( const QString &sURI, const QString &sUSN ) { DeviceLocation *pEntry = NULL; SSDPCacheEntries *pEntries = Find( sURI ); if (pEntries != NULL) { pEntries->AddRef(); pEntry = pEntries->Find( sUSN ); pEntries->Release(); } return pEntry; }