X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Frssclient%2Frss_atom_parser.c;h=7bdb94bafe59969ae87d70cb644d82e7e7f504a9;hb=58f686487cf5f14d5da5357c67f2e6624dbde027;hp=cd4121d5d1172bb52392e553fc49a2feb720e726;hpb=1493fd8ff0de73d30336607b43b1c8113ffcffa2;p=citadel.git diff --git a/citadel/modules/rssclient/rss_atom_parser.c b/citadel/modules/rssclient/rss_atom_parser.c index cd4121d5d..7bdb94baf 100644 --- a/citadel/modules/rssclient/rss_atom_parser.c +++ b/citadel/modules/rssclient/rss_atom_parser.c @@ -1,21 +1,15 @@ /* * Bring external RSS feeds into rooms. * - * Copyright (c) 2007-2012 by the citadel.org team + * Copyright (c) 2007-2015 by the citadel.org team * * This program is open source software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3. * - * - * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * - * - * */ #include @@ -64,26 +58,6 @@ int RSSAtomParserDebugEnabled = 0; #define N ((rss_aggregator*)IO->Data)->Cfg.QRnumber -#define DBGLOG(LEVEL) if ((LEVEL != LOG_DEBUG) || (RSSAtomParserDebugEnabled != 0)) - -#define EVRSSATOM_syslog(LEVEL, FORMAT, ...) \ - DBGLOG(LEVEL) syslog(LEVEL, \ - "%s[%ld]CC[%d][%ld]RSSP" FORMAT, \ - IOSTR, IO->ID, CCID, N, __VA_ARGS__) - -#define EVRSSATOMM_syslog(LEVEL, FORMAT) \ - DBGLOG(LEVEL) syslog(LEVEL, \ - "%s[%ld]CC[%d][%ld]RSSP" FORMAT, \ - IOSTR, IO->ID, CCID, N) - -#define EVRSSATOMCS_syslog(LEVEL, FORMAT, ...) \ - DBGLOG(LEVEL) syslog(LEVEL, "%s[%ld][%ld]RSSP" FORMAT, \ - IOSTR, IO->ID, N, __VA_ARGS__) - -#define EVRSSATOMSM_syslog(LEVEL, FORMAT) \ - DBGLOG(LEVEL) syslog(LEVEL, "%s[%ld][%ld]RSSP" FORMAT, \ - IOSTR, IO->ID, N) - /* * Convert an RDF/RSS datestamp into a time_t */ @@ -152,8 +126,7 @@ void RSS_item_rss_start (StrBuf *CData, rss_aggregator *RSSAggr, const char** Attr) { - AsyncIO *IO = &RSSAggr->IO; - EVRSSATOMM_syslog(LOG_DEBUG, "RSS: This is an RSS feed.\n"); + syslog(LOG_DEBUG, "RSS: This is an RSS feed."); RSSAggr->ItemType = RSS_RSS; } @@ -162,8 +135,7 @@ void RSS_item_rdf_start(StrBuf *CData, rss_aggregator *RSSAggr, const char** Attr) { - AsyncIO *IO = &RSSAggr->IO; - EVRSSATOMM_syslog(LOG_DEBUG, "RSS: This is an RDF feed.\n"); + syslog(LOG_DEBUG, "RSS: This is an RDF feed."); RSSAggr->ItemType = RSS_RSS; } @@ -172,8 +144,7 @@ void ATOM_item_feed_start(StrBuf *CData, rss_aggregator *RSSAggr, const char** Attr) { - AsyncIO *IO = &RSSAggr->IO; - EVRSSATOMM_syslog(LOG_DEBUG, "RSS: This is an ATOM feed.\n"); + syslog(LOG_DEBUG, "RSS: This is an ATOM feed."); RSSAggr->ItemType = RSS_ATOM; } @@ -542,8 +513,7 @@ void RSS_item_rss_end(StrBuf *CData, rss_aggregator *RSSAggr, const char** Attr) { - AsyncIO *IO = &RSSAggr->IO; - EVRSSATOMM_syslog(LOG_DEBUG, "End of feed detected. Closing parser.\n"); + syslog(LOG_DEBUG, "End of feed detected. Closing parser."); ri->done_parsing = 1; } @@ -552,8 +522,7 @@ void RSS_item_rdf_end(StrBuf *CData, rss_aggregator *RSSAggr, const char** Attr) { - AsyncIO *IO = &RSSAggr->IO; - EVRSSATOMM_syslog(LOG_DEBUG, "End of feed detected. Closing parser.\n"); + syslog(LOG_DEBUG, "End of feed detected. Closing parser."); ri->done_parsing = 1; } @@ -630,12 +599,9 @@ void rss_remember_item(rss_item *ri, rss_aggregator *RSSAggr) struct MD5Context md5context; u_char rawdigest[MD5_DIGEST_LEN]; StrBuf *guid; - AsyncIO *IO = &RSSAggr->IO; int n; - - SaveMsg = (networker_save_message *) malloc( - sizeof(networker_save_message)); + SaveMsg = (networker_save_message *) malloc(sizeof(networker_save_message)); memset(SaveMsg, 0, sizeof(networker_save_message)); /* Construct a GUID to use in the S_USETABLE table. @@ -650,22 +616,19 @@ void rss_remember_item(rss_item *ri, rss_aggregator *RSSAggr) else { MD5Init(&md5context); if (ri->title != NULL) { - MD5Update(&md5context, - (const unsigned char*)SKEY(ri->title)); + MD5Update(&md5context, (const unsigned char*)SKEY(ri->title)); } if (ri->link != NULL) { - MD5Update(&md5context, - (const unsigned char*)SKEY(ri->link)); + MD5Update(&md5context, (const unsigned char*)SKEY(ri->link)); } MD5Final(rawdigest, &md5context); - guid = NewStrBufPlain(NULL, - MD5_DIGEST_LEN * 2 + 12 /* _rss2ctdl*/); + guid = NewStrBufPlain(NULL, MD5_DIGEST_LEN * 2 + 12 /* _rss2ctdl*/); StrBufHexEscAppend(guid, NULL, rawdigest, MD5_DIGEST_LEN); StrBufAppendBufPlain(guid, HKEY("_rss2ctdl"), 0); } /* translate Item into message. */ - EVRSSATOMM_syslog(LOG_DEBUG, "RSS: translating item...\n"); + syslog(LOG_DEBUG, "RSS: translating item..."); if (ri->description == NULL) ri->description = NewStrBufPlain(HKEY("")); StrBufSpaceToBlank(ri->description); SaveMsg->Msg.cm_magic = CTDLMESSAGE_MAGIC; @@ -681,7 +644,7 @@ void rss_remember_item(rss_item *ri, rss_aggregator *RSSAggr) SaveMsg->MsgGUID = guid; if (ri->pubdate <= 0) { - ri->pubdate = time(NULL); /// TODO: use event time! + ri->pubdate = time(NULL); } CM_SetFieldLONG(&SaveMsg->Msg, eTimestamp, ri->pubdate); if (ri->channel_title != NULL) { @@ -726,7 +689,6 @@ void rss_xml_start(void *data, const char *supplied_el, const char **attr) { rss_xml_handler *h; rss_aggregator *RSSAggr = (rss_aggregator*) data; - AsyncIO *IO = &RSSAggr->IO; rss_item *ri = RSSAggr->Item; void *pv; const char *pel; @@ -751,10 +713,11 @@ void rss_xml_start(void *data, const char *supplied_el, const char **attr) pel - supplied_el - 1, &v)) { - EVRSSATOM_syslog(LOG_DEBUG, + syslog(LOG_DEBUG, "RSS: START ignoring " - "because of wrong namespace [%s]\n", - supplied_el); + "because of wrong namespace [%s]", + supplied_el + ); return; } } @@ -784,23 +747,24 @@ void rss_xml_start(void *data, const char *supplied_el, const char **attr) attr); } else - EVRSSATOM_syslog(LOG_DEBUG, - "RSS: START unhandled: [%s] [%s]...\n", + syslog(LOG_DEBUG, + "RSS: START unhandled: [%s] [%s]...", pel, - supplied_el); + supplied_el + ); } else - EVRSSATOM_syslog(LOG_DEBUG, - "RSS: START unhandled: [%s] [%s]...\n", + syslog(LOG_DEBUG, + "RSS: START unhandled: [%s] [%s]...", pel, - supplied_el); + supplied_el + ); } void rss_xml_end(void *data, const char *supplied_el) { rss_xml_handler *h; rss_aggregator *RSSAggr = (rss_aggregator*) data; - AsyncIO *IO = &RSSAggr->IO; rss_item *ri = RSSAggr->Item; const char *pel; char *sep = NULL; @@ -811,7 +775,7 @@ void rss_xml_end(void *data, const char *supplied_el) while (sep = strchr(pel, ':'), sep) { pel = sep + 1; } - EVRSSATOM_syslog(LOG_DEBUG, "RSS: END %s...\n", supplied_el); + syslog(LOG_DEBUG, "RSS: END %s...", supplied_el); if (pel != supplied_el) { void *v; @@ -821,9 +785,9 @@ void rss_xml_end(void *data, const char *supplied_el) pel - supplied_el - 1, &v)) { - EVRSSATOM_syslog(LOG_DEBUG, + syslog(LOG_DEBUG, "RSS: END ignoring because of wrong namespace" - "[%s] = [%s]\n", + "[%s] = [%s]", supplied_el, ChrPtr(RSSAggr->CData)); FlushStrBuf(RSSAggr->CData); @@ -853,15 +817,15 @@ void rss_xml_end(void *data, const char *supplied_el) h->Handler(RSSAggr->CData, ri, RSSAggr, NULL); } else - EVRSSATOM_syslog(LOG_DEBUG, - "RSS: END unhandled: [%s] [%s] = [%s]...\n", + syslog(LOG_DEBUG, + "RSS: END unhandled: [%s] [%s] = [%s]...", pel, supplied_el, ChrPtr(RSSAggr->CData)); } else - EVRSSATOM_syslog(LOG_DEBUG, - "RSS: END unhandled: [%s] [%s] = [%s]...\n", + syslog(LOG_DEBUG, + "RSS: END unhandled: [%s] [%s] = [%s]...", pel, supplied_el, ChrPtr(RSSAggr->CData)); @@ -870,18 +834,6 @@ void rss_xml_end(void *data, const char *supplied_el) -/* - * Callback function for passing libcurl's output to expat for parsing - * we don't do streamed parsing so expat can handle non-utf8 documents -size_t rss_libcurl_callback(void *ptr, size_t size, size_t nmemb, void *stream) -{ - XML_Parse((XML_Parser)stream, ptr, (size * nmemb), 0); - return (size*nmemb); -} - */ - - - eNextState RSSAggregator_ParseReply(AsyncIO *IO) { StrBuf *Buf; @@ -916,11 +868,11 @@ eNextState RSSAggregator_ParseReply(AsyncIO *IO) else ptr = "UTF-8"; - EVRSSATOM_syslog(LOG_DEBUG, "RSS: Now parsing [%s] \n", ChrPtr(RSSAggr->Url)); + syslog(LOG_DEBUG, "RSS: Now parsing [%s]", ChrPtr(RSSAggr->Url)); RSSAggr->xp = XML_ParserCreateNS(ptr, ':'); if (!RSSAggr->xp) { - EVRSSATOMM_syslog(LOG_ALERT, "Cannot create XML parser!\n"); + syslog(LOG_ALERT, "Cannot create XML parser!"); return eAbort; } FlushStrBuf(RSSAggr->Key); @@ -931,19 +883,18 @@ eNextState RSSAggregator_ParseReply(AsyncIO *IO) XML_SetUserData(RSSAggr->xp, RSSAggr); XML_SetCdataSectionHandler(RSSAggr->xp, rss_xml_cdata_start, - rss_xml_cdata_end); - + rss_xml_cdata_end + ); len = StrLength(IO->HttpReq.ReplyData); ptr = SmashStrBuf(&IO->HttpReq.ReplyData); XML_Parse(RSSAggr->xp, ptr, len, 0); free (ptr); - if (ri->done_parsing == 0) + if (ri->done_parsing == 0) { XML_Parse(RSSAggr->xp, "", 0, 1); + } - - EVRSSATOM_syslog(LOG_DEBUG, "RSS: XML Status [%s] \n", - XML_ErrorString(XML_GetErrorCode(RSSAggr->xp))); + syslog(LOG_DEBUG, "RSS: XML Status [%s]", XML_ErrorString(XML_GetErrorCode(RSSAggr->xp))); XML_ParserFree(RSSAggr->xp); flush_rss_item(ri); @@ -955,15 +906,21 @@ eNextState RSSAggregator_ParseReply(AsyncIO *IO) RSSAggr->Pos = GetNewHashPos(RSSAggr->Messages, 1); -//RSSAggr->next_poll = time(NULL) + config.c_net_freq; +#if 0 +// FIXME ajc if (GetNextHashPos(RSSAggr->Messages, RSSAggr->Pos, &len, &Key, - (void**) &RSSAggr->ThisMsg)) + (void**) &RSSAggr->ThisMsg)) { return NextDBOperation(IO, RSS_FetchNetworkUsetableEntry); - else + } + else { +#endif return eAbort; +#if 0 + } +#endif }