eNextState ParseRSSReply(AsyncIO *IO)
{
+ StrBuf *Buf;
rss_aggregator *rssc;
rss_item *ri;
const char *at;
char *ptr;
long len;
+ const char *Key;
rssc = IO->Data;
pthread_mutex_lock(&RSSQueueMutex);
rssc->xp = XML_ParserCreateNS(ptr, ':');
if (!rssc->xp) {
syslog(LOG_DEBUG, "Cannot create XML parser!\n");
- goto shutdown;
+ pthread_mutex_lock(&RSSQueueMutex);
+ rssc->RefCount --;
+ pthread_mutex_unlock(&RSSQueueMutex);
+ return eTerminateConnection;
}
FlushStrBuf(rssc->Key);
+ rssc->Messages = NewHash(1, Flathash);
XML_SetElementHandler(rssc->xp, rss_xml_start, rss_xml_end);
XML_SetCharacterDataHandler(rssc->xp, rss_xml_chardata);
XML_SetUserData(rssc->xp, rssc);
XML_ErrorString(
XML_GetErrorCode(rssc->xp)));
-shutdown:
XML_ParserFree(rssc->xp);
-
flush_rss_item(ri);
FreeStrBuf(&rssc->CData);
FreeStrBuf(&rssc->Key);
- ///Cfg->next_poll = time(NULL) + config.c_net_freq;
+ Buf = NewStrBufDup(rssc->rooms);
+ rssc->recp.recp_room = SmashStrBuf(&Buf);
+ rssc->recp.num_room = rssc->roomlist_parts;
+ rssc->recp.recptypes_magic = RECPTYPES_MAGIC;
- pthread_mutex_lock(&RSSQueueMutex);
- rssc->RefCount --;
- pthread_mutex_unlock(&RSSQueueMutex);
- return eTerminateConnection;
+ rssc->Pos = GetNewHashPos(rssc->Messages, 1);
+
+ ///Cfg->next_poll = time(NULL) + config.c_net_freq;
+ if (GetNextHashPos(rssc->Messages, rssc->Pos, &len, &Key, (void**) &rssc->ThisMsg))
+ return QueueDBOperation(IO, RSS_FetchNetworkUsetableEntry);
+ else
+ return eAbort;
}