1 /* 2 ** Zabbix 3 ** Copyright (C) 2001-2021 Zabbix SIA 4 ** 5 ** This program is free software; you can redistribute it and/or modify 6 ** it under the terms of the GNU General Public License as published by 7 ** the Free Software Foundation; either version 2 of the License, or 8 ** (at your option) any later version. 9 ** 10 ** This program is distributed in the hope that it will be useful, 11 ** but WITHOUT ANY WARRANTY; without even the implied warranty of 12 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 ** GNU General Public License for more details. 14 ** 15 ** You should have received a copy of the GNU General Public License 16 ** along with this program; if not, write to the Free Software 17 ** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18 **/ 19 20 #ifndef ZABBIX_COMMON_H 21 #define ZABBIX_COMMON_H 22 23 #include "sysinc.h" 24 #include "zbxtypes.h" 25 #include "module.h" 26 #include "version.h" 27 #include "md5.h" 28 29 #if defined(__MINGW32__) 30 # define __try 31 # define __except(x) if (0) 32 #endif 33 34 #ifndef va_copy 35 # if defined(__va_copy) 36 # define va_copy(d, s) __va_copy(d, s) 37 # else 38 # define va_copy(d, s) memcpy(&d, &s, sizeof(va_list)) 39 # endif 40 #endif 41 42 #ifdef snprintf 43 # undef snprintf 44 #endif 45 #define snprintf ERROR_DO_NOT_USE_SNPRINTF_FUNCTION_TRY_TO_USE_ZBX_SNPRINTF 46 47 #ifdef sprintf 48 # undef sprintf 49 #endif 50 #define sprintf ERROR_DO_NOT_USE_SPRINTF_FUNCTION_TRY_TO_USE_ZBX_SNPRINTF 51 52 #ifdef strncpy 53 # undef strncpy 54 #endif 55 #define strncpy ERROR_DO_NOT_USE_STRNCPY_FUNCTION_TRY_TO_USE_ZBX_STRLCPY 56 57 #ifdef strcpy 58 # undef strcpy 59 #endif 60 #define strcpy ERROR_DO_NOT_USE_STRCPY_FUNCTION_TRY_TO_USE_ZBX_STRLCPY 61 62 #ifdef vsprintf 63 # undef vsprintf 64 #endif 65 #define vsprintf ERROR_DO_NOT_USE_VSPRINTF_FUNCTION_TRY_TO_USE_ZBX_VSNPRINTF 66 67 #ifdef strncat 68 # undef strncat 69 #endif 70 #define strncat ERROR_DO_NOT_USE_STRNCAT_FUNCTION_TRY_TO_USE_ZBX_STRLCAT 71 72 #ifdef strncasecmp 73 # undef strncasecmp 74 #endif 75 #define strncasecmp ERROR_DO_NOT_USE_STRNCASECMP_FUNCTION_TRY_TO_USE_ZBX_STRNCASECMP 76 77 #define ON 1 78 #define OFF 0 79 80 #if defined(_WINDOWS) 81 # define ZBX_SERVICE_NAME_LEN 64 82 extern char ZABBIX_SERVICE_NAME[ZBX_SERVICE_NAME_LEN]; 83 extern char ZABBIX_EVENT_SOURCE[ZBX_SERVICE_NAME_LEN]; 84 85 # pragma warning (disable: 4996) /* warning C4996: <function> was declared deprecated */ 86 #endif 87 88 #if defined(__GNUC__) && __GNUC__ >= 7 89 # define ZBX_FALLTHROUGH __attribute__ ((fallthrough)) 90 #else 91 # define ZBX_FALLTHROUGH 92 #endif 93 94 #define SUCCEED 0 95 #define FAIL -1 96 #define NOTSUPPORTED -2 97 #define NETWORK_ERROR -3 98 #define TIMEOUT_ERROR -4 99 #define AGENT_ERROR -5 100 #define GATEWAY_ERROR -6 101 #define CONFIG_ERROR -7 102 103 #define SUCCEED_OR_FAIL(result) (FAIL != (result) ? SUCCEED : FAIL) 104 const char *zbx_sysinfo_ret_string(int ret); 105 const char *zbx_result_string(int result); 106 107 #define MAX_ID_LEN 21 108 #define MAX_STRING_LEN 2048 109 #define MAX_BUFFER_LEN 65536 110 #define MAX_ZBX_HOSTNAME_LEN 128 111 #define MAX_ZBX_DNSNAME_LEN 255 /* maximum host DNS name length from RFC 1035 (without terminating '\0') */ 112 #define MAX_EXECUTE_OUTPUT_LEN (512 * ZBX_KIBIBYTE) 113 114 #define ZBX_MAX_UINT64 (~__UINT64_C(0)) 115 #define ZBX_MAX_UINT64_LEN 21 116 #define ZBX_MAX_DOUBLE_LEN 24 117 118 /****************************************************************************** 119 * * 120 * Macro: ZBX_UNUSED * 121 * * 122 * Purpose: silences compiler warning about unused function parameter * 123 * * 124 * Parameters: * 125 * var - [IN] the unused parameter * 126 * * 127 * Comments: Use only on unused, non-volatile function parameters! * 128 * * 129 ******************************************************************************/ 130 #define ZBX_UNUSED(var) (void)(var) 131 132 typedef struct 133 { 134 int sec; /* seconds */ 135 int ns; /* nanoseconds */ 136 } 137 zbx_timespec_t; 138 139 /* time zone offset */ 140 typedef struct 141 { 142 char tz_sign; /* '+' or '-' */ 143 int tz_hour; 144 int tz_min; 145 } 146 zbx_timezone_t; 147 148 #define zbx_timespec_compare(t1, t2) \ 149 ((t1)->sec == (t2)->sec ? (t1)->ns - (t2)->ns : (t1)->sec - (t2)->sec) 150 151 extern double ZBX_DOUBLE_EPSILON; 152 153 int zbx_double_compare(double a, double b); 154 155 /* item types */ 156 typedef enum 157 { 158 ITEM_TYPE_ZABBIX = 0, 159 /* ITEM_TYPE_SNMPv1,*/ 160 ITEM_TYPE_TRAPPER = 2, 161 ITEM_TYPE_SIMPLE, 162 /* ITEM_TYPE_SNMPv2c,*/ 163 ITEM_TYPE_INTERNAL = 5, 164 /* ITEM_TYPE_SNMPv3,*/ 165 ITEM_TYPE_ZABBIX_ACTIVE = 7, 166 ITEM_TYPE_AGGREGATE, 167 ITEM_TYPE_HTTPTEST, 168 ITEM_TYPE_EXTERNAL, 169 ITEM_TYPE_DB_MONITOR, 170 ITEM_TYPE_IPMI, 171 ITEM_TYPE_SSH, 172 ITEM_TYPE_TELNET, 173 ITEM_TYPE_CALCULATED, 174 ITEM_TYPE_JMX, 175 ITEM_TYPE_SNMPTRAP, 176 ITEM_TYPE_DEPENDENT, 177 ITEM_TYPE_HTTPAGENT, 178 ITEM_TYPE_SNMP /* 20 */ 179 } 180 zbx_item_type_t; 181 const char *zbx_agent_type_string(zbx_item_type_t item_type); 182 183 typedef enum 184 { 185 INTERFACE_TYPE_UNKNOWN = 0, 186 INTERFACE_TYPE_AGENT, 187 INTERFACE_TYPE_SNMP, 188 INTERFACE_TYPE_IPMI, 189 INTERFACE_TYPE_JMX, 190 INTERFACE_TYPE_ANY = 255 191 } 192 zbx_interface_type_t; 193 const char *zbx_interface_type_string(zbx_interface_type_t type); 194 195 #define INTERFACE_TYPE_COUNT 4 /* number of interface types */ 196 extern const int INTERFACE_TYPE_PRIORITY[INTERFACE_TYPE_COUNT]; 197 198 #define SNMP_BULK_DISABLED 0 199 #define SNMP_BULK_ENABLED 1 200 201 #define ZBX_IF_SNMP_VERSION_1 1 202 #define ZBX_IF_SNMP_VERSION_2 2 203 #define ZBX_IF_SNMP_VERSION_3 3 204 205 #define ZBX_FLAG_DISCOVERY_NORMAL 0x00 206 #define ZBX_FLAG_DISCOVERY_RULE 0x01 207 #define ZBX_FLAG_DISCOVERY_PROTOTYPE 0x02 208 #define ZBX_FLAG_DISCOVERY_CREATED 0x04 209 210 typedef enum 211 { 212 ITEM_AUTHTYPE_PASSWORD = 0, 213 ITEM_AUTHTYPE_PUBLICKEY 214 } 215 zbx_item_authtype_t; 216 217 /* event status */ 218 #define EVENT_STATUS_RESOLVED 0 219 #define EVENT_STATUS_PROBLEM 1 220 221 /* event sources */ 222 #define EVENT_SOURCE_TRIGGERS 0 223 #define EVENT_SOURCE_DISCOVERY 1 224 #define EVENT_SOURCE_AUTOREGISTRATION 2 225 #define EVENT_SOURCE_INTERNAL 3 226 #define EVENT_SOURCE_COUNT 4 227 228 /* event objects */ 229 #define EVENT_OBJECT_TRIGGER 0 230 #define EVENT_OBJECT_DHOST 1 231 #define EVENT_OBJECT_DSERVICE 2 232 #define EVENT_OBJECT_ZABBIX_ACTIVE 3 233 #define EVENT_OBJECT_ITEM 4 234 #define EVENT_OBJECT_LLDRULE 5 235 236 /* acknowledged flags */ 237 #define EVENT_NOT_ACKNOWLEDGED 0 238 #define EVENT_ACKNOWLEDGED 1 239 240 typedef enum 241 { 242 DOBJECT_STATUS_UP = 0, 243 DOBJECT_STATUS_DOWN, 244 DOBJECT_STATUS_DISCOVER, 245 DOBJECT_STATUS_LOST 246 } 247 zbx_dstatus_t; 248 249 /* item value types */ 250 typedef enum 251 { 252 ITEM_VALUE_TYPE_FLOAT = 0, 253 ITEM_VALUE_TYPE_STR, 254 ITEM_VALUE_TYPE_LOG, 255 ITEM_VALUE_TYPE_UINT64, 256 ITEM_VALUE_TYPE_TEXT, 257 /* the number of defined value types */ 258 ITEM_VALUE_TYPE_MAX, 259 ITEM_VALUE_TYPE_NONE, 260 } 261 zbx_item_value_type_t; 262 const char *zbx_item_value_type_string(zbx_item_value_type_t value_type); 263 264 typedef struct 265 { 266 int timestamp; 267 int logeventid; 268 int severity; 269 char *source; 270 char *value; 271 } 272 zbx_log_value_t; 273 274 typedef union 275 { 276 double dbl; 277 zbx_uint64_t ui64; 278 char *str; 279 char *err; 280 zbx_log_value_t *log; 281 } 282 history_value_t; 283 284 /* item data types */ 285 typedef enum 286 { 287 ITEM_DATA_TYPE_DECIMAL = 0, 288 ITEM_DATA_TYPE_OCTAL, 289 ITEM_DATA_TYPE_HEXADECIMAL, 290 ITEM_DATA_TYPE_BOOLEAN 291 } 292 zbx_item_data_type_t; 293 294 /* service supported by discoverer */ 295 typedef enum 296 { 297 SVC_SSH = 0, 298 SVC_LDAP, 299 SVC_SMTP, 300 SVC_FTP, 301 SVC_HTTP, 302 SVC_POP, 303 SVC_NNTP, 304 SVC_IMAP, 305 SVC_TCP, 306 SVC_AGENT, 307 SVC_SNMPv1, 308 SVC_SNMPv2c, 309 SVC_ICMPPING, 310 SVC_SNMPv3, 311 SVC_HTTPS, 312 SVC_TELNET 313 } 314 zbx_dservice_type_t; 315 const char *zbx_dservice_type_string(zbx_dservice_type_t service); 316 317 /* item snmpv3 security levels */ 318 #define ITEM_SNMPV3_SECURITYLEVEL_NOAUTHNOPRIV 0 319 #define ITEM_SNMPV3_SECURITYLEVEL_AUTHNOPRIV 1 320 #define ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV 2 321 322 /* item snmpv3 authentication protocol */ 323 #define ITEM_SNMPV3_AUTHPROTOCOL_MD5 0 324 #define ITEM_SNMPV3_AUTHPROTOCOL_SHA 1 325 326 /* item snmpv3 privacy protocol */ 327 #define ITEM_SNMPV3_PRIVPROTOCOL_DES 0 328 #define ITEM_SNMPV3_PRIVPROTOCOL_AES 1 329 330 /* condition evaluation types */ 331 #define CONDITION_EVAL_TYPE_AND_OR 0 332 #define CONDITION_EVAL_TYPE_AND 1 333 #define CONDITION_EVAL_TYPE_OR 2 334 #define CONDITION_EVAL_TYPE_EXPRESSION 3 335 336 /* condition types */ 337 #define CONDITION_TYPE_HOST_GROUP 0 338 #define CONDITION_TYPE_HOST 1 339 #define CONDITION_TYPE_TRIGGER 2 340 #define CONDITION_TYPE_TRIGGER_NAME 3 341 #define CONDITION_TYPE_TRIGGER_SEVERITY 4 342 /* #define CONDITION_TYPE_TRIGGER_VALUE 5 deprecated */ 343 #define CONDITION_TYPE_TIME_PERIOD 6 344 #define CONDITION_TYPE_DHOST_IP 7 345 #define CONDITION_TYPE_DSERVICE_TYPE 8 346 #define CONDITION_TYPE_DSERVICE_PORT 9 347 #define CONDITION_TYPE_DSTATUS 10 348 #define CONDITION_TYPE_DUPTIME 11 349 #define CONDITION_TYPE_DVALUE 12 350 #define CONDITION_TYPE_HOST_TEMPLATE 13 351 #define CONDITION_TYPE_EVENT_ACKNOWLEDGED 14 352 #define CONDITION_TYPE_APPLICATION 15 353 #define CONDITION_TYPE_SUPPRESSED 16 354 #define CONDITION_TYPE_DRULE 18 355 #define CONDITION_TYPE_DCHECK 19 356 #define CONDITION_TYPE_PROXY 20 357 #define CONDITION_TYPE_DOBJECT 21 358 #define CONDITION_TYPE_HOST_NAME 22 359 #define CONDITION_TYPE_EVENT_TYPE 23 360 #define CONDITION_TYPE_HOST_METADATA 24 361 #define CONDITION_TYPE_EVENT_TAG 25 362 #define CONDITION_TYPE_EVENT_TAG_VALUE 26 363 364 /* condition operators */ 365 #define CONDITION_OPERATOR_EQUAL 0 366 #define CONDITION_OPERATOR_NOT_EQUAL 1 367 #define CONDITION_OPERATOR_LIKE 2 368 #define CONDITION_OPERATOR_NOT_LIKE 3 369 #define CONDITION_OPERATOR_IN 4 370 #define CONDITION_OPERATOR_MORE_EQUAL 5 371 #define CONDITION_OPERATOR_LESS_EQUAL 6 372 #define CONDITION_OPERATOR_NOT_IN 7 373 #define CONDITION_OPERATOR_REGEXP 8 374 #define CONDITION_OPERATOR_NOT_REGEXP 9 375 #define CONDITION_OPERATOR_YES 10 376 #define CONDITION_OPERATOR_NO 11 377 378 /* maintenance tag operators */ 379 #define ZBX_MAINTENANCE_TAG_OPERATOR_EQUAL 0 380 #define ZBX_MAINTENANCE_TAG_OPERATOR_LIKE 2 381 382 /* maintenance tag evaluation types */ 383 #define MAINTENANCE_TAG_EVAL_TYPE_AND_OR 0 384 #define MAINTENANCE_TAG_EVAL_TYPE_OR 2 385 386 /* event type action condition values */ 387 #define EVENT_TYPE_ITEM_NOTSUPPORTED 0 388 /* #define EVENT_TYPE_ITEM_NORMAL 1 deprecated */ 389 #define EVENT_TYPE_LLDRULE_NOTSUPPORTED 2 390 /* #define EVENT_TYPE_LLDRULE_NORMAL 3 deprecated */ 391 #define EVENT_TYPE_TRIGGER_UNKNOWN 4 392 /* #define EVENT_TYPE_TRIGGER_NORMAL 5 deprecated */ 393 394 #define SCREEN_RESOURCE_GRAPH 0 395 #define SCREEN_RESOURCE_SIMPLE_GRAPH 1 396 #define SCREEN_RESOURCE_MAP 2 397 #define SCREEN_RESOURCE_PLAIN_TEXT 3 398 #define SCREEN_RESOURCE_HOST_INFO 4 399 #define SCREEN_RESOURCE_TRIGGER_INFO 5 400 #define SCREEN_RESOURCE_SERVER_INFO 6 401 #define SCREEN_RESOURCE_CLOCK 7 402 #define SCREEN_RESOURCE_SCREEN 8 403 #define SCREEN_RESOURCE_TRIGGER_OVERVIEW 9 404 #define SCREEN_RESOURCE_DATA_OVERVIEW 10 405 #define SCREEN_RESOURCE_URL 11 406 #define SCREEN_RESOURCE_ACTIONS 12 407 #define SCREEN_RESOURCE_EVENTS 13 408 #define SCREEN_RESOURCE_HOSTGROUP_TRIGGERS 14 409 #define SCREEN_RESOURCE_SYSTEM_STATUS 15 410 #define SCREEN_RESOURCE_HOST_TRIGGERS 16 411 412 typedef enum 413 { 414 SYSMAP_ELEMENT_TYPE_HOST = 0, 415 SYSMAP_ELEMENT_TYPE_MAP, 416 SYSMAP_ELEMENT_TYPE_TRIGGER, 417 SYSMAP_ELEMENT_TYPE_HOST_GROUP, 418 SYSMAP_ELEMENT_TYPE_IMAGE 419 } 420 zbx_sysmap_element_types_t; 421 422 typedef enum 423 { 424 GRAPH_YAXIS_TYPE_CALCULATED = 0, 425 GRAPH_YAXIS_TYPE_FIXED, 426 GRAPH_YAXIS_TYPE_ITEM_VALUE 427 } 428 zbx_graph_yaxis_types_t; 429 430 /* special item key used for ICMP pings */ 431 #define SERVER_ICMPPING_KEY "icmpping" 432 /* special item key used for ICMP ping latency */ 433 #define SERVER_ICMPPINGSEC_KEY "icmppingsec" 434 /* special item key used for ICMP ping loss packages */ 435 #define SERVER_ICMPPINGLOSS_KEY "icmppingloss" 436 437 /* runtime control options */ 438 #define ZBX_CONFIG_CACHE_RELOAD "config_cache_reload" 439 #define ZBX_HOUSEKEEPER_EXECUTE "housekeeper_execute" 440 #define ZBX_LOG_LEVEL_INCREASE "log_level_increase" 441 #define ZBX_LOG_LEVEL_DECREASE "log_level_decrease" 442 #define ZBX_SNMP_CACHE_RELOAD "snmp_cache_reload" 443 #define ZBX_DIAGINFO "diaginfo" 444 445 /* value for not supported items */ 446 #define ZBX_NOTSUPPORTED "ZBX_NOTSUPPORTED" 447 /* the error message for not supported items when reason is unknown */ 448 #define ZBX_NOTSUPPORTED_MSG "Unknown error." 449 450 /* Zabbix Agent non-critical error (agents older than 2.0) */ 451 #define ZBX_ERROR "ZBX_ERROR" 452 453 /* media types */ 454 typedef enum 455 { 456 MEDIA_TYPE_EMAIL = 0, 457 MEDIA_TYPE_EXEC, 458 MEDIA_TYPE_SMS, 459 MEDIA_TYPE_WEBHOOK = 4 460 } 461 zbx_media_type_t; 462 463 /* alert statuses */ 464 typedef enum 465 { 466 ALERT_STATUS_NOT_SENT = 0, 467 ALERT_STATUS_SENT, 468 ALERT_STATUS_FAILED, 469 ALERT_STATUS_NEW 470 } 471 zbx_alert_status_t; 472 const char *zbx_alert_status_string(unsigned char type, unsigned char status); 473 474 /* escalation statuses */ 475 typedef enum 476 { 477 ESCALATION_STATUS_ACTIVE = 0, 478 ESCALATION_STATUS_RECOVERY, /* only in server code, never in DB, deprecated */ 479 ESCALATION_STATUS_SLEEP, 480 ESCALATION_STATUS_COMPLETED /* only in server code, never in DB */ 481 } 482 zbx_escalation_status_t; 483 const char *zbx_escalation_status_string(unsigned char status); 484 485 /* alert types */ 486 typedef enum 487 { 488 ALERT_TYPE_MESSAGE = 0, 489 ALERT_TYPE_COMMAND 490 } 491 zbx_alert_type_t; 492 const char *zbx_alert_type_string(unsigned char type); 493 494 /* item statuses */ 495 #define ITEM_STATUS_ACTIVE 0 496 #define ITEM_STATUS_DISABLED 1 497 498 /* item states */ 499 #define ITEM_STATE_NORMAL 0 500 #define ITEM_STATE_NOTSUPPORTED 1 501 const char *zbx_item_state_string(unsigned char state); 502 503 /* group statuses */ 504 typedef enum 505 { 506 GROUP_STATUS_ACTIVE = 0, 507 GROUP_STATUS_DISABLED 508 } 509 zbx_group_status_type_t; 510 511 /* group internal flag */ 512 #define ZBX_INTERNAL_GROUP 1 513 514 /* program type */ 515 #define ZBX_PROGRAM_TYPE_SERVER 0x01 516 #define ZBX_PROGRAM_TYPE_PROXY_ACTIVE 0x02 517 #define ZBX_PROGRAM_TYPE_PROXY_PASSIVE 0x04 518 #define ZBX_PROGRAM_TYPE_PROXY 0x06 /* ZBX_PROGRAM_TYPE_PROXY_ACTIVE | ZBX_PROGRAM_TYPE_PROXY_PASSIVE */ 519 #define ZBX_PROGRAM_TYPE_AGENTD 0x08 520 #define ZBX_PROGRAM_TYPE_SENDER 0x10 521 #define ZBX_PROGRAM_TYPE_GET 0x20 522 const char *get_program_type_string(unsigned char program_type); 523 524 /* process type */ 525 #define ZBX_PROCESS_TYPE_POLLER 0 526 #define ZBX_PROCESS_TYPE_UNREACHABLE 1 527 #define ZBX_PROCESS_TYPE_IPMIPOLLER 2 528 #define ZBX_PROCESS_TYPE_PINGER 3 529 #define ZBX_PROCESS_TYPE_JAVAPOLLER 4 530 #define ZBX_PROCESS_TYPE_HTTPPOLLER 5 531 #define ZBX_PROCESS_TYPE_TRAPPER 6 532 #define ZBX_PROCESS_TYPE_SNMPTRAPPER 7 533 #define ZBX_PROCESS_TYPE_PROXYPOLLER 8 534 #define ZBX_PROCESS_TYPE_ESCALATOR 9 535 #define ZBX_PROCESS_TYPE_HISTSYNCER 10 536 #define ZBX_PROCESS_TYPE_DISCOVERER 11 537 #define ZBX_PROCESS_TYPE_ALERTER 12 538 #define ZBX_PROCESS_TYPE_TIMER 13 539 #define ZBX_PROCESS_TYPE_HOUSEKEEPER 14 540 #define ZBX_PROCESS_TYPE_DATASENDER 15 541 #define ZBX_PROCESS_TYPE_CONFSYNCER 16 542 #define ZBX_PROCESS_TYPE_HEARTBEAT 17 543 #define ZBX_PROCESS_TYPE_SELFMON 18 544 #define ZBX_PROCESS_TYPE_VMWARE 19 545 #define ZBX_PROCESS_TYPE_COLLECTOR 20 546 #define ZBX_PROCESS_TYPE_LISTENER 21 547 #define ZBX_PROCESS_TYPE_ACTIVE_CHECKS 22 548 #define ZBX_PROCESS_TYPE_TASKMANAGER 23 549 #define ZBX_PROCESS_TYPE_IPMIMANAGER 24 550 #define ZBX_PROCESS_TYPE_ALERTMANAGER 25 551 #define ZBX_PROCESS_TYPE_PREPROCMAN 26 552 #define ZBX_PROCESS_TYPE_PREPROCESSOR 27 553 #define ZBX_PROCESS_TYPE_LLDMANAGER 28 554 #define ZBX_PROCESS_TYPE_LLDWORKER 29 555 #define ZBX_PROCESS_TYPE_ALERTSYNCER 30 556 #define ZBX_PROCESS_TYPE_COUNT 31 /* number of process types */ 557 #define ZBX_PROCESS_TYPE_UNKNOWN 255 558 const char *get_process_type_string(unsigned char proc_type); 559 int get_process_type_by_name(const char *proc_type_str); 560 561 /* maintenance */ 562 typedef enum 563 { 564 TIMEPERIOD_TYPE_ONETIME = 0, 565 /* TIMEPERIOD_TYPE_HOURLY,*/ 566 TIMEPERIOD_TYPE_DAILY = 2, 567 TIMEPERIOD_TYPE_WEEKLY, 568 TIMEPERIOD_TYPE_MONTHLY 569 } 570 zbx_timeperiod_type_t; 571 572 typedef enum 573 { 574 MAINTENANCE_TYPE_NORMAL = 0, 575 MAINTENANCE_TYPE_NODATA 576 } 577 zbx_maintenance_type_t; 578 579 typedef enum 580 { 581 ZBX_PROTOTYPE_STATUS_ENABLED, 582 ZBX_PROTOTYPE_STATUS_DISABLED, 583 ZBX_PROTOTYPE_STATUS_COUNT 584 } 585 zbx_prototype_status_t; 586 587 typedef enum 588 { 589 ZBX_PROTOTYPE_DISCOVER, 590 ZBX_PROTOTYPE_NO_DISCOVER, 591 ZBX_PROTOTYPE_DISCOVER_COUNT 592 } 593 zbx_prototype_discover_t; 594 595 /* regular expressions */ 596 #define EXPRESSION_TYPE_INCLUDED 0 597 #define EXPRESSION_TYPE_ANY_INCLUDED 1 598 #define EXPRESSION_TYPE_NOT_INCLUDED 2 599 #define EXPRESSION_TYPE_TRUE 3 600 #define EXPRESSION_TYPE_FALSE 4 601 602 #define ZBX_IGNORE_CASE 0 603 #define ZBX_CASE_SENSITIVE 1 604 605 /* HTTP tests statuses */ 606 #define HTTPTEST_STATUS_MONITORED 0 607 #define HTTPTEST_STATUS_NOT_MONITORED 1 608 609 /* discovery rule */ 610 #define DRULE_STATUS_MONITORED 0 611 #define DRULE_STATUS_NOT_MONITORED 1 612 613 /* host statuses */ 614 #define HOST_STATUS_MONITORED 0 615 #define HOST_STATUS_NOT_MONITORED 1 616 /*#define HOST_STATUS_UNREACHABLE 2*/ 617 #define HOST_STATUS_TEMPLATE 3 618 /*#define HOST_STATUS_DELETED 4*/ 619 #define HOST_STATUS_PROXY_ACTIVE 5 620 #define HOST_STATUS_PROXY_PASSIVE 6 621 622 /* host maintenance status */ 623 #define HOST_MAINTENANCE_STATUS_OFF 0 624 #define HOST_MAINTENANCE_STATUS_ON 1 625 626 /* host inventory mode */ 627 #define HOST_INVENTORY_DISABLED -1 /* the host has no record in host_inventory */ 628 /* only in server code, never in DB */ 629 #define HOST_INVENTORY_MANUAL 0 630 #define HOST_INVENTORY_AUTOMATIC 1 631 #define HOST_INVENTORY_COUNT 2 632 633 #define HOST_INVENTORY_FIELD_COUNT 70 634 635 /* host availability */ 636 #define HOST_AVAILABLE_UNKNOWN 0 637 #define HOST_AVAILABLE_TRUE 1 638 #define HOST_AVAILABLE_FALSE 2 639 640 /* trigger statuses */ 641 #define TRIGGER_STATUS_ENABLED 0 642 #define TRIGGER_STATUS_DISABLED 1 643 644 /* trigger types */ 645 #define TRIGGER_TYPE_NORMAL 0 646 #define TRIGGER_TYPE_MULTIPLE_TRUE 1 647 648 /* trigger values */ 649 #define TRIGGER_VALUE_OK 0 650 #define TRIGGER_VALUE_PROBLEM 1 651 #define TRIGGER_VALUE_UNKNOWN 2 /* only in server code, never in DB */ 652 #define TRIGGER_VALUE_NONE 3 /* only in server code, never in DB */ 653 const char *zbx_trigger_value_string(unsigned char value); 654 655 /* trigger states */ 656 #define TRIGGER_STATE_NORMAL 0 657 #define TRIGGER_STATE_UNKNOWN 1 658 const char *zbx_trigger_state_string(unsigned char state); 659 660 /* trigger severity */ 661 #define TRIGGER_SEVERITY_NOT_CLASSIFIED 0 662 #define TRIGGER_SEVERITY_INFORMATION 1 663 #define TRIGGER_SEVERITY_WARNING 2 664 #define TRIGGER_SEVERITY_AVERAGE 3 665 #define TRIGGER_SEVERITY_HIGH 4 666 #define TRIGGER_SEVERITY_DISASTER 5 667 #define TRIGGER_SEVERITY_COUNT 6 /* number of trigger severities */ 668 669 /* trigger recovery mode */ 670 #define TRIGGER_RECOVERY_MODE_EXPRESSION 0 671 #define TRIGGER_RECOVERY_MODE_RECOVERY_EXPRESSION 1 672 #define TRIGGER_RECOVERY_MODE_NONE 2 673 674 #define ITEM_LOGTYPE_INFORMATION 1 675 #define ITEM_LOGTYPE_WARNING 2 676 #define ITEM_LOGTYPE_ERROR 4 677 #define ITEM_LOGTYPE_FAILURE_AUDIT 7 678 #define ITEM_LOGTYPE_SUCCESS_AUDIT 8 679 #define ITEM_LOGTYPE_CRITICAL 9 680 #define ITEM_LOGTYPE_VERBOSE 10 681 const char *zbx_item_logtype_string(unsigned char logtype); 682 683 /* media statuses */ 684 #define MEDIA_STATUS_ACTIVE 0 685 #define MEDIA_STATUS_DISABLED 1 686 687 /* action statuses */ 688 #define ACTION_STATUS_ACTIVE 0 689 #define ACTION_STATUS_DISABLED 1 690 691 /* action escalation processing mode */ 692 #define ACTION_PAUSE_SUPPRESSED_FALSE 0 /* process escalation for suppressed events */ 693 #define ACTION_PAUSE_SUPPRESSED_TRUE 1 /* pause escalation for suppressed events */ 694 695 /* max number of retries for alerts */ 696 #define ALERT_MAX_RETRIES 3 697 698 /* media type statuses */ 699 #define MEDIA_TYPE_STATUS_ACTIVE 0 700 #define MEDIA_TYPE_STATUS_DISABLED 1 701 702 /* SMTP security options */ 703 #define SMTP_SECURITY_NONE 0 704 #define SMTP_SECURITY_STARTTLS 1 705 #define SMTP_SECURITY_SSL 2 706 707 /* SMTP authentication options */ 708 #define SMTP_AUTHENTICATION_NONE 0 709 #define SMTP_AUTHENTICATION_NORMAL_PASSWORD 1 710 711 /* operation types */ 712 #define OPERATION_TYPE_MESSAGE 0 713 #define OPERATION_TYPE_COMMAND 1 714 #define OPERATION_TYPE_HOST_ADD 2 715 #define OPERATION_TYPE_HOST_REMOVE 3 716 #define OPERATION_TYPE_GROUP_ADD 4 717 #define OPERATION_TYPE_GROUP_REMOVE 5 718 #define OPERATION_TYPE_TEMPLATE_ADD 6 719 #define OPERATION_TYPE_TEMPLATE_REMOVE 7 720 #define OPERATION_TYPE_HOST_ENABLE 8 721 #define OPERATION_TYPE_HOST_DISABLE 9 722 #define OPERATION_TYPE_HOST_INVENTORY 10 723 #define OPERATION_TYPE_RECOVERY_MESSAGE 11 724 #define OPERATION_TYPE_ACK_MESSAGE 12 725 726 /* normal and recovery operations */ 727 #define ZBX_OPERATION_MODE_NORMAL 0 728 #define ZBX_OPERATION_MODE_RECOVERY 1 729 #define ZBX_OPERATION_MODE_ACK 2 730 731 /* algorithms for service status calculation */ 732 #define SERVICE_ALGORITHM_NONE 0 733 #define SERVICE_ALGORITHM_MAX 1 734 #define SERVICE_ALGORITHM_MIN 2 735 736 /* HTTP item types */ 737 #define ZBX_HTTPITEM_TYPE_RSPCODE 0 738 #define ZBX_HTTPITEM_TYPE_TIME 1 739 #define ZBX_HTTPITEM_TYPE_SPEED 2 740 #define ZBX_HTTPITEM_TYPE_LASTSTEP 3 741 #define ZBX_HTTPITEM_TYPE_LASTERROR 4 742 743 /* proxy_history flags */ 744 #define PROXY_HISTORY_FLAG_META 0x01 745 #define PROXY_HISTORY_FLAG_NOVALUE 0x02 746 747 #define PROXY_HISTORY_MASK_NOVALUE (PROXY_HISTORY_FLAG_META | PROXY_HISTORY_FLAG_NOVALUE) 748 749 /* global correlation constants */ 750 #define ZBX_CORRELATION_ENABLED 0 751 #define ZBX_CORRELATION_DISABLED 1 752 753 #define ZBX_CORR_CONDITION_OLD_EVENT_TAG 0 754 #define ZBX_CORR_CONDITION_NEW_EVENT_TAG 1 755 #define ZBX_CORR_CONDITION_NEW_EVENT_HOSTGROUP 2 756 #define ZBX_CORR_CONDITION_EVENT_TAG_PAIR 3 757 #define ZBX_CORR_CONDITION_OLD_EVENT_TAG_VALUE 4 758 #define ZBX_CORR_CONDITION_NEW_EVENT_TAG_VALUE 5 759 760 #define ZBX_CORR_OPERATION_CLOSE_OLD 0 761 #define ZBX_CORR_OPERATION_CLOSE_NEW 1 762 763 /* trigger correlation modes */ 764 #define ZBX_TRIGGER_CORRELATION_NONE 0 765 #define ZBX_TRIGGER_CORRELATION_TAG 1 766 767 /* acknowledgement actions (flags) */ 768 #define ZBX_PROBLEM_UPDATE_CLOSE 0x0001 769 #define ZBX_PROBLEM_UPDATE_ACKNOWLEDGE 0x0002 770 #define ZBX_PROBLEM_UPDATE_MESSAGE 0x0004 771 #define ZBX_PROBLEM_UPDATE_SEVERITY 0x0008 772 #define ZBX_PROBLEM_UPDATE_UNACKNOWLEDGE 0x0010 773 774 #define ZBX_PROBLEM_UPDATE_ACTION_COUNT 5 775 776 /* database double precision upgrade states */ 777 #define ZBX_DB_DBL_PRECISION_DISABLED 0 778 #define ZBX_DB_DBL_PRECISION_ENABLED 1 779 780 #define ZBX_USER_ONLINE_TIME 600 781 782 /* user permissions */ 783 typedef enum 784 { 785 USER_TYPE_ZABBIX_USER = 1, 786 USER_TYPE_ZABBIX_ADMIN, 787 USER_TYPE_SUPER_ADMIN 788 } 789 zbx_user_type_t; 790 791 typedef struct 792 { 793 zbx_uint64_t userid; 794 zbx_user_type_t type; 795 } 796 zbx_user_t; 797 798 typedef enum 799 { 800 PERM_DENY = 0, 801 PERM_READ = 2, 802 PERM_READ_WRITE 803 } 804 zbx_user_permission_t; 805 806 const char *zbx_permission_string(int perm); 807 808 typedef struct 809 { 810 unsigned char type; 811 unsigned char execute_on; 812 char *port; 813 unsigned char authtype; 814 char *username; 815 char *password; 816 char *publickey; 817 char *privatekey; 818 char *command; 819 char *command_orig; 820 zbx_uint64_t scriptid; 821 unsigned char host_access; 822 } 823 zbx_script_t; 824 825 #define ZBX_SCRIPT_TYPE_CUSTOM_SCRIPT 0 826 #define ZBX_SCRIPT_TYPE_IPMI 1 827 #define ZBX_SCRIPT_TYPE_SSH 2 828 #define ZBX_SCRIPT_TYPE_TELNET 3 829 #define ZBX_SCRIPT_TYPE_GLOBAL_SCRIPT 4 830 831 #define ZBX_SCRIPT_EXECUTE_ON_AGENT 0 832 #define ZBX_SCRIPT_EXECUTE_ON_SERVER 1 833 #define ZBX_SCRIPT_EXECUTE_ON_PROXY 2 /* fall back to execution on server if target not monitored by proxy */ 834 835 #define POLLER_DELAY 5 836 #define DISCOVERER_DELAY 60 837 838 #define HOUSEKEEPER_STARTUP_DELAY 30 /* in minutes */ 839 840 #define GET_SENDER_TIMEOUT 60 841 842 #ifndef MAX 843 # define MAX(a, b) ((a) > (b) ? (a) : (b)) 844 #endif 845 846 #ifndef MIN 847 # define MIN(a, b) ((a) < (b) ? (a) : (b)) 848 #endif 849 850 #define zbx_calloc(old, nmemb, size) zbx_calloc2(__FILE__, __LINE__, old, nmemb, size) 851 #define zbx_malloc(old, size) zbx_malloc2(__FILE__, __LINE__, old, size) 852 #define zbx_realloc(src, size) zbx_realloc2(__FILE__, __LINE__, src, size) 853 #define zbx_strdup(old, str) zbx_strdup2(__FILE__, __LINE__, old, str) 854 855 #define ZBX_STRDUP(var, str) (var = zbx_strdup(var, str)) 856 857 void *zbx_calloc2(const char *filename, int line, void *old, size_t nmemb, size_t size); 858 void *zbx_malloc2(const char *filename, int line, void *old, size_t size); 859 void *zbx_realloc2(const char *filename, int line, void *old, size_t size); 860 char *zbx_strdup2(const char *filename, int line, char *old, const char *str); 861 862 void *zbx_guaranteed_memset(void *v, int c, size_t n); 863 864 #define zbx_free(ptr) \ 865 \ 866 do \ 867 { \ 868 if (ptr) \ 869 { \ 870 free(ptr); \ 871 ptr = NULL; \ 872 } \ 873 } \ 874 while (0) 875 876 #define zbx_fclose(file) \ 877 \ 878 do \ 879 { \ 880 if (file) \ 881 { \ 882 fclose(file); \ 883 file = NULL; \ 884 } \ 885 } \ 886 while (0) 887 888 #define THIS_SHOULD_NEVER_HAPPEN \ 889 \ 890 do \ 891 { \ 892 zbx_error("ERROR [file and function: <%s,%s>, revision:%s, line:%d] Something impossible has just" \ 893 " happened.", __FILE__, __func__, ZABBIX_REVISION, __LINE__); \ 894 zbx_backtrace(); \ 895 } \ 896 while (0) 897 898 extern const char *progname; 899 extern const char title_message[]; 900 extern const char syslog_app_name[]; 901 extern const char *usage_message[]; 902 extern const char *help_message[]; 903 904 #define ARRSIZE(a) (sizeof(a) / sizeof(*a)) 905 906 void help(void); 907 void usage(void); 908 void version(void); 909 910 const char *get_program_name(const char *path); 911 912 typedef enum 913 { 914 ZBX_TASK_START = 0, 915 ZBX_TASK_PRINT_SUPPORTED, 916 ZBX_TASK_TEST_METRIC, 917 ZBX_TASK_SHOW_USAGE, 918 ZBX_TASK_SHOW_VERSION, 919 ZBX_TASK_SHOW_HELP, 920 #ifdef _WINDOWS 921 ZBX_TASK_INSTALL_SERVICE, 922 ZBX_TASK_UNINSTALL_SERVICE, 923 ZBX_TASK_START_SERVICE, 924 ZBX_TASK_STOP_SERVICE 925 #else 926 ZBX_TASK_RUNTIME_CONTROL 927 #endif 928 } 929 zbx_task_t; 930 931 #define ZBX_RTC_LOG_LEVEL_INCREASE 1 932 #define ZBX_RTC_LOG_LEVEL_DECREASE 2 933 #define ZBX_RTC_HOUSEKEEPER_EXECUTE 3 934 #define ZBX_RTC_CONFIG_CACHE_RELOAD 8 935 #define ZBX_RTC_SNMP_CACHE_RELOAD 9 936 #define ZBX_RTC_DIAGINFO 10 937 938 typedef enum 939 { 940 HTTPTEST_AUTH_NONE = 0, 941 HTTPTEST_AUTH_BASIC, 942 HTTPTEST_AUTH_NTLM, 943 HTTPTEST_AUTH_NEGOTIATE 944 } 945 zbx_httptest_auth_t; 946 947 #define ZBX_TASK_FLAG_MULTIPLE_AGENTS 0x01 948 #define ZBX_TASK_FLAG_FOREGROUND 0x02 949 950 typedef struct 951 { 952 zbx_task_t task; 953 int flags; 954 int data; 955 } 956 ZBX_TASK_EX; 957 958 #define NET_DELAY_MAX (SEC_PER_MIN / 4) 959 960 typedef struct 961 { 962 int values_num; 963 int period_end; 964 #define ZBX_PROXY_SUPPRESS_DISABLE 0x00 965 #define ZBX_PROXY_SUPPRESS_ACTIVE 0x01 966 #define ZBX_PROXY_SUPPRESS_MORE 0x02 967 #define ZBX_PROXY_SUPPRESS_EMPTY 0x04 968 #define ZBX_PROXY_SUPPRESS_ENABLE ( \ 969 ZBX_PROXY_SUPPRESS_ACTIVE | \ 970 ZBX_PROXY_SUPPRESS_MORE | \ 971 ZBX_PROXY_SUPPRESS_EMPTY) 972 int flags; 973 } 974 zbx_proxy_suppress_t; 975 976 #define ZBX_RTC_MSG_SHIFT 0 977 #define ZBX_RTC_SCOPE_SHIFT 8 978 #define ZBX_RTC_DATA_SHIFT 16 979 980 #define ZBX_RTC_MSG_MASK 0x000000ff 981 #define ZBX_RTC_SCOPE_MASK 0x0000ff00 982 #define ZBX_RTC_DATA_MASK 0xffff0000 983 984 #define ZBX_RTC_GET_MSG(task) (int)((task & ZBX_RTC_MSG_MASK) >> ZBX_RTC_MSG_SHIFT) 985 #define ZBX_RTC_GET_SCOPE(task) (int)((task & ZBX_RTC_SCOPE_MASK) >> ZBX_RTC_SCOPE_SHIFT) 986 #define ZBX_RTC_GET_DATA(task) (int)((task & ZBX_RTC_DATA_MASK) >> ZBX_RTC_DATA_SHIFT) 987 988 #define ZBX_RTC_MAKE_MESSAGE(msg, scope, data) ((msg << ZBX_RTC_MSG_SHIFT) | (scope << ZBX_RTC_SCOPE_SHIFT) | \ 989 (data << ZBX_RTC_DATA_SHIFT)) 990 991 char *string_replace(const char *str, const char *sub_str1, const char *sub_str2); 992 993 #define ZBX_FLAG_DOUBLE_PLAIN 0x00 994 #define ZBX_FLAG_DOUBLE_SUFFIX 0x01 995 int is_double_suffix(const char *str, unsigned char flags); 996 int is_double(const char *str, double *value); 997 #define ZBX_LENGTH_UNLIMITED 0x7fffffff 998 int is_time_suffix(const char *str, int *value, int length); 999 int is_uint_n_range(const char *str, size_t n, void *value, size_t size, zbx_uint64_t min, zbx_uint64_t max); 1000 int is_hex_n_range(const char *str, size_t n, void *value, size_t size, zbx_uint64_t min, zbx_uint64_t max); 1001 1002 #define ZBX_SIZE_T_MAX (~(size_t)0) 1003 1004 #define is_ushort(str, value) \ 1005 is_uint_n_range(str, ZBX_SIZE_T_MAX, value, sizeof(unsigned short), 0x0, 0xFFFF) 1006 1007 #define is_uint32(str, value) \ 1008 is_uint_n_range(str, ZBX_SIZE_T_MAX, value, 4, 0x0, 0xFFFFFFFF) 1009 1010 #define is_uint64(str, value) \ 1011 is_uint_n_range(str, ZBX_SIZE_T_MAX, value, 8, 0x0, __UINT64_C(0xFFFFFFFFFFFFFFFF)) 1012 1013 #define is_uint64_n(str, n, value) \ 1014 is_uint_n_range(str, n, value, 8, 0x0, __UINT64_C(0xFFFFFFFFFFFFFFFF)) 1015 1016 #define is_uint31(str, value) \ 1017 is_uint_n_range(str, ZBX_SIZE_T_MAX, value, 4, 0x0, 0x7FFFFFFF) 1018 1019 #define ZBX_MAX_UINT31_1 0x7FFFFFFE 1020 #define is_uint31_1(str, value) \ 1021 is_uint_n_range(str, ZBX_SIZE_T_MAX, value, 4, 0x0, ZBX_MAX_UINT31_1) 1022 1023 #define is_uint_range(str, value, min, max) \ 1024 is_uint_n_range(str, ZBX_SIZE_T_MAX, value, sizeof(unsigned int), min, max) 1025 1026 int is_boolean(const char *str, zbx_uint64_t *value); 1027 int is_uoct(const char *str); 1028 int is_uhex(const char *str); 1029 int is_hex_string(const char *str); 1030 int is_ascii_string(const char *str); 1031 int zbx_rtrim(char *str, const char *charlist); 1032 void zbx_ltrim(char *str, const char *charlist); 1033 void zbx_lrtrim(char *str, const char *charlist); 1034 void zbx_trim_integer(char *str); 1035 void zbx_trim_float(char *str); 1036 void zbx_remove_chars(char *str, const char *charlist); 1037 char *zbx_str_printable_dyn(const char *text); 1038 #define ZBX_WHITESPACE " \t\r\n" 1039 #define zbx_remove_whitespace(str) zbx_remove_chars(str, ZBX_WHITESPACE) 1040 void del_zeros(char *s); 1041 int get_param(const char *p, int num, char *buf, size_t max_len, zbx_request_parameter_type_t *type); 1042 int num_param(const char *p); 1043 char *get_param_dyn(const char *p, int num, zbx_request_parameter_type_t *type); 1044 1045 /****************************************************************************** 1046 * * 1047 * Purpose: replaces an item key, SNMP OID or their parameters * 1048 * * 1049 * Parameters: * 1050 * data - [IN] an item key, SNMP OID or their parameter * 1051 * key_type - [IN] ZBX_KEY_TYPE_* * 1052 * level - [IN] for item keys and OIDs the level will be 0; * 1053 * for their parameters - 1 or higher (for arrays) * 1054 * num - [IN] parameter number; for item keys and OIDs the level * 1055 * will be 0; for their parameters - 1 or higher * 1056 * quoted - [IN] 1 if parameter is quoted; 0 - otherwise * 1057 * cb_data - [IN] callback function custom data * 1058 * param - [OUT] replaced item key string * 1059 * * 1060 * Return value: SUCCEED - if parameter doesn't change or has been changed * 1061 * successfully * 1062 * FAIL - otherwise * 1063 * * 1064 * Comments: The new string should be quoted if it contains special * 1065 * characters * 1066 * * 1067 ******************************************************************************/ 1068 typedef int (*replace_key_param_f)(const char *data, int key_type, int level, int num, int quoted, void *cb_data, 1069 char **param); 1070 #define ZBX_KEY_TYPE_ITEM 0 1071 #define ZBX_KEY_TYPE_OID 1 1072 int replace_key_params_dyn(char **data, int key_type, replace_key_param_f cb, void *cb_data, char *error, 1073 size_t maxerrlen); 1074 1075 void remove_param(char *param, int num); 1076 int get_key_param(char *param, int num, char *buf, size_t max_len); 1077 int num_key_param(char *param); 1078 size_t zbx_get_escape_string_len(const char *src, const char *charlist); 1079 char *zbx_dyn_escape_string(const char *src, const char *charlist); 1080 int zbx_escape_string(char *dst, size_t len, const char *src, const char *charlist); 1081 1082 typedef struct zbx_custom_interval zbx_custom_interval_t; 1083 int zbx_interval_preproc(const char *interval_str, int *simple_interval, zbx_custom_interval_t **custom_intervals, 1084 char **error); 1085 int zbx_validate_interval(const char *str, char **error); 1086 void zbx_custom_interval_free(zbx_custom_interval_t *custom_intervals); 1087 int calculate_item_nextcheck(zbx_uint64_t seed, int item_type, int simple_interval, 1088 const zbx_custom_interval_t *custom_intervals, time_t now); 1089 int calculate_item_nextcheck_unreachable(int simple_interval, const zbx_custom_interval_t *custom_intervals, 1090 time_t disable_until); 1091 time_t calculate_proxy_nextcheck(zbx_uint64_t hostid, unsigned int delay, time_t now); 1092 int zbx_check_time_period(const char *period, time_t time, int *res); 1093 void zbx_hex2octal(const char *input, char **output, int *olen); 1094 int str_in_list(const char *list, const char *value, char delimiter); 1095 char *str_linefeed(const char *src, size_t maxline, const char *delim); 1096 void zbx_strarr_init(char ***arr); 1097 void zbx_strarr_add(char ***arr, const char *entry); 1098 void zbx_strarr_free(char **arr); 1099 1100 #if defined(__GNUC__) || defined(__clang__) 1101 # define __zbx_attr_format_printf(idx1, idx2) __attribute__((__format__(__printf__, (idx1), (idx2)))) 1102 #else 1103 # define __zbx_attr_format_printf(idx1, idx2) 1104 #endif 1105 1106 void zbx_setproctitle(const char *fmt, ...) __zbx_attr_format_printf(1, 2); 1107 1108 #define ZBX_KIBIBYTE 1024 1109 #define ZBX_MEBIBYTE 1048576 1110 #define ZBX_GIBIBYTE 1073741824 1111 #define ZBX_TEBIBYTE __UINT64_C(1099511627776) 1112 1113 #define SEC_PER_MIN 60 1114 #define SEC_PER_HOUR 3600 1115 #define SEC_PER_DAY 86400 1116 #define SEC_PER_WEEK (7 * SEC_PER_DAY) 1117 #define SEC_PER_MONTH (30 * SEC_PER_DAY) 1118 #define SEC_PER_YEAR (365 * SEC_PER_DAY) 1119 #define ZBX_JAN_2038 2145916800 1120 #define ZBX_JAN_1970_IN_SEC 2208988800.0 /* 1970 - 1900 in seconds */ 1121 1122 #define ZBX_MAX_RECV_DATA_SIZE (1 * ZBX_GIBIBYTE) 1123 #if defined(_WINDOWS) 1124 #define ZBX_MAX_RECV_LARGE_DATA_SIZE (1 * ZBX_GIBIBYTE) 1125 #else 1126 #define ZBX_MAX_RECV_LARGE_DATA_SIZE (__UINT64_C(16) * ZBX_GIBIBYTE) 1127 #endif 1128 1129 /* max length of base64 data */ 1130 #define ZBX_MAX_B64_LEN (16 * ZBX_KIBIBYTE) 1131 1132 double zbx_time(void); 1133 void zbx_timespec(zbx_timespec_t *ts); 1134 double zbx_current_time(void); 1135 void zbx_get_time(struct tm *tm, long *milliseconds, zbx_timezone_t *tz); 1136 long zbx_get_timezone_offset(time_t t, struct tm *tm); 1137 int zbx_utc_time(int year, int mon, int mday, int hour, int min, int sec, int *t); 1138 int zbx_day_in_month(int year, int mon); 1139 zbx_uint64_t zbx_get_duration_ms(const zbx_timespec_t *ts); 1140 1141 void zbx_error(const char *fmt, ...) __zbx_attr_format_printf(1, 2); 1142 1143 size_t zbx_snprintf(char *str, size_t count, const char *fmt, ...) __zbx_attr_format_printf(3, 4); 1144 1145 void zbx_snprintf_alloc(char **str, size_t *alloc_len, size_t *offset, const char *fmt, ...) 1146 __zbx_attr_format_printf(4, 5); 1147 1148 size_t zbx_vsnprintf(char *str, size_t count, const char *fmt, va_list args); 1149 1150 void zbx_strncpy_alloc(char **str, size_t *alloc_len, size_t *offset, const char *src, size_t n); 1151 void zbx_strcpy_alloc(char **str, size_t *alloc_len, size_t *offset, const char *src); 1152 void zbx_chrcpy_alloc(char **str, size_t *alloc_len, size_t *offset, char c); 1153 void zbx_str_memcpy_alloc(char **str, size_t *alloc_len, size_t *offset, const char *src, size_t n); 1154 1155 void zbx_strsplit(const char *src, char delimiter, char **left, char **right); 1156 1157 /* secure string copy */ 1158 #define strscpy(x, y) zbx_strlcpy(x, y, sizeof(x)) 1159 #define strscat(x, y) zbx_strlcat(x, y, sizeof(x)) 1160 size_t zbx_strlcpy(char *dst, const char *src, size_t siz); 1161 void zbx_strlcat(char *dst, const char *src, size_t siz); 1162 size_t zbx_strlcpy_utf8(char *dst, const char *src, size_t size); 1163 1164 char *zbx_dvsprintf(char *dest, const char *f, va_list args); 1165 1166 char *zbx_dsprintf(char *dest, const char *f, ...) __zbx_attr_format_printf(2, 3); 1167 char *zbx_strdcat(char *dest, const char *src); 1168 char *zbx_strdcatf(char *dest, const char *f, ...) __zbx_attr_format_printf(2, 3); 1169 1170 int xml_get_data_dyn(const char *xml, const char *tag, char **data); 1171 void xml_free_data_dyn(char **data); 1172 char *xml_escape_dyn(const char *data); 1173 void xml_escape_xpath(char **data); 1174 1175 int comms_parse_response(char *xml, char *host, size_t host_len, char *key, size_t key_len, 1176 char *data, size_t data_len, char *lastlogsize, size_t lastlogsize_len, 1177 char *timestamp, size_t timestamp_len, char *source, size_t source_len, 1178 char *severity, size_t severity_len); 1179 1180 /* misc functions */ 1181 int is_ip6(const char *ip); 1182 int is_ip4(const char *ip); 1183 int is_supported_ip(const char *ip); 1184 int is_ip(const char *ip); 1185 1186 int zbx_validate_hostname(const char *hostname); 1187 1188 void zbx_on_exit(int ret); /* calls exit() at the end! */ 1189 void zbx_backtrace(void); 1190 1191 int int_in_list(char *list, int value); 1192 int ip_in_list(const char *list, const char *ip); 1193 1194 #define VALUE_ERRMSG_MAX 128 1195 const char *zbx_truncate_itemkey(const char *key, const size_t char_max, char *buf, const size_t buf_len); 1196 const char *zbx_truncate_value(const char *val, const size_t char_max, char *buf, const size_t buf_len); 1197 1198 const char *zbx_print_double(char *buffer, size_t size, double val); 1199 1200 /* IP range support */ 1201 #define ZBX_IPRANGE_V4 0 1202 #define ZBX_IPRANGE_V6 1 1203 1204 #define ZBX_IPRANGE_GROUPS_V4 4 1205 #define ZBX_IPRANGE_GROUPS_V6 8 1206 1207 typedef struct 1208 { 1209 int from; 1210 int to; 1211 } 1212 zbx_range_t; 1213 1214 typedef struct 1215 { 1216 /* contains groups of ranges for either ZBX_IPRANGE_V4 or ZBX_IPRANGE_V6 */ 1217 /* ex. 127-127.0-0.0-0.2-254 (from-to.from-to.from-to.from-to) */ 1218 /* 0 1 2 3 */ 1219 zbx_range_t range[ZBX_IPRANGE_GROUPS_V6]; 1220 1221 /* range type - ZBX_IPRANGE_V4 or ZBX_IPRANGE_V6 */ 1222 unsigned char type; 1223 1224 /* 1 if the range was defined with network mask, 0 otherwise */ 1225 unsigned char mask; 1226 } 1227 zbx_iprange_t; 1228 1229 int iprange_parse(zbx_iprange_t *iprange, const char *address); 1230 void iprange_first(const zbx_iprange_t *iprange, int *address); 1231 int iprange_next(const zbx_iprange_t *iprange, int *address); 1232 int iprange_validate(const zbx_iprange_t *iprange, const int *address); 1233 zbx_uint64_t iprange_volume(const zbx_iprange_t *iprange); 1234 1235 /* time related functions */ 1236 char *zbx_age2str(int age); 1237 char *zbx_date2str(time_t date); 1238 char *zbx_time2str(time_t time); 1239 1240 #define ZBX_NULL2STR(str) (NULL != str ? str : "(null)") 1241 #define ZBX_NULL2EMPTY_STR(str) (NULL != (str) ? (str) : "") 1242 1243 char *zbx_strcasestr(const char *haystack, const char *needle); 1244 int cmp_key_id(const char *key_1, const char *key_2); 1245 int zbx_strncasecmp(const char *s1, const char *s2, size_t n); 1246 1247 int get_nearestindex(const void *p, size_t sz, int num, zbx_uint64_t id); 1248 int uint64_array_add(zbx_uint64_t **values, int *alloc, int *num, zbx_uint64_t value, int alloc_step); 1249 int uint64_array_exists(const zbx_uint64_t *values, int num, zbx_uint64_t value); 1250 void uint64_array_remove(zbx_uint64_t *values, int *num, const zbx_uint64_t *rm_values, int rm_num); 1251 1252 const char *zbx_event_value_string(unsigned char source, unsigned char object, unsigned char value); 1253 1254 #if defined(_WINDOWS) || defined(__MINGW32__) 1255 const OSVERSIONINFOEX *zbx_win_getversion(void); 1256 void zbx_wmi_get(const char *wmi_namespace, const char *wmi_query, double timeout, char **utf8_value); 1257 wchar_t *zbx_acp_to_unicode(const char *acp_string); 1258 wchar_t *zbx_oemcp_to_unicode(const char *oemcp_string); 1259 int zbx_acp_to_unicode_static(const char *acp_string, wchar_t *wide_string, int wide_size); 1260 wchar_t *zbx_utf8_to_unicode(const char *utf8_string); 1261 char *zbx_unicode_to_utf8(const wchar_t *wide_string); 1262 char *zbx_unicode_to_utf8_static(const wchar_t *wide_string, char *utf8_string, int utf8_size); 1263 int _wis_uint(const wchar_t *wide_string); 1264 #endif 1265 void zbx_strlower(char *str); 1266 void zbx_strupper(char *str); 1267 #if defined(_WINDOWS) || defined(__MINGW32__) || defined(HAVE_ICONV) 1268 char *convert_to_utf8(char *in, size_t in_size, const char *encoding); 1269 #endif /* HAVE_ICONV */ 1270 #define ZBX_MAX_BYTES_IN_UTF8_CHAR 4 1271 size_t zbx_utf8_char_len(const char *text); 1272 size_t zbx_strlen_utf8(const char *text); 1273 size_t zbx_strlen_utf8_nchars(const char *text, size_t utf8_maxlen); 1274 size_t zbx_strlen_utf8_nbytes(const char *text, size_t maxlen); 1275 size_t zbx_charcount_utf8_nbytes(const char *text, size_t maxlen); 1276 1277 int zbx_is_utf8(const char *text); 1278 #define ZBX_UTF8_REPLACE_CHAR '?' 1279 void zbx_replace_invalid_utf8(char *text); 1280 1281 int zbx_cesu8_to_utf8(const char *cesu8, char **utf8); 1282 1283 void dos2unix(char *str); 1284 int str2uint64(const char *str, const char *suffixes, zbx_uint64_t *value); 1285 double str2double(const char *str); 1286 1287 /* time and memory size suffixes */ 1288 #define ZBX_UNIT_SYMBOLS "KMGTsmhdw" 1289 zbx_uint64_t suffix2factor(char c); 1290 1291 #if defined(_WINDOWS) 1292 typedef struct __stat64 zbx_stat_t; 1293 int __zbx_stat(const char *path, zbx_stat_t *buf); 1294 int __zbx_open(const char *pathname, int flags); 1295 #else 1296 typedef struct stat zbx_stat_t; 1297 #endif /* _WINDOWS */ 1298 1299 typedef struct 1300 { 1301 zbx_fs_time_t modification_time; /* time of last modification */ 1302 zbx_fs_time_t access_time; /* time of last access */ 1303 zbx_fs_time_t change_time; /* time of last status change */ 1304 } 1305 zbx_file_time_t; 1306 1307 int zbx_get_file_time(const char *path, zbx_file_time_t *time); 1308 void find_cr_lf_szbyte(const char *encoding, const char **cr, const char **lf, size_t *szbyte); 1309 int zbx_read(int fd, char *buf, size_t count, const char *encoding); 1310 int zbx_is_regular_file(const char *path); 1311 char *zbx_fgets(char *buffer, int size, FILE *fp); 1312 1313 int MAIN_ZABBIX_ENTRY(int flags); 1314 1315 zbx_uint64_t zbx_letoh_uint64(zbx_uint64_t data); 1316 zbx_uint64_t zbx_htole_uint64(zbx_uint64_t data); 1317 1318 zbx_uint32_t zbx_letoh_uint32(zbx_uint32_t data); 1319 zbx_uint32_t zbx_htole_uint32(zbx_uint32_t data); 1320 1321 int zbx_check_hostname(const char *hostname, char **error); 1322 1323 int is_hostname_char(unsigned char c); 1324 int is_key_char(unsigned char c); 1325 int is_function_char(unsigned char c); 1326 int is_macro_char(unsigned char c); 1327 1328 int is_discovery_macro(const char *name); 1329 1330 int is_time_function(const char *func); 1331 int is_snmp_type(unsigned char type); 1332 1333 int parse_key(const char **exp); 1334 1335 int parse_host_key(char *exp, char **host, char **key); 1336 1337 void make_hostname(char *host); 1338 1339 int zbx_number_parse(const char *number, int *len); 1340 int zbx_suffixed_number_parse(const char *number, int *len); 1341 1342 unsigned char get_interface_type_by_item_type(unsigned char type); 1343 1344 int calculate_sleeptime(int nextcheck, int max_sleeptime); 1345 1346 void zbx_replace_string(char **data, size_t l, size_t *r, const char *value); 1347 int zbx_replace_mem_dyn(char **data, size_t *data_alloc, size_t *data_len, size_t offset, size_t sz_to, 1348 const char *from, size_t sz_from); 1349 1350 void zbx_trim_str_list(char *list, char delimiter); 1351 1352 int parse_serveractive_element(char *str, char **host, unsigned short *port, unsigned short port_default); 1353 1354 int zbx_strcmp_null(const char *s1, const char *s2); 1355 1356 #define ZBX_MACRO_REGEX_PREFIX "regex:" 1357 1358 int zbx_user_macro_parse(const char *macro, int *macro_r, int *context_l, int *context_r, 1359 unsigned char *context_op); 1360 int zbx_user_macro_parse_dyn(const char *macro, char **name, char **context, int *length, 1361 unsigned char *context_op); 1362 char *zbx_user_macro_unquote_context_dyn(const char *context, int len); 1363 char *zbx_user_macro_quote_context_dyn(const char *context, int force_quote); 1364 1365 #define ZBX_SESSION_ACTIVE 0 1366 #define ZBX_SESSION_PASSIVE 1 1367 1368 char *zbx_dyn_escape_shell_single_quote(const char *arg); 1369 1370 #define ZBX_DO_NOT_SEND_RESPONSE 0 1371 #define ZBX_SEND_RESPONSE 1 1372 1373 /* Do not forget to synchronize HOST_TLS_* definitions with DB schema ! */ 1374 #define HOST_TLS_ISSUER_LEN 4096 /* for up to 1024 UTF-8 characters */ 1375 #define HOST_TLS_ISSUER_LEN_MAX (HOST_TLS_ISSUER_LEN + 1) 1376 #define HOST_TLS_SUBJECT_LEN 4096 /* for up to 1024 UTF-8 characters */ 1377 #define HOST_TLS_SUBJECT_LEN_MAX (HOST_TLS_SUBJECT_LEN + 1) 1378 #define HOST_TLS_PSK_IDENTITY_LEN 512 /* for up to 128 UTF-8 characters */ 1379 #define HOST_TLS_PSK_IDENTITY_LEN_MAX (HOST_TLS_PSK_IDENTITY_LEN + 1) 1380 #define HOST_TLS_PSK_LEN 512 /* for up to 256 hex-encoded bytes (ASCII) */ 1381 #define HOST_TLS_PSK_LEN_MAX (HOST_TLS_PSK_LEN + 1) 1382 #define HOST_TLS_PSK_LEN_MIN 32 /* for 16 hex-encoded bytes (128-bit PSK) */ 1383 1384 #define ZBX_PSK_FOR_HOST 0x01 /* PSK can be used for a known host */ 1385 #define ZBX_PSK_FOR_AUTOREG 0x02 /* PSK can be used for host autoregistration */ 1386 #define ZBX_PSK_FOR_PROXY 0x04 /* PSK is configured on proxy */ 1387 1388 void zbx_function_param_parse(const char *expr, size_t *param_pos, size_t *length, size_t *sep_pos); 1389 char *zbx_function_param_unquote_dyn(const char *param, size_t len, int *quoted); 1390 int zbx_function_param_quote(char **param, int forced); 1391 int zbx_function_validate_parameters(const char *expr, size_t *length); 1392 int zbx_function_find(const char *expr, size_t *func_pos, size_t *par_l, size_t *par_r, 1393 char *error, int max_error_len); 1394 char *zbx_function_get_param_dyn(const char *params, int Nparam); 1395 1396 void zbx_alarm_flag_set(void); 1397 void zbx_alarm_flag_clear(void); 1398 1399 #ifndef _WINDOWS 1400 unsigned int zbx_alarm_on(unsigned int seconds); 1401 unsigned int zbx_alarm_off(void); 1402 #endif 1403 1404 int zbx_alarm_timed_out(void); 1405 1406 #define zbx_bsearch(key, base, nmemb, size, compar) (0 == (nmemb) ? NULL : bsearch(key, base, nmemb, size, compar)) 1407 1408 int zbx_strcmp_natural(const char *s1, const char *s2); 1409 1410 /* tokens used in expressions */ 1411 #define ZBX_TOKEN_OBJECTID 0x00001 1412 #define ZBX_TOKEN_MACRO 0x00002 1413 #define ZBX_TOKEN_LLD_MACRO 0x00004 1414 #define ZBX_TOKEN_USER_MACRO 0x00008 1415 #define ZBX_TOKEN_FUNC_MACRO 0x00010 1416 #define ZBX_TOKEN_SIMPLE_MACRO 0x00020 1417 #define ZBX_TOKEN_REFERENCE 0x00040 1418 #define ZBX_TOKEN_LLD_FUNC_MACRO 0x00080 1419 1420 /* additional token flags */ 1421 #define ZBX_TOKEN_TRIGGER 0x004000 1422 #define ZBX_TOKEN_NUMERIC 0x008000 1423 #define ZBX_TOKEN_JSON 0x010000 1424 #define ZBX_TOKEN_REGEXP 0x040000 1425 #define ZBX_TOKEN_XPATH 0x080000 1426 #define ZBX_TOKEN_REGEXP_OUTPUT 0x100000 1427 #define ZBX_TOKEN_PROMETHEUS 0x200000 1428 #define ZBX_TOKEN_JSONPATH 0x400000 1429 #define ZBX_TOKEN_STR_REPLACE 0x800000 1430 1431 /* location of a substring */ 1432 typedef struct 1433 { 1434 /* left position */ 1435 size_t l; 1436 /* right position */ 1437 size_t r; 1438 } 1439 zbx_strloc_t; 1440 1441 /* data used by macros, ldd macros and objectid tokens */ 1442 typedef struct 1443 { 1444 zbx_strloc_t name; 1445 } 1446 zbx_token_macro_t; 1447 1448 /* data used by user macros */ 1449 typedef struct 1450 { 1451 /* macro name */ 1452 zbx_strloc_t name; 1453 /* macro context, for macros without context the context.l and context.r fields are set to 0 */ 1454 zbx_strloc_t context; 1455 } 1456 zbx_token_user_macro_t; 1457 1458 /* data used by macro functions */ 1459 typedef struct 1460 { 1461 /* the macro including the opening and closing brackets {}, for example: {ITEM.VALUE} */ 1462 zbx_strloc_t macro; 1463 /* function + parameters, for example: regsub("([0-9]+)", \1) */ 1464 zbx_strloc_t func; 1465 /* parameters, for example: ("([0-9]+)", \1) */ 1466 zbx_strloc_t func_param; 1467 } 1468 zbx_token_func_macro_t; 1469 1470 /* data used by simple (host:key) macros */ 1471 typedef struct 1472 { 1473 /* host name, supporting simple macros as a host name, for example Zabbix server or {HOST.HOST} */ 1474 zbx_strloc_t host; 1475 /* key + parameters, supporting {ITEM.KEYn} macro, for example system.uname or {ITEM.KEY1} */ 1476 zbx_strloc_t key; 1477 /* function + parameters, for example avg(5m) */ 1478 zbx_strloc_t func; 1479 /* parameters, for example (5m) */ 1480 zbx_strloc_t func_param; 1481 } 1482 zbx_token_simple_macro_t; 1483 1484 /* data used by references */ 1485 typedef struct 1486 { 1487 /* index of constant being referenced (1 for $1, 2 for $2, ..., 9 for $9) */ 1488 int index; 1489 } 1490 zbx_token_reference_t; 1491 1492 /* the token type specific data */ 1493 typedef union 1494 { 1495 zbx_token_macro_t objectid; 1496 zbx_token_macro_t macro; 1497 zbx_token_macro_t lld_macro; 1498 zbx_token_user_macro_t user_macro; 1499 zbx_token_func_macro_t func_macro; 1500 zbx_token_func_macro_t lld_func_macro; 1501 zbx_token_simple_macro_t simple_macro; 1502 zbx_token_reference_t reference; 1503 } 1504 zbx_token_data_t; 1505 1506 /* {} token data */ 1507 typedef struct 1508 { 1509 /* token type, see ZBX_TOKEN_ defines */ 1510 int type; 1511 /* the token location in expression including opening and closing brackets {} */ 1512 zbx_strloc_t loc; 1513 /* the token type specific data */ 1514 zbx_token_data_t data; 1515 } 1516 zbx_token_t; 1517 1518 typedef enum 1519 { 1520 ZBX_TOKEN_SEARCH_BASIC, 1521 ZBX_TOKEN_SEARCH_REFERENCES 1522 } 1523 zbx_token_search_t; 1524 1525 int zbx_token_find(const char *expression, int pos, zbx_token_t *token, zbx_token_search_t token_search); 1526 int zbx_strmatch_condition(const char *value, const char *pattern, unsigned char op); 1527 1528 int zbx_expression_next_constant(const char *str, size_t pos, zbx_strloc_t *loc); 1529 char *zbx_expression_extract_constant(const char *src, const zbx_strloc_t *loc); 1530 1531 #define ZBX_COMPONENT_VERSION(major, minor) ((major << 16) | minor) 1532 #define ZBX_COMPONENT_VERSION_MAJOR(version) (version >> 16) 1533 #define ZBX_COMPONENT_VERSION_MINOR(version) (version & 0xFFFF) 1534 1535 #define ZBX_PREPROC_MULTIPLIER 1 1536 #define ZBX_PREPROC_RTRIM 2 1537 #define ZBX_PREPROC_LTRIM 3 1538 #define ZBX_PREPROC_TRIM 4 1539 #define ZBX_PREPROC_REGSUB 5 1540 #define ZBX_PREPROC_BOOL2DEC 6 1541 #define ZBX_PREPROC_OCT2DEC 7 1542 #define ZBX_PREPROC_HEX2DEC 8 1543 #define ZBX_PREPROC_DELTA_VALUE 9 1544 #define ZBX_PREPROC_DELTA_SPEED 10 1545 #define ZBX_PREPROC_XPATH 11 1546 #define ZBX_PREPROC_JSONPATH 12 1547 #define ZBX_PREPROC_VALIDATE_RANGE 13 1548 #define ZBX_PREPROC_VALIDATE_REGEX 14 1549 #define ZBX_PREPROC_VALIDATE_NOT_REGEX 15 1550 #define ZBX_PREPROC_ERROR_FIELD_JSON 16 1551 #define ZBX_PREPROC_ERROR_FIELD_XML 17 1552 #define ZBX_PREPROC_ERROR_FIELD_REGEX 18 1553 #define ZBX_PREPROC_THROTTLE_VALUE 19 1554 #define ZBX_PREPROC_THROTTLE_TIMED_VALUE 20 1555 #define ZBX_PREPROC_SCRIPT 21 1556 #define ZBX_PREPROC_PROMETHEUS_PATTERN 22 1557 #define ZBX_PREPROC_PROMETHEUS_TO_JSON 23 1558 #define ZBX_PREPROC_CSV_TO_JSON 24 1559 #define ZBX_PREPROC_STR_REPLACE 25 1560 1561 /* custom on fail actions */ 1562 #define ZBX_PREPROC_FAIL_DEFAULT 0 1563 #define ZBX_PREPROC_FAIL_DISCARD_VALUE 1 1564 #define ZBX_PREPROC_FAIL_SET_VALUE 2 1565 #define ZBX_PREPROC_FAIL_SET_ERROR 3 1566 1567 /* internal on fail actions */ 1568 #define ZBX_PREPROC_FAIL_FORCE_ERROR 4 1569 1570 #define ZBX_HTTPFIELD_HEADER 0 1571 #define ZBX_HTTPFIELD_VARIABLE 1 1572 #define ZBX_HTTPFIELD_POST_FIELD 2 1573 #define ZBX_HTTPFIELD_QUERY_FIELD 3 1574 1575 #define ZBX_POSTTYPE_RAW 0 1576 #define ZBX_POSTTYPE_FORM 1 1577 #define ZBX_POSTTYPE_JSON 2 1578 #define ZBX_POSTTYPE_XML 3 1579 1580 #define ZBX_RETRIEVE_MODE_CONTENT 0 1581 #define ZBX_RETRIEVE_MODE_HEADERS 1 1582 #define ZBX_RETRIEVE_MODE_BOTH 2 1583 1584 zbx_log_value_t *zbx_log_value_dup(const zbx_log_value_t *src); 1585 1586 typedef union 1587 { 1588 zbx_uint64_t ui64; 1589 double dbl; 1590 1591 /* null terminated string */ 1592 char *str; 1593 1594 /* length prefixed (4 bytes) binary data */ 1595 void *bin; 1596 } 1597 zbx_variant_data_t; 1598 1599 typedef struct 1600 { 1601 unsigned char type; 1602 zbx_variant_data_t data; 1603 } 1604 zbx_variant_t; 1605 1606 #define ZBX_VARIANT_NONE 0 1607 #define ZBX_VARIANT_STR 1 1608 #define ZBX_VARIANT_DBL 2 1609 #define ZBX_VARIANT_UI64 3 1610 #define ZBX_VARIANT_BIN 4 1611 1612 void zbx_variant_clear(zbx_variant_t *value); 1613 void zbx_variant_set_none(zbx_variant_t *value); 1614 void zbx_variant_set_str(zbx_variant_t *value, char *text); 1615 void zbx_variant_set_dbl(zbx_variant_t *value, double value_dbl); 1616 void zbx_variant_set_ui64(zbx_variant_t *value, zbx_uint64_t value_ui64); 1617 void zbx_variant_set_bin(zbx_variant_t *value, void *value_bin); 1618 void zbx_variant_copy(zbx_variant_t *value, const zbx_variant_t *source); 1619 int zbx_variant_set_numeric(zbx_variant_t *value, const char *text); 1620 1621 int zbx_variant_convert(zbx_variant_t *value, int type); 1622 const char *zbx_get_variant_type_desc(unsigned char type); 1623 const char *zbx_variant_value_desc(const zbx_variant_t *value); 1624 const char *zbx_variant_type_desc(const zbx_variant_t *value); 1625 1626 int zbx_variant_compare(const zbx_variant_t *value1, const zbx_variant_t *value2); 1627 1628 void *zbx_variant_data_bin_copy(const void *bin); 1629 void *zbx_variant_data_bin_create(const void *data, zbx_uint32_t size); 1630 zbx_uint32_t zbx_variant_data_bin_get(const void *bin, void **data); 1631 1632 int zbx_validate_value_dbl(double value, int dbl_precision); 1633 1634 void zbx_update_env(double time_now); 1635 int zbx_get_agent_item_nextcheck(zbx_uint64_t itemid, const char *delay, unsigned char state, int now, 1636 int refresh_unsupported, int *nextcheck, char **error); 1637 1638 #define ZBX_DATA_SESSION_TOKEN_SIZE (MD5_DIGEST_SIZE * 2) 1639 char *zbx_create_token(zbx_uint64_t seed); 1640 1641 #define ZBX_MAINTENANCE_IDLE 0 1642 #define ZBX_MAINTENANCE_RUNNING 1 1643 1644 #define ZBX_PROBLEM_SUPPRESSED_FALSE 0 1645 #define ZBX_PROBLEM_SUPPRESSED_TRUE 1 1646 1647 int zbx_variant_to_value_type(zbx_variant_t *value, unsigned char value_type, int dbl_precision, char **errmsg); 1648 1649 #if defined(_WINDOWS) || defined(__MINGW32__) 1650 #define ZBX_PCRE_RECURSION_LIMIT 2000 /* assume ~1 MB stack and ~500 bytes per recursion */ 1651 #endif 1652 1653 int zbx_str_extract(const char *text, size_t len, char **value); 1654 1655 #define AUDIT_ACTION_EXECUTE 7 1656 #define AUDIT_RESOURCE_SCRIPT 25 1657 1658 void zbx_md5buf2str(const md5_byte_t *md5, char *str); 1659 int zbx_hex2bin(const unsigned char *p_hex, unsigned char *buf, int buf_len); 1660 1661 int zbx_xmlnode_to_json(void *xml_node, char **jstr); 1662 int zbx_xml_to_json(char *xml_data, char **jstr, char **errmsg); 1663 #ifdef HAVE_LIBXML2 1664 int zbx_open_xml(char *data, int options, int maxerrlen, void **xml_doc, void **root_node, char **errmsg); 1665 int zbx_check_xml_memory(char *mem, int maxerrlen, char **errmsg); 1666 #endif 1667 1668 #endif 1669