* Based on bits of the previous serv_funambol
* Contact: <matt@mcbridematt.dhs.org> / <matt@comalies>
*
- * Copyright (c) 2008-2010
+ * Copyright (c) 2008-2015
*
* 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 <stdio.h>
#include <curl/curl.h>
#include "citadel.h"
+#include "citserver.h"
#include "citadel_dirs.h"
#include "clientsocket.h"
#include "sysdep.h"
if (tlen > 0) {
/* Load the template message. Get mallocs done too */
- FILE *Ftemplate = NULL;
+ int fd;
+ struct stat statbuf;
const char *mimetype;
+ const char *Err = NULL;
- Ftemplate = fopen(template, "r");
- if (Ftemplate == NULL) {
+ fd = open(template, O_RDONLY);
+ if ((fd < 0) ||
+ (fstat(fd, &statbuf) == -1))
+ {
char buf[SIZ];
snprintf(buf, SIZ,
CtdlAideMessage(
buf,
"External notifier: "
- "unable to find message template!");
+ "unable to find/stat message template!");
goto abort;
}
- mimetype = GuessMimeByFilename(template, tlen);
-
- buf = malloc(SIZ);
- memset(buf, 0, SIZ);
- SOAPMessage = malloc(3072);
- memset(SOAPMessage, 0, 3072);
-
- while(fgets(buf, SIZ, Ftemplate) != NULL) {
- strcat(SOAPMessage, buf);
- }
- fclose(Ftemplate);
- if (strlen(SOAPMessage) < 0) {
+ Buf = NewStrBufPlain(NULL, statbuf.st_size + 1);
+ if (StrBufReadBLOB(Buf, &fd, 1, statbuf.st_size, &Err) < 0) {
char buf[SIZ];
+ close(fd);
+
snprintf(buf, SIZ,
- "Cannot load template file %s;"
- " won't send notification\r\n",
- file_funambol_msg);
+ "Cannot load template file %s [%s] "
+ "won't send notification\r\n",
+ file_funambol_msg,
+ Err);
syslog(LOG_ERR, "%s", buf);
-
- CtdlAideMessage(buf, "External notifier: "
- "unable to load message template!");
+ // TODO: once an hour!
+ CtdlAideMessage(
+ buf,
+ "External notifier: "
+ "unable to load message template!");
goto abort;
}
+ close(fd);
+
+ mimetype = GuessMimeByFilename(template, tlen);
+
+ SOAPMessage = SmashStrBuf(&Buf);
+
// Do substitutions
help_subst(SOAPMessage, "^notifyuser", user);
- help_subst(SOAPMessage, "^syncsource",
- config.c_funambol_source);
+ help_subst(SOAPMessage, "^syncsource", CtdlGetConfigStr("c_funambol_source"));
help_subst(SOAPMessage, "^msgid", msgid);
help_subst(SOAPMessage, "^msgnum", msgnumstr);
IO->HttpReq.headers = curl_slist_append(
IO->HttpReq.headers,
contenttype);
-
+ free(contenttype);
+ contenttype = NULL;
IO->HttpReq.headers = curl_slist_append(
IO->HttpReq.headers,
"Accept: application/soap+xml, "
}
else {
help_subst(remoteurl, "^notifyuser", user);
- help_subst(remoteurl, "^syncsource", config.c_funambol_source);
+ help_subst(remoteurl, "^syncsource", CtdlGetConfigStr("c_funambol_source"));
help_subst(remoteurl, "^msgid", msgid);
help_subst(remoteurl, "^msgnum", msgnumstr);
CtdlAideMessage(ChrPtr(ErrMsg),
"External notifier: "
"unable to contact notification host!");
+ FreeStrBuf(&ErrMsg);
}
syslog(LOG_DEBUG, "Funambol notified\n");
///if (SOAPMessage != NULL) free(SOAPMessage);
///if (buf != NULL) free(buf);
///FreeStrBuf (&ReplyBuf);
- return 0;
+ return eTerminateConnection;
}
eNextState ExtNotifyTerminateDB(AsyncIO *IO)