#include "event_client.h"
#include "rss_atom_parser.h"
+extern pthread_mutex_t RSSQueueMutex;
+
HashList *StartHandlers = NULL;
HashList *EndHandlers = NULL;
HashList *KnownNameSpaces = NULL;
char *sep = NULL;
/* Axe the namespace, we don't care about it */
-/// CtdlLogPrintf(0, "RSS: supplied el %d: %s...\n", rssc->Cfg->ItemType, supplied_el);
+/// syslog(LOG_DEBUG, "RSS: supplied el %d: %s...\n", rssc->Cfg->ItemType, supplied_el);
pel = supplied_el;
while (sep = strchr(pel, ':'), sep) {
pel = sep + 1;
&v))
{
#ifdef DEBUG_RSS
- CtdlLogPrintf(0, "RSS: START ignoring because of wrong namespace [%s] = [%s]\n",
+ syslog(LOG_DEBUG, "RSS: START ignoring because of wrong namespace [%s]\n",
supplied_el);
#endif
return;
}
#ifdef DEBUG_RSS
else
- CtdlLogPrintf(0, "RSS: START unhandled: [%s] [%s]...\n", pel, supplied_el);
+ syslog(LOG_DEBUG, "RSS: START unhandled: [%s] [%s]...\n", pel, supplied_el);
#endif
}
#ifdef DEBUG_RSS
else
- CtdlLogPrintf(0, "RSS: START unhandled: [%s] [%s]...\n", pel, supplied_el);
+ syslog(LOG_DEBUG, "RSS: START unhandled: [%s] [%s]...\n", pel, supplied_el);
#endif
}
while (sep = strchr(pel, ':'), sep) {
pel = sep + 1;
}
-// CtdlLogPrintf(0, "RSS: END %s...\n", el);
+// syslog(LOG_DEBUG, "RSS: END %s...\n", el);
if (pel != supplied_el)
{
void *v;
&v))
{
#ifdef DEBUG_RSS
- CtdlLogPrintf(0, "RSS: END ignoring because of wrong namespace [%s] = [%s]\n",
+ syslog(LOG_DEBUG, "RSS: END ignoring because of wrong namespace [%s] = [%s]\n",
supplied_el, ChrPtr(rssc->CData));
#endif
FlushStrBuf(rssc->CData);
}
#ifdef DEBUG_RSS
else
- CtdlLogPrintf(0, "RSS: END unhandled: [%s] [%s] = [%s]...\n", pel, supplied_el, ChrPtr(rssc->CData));
+ syslog(LOG_DEBUG, "RSS: END unhandled: [%s] [%s] = [%s]...\n", pel, supplied_el, ChrPtr(rssc->CData));
#endif
}
#ifdef DEBUG_RSS
else
- CtdlLogPrintf(0, "RSS: END unhandled: [%s] [%s] = [%s]...\n", pel, supplied_el, ChrPtr(rssc->CData));
+ syslog(LOG_DEBUG, "RSS: END unhandled: [%s] [%s] = [%s]...\n", pel, supplied_el, ChrPtr(rssc->CData));
#endif
FlushStrBuf(rssc->CData);
rssc->Current = NULL;
void RSS_item_rss_start (StrBuf *CData, rss_item *ri, rss_aggregator *Cfg, const char** Attr)
{
- CtdlLogPrintf(CTDL_DEBUG, "RSS: This is an RSS feed.\n");
+ syslog(LOG_DEBUG, "RSS: This is an RSS feed.\n");
Cfg->ItemType = RSS_RSS;
}
void RSS_item_rdf_start(StrBuf *CData, rss_item *ri, rss_aggregator *Cfg, const char** Attr)
{
- CtdlLogPrintf(CTDL_DEBUG, "RSS: This is an RDF feed.\n");
+ syslog(LOG_DEBUG, "RSS: This is an RDF feed.\n");
Cfg->ItemType = RSS_RSS;
}
void ATOM_item_feed_start(StrBuf *CData, rss_item *ri, rss_aggregator *Cfg, const char** Attr)
{
- CtdlLogPrintf(CTDL_DEBUG, "RSS: This is an ATOM feed.\n");
+ syslog(LOG_DEBUG, "RSS: This is an ATOM feed.\n");
Cfg->ItemType = RSS_ATOM;
}
void RSS_item_rss_end(StrBuf *CData, rss_item *ri, rss_aggregator *Cfg, const char** Attr)
{
-// CtdlLogPrintf(CTDL_DEBUG, "End of feed detected. Closing parser.\n");
+// syslog(LOG_DEBUG, "End of feed detected. Closing parser.\n");
ri->done_parsing = 1;
}
void RSS_item_rdf_end(StrBuf *CData, rss_item *ri, rss_aggregator *Cfg, const char** Attr)
{
-// CtdlLogPrintf(CTDL_DEBUG, "End of feed detected. Closing parser.\n");
+// syslog(LOG_DEBUG, "End of feed detected. Closing parser.\n");
ri->done_parsing = 1;
}
-eNextState ParseRSSReply(AsyncIO *IO)
+eNextState RSSAggregator_ParseReply(AsyncIO *IO)
{
+ StrBuf *Buf;
rss_aggregator *rssc;
rss_item *ri;
const char *at;
char *ptr;
long len;
+ const char *Key;
+
+
+ if (IO->HttpReq.httpcode != 200)
+ {
+
+ EV_syslog(LOG_DEBUG, "need a 200, got a %ld !\n",
+ IO->HttpReq.httpcode);
+// TODO: aide error message with rate limit
+ return eAbort;
+ }
rssc = IO->Data;
ri = rssc->Item;
else
ptr = "UTF-8";
- CtdlLogPrintf(CTDL_ALERT, "RSS: Now parsing [%s] \n", ChrPtr(rssc->Url));
+ syslog(LOG_DEBUG, "RSS: Now parsing [%s] \n", ChrPtr(rssc->Url));
rssc->xp = XML_ParserCreateNS(ptr, ':');
if (!rssc->xp) {
- CtdlLogPrintf(CTDL_ALERT, "Cannot create XML parser!\n");
- goto shutdown;
+ syslog(LOG_DEBUG, "Cannot create XML parser!\n");
+ return eAbort;
}
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_Parse(rssc->xp, "", 0, 1);
- CtdlLogPrintf(CTDL_ALERT, "RSS: XML Status [%s] \n",
+ syslog(LOG_DEBUG, "RSS: XML Status [%s] \n",
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;
+
+ rssc->Pos = GetNewHashPos(rssc->Messages, 1);
- return eTerminateConnection;
+ ///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;
}
-void rss_cleanup(void)
+void rss_parser_cleanup(void)
{
DeleteHash(&StartHandlers);
DeleteHash(&EndHandlers);
/* we don't like these namespaces because of they shadow our usefull parameters. */
Put(KnownNameSpaces, HKEY("http://search.yahoo.com/mrss/"), NULL, reference_free_handler);
#endif
- CtdlRegisterCleanupHook(rss_cleanup);
+ CtdlRegisterCleanupHook(rss_parser_cleanup);
}
return "rssparser";
}