diff options
Diffstat (limited to 'libglusterfs/src/events.c')
-rw-r--r-- | libglusterfs/src/events.c | 197 |
1 files changed, 97 insertions, 100 deletions
diff --git a/libglusterfs/src/events.c b/libglusterfs/src/events.c index 5a1b4c06e57..b1fa057b81e 100644 --- a/libglusterfs/src/events.c +++ b/libglusterfs/src/events.c @@ -25,112 +25,109 @@ #include "globals.h" #include "events.h" - #define EVENT_HOST "127.0.0.1" #define EVENT_PORT 24009 - int -_gf_event (eventtypes_t event, const char *fmt, ...) +_gf_event(eventtypes_t event, const char *fmt, ...) { - int ret = 0; - int sock = -1; - char *eventstr = NULL; - struct sockaddr_in server; - va_list arguments; - char *msg = NULL; - glusterfs_ctx_t *ctx = NULL; - char *host = NULL; - struct addrinfo hints; - struct addrinfo *result = NULL; - - /* Global context */ - ctx = THIS->ctx; - - if (event < 0 || event >= EVENT_LAST) { - ret = EVENT_ERROR_INVALID_INPUTS; - goto out; - } - - /* Initialize UDP socket */ - sock = socket (AF_INET, SOCK_DGRAM, 0); - if (sock < 0) { - ret = EVENT_ERROR_SOCKET; - goto out; - } - - memset (&hints, 0, sizeof (hints)); - hints.ai_family = AF_UNSPEC; - - /* Get Host name to send message */ - if (ctx && ctx->cmd_args.volfile_server) { - /* If it is client code then volfile_server is set - use that information to push the events. */ - if ((getaddrinfo (ctx->cmd_args.volfile_server, - NULL, &hints, &result)) != 0) { - ret = EVENT_ERROR_RESOLVE; - goto out; - } - - if (get_ip_from_addrinfo (result, &host) == NULL) { - ret = EVENT_ERROR_RESOLVE; - goto out; - } - } else { - /* Localhost, Use the defined IP for localhost */ - host = gf_strdup (EVENT_HOST); + int ret = 0; + int sock = -1; + char *eventstr = NULL; + struct sockaddr_in server; + va_list arguments; + char *msg = NULL; + glusterfs_ctx_t *ctx = NULL; + char *host = NULL; + struct addrinfo hints; + struct addrinfo *result = NULL; + + /* Global context */ + ctx = THIS->ctx; + + if (event < 0 || event >= EVENT_LAST) { + ret = EVENT_ERROR_INVALID_INPUTS; + goto out; + } + + /* Initialize UDP socket */ + sock = socket(AF_INET, SOCK_DGRAM, 0); + if (sock < 0) { + ret = EVENT_ERROR_SOCKET; + goto out; + } + + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_UNSPEC; + + /* Get Host name to send message */ + if (ctx && ctx->cmd_args.volfile_server) { + /* If it is client code then volfile_server is set + use that information to push the events. */ + if ((getaddrinfo(ctx->cmd_args.volfile_server, NULL, &hints, + &result)) != 0) { + ret = EVENT_ERROR_RESOLVE; + goto out; } - /* Socket Configurations */ - server.sin_family = AF_INET; - server.sin_port = htons (EVENT_PORT); - server.sin_addr.s_addr = inet_addr (host); - memset (&server.sin_zero, '\0', sizeof (server.sin_zero)); - - va_start (arguments, fmt); - ret = gf_vasprintf (&msg, fmt, arguments); - va_end (arguments); - - if (ret < 0) { - ret = EVENT_ERROR_INVALID_INPUTS; - goto out; - } - - ret = gf_asprintf (&eventstr, "%u %d %s", - (unsigned)time(NULL), event, msg); - - if (ret <= 0) { - ret = EVENT_ERROR_MSG_FORMAT; - goto out; + if (get_ip_from_addrinfo(result, &host) == NULL) { + ret = EVENT_ERROR_RESOLVE; + goto out; } - - /* Send Message */ - if (sendto (sock, eventstr, strlen (eventstr), - 0, (struct sockaddr *)&server, sizeof (server)) <= 0) { - ret = EVENT_ERROR_SEND; - goto out; - } - - ret = EVENT_SEND_OK; - - out: - if (sock >= 0) { - sys_close (sock); - } - - /* Allocated by gf_vasprintf */ - if (msg) - GF_FREE (msg); - - /* Allocated by gf_asprintf */ - if (eventstr) - GF_FREE (eventstr); - - if (host) - GF_FREE (host); - - if (result) - freeaddrinfo (result); - - return ret; + } else { + /* Localhost, Use the defined IP for localhost */ + host = gf_strdup(EVENT_HOST); + } + + /* Socket Configurations */ + server.sin_family = AF_INET; + server.sin_port = htons(EVENT_PORT); + server.sin_addr.s_addr = inet_addr(host); + memset(&server.sin_zero, '\0', sizeof(server.sin_zero)); + + va_start(arguments, fmt); + ret = gf_vasprintf(&msg, fmt, arguments); + va_end(arguments); + + if (ret < 0) { + ret = EVENT_ERROR_INVALID_INPUTS; + goto out; + } + + ret = gf_asprintf(&eventstr, "%u %d %s", (unsigned)time(NULL), event, msg); + + if (ret <= 0) { + ret = EVENT_ERROR_MSG_FORMAT; + goto out; + } + + /* Send Message */ + if (sendto(sock, eventstr, strlen(eventstr), 0, (struct sockaddr *)&server, + sizeof(server)) <= 0) { + ret = EVENT_ERROR_SEND; + goto out; + } + + ret = EVENT_SEND_OK; + +out: + if (sock >= 0) { + sys_close(sock); + } + + /* Allocated by gf_vasprintf */ + if (msg) + GF_FREE(msg); + + /* Allocated by gf_asprintf */ + if (eventstr) + GF_FREE(eventstr); + + if (host) + GF_FREE(host); + + if (result) + freeaddrinfo(result); + + return ret; } |