#include "ctdl_module.h"
-#ifdef EXPERIMENTAL_SMTP_EVENT_CLIENT
-
#include "event_client.h"
#include "serv_curl.h"
do { \
sta = curl_multi_setopt(mhnd, (CURLMOPT_##s), (v)); \
if (sta) { \
- CtdlLogPrintf(CTDL_ERR, "EVCURL: error setting option " #s " on curl multi handle: %s\n", curl_easy_strerror(sta)); \
+ syslog(LOG_ERR, "EVCURL: error setting option " #s " on curl multi handle: %s\n", curl_easy_strerror(sta)); \
exit (1); \
} \
} while (0)
global->nrun = nnrun;
mhnd = global->mhnd;
- CtdlLogPrintf(CTDL_DEBUG, "CURLEV: gotstatus(): about to call curl_multi_info_read\n");
+ syslog(LOG_DEBUG, "CURLEV: gotstatus(): about to call curl_multi_info_read\n");
while ((msg = curl_multi_info_read(mhnd, &nmsg))) {
- CtdlLogPrintf(CTDL_ERR, "EVCURL: got curl multi_info message msg=%d\n", msg->msg);
+ syslog(LOG_ERR, "EVCURL: got curl multi_info message msg=%d\n", msg->msg);
if (CURLMSG_DONE == msg->msg) {
CURL *chnd;
char *chandle;
chandle = NULL;;
chnd = msg->easy_handle;
sta = curl_easy_getinfo(chnd, CURLINFO_PRIVATE, &chandle);
- CtdlLogPrintf(CTDL_ERR, "EVCURL: request complete\n");
+ syslog(LOG_ERR, "EVCURL: request complete\n");
if (sta)
- CtdlLogPrintf(CTDL_ERR, "EVCURL: error asking curl for private cookie of curl handle: %s\n", curl_easy_strerror(sta));
+ syslog(LOG_ERR, "EVCURL: error asking curl for private cookie of curl handle: %s\n", curl_easy_strerror(sta));
IO = (AsyncIO *)chandle;
sta = msg->data.result;
if (sta) {
- CtdlLogPrintf(CTDL_ERR, "EVCURL: error description: %s\n", IO->HttpReq.errdesc);
- CtdlLogPrintf(CTDL_ERR, "EVCURL: error performing request: %s\n", curl_easy_strerror(sta));
+ syslog(LOG_ERR, "EVCURL: error description: %s\n", IO->HttpReq.errdesc);
+ syslog(LOG_ERR, "EVCURL: error performing request: %s\n", curl_easy_strerror(sta));
}
sta = curl_easy_getinfo(chnd, CURLINFO_RESPONSE_CODE, &IO->HttpReq.httpcode);
if (sta)
- CtdlLogPrintf(CTDL_ERR, "EVCURL: error asking curl for response code from request: %s\n", curl_easy_strerror(sta));
- CtdlLogPrintf(CTDL_ERR, "EVCURL: http response code was %ld\n", (long)IO->HttpReq.httpcode);
+ syslog(LOG_ERR, "EVCURL: error asking curl for response code from request: %s\n", curl_easy_strerror(sta));
+ syslog(LOG_ERR, "EVCURL: http response code was %ld\n", (long)IO->HttpReq.httpcode);
msta = curl_multi_remove_handle(mhnd, chnd);
if (msta)
- CtdlLogPrintf(CTDL_ERR, "EVCURL: warning problem detaching completed handle from curl multi: %s\n", curl_multi_strerror(msta));
+ syslog(LOG_ERR, "EVCURL: warning problem detaching completed handle from curl multi: %s\n", curl_multi_strerror(msta));
IO->HttpReq.attached = 0;
IO->SendDone(IO);
CURLMcode msta;
if (global == NULL) {
- CtdlLogPrintf(CTDL_DEBUG, "EVCURL: stepmulti(NULL): wtf?\n");
+ syslog(LOG_DEBUG, "EVCURL: stepmulti(NULL): wtf?\n");
return;
}
msta = curl_multi_socket_action(global->mhnd, fd, 0, &nnrun);
- CtdlLogPrintf(CTDL_DEBUG, "EVCURL: stepmulti(): calling gotstatus()\n");
+ syslog(LOG_DEBUG, "EVCURL: stepmulti(): calling gotstatus()\n");
if (msta)
- CtdlLogPrintf(CTDL_ERR, "EVCURL: error in curl processing events on multi handle, fd %d: %s\n", (int)fd, curl_multi_strerror(msta));
+ syslog(LOG_ERR, "EVCURL: error in curl processing events on multi handle, fd %d: %s\n", (int)fd, curl_multi_strerror(msta));
if (global->nrun != nnrun)
gotstatus(global, nnrun);
}
static void
gottime(struct ev_loop *loop, ev_timer *timeev, int events) {
- CtdlLogPrintf(CTDL_DEBUG, "EVCURL: waking up curl for timeout\n");
+ syslog(LOG_DEBUG, "EVCURL: waking up curl for timeout\n");
evcurl_global_data *global = (void *)timeev->data;
stepmulti(global, CURL_SOCKET_TIMEOUT);
}
static void
gotio(struct ev_loop *loop, ev_io *ioev, int events) {
- CtdlLogPrintf(CTDL_DEBUG, "EVCURL: waking up curl for io on fd %d\n", (int)ioev->fd);
+ syslog(LOG_DEBUG, "EVCURL: waking up curl for io on fd %d\n", (int)ioev->fd);
sockwatcher_data *sockwatcher = (void *)ioev->data;
stepmulti(sockwatcher->global, ioev->fd);
}
gotdata(void *data, size_t size, size_t nmemb, void *cglobal) {
AsyncIO *IO = (AsyncIO*) cglobal;
//evcurl_request_data *D = (evcurl_request_data*) data;
- CtdlLogPrintf(CTDL_DEBUG, "EVCURL: gotdata(): calling CurlFillStrBuf_callback()\n");
+ syslog(LOG_DEBUG, "EVCURL: gotdata(): calling CurlFillStrBuf_callback()\n");
if (IO->HttpReq.ReplyData == NULL)
{
static int
gotwatchtime(CURLM *multi, long tblock_ms, void *cglobal) {
- CtdlLogPrintf(CTDL_DEBUG, "EVCURL: gotwatchtime called %ld ms\n", tblock_ms);
+ syslog(LOG_DEBUG, "EVCURL: gotwatchtime called %ld ms\n", tblock_ms);
evcurl_global_data *global = cglobal;
ev_timer_stop(EV_DEFAULT, &global->timeev);
if (tblock_ms < 0 || 14000 < tblock_ms)
CURLM *mhnd = global->mhnd;
sockwatcher_data *sockwatcher = csockwatcher;
- CtdlLogPrintf(CTDL_DEBUG,"EVCURL: gotwatchsock called fd=%d action=%d\n", (int)fd, action);
+ syslog(LOG_DEBUG, "EVCURL: gotwatchsock called fd=%d action=%d\n", (int)fd, action);
if (!sockwatcher) {
- CtdlLogPrintf(CTDL_ERR,"EVCURL: called first time to register this sockwatcker\n");
+ syslog(LOG_ERR,"EVCURL: called first time to register this sockwatcker\n");
sockwatcher = malloc(sizeof(sockwatcher_data));
sockwatcher->global = global;
ev_init(&sockwatcher->ioev, &gotio);
curl_multi_assign(mhnd, fd, sockwatcher);
}
if (CURL_POLL_REMOVE == action) {
- CtdlLogPrintf(CTDL_ERR,"EVCURL: called last time to unregister this sockwatcher\n");
+ syslog(LOG_ERR,"EVCURL: called last time to unregister this sockwatcher\n");
ev_io_stop(event_base, &sockwatcher->ioev);
free(sockwatcher);
} else {
if (sta)
{
- CtdlLogPrintf(CTDL_ERR,"EVCURL: error initializing curl library: %s\n", curl_easy_strerror(sta));
+ syslog(LOG_ERR,"EVCURL: error initializing curl library: %s\n", curl_easy_strerror(sta));
exit(1);
}
mhnd = global.mhnd = curl_multi_init();
if (!mhnd)
{
- CtdlLogPrintf(CTDL_ERR,"EVCURL: error initializing curl multi handle\n");
+ syslog(LOG_ERR,"EVCURL: error initializing curl multi handle\n");
exit(3);
}
CURLcode sta;
CURL *chnd;
- CtdlLogPrintf(CTDL_DEBUG,"EVCURL: evcurl_init called ms\n");
+ syslog(LOG_DEBUG, "EVCURL: evcurl_init called ms\n");
IO->HttpReq.attached = 0;
IO->SendDone = CallBack;
IO->Terminate = Terminate;
chnd = IO->HttpReq.chnd = curl_easy_init();
if (!chnd)
{
- CtdlLogPrintf(CTDL_ERR, "EVCURL: error initializing curl handle\n");
+ syslog(LOG_ERR, "EVCURL: error initializing curl handle\n");
return 1;
}
OPT(INTERFACE, config.c_ip_addr);
}
/* point to a structure that points back to the perl structure and stuff */
- CtdlLogPrintf(CTDL_DEBUG, "EVCURL: Loading URL: %s\n", IO->ConnectMe->PlainUrl);
+ syslog(LOG_DEBUG, "EVCURL: Loading URL: %s\n", IO->ConnectMe->PlainUrl);
OPT(URL, IO->ConnectMe->PlainUrl);
if (StrLength(IO->ConnectMe->CurlCreds))
{
{
CURLMcode msta;
- CtdlLogPrintf(CTDL_DEBUG, "EVCURL: attaching to curl multi handle\n");
+ syslog(LOG_DEBUG, "EVCURL: attaching to curl multi handle\n");
msta = curl_multi_add_handle(global.mhnd, IO->HttpReq.chnd);
if (msta)
- CtdlLogPrintf(CTDL_ERR, "EVCURL: error attaching to curl multi handle: %s\n", curl_multi_strerror(msta));
+ syslog(LOG_ERR, "EVCURL: error attaching to curl multi handle: %s\n", curl_multi_strerror(msta));
IO->HttpReq.attached = 1;
ev_async_send (event_base, &WakeupCurl);
}
static void WakeupCurlCallback(EV_P_ ev_async *w, int revents)
{
- CtdlLogPrintf(CTDL_DEBUG, "EVCURL: waking up curl multi handle\n");
+ syslog(LOG_DEBUG, "EVCURL: waking up curl multi handle\n");
curl_multi_perform(&global, CURL_POLL_NONE);
}
*/
int evbase_count = 0;
int event_add_pipe[2] = {-1, -1};
-citthread_mutex_t EventQueueMutex; /* locks the access to the following vars: */
+pthread_mutex_t EventQueueMutex; /* locks the access to the following vars: */
HashList *QueueEvents = NULL;
HashList *InboundEventQueue = NULL;
HashList *InboundEventQueues[2] = { NULL, NULL };
const char *Key;
/* get the control command... */
- citthread_mutex_lock(&EventQueueMutex);
+ pthread_mutex_lock(&EventQueueMutex);
if (InboundEventQueues[0] == InboundEventQueue) {
InboundEventQueue = InboundEventQueues[1];
InboundEventQueue = InboundEventQueues[0];
q = InboundEventQueues[1];
}
- citthread_mutex_unlock(&EventQueueMutex);
+ pthread_mutex_unlock(&EventQueueMutex);
It = GetNewHashPos(q, 0);
while (GetNextHashPos(q, It, &len, &Key, &v))
}
DeleteHashPos(&It);
DeleteHashContent(&q);
- CtdlLogPrintf(CTDL_DEBUG, "EVENT Q Read done.\n");
+ syslog(LOG_DEBUG, "EVENT Q Read done.\n");
}
{
ev_break(event_base, EVBREAK_ALL);
- CtdlLogPrintf(CTDL_DEBUG, "EVENT Q exiting.\n");
+ syslog(LOG_DEBUG, "EVENT Q exiting.\n");
}
{
struct rlimit LimitSet;
- citthread_mutex_init(&EventQueueMutex, NULL);
+ pthread_mutex_init(&EventQueueMutex, NULL);
if (pipe(event_add_pipe) != 0) {
- CtdlLogPrintf(CTDL_EMERG, "Unable to create pipe for libev queueing: %s\n", strerror(errno));
+ syslog(LOG_EMERG, "Unable to create pipe for libev queueing: %s\n", strerror(errno));
abort();
}
LimitSet.rlim_cur = 1;
CtdlFillSystemContext(&libev_client_CC, "LibEv Thread");
// citthread_setspecific(MyConKey, (void *)&smtp_queue_CC);
- CtdlLogPrintf(CTDL_DEBUG, "client_ev_thread() initializing\n");
+ syslog(LOG_DEBUG, "client_ev_thread() initializing\n");
event_base = ev_default_loop (EVFLAG_AUTO);
InboundEventQueue = NULL;
DeleteHash(&InboundEventQueues[0]);
DeleteHash(&InboundEventQueues[1]);
- citthread_mutex_destroy(&EventQueueMutex);
+/* citthread_mutex_destroy(&EventQueueMutex); TODO */
evcurl_shutdown();
return(NULL);
ev_loop *event_db;
int evdb_count = 0;
int evdb_add_pipe[2] = {-1, -1};
-citthread_mutex_t DBEventQueueMutex; /* locks the access to the following vars: */
+pthread_mutex_t DBEventQueueMutex; /* locks the access to the following vars: */
HashList *DBQueueEvents = NULL;
HashList *DBInboundEventQueue = NULL;
HashList *DBInboundEventQueues[2] = { NULL, NULL };
const char *Key;
/* get the control command... */
- citthread_mutex_lock(&DBEventQueueMutex);
+ pthread_mutex_lock(&DBEventQueueMutex);
if (DBInboundEventQueues[0] == DBInboundEventQueue) {
DBInboundEventQueue = DBInboundEventQueues[1];
DBInboundEventQueue = DBInboundEventQueues[0];
q = DBInboundEventQueues[1];
}
- citthread_mutex_unlock(&DBEventQueueMutex);
+ pthread_mutex_unlock(&DBEventQueueMutex);
It = GetNewHashPos(q, 0);
while (GetNextHashPos(q, It, &len, &Key, &v))
}
DeleteHashPos(&It);
DeleteHashContent(&q);
- CtdlLogPrintf(CTDL_DEBUG, "DBEVENT Q Read done.\n");
+ syslog(LOG_DEBUG, "DBEVENT Q Read done.\n");
}
static void DBEventExitCallback(EV_P_ ev_async *w, int revents)
{
- CtdlLogPrintf(CTDL_DEBUG, "EVENT Q exiting.\n");
+ syslog(LOG_DEBUG, "EVENT Q exiting.\n");
ev_break(event_db, EVBREAK_ALL);
}
{
struct rlimit LimitSet;
- citthread_mutex_init(&DBEventQueueMutex, NULL);
+ pthread_mutex_init(&DBEventQueueMutex, NULL);
if (pipe(evdb_add_pipe) != 0) {
- CtdlLogPrintf(CTDL_EMERG, "Unable to create pipe for libev queueing: %s\n", strerror(errno));
+ syslog(LOG_EMERG, "Unable to create pipe for libev queueing: %s\n", strerror(errno));
abort();
}
LimitSet.rlim_cur = 1;
CtdlFillSystemContext(&libev_msg_CC, "LibEv DB IO Thread");
// citthread_setspecific(MyConKey, (void *)&smtp_queue_CC);
- CtdlLogPrintf(CTDL_DEBUG, "client_msgev_thread() initializing\n");
+ syslog(LOG_DEBUG, "client_msgev_thread() initializing\n");
event_db = ev_loop_new (EVFLAG_AUTO);
DBInboundEventQueue = NULL;
DeleteHash(&DBInboundEventQueues[0]);
DeleteHash(&DBInboundEventQueues[1]);
- citthread_mutex_destroy(&DBEventQueueMutex);
+/* citthread_mutex_destroy(&DBEventQueueMutex); TODO */
return(NULL);
}
-#endif
-
CTDL_MODULE_INIT(event_client)
{
-#ifdef EXPERIMENTAL_SMTP_EVENT_CLIENT
if (!threading)
{
InitEventQueue();
DBInitEventQueue();
- CtdlThreadCreate("Client event", CTDLTHREAD_BIGSTACK, client_event_thread, NULL);
- CtdlThreadCreate("DB event", CTDLTHREAD_BIGSTACK, db_event_thread, NULL);
+ CtdlThreadCreate(/*"Client event", */ client_event_thread);
+ CtdlThreadCreate(/*"DB event", */db_event_thread);
/// todo register shutdown callback.
}
-#endif
return "event";
}