void HttpManager::Event( ALLEGRO_EVENT* e ) { std::string eventUrl; if( e->type == ALLEGRO_EVENT_HTTP ) { eventUrl.clear(); eventUrl.append( (char*)e->user.data1 ); for( int i = 0; i < urlDownloading.size(); i++ ) { if( *urlDownloading.at(i) == eventUrl ) { urlDownloading.erase( urlDownloading.begin() + i ); break; } } #ifdef WRITE_LOG printf( "DownloadManager: Queue Length: %d; Download Count: %d\n", urlList.size(), urlDownloading.size() ); #endif } while( urlDownloading.size() < urlDownloads && urlList.size() > 0 ) { urlDownloading.push_back( urlList.front() ); get_http_page( (char*)urlList.front()->c_str() ); urlList.pop_front(); #ifdef WRITE_LOG printf( "DownloadManager: Queue Length: %d; Download Count: %d\n", urlList.size(), urlDownloading.size() ); #endif } }
int WEB_PAGE_GET(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) { char hostname[MAX_STRING_LEN]; char path[MAX_STRING_LEN]; char port_str[8]; char buffer[MAX_BUFFER_LEN]; if (num_param(param) > 3) return SYSINFO_RET_FAIL; if (0 != get_param(param, 1, hostname, sizeof(hostname))) return SYSINFO_RET_FAIL; if (0 != get_param(param, 2, path, sizeof(path))) *path = '\0'; if (0 != get_param(param, 3, port_str, sizeof(port_str)) || '\0' == *port_str) zbx_snprintf(port_str, sizeof(port_str), "%d", ZBX_DEFAULT_HTTP_PORT); else if (FAIL == is_uint(port_str)) return SYSINFO_RET_FAIL; if (SYSINFO_RET_OK == get_http_page(hostname, path, (unsigned short)atoi(port_str), buffer, sizeof(buffer))) { zbx_rtrim(buffer, "\r\n"); SET_TEXT_RESULT(result, strdup(buffer)); } else SET_TEXT_RESULT(result, strdup("EOF")); return SYSINFO_RET_OK; }
int WEB_PAGE_PERF(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) { char hostname[MAX_STRING_LEN]; char path[MAX_STRING_LEN]; char port_str[8]; double start_time; if (num_param(param) > 3) return SYSINFO_RET_FAIL; if (0 != get_param(param, 1, hostname, sizeof(hostname))) return SYSINFO_RET_FAIL; if (0 != get_param(param, 2, path, sizeof(path))) *path = '\0'; if (0 != get_param(param, 3, port_str, sizeof(port_str)) || '\0' == *port_str) zbx_snprintf(port_str, sizeof(port_str), "%d", ZBX_DEFAULT_HTTP_PORT); else if (FAIL == is_uint(port_str)) return SYSINFO_RET_FAIL; start_time = zbx_time(); if (SYSINFO_RET_OK == get_http_page(hostname, path, (unsigned short)atoi(port_str), NULL, 0)) { SET_DBL_RESULT(result, zbx_time() - start_time); } else SET_DBL_RESULT(result, 0.0); return SYSINFO_RET_OK; }
int WEB_PAGE_REGEXP(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result) { char hostname[MAX_STRING_LEN]; char path[MAX_STRING_LEN]; char port_str[8]; char regexp[MAX_STRING_LEN]; char len_str[16]; char back[MAX_BUFFER_LEN]; char *buffer = NULL, *found; int len, found_len; if (num_param(param) > 5) return SYSINFO_RET_FAIL; if (0 != get_param(param, 1, hostname, sizeof(hostname))) return SYSINFO_RET_FAIL; if (0 != get_param(param, 2, path, sizeof(path))) *path = '\0'; if (0 != get_param(param, 3, port_str, sizeof(port_str)) || '\0' == *port_str) zbx_snprintf(port_str, sizeof(port_str), "%d", ZBX_DEFAULT_HTTP_PORT); else if (FAIL == is_uint(port_str)) return SYSINFO_RET_FAIL; if (0 != get_param(param, 4, regexp, sizeof(regexp))) return SYSINFO_RET_FAIL; if (0 != get_param(param, 5, len_str, sizeof(len_str)) || '\0' == *len_str) zbx_snprintf(len_str, sizeof(len_str), "%d", MAX_BUFFER_LEN - 1); else if (FAIL == is_uint(len_str)) return SYSINFO_RET_FAIL; buffer = zbx_malloc(buffer, ZBX_MAX_WEBPAGE_SIZE); if (SYSINFO_RET_OK == get_http_page(hostname, path, (unsigned short)atoi(port_str), buffer, ZBX_MAX_WEBPAGE_SIZE)) { if (NULL != (found = zbx_regexp_match(buffer, regexp, &found_len))) { len = atoi(len_str) + 1; len = MIN(len, found_len + 1); len = MIN(len, sizeof(back)); zbx_strlcpy(back, found, len); SET_STR_RESULT(result, strdup(back)); } else SET_STR_RESULT(result, strdup("EOF")); } else SET_STR_RESULT(result, strdup("EOF")); zbx_free(buffer); return SYSINFO_RET_OK; }