diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/libs/zbxcommon/Makefile.am | 2 | ||||
-rw-r--r-- | src/libs/zbxcommon/comms.c | 45 | ||||
-rw-r--r-- | src/zabbix_sender/zabbix_sender.c | 10 | ||||
-rw-r--r-- | src/zabbix_server/functions.c | 2 | ||||
-rw-r--r-- | src/zabbix_server/trapper/trapper.c | 20 |
5 files changed, 52 insertions, 27 deletions
diff --git a/src/libs/zbxcommon/Makefile.am b/src/libs/zbxcommon/Makefile.am index b9d14a52..bc4333cc 100644 --- a/src/libs/zbxcommon/Makefile.am +++ b/src/libs/zbxcommon/Makefile.am @@ -1,3 +1,3 @@ SUBDIRS=. lib_LIBRARIES=libzbxcommon.a -libzbxcommon_a_SOURCES=base64.c xml.c +libzbxcommon_a_SOURCES=base64.c xml.c comms.c diff --git a/src/libs/zbxcommon/comms.c b/src/libs/zbxcommon/comms.c new file mode 100644 index 00000000..b2f9075a --- /dev/null +++ b/src/libs/zbxcommon/comms.c @@ -0,0 +1,45 @@ +#include "common.h" + +int comms_create_request(char *host, char *key, char *data, char *request,int maxlen) +{ + int ret = SUCCEED; + char host_b64[MAX_STRING_LEN]; + char key_b64[MAX_STRING_LEN]; + char data_b64[MAX_STRING_LEN]; + + memset(host_b64,0,sizeof(host_b64)); + memset(key_b64,0,sizeof(key_b64)); + memset(data_b64,0,sizeof(data_b64)); + + str_base64_encode(host, host_b64, strlen(host)); + str_base64_encode(key, key_b64, strlen(key)); + str_base64_encode(data, data_b64, strlen(data)); + + snprintf(request,maxlen,"<req><host>%s</host><key>%s</key><data>%s</data></req>",host_b64,key_b64,data_b64); + + return ret; +} + +int comms_parse_response(char *xml,char *host,char *key, char *data, int maxlen) +{ + int ret = SUCCEED; + int i; + + char host_b64[MAX_STRING_LEN]; + char key_b64[MAX_STRING_LEN]; + char data_b64[MAX_STRING_LEN]; + + xml_get_data(xml, "host", host_b64, sizeof(host_b64)-1); + xml_get_data(xml, "key", key_b64, sizeof(key_b64)-1); + xml_get_data(xml, "data", data_b64, sizeof(data_b64)-1); + + memset(key,0,maxlen); + memset(host,0,maxlen); + memset(data,0,maxlen); + + str_base64_decode(host_b64, host, &i); + str_base64_decode(key_b64, key, &i); + str_base64_decode(data_b64, data, &i); + + return ret; +} diff --git a/src/zabbix_sender/zabbix_sender.c b/src/zabbix_sender/zabbix_sender.c index 2e6f1aa8..c8a26eed 100644 --- a/src/zabbix_sender/zabbix_sender.c +++ b/src/zabbix_sender/zabbix_sender.c @@ -106,16 +106,10 @@ static int send_value(char *server,int port,char *hostname, char *key,char *valu /* Send <req><host>SERVER_B64</host><key>KEY_B64</key><data>VALUE_B64</data></req> */ - memset(hostname_b64,0,sizeof(hostname_b64)); - memset(key_b64,0,sizeof(key_b64)); - memset(value_b64,0,sizeof(value_b64)); - - str_base64_encode(hostname, hostname_b64, strlen(hostname)); - str_base64_encode(key, key_b64, strlen(key)); - str_base64_encode(value, value_b64, strlen(value)); + comms_create_request(hostname, key, value, tosend,sizeof(tosend)-1); // snprintf(tosend,sizeof(tosend)-1,"%s:%s\n",shortname,value); - snprintf(tosend,sizeof(tosend)-1,"<req><host>%s</host><key>%s</key><data>%s</data></req>",hostname_b64,key_b64,value_b64); +// snprintf(tosend,sizeof(tosend)-1,"<req><host>%s</host><key>%s</key><data>%s</data></req>",hostname_b64,key_b64,value_b64); if( sendto(s,tosend,strlen(tosend),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)) == -1 ) { diff --git a/src/zabbix_server/functions.c b/src/zabbix_server/functions.c index 35eae13d..882b6619 100644 --- a/src/zabbix_server/functions.c +++ b/src/zabbix_server/functions.c @@ -402,7 +402,7 @@ int process_data(int sockfd,char *server,char *key,char *value) char lastlogsize[MAX_STRING_LEN]; int update_tr; - zabbix_log( LOG_LEVEL_DEBUG, "In process_data()"); + zabbix_log( LOG_LEVEL_WARNING, "In process_data([%s],[%s],[%s])",server,key,value); snprintf(sql,sizeof(sql)-1,"select i.itemid,i.key_,h.host,h.port,i.delay,i.description,i.nextcheck,i.type,i.snmp_community,i.snmp_oid,h.useip,h.ip,i.history,i.lastvalue,i.prevvalue,i.value_type,i.trapper_hosts,i.delta,i.units,i.multiplier,i.formula from items i,hosts h where h.status=%d and h.hostid=i.hostid and h.host='%s' and i.key_='%s' and i.status=%d and i.type in (%d,%d)", HOST_STATUS_MONITORED, server, key, ITEM_STATUS_ACTIVE, ITEM_TYPE_TRAPPER, ITEM_TYPE_ZABBIX_ACTIVE); result = DBselect(sql); diff --git a/src/zabbix_server/trapper/trapper.c b/src/zabbix_server/trapper/trapper.c index 7aa0735b..e3216ba6 100644 --- a/src/zabbix_server/trapper/trapper.c +++ b/src/zabbix_server/trapper/trapper.c @@ -83,25 +83,11 @@ int process_trap(int sockfd,char *s, int max_len) { zabbix_log( LOG_LEVEL_WARNING, "XML received [%s]", s); - xml_get_data(s, "host", host_b64, MAX_STRING_LEN); - xml_get_data(s, "key", key_b64, MAX_STRING_LEN); - xml_get_data(s, "data", value_b64, MAX_STRING_LEN); + comms_parse_response(s,host_dec,key_dec, value_dec, sizeof(host_dec)-1); - memset(key_dec,0,sizeof(key_dec)); - memset(host_dec,0,sizeof(host_dec)); - memset(value_dec,0,sizeof(value_dec)); - - str_base64_decode(host_b64, host_dec, &i); - str_base64_decode(key_b64, key_dec, &i); - str_base64_decode(value_b64, value_dec, &i); - - zabbix_log( LOG_LEVEL_DEBUG, "Server [%s]->[%s]", host_b64, host_dec); - zabbix_log( LOG_LEVEL_DEBUG, "Value [%s]->[%s]", value_b64, value_dec); - zabbix_log( LOG_LEVEL_DEBUG, "Host [%s]->[%s]", host_b64, host_dec); - - host=host_dec; - value_string=value_dec; server=host_dec; + value_string=value_dec; + key=key_dec; } else { |