]> code.citadel.org Git - citadel.git/blobdiff - citadel/modules/rssclient/serv_rssclient.c
add more information to the system contexts, so one can use RWHO to find out what...
[citadel.git] / citadel / modules / rssclient / serv_rssclient.c
index 24e3d6097f1c1c29aa5deb2001546e721a9e0dde..db6d37fb0f3bf31c8eb555a0ae6b888d560b2ddd 100644 (file)
@@ -69,7 +69,7 @@ HashList *RSSQueueRooms = NULL; /* rss_room_counter */
 HashList *RSSFetchUrls = NULL; /* -> rss_aggregator; ->RefCount access to be locked too. */
 
 eNextState RSSAggregatorTerminate(AsyncIO *IO);
-
+eNextState RSSAggregatorShutdownAbort(AsyncIO *IO);
 struct CitContext rss_CC;
 
 struct rssnetcfg *rnclist = NULL;
@@ -101,14 +101,16 @@ void DeleteRoomReference(long QRnumber)
 
        At = GetNewHashPos(RSSQueueRooms, 0);
 
-       GetHashPosFromKey(RSSQueueRooms, LKEY(QRnumber), At);
-       GetHashPos(RSSQueueRooms, At, &HKLen, &HK, &vData);
-       if (vData != NULL)
+       if (GetHashPosFromKey(RSSQueueRooms, LKEY(QRnumber), At))
        {
-               pRoomC = (rss_room_counter *) vData;
-               pRoomC->count --;
-               if (pRoomC->count == 0)
-                       DeleteEntryFromHash(RSSQueueRooms, At);
+               GetHashPos(RSSQueueRooms, At, &HKLen, &HK, &vData);
+               if (vData != NULL)
+               {
+                       pRoomC = (rss_room_counter *) vData;
+                       pRoomC->count --;
+                       if (pRoomC->count == 0)
+                               DeleteEntryFromHash(RSSQueueRooms, At);
+               }
        }
        DeleteHashPos(&At);
 }
@@ -146,7 +148,7 @@ void UnlinkRSSAggregator(rss_aggregator *Cfg)
        UnlinkRooms(Cfg);
 
        At = GetNewHashPos(RSSFetchUrls, 0);
-       if (GetHashPosFromKey(RSSFetchUrls, SKEY(Cfg->Url), At) == 0)
+       if (GetHashPosFromKey(RSSFetchUrls, SKEY(Cfg->Url), At))
        {
                DeleteEntryFromHash(RSSFetchUrls, At);
        }
@@ -465,6 +467,9 @@ int rss_do_fetching(rss_aggregator *Cfg)
        IO->CitContext = CloneContext(&rss_CC);
        IO->Data = Cfg;
 
+       safestrncpy(((CitContext*)IO->CitContext)->cs_host, 
+                   ChrPtr(Cfg->Url),
+                   sizeof(((CitContext*)IO->CitContext)->cs_host)); 
 
        syslog(LOG_DEBUG, "Fetching RSS feed <%s>\n", ChrPtr(Cfg->Url));
        ParseURL(&IO->ConnectMe, Cfg->Url, 80);
@@ -475,7 +480,8 @@ int rss_do_fetching(rss_aggregator *Cfg)
                          NULL,
                          "Citadel RSS Client",
                          ParseRSSReply, 
-                         RSSAggregatorTerminate))
+                         RSSAggregatorTerminate,
+                         RSSAggregatorShutdownAbort))
        {
                syslog(LOG_DEBUG, "Unable to initialize libcurl.\n");
                return 0;
@@ -532,6 +538,21 @@ eNextState RSSAggregatorTerminate(AsyncIO *IO)
        EVM_syslog(LOG_DEBUG, "RSS: Terminating.\n");
 
 
+       UnlinkRSSAggregator(rncptr);
+       return eAbort;
+}
+eNextState RSSAggregatorShutdownAbort(AsyncIO *IO)
+{
+       const char *pUrl;
+       rss_aggregator *rncptr = (rss_aggregator *)IO->Data;
+
+       pUrl = IO->ConnectMe->PlainUrl;
+       if (pUrl == NULL)
+               pUrl = "";
+
+       EV_syslog(LOG_DEBUG, "RSS: Aborting by shutdown: %s.\n", pUrl);
+
+
        UnlinkRSSAggregator(rncptr);
        return eAbort;
 }