From 2ae688a33b1114a2d96ccd412afda5874ddc07df Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Tue, 6 Sep 2011 14:53:38 -0500 Subject: [PATCH] add sendmsg function to esl --- libs/esl/src/esl.c | 33 +++++++++++++++++++++++++++++++++ libs/esl/src/esl_oop.cpp | 9 +++++++++ libs/esl/src/include/esl.h | 8 ++++++++ libs/esl/src/include/esl_oop.h | 1 + 4 files changed, 51 insertions(+) diff --git a/libs/esl/src/esl.c b/libs/esl/src/esl.c index ef8d7c1cb1..cd3a7067f8 100644 --- a/libs/esl/src/esl.c +++ b/libs/esl/src/esl.c @@ -534,6 +534,39 @@ ESL_DECLARE(esl_status_t) esl_execute(esl_handle_t *handle, const char *app, con } +ESL_DECLARE(esl_status_t) esl_sendmsg(esl_handle_t *handle, esl_event_t *event, const char *uuid) +{ + char cmd_buf[128] = "sendmsg"; + char send_buf[1292] = ""; + char *txt; + + if (!handle || !handle->connected || handle->sock == ESL_SOCK_INVALID) { + return ESL_FAIL; + } + + if (uuid) { + snprintf(cmd_buf, sizeof(cmd_buf), "sendmsg %s", uuid); + } + + esl_event_serialize(event, &txt, ESL_FALSE); + esl_log(ESL_LOG_DEBUG, "SENDMSG\n%s\n", txt); + + if (send(handle->sock, txt, strlen(txt), 0) <= 0) goto fail; + + free(txt); + + return esl_recv(handle); + + fail: + + handle->connected = 0; + + free(txt); + + return ESL_FAIL; +} + + ESL_DECLARE(esl_status_t) esl_filter(esl_handle_t *handle, const char *header, const char *value) { char send_buf[1024] = ""; diff --git a/libs/esl/src/esl_oop.cpp b/libs/esl/src/esl_oop.cpp index 0c4bbd6f90..4f60a928ee 100644 --- a/libs/esl/src/esl_oop.cpp +++ b/libs/esl/src/esl_oop.cpp @@ -205,6 +205,15 @@ ESLevent *ESLconnection::sendEvent(ESLevent *send_me) return new ESLevent("server_disconnected"); } +int ESLconnection::sendMSG(ESLevent *send_me, const char *uuid) +{ + if (esl_sendmsg(&handle, send_me->event, uuid) == ESL_SUCCESS) { + return 0; + } + + return 1; +} + ESLevent *ESLconnection::recvEvent() { if (esl_recv_event(&handle, 1, NULL) == ESL_SUCCESS) { diff --git a/libs/esl/src/include/esl.h b/libs/esl/src/include/esl.h index 095e814a0e..a9e5df140b 100644 --- a/libs/esl/src/include/esl.h +++ b/libs/esl/src/include/esl.h @@ -397,6 +397,14 @@ ESL_DECLARE(esl_status_t) esl_execute(esl_handle_t *handle, const char *app, con */ ESL_DECLARE(esl_status_t) esl_sendevent(esl_handle_t *handle, esl_event_t *event); +/*! + \brief Send an event as a message to be parsed + \param handle Handle to which the event should be sent + \param event Event to be sent + \param uuid a specific uuid if not the default +*/ +ESL_DECLARE(esl_status_t) esl_sendmsg(esl_handle_t *handle, esl_event_t *event, const char *uuid); + /*! \brief Connect a handle to a host/port with a specific password. This will also authenticate against the server \param handle Handle to connect diff --git a/libs/esl/src/include/esl_oop.h b/libs/esl/src/include/esl_oop.h index 947fe453d7..0ea1e5da89 100644 --- a/libs/esl/src/include/esl_oop.h +++ b/libs/esl/src/include/esl_oop.h @@ -86,6 +86,7 @@ class ESLconnection { ESLevent *api(const char *cmd, const char *arg = NULL); ESLevent *bgapi(const char *cmd, const char *arg = NULL, const char *job_uuid = NULL); ESLevent *sendEvent(ESLevent *send_me); + int sendMSG(ESLevent *send_me, const char *uuid = NULL); ESLevent *recvEvent(); ESLevent *recvEventTimed(int ms); ESLevent *filter(const char *header, const char *value);