This is an automated email from the ASF dual-hosted git repository. zwoop pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/trafficserver.git
commit af92bb6b18bf3b285f69ce3ea892ff018ab41572 Author: Leif Hedstrom <[email protected]> AuthorDate: Thu Oct 12 20:09:28 2017 -0600 This removes all configuration Element ctor/dtor code --- mgmt/api/APITestCliRemote.cc | 191 ---------- mgmt/api/CfgContextDefs.h | 73 ---- mgmt/api/INKMgmtAPI.cc | 809 ------------------------------------------- mgmt/api/include/mgmtapi.h | 407 +--------------------- 4 files changed, 1 insertion(+), 1479 deletions(-) diff --git a/mgmt/api/APITestCliRemote.cc b/mgmt/api/APITestCliRemote.cc index ba7bf37..7092fbd 100644 --- a/mgmt/api/APITestCliRemote.cc +++ b/mgmt/api/APITestCliRemote.cc @@ -123,28 +123,6 @@ print_err(const char *module, TSMgmtError err) } } -/*-------------------------------------------------------------- - * print_ports - *--------------------------------------------------------------*/ -void -print_ports(TSPortList list) -{ - int i, count; - TSPortEle *port_ele; - - count = TSPortListLen(list); - for (i = 0; i < count; i++) { - port_ele = TSPortListDequeue(list); - printf(" %d \n", port_ele->port_a); - if (port_ele->port_b != -1) { - printf(" %d - %d \n", port_ele->port_a, port_ele->port_b); - } - TSPortListEnqueue(list, port_ele); - } - - return; -} - /*------------------------------------------------------------- * print_string_list *-------------------------------------------------------------*/ @@ -188,175 +166,6 @@ print_int_list(TSIntList list) printf("Int List: %s \n", buf); } -/*------------------------------------------------------- - * print_domain_list - *-------------------------------------------------------*/ -void -print_domain_list(TSDomainList list) -{ - int i, count; - TSDomain *proxy; - - count = TSDomainListLen(list); - for (i = 0; i < count; i++) { - proxy = TSDomainListDequeue(list); - if (proxy->domain_val) { - printf("%s:%d\n", proxy->domain_val, proxy->port); - } - TSDomainListEnqueue(list, proxy); - } -} - -void -print_ip_addr_ele(TSIpAddrEle *ele) -{ - if (!ele) { - return; - } - - if (ele->type == TS_IP_RANGE) { - if (ele->cidr_a != -1) { - printf("IP_addr: %s/%d - %s/%d\n", ele->ip_a, ele->cidr_a, ele->ip_b, ele->cidr_b); - } else { - printf("IP_addr: %s - %s\n", ele->ip_a, ele->ip_b); - } - } else { - if (ele->cidr_a != -1) { - printf("IP_addr: %s/%d \n", ele->ip_a, ele->cidr_a); - } else { - printf("IP_addr: %s \n", ele->ip_a); - } - } -} - -/*------------------------------------------------------- - * print_ip_list - *-------------------------------------------------------*/ -void -print_ip_list(TSIpAddrList list) -{ - int i, count; - TSIpAddrEle *ele; - - count = TSIpAddrListLen(list); - for (i = 0; i < count; i++) { - ele = TSIpAddrListDequeue(list); - print_ip_addr_ele(ele); - - TSIpAddrListEnqueue(list, ele); - } -} - -/*------------------------------------------------------- - * print_list_of_ip_list - *-------------------------------------------------------*/ -void -print_list_of_ip_list(TSList list) -{ - int i, count; - TSIpAddrList ele; - - count = TSIpAddrListLen(list); - for (i = 0; i < count; i++) { - ele = TSListDequeue(list); - printf("\n"); - print_ip_list(ele); - printf("\n"); - TSListEnqueue(list, ele); - } -} - -/*------------------------------------------------------- - * print_pd_sspec - *-------------------------------------------------------*/ -void -print_pd_sspec(TSPdSsFormat info) -{ - switch (info.pd_type) { - case TS_PD_DOMAIN: - printf("Prime Dest: dest_domain=%s\n", info.pd_val); - break; - case TS_PD_HOST: - printf("Prime Host: dest_host=%s\n", info.pd_val); - break; - case TS_PD_IP: - printf("Prime IP: dest_ip=%s\n", info.pd_val); - break; - case TS_PD_URL_REGEX: - printf("Prime Url regex: url_regex=%s\n", info.pd_val); - break; - case TS_PD_URL: - printf("Prime Url: url=%s\n", info.pd_val); - break; - default: - break; - } - - printf("Secondary Specifiers:\n"); - printf("\ttime: %d:%d-%d:%d\n", info.sec_spec.time.hour_a, info.sec_spec.time.min_a, info.sec_spec.time.hour_b, - info.sec_spec.time.min_b); - - if (info.sec_spec.src_ip) { - printf("\tsrc_ip: %s\n", info.sec_spec.src_ip); - } - - if (info.sec_spec.prefix) { - printf("\tprefix: %s\n", info.sec_spec.prefix); - } - - if (info.sec_spec.suffix) { - printf("\tsuffix: %s\n", info.sec_spec.suffix); - } - - printf("\tport-a: %d\n", info.sec_spec.port->port_a); - printf("\tport-b: %d\n", info.sec_spec.port->port_b); - - printf("\tmethod: "); - switch (info.sec_spec.method) { - case TS_METHOD_NONE: - printf("NONE"); - break; - case TS_METHOD_GET: - printf("GET"); - break; - case TS_METHOD_POST: - printf("POST"); - break; - case TS_METHOD_PUT: - printf("PUT"); - break; - case TS_METHOD_TRACE: - printf("TRACE"); - break; - case TS_METHOD_UNDEFINED: - printf("UNDEFINED"); - break; - default: - // Handled here: - // TS_METHOD_PUSH - break; - } - printf("\n"); - - printf("\tscheme: "); - switch (info.sec_spec.scheme) { - case TS_SCHEME_NONE: - printf("NONE\n"); - break; - case TS_SCHEME_HTTP: - printf("HTTP\n"); - break; - case TS_SCHEME_HTTPS: - printf("HTTPS\n"); - break; - case TS_SCHEME_UNDEFINED: - printf("UNDEFINED\n"); - break; - } - - return; -} - /*************************************************************************** * Control Testing ***************************************************************************/ diff --git a/mgmt/api/CfgContextDefs.h b/mgmt/api/CfgContextDefs.h deleted file mode 100644 index 90d984a..0000000 --- a/mgmt/api/CfgContextDefs.h +++ /dev/null @@ -1,73 +0,0 @@ -/** @file - - A brief file description - - @section license License - - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -/*************************************************************************** - * Type Definitions - ***************************************************************************/ -#ifndef _MGMT_API_DEFS_ -#define _MGMT_API_DEFS_ - -#include "mgmtapi.h" -#include "ts/ink_llqueue.h" - -// for buffer used temporarily to parse incoming commands. -#ifndef MAX_BUF_SIZE -#define MAX_BUF_SIZE 4098 -#endif - -#ifndef MAX_FILE_SIZE -#define MAX_FILE_SIZE 4098 -#endif - -#ifndef MAX_RULE_SIZE -#define MAX_RULE_SIZE 1024 -#endif - -#define NUM_SEC_SPECS 8 - -#define DELIMITER '#' -#define DELIMITER_STR "#" -#define RANGE_DELIMITER '-' -#define RANGE_DELIMITER_STR "- " -#define CIDR_DELIMITER '/' -#define CIDR_DELIMITER_STR "/" -#define IP_END_DELIMITER "#" -#define LIST_DELIMITER ", " - -/* Each opaque List handle in the mgmtapi should have - * a corresponding typedef here. Using LLQ's to implement the - * lists - */ -typedef LLQ PortList; -typedef LLQ IpAddrList; -typedef LLQ DomainList; -typedef LLQ StringList; - -/* INKCommentEle only used internally by the CfgContext */ -/* should this be defined in CfgContextUtils.h ?? */ -typedef struct { - TSCfgEle cfg_ele; - char *comment; -} INKCommentEle; - -#endif diff --git a/mgmt/api/INKMgmtAPI.cc b/mgmt/api/INKMgmtAPI.cc index 50ab43b..25bcb85 100644 --- a/mgmt/api/INKMgmtAPI.cc +++ b/mgmt/api/INKMgmtAPI.cc @@ -42,9 +42,6 @@ #include "ts/TextBuffer.h" -// forward declarations -void init_pdss_format(TSPdSsFormat &info); - /*************************************************************************** * API Memory Management ***************************************************************************/ @@ -167,280 +164,6 @@ TSListIsValid(TSList l) return true; } -/*--- TSIpAddrList operations -------------------------------------------------*/ -tsapi TSIpAddrList -TSIpAddrListCreate(void) -{ - return (void *)create_queue(); /* this queue will be a list of IpAddrEle* */ -} - -tsapi void -TSIpAddrListDestroy(TSIpAddrList ip_addrl) -{ - TSIpAddrEle *ipaddr_ele; - - if (!ip_addrl) { - return; - } - - /* dequeue each element and free it; - currently, an element can only be an TSIpAddrEle - or it can be an TSIpAddr ?? */ - while (!queue_is_empty((LLQ *)ip_addrl)) { - ipaddr_ele = (TSIpAddrEle *)dequeue((LLQ *)ip_addrl); - - if (!ipaddr_ele) { - continue; - } - - TSIpAddrEleDestroy(ipaddr_ele); - } - - /* we have removed everything on the list so free list */ - delete_queue((LLQ *)ip_addrl); - return; -} - -tsapi TSMgmtError -TSIpAddrListEnqueue(TSIpAddrList ip_addrl, TSIpAddrEle *ip_addr) -{ - int ret; - - ink_assert(ip_addrl && ip_addr); - if (!ip_addrl || !ip_addr) { - return TS_ERR_PARAMS; - } - - ret = enqueue((LLQ *)ip_addrl, ip_addr); - if (ret == 0) { - return TS_ERR_FAIL; - } else { - return TS_ERR_OKAY; - } -} - -/* The the TSIpAddrEle returned is actually removed from the end of list */ -tsapi TSIpAddrEle * -TSIpAddrListDequeue(TSIpAddrList ip_addrl) -{ - ink_assert(ip_addrl); - if (!ip_addrl || queue_is_empty((LLQ *)ip_addrl)) { - return nullptr; - } - - return (TSIpAddrEle *)dequeue((LLQ *)ip_addrl); -} - -tsapi int -TSIpAddrListLen(TSIpAddrList ip_addrl) -{ - ink_assert(ip_addrl); - if (!ip_addrl) { - return -1; - } - - return queue_len((LLQ *)ip_addrl); -} - -tsapi bool -TSIpAddrListIsEmpty(TSIpAddrList ip_addrl) -{ - ink_assert(ip_addrl); - if (!ip_addrl) { - return true; - } - - return queue_is_empty((LLQ *)ip_addrl); -} - -/*--- TSPortList operations ----------------------------------------------*/ -tsapi TSPortList -TSPortListCreate() -{ - return (void *)create_queue(); /* this queue will be a list of TSPortEle* */ -} - -tsapi void -TSPortListDestroy(TSPortList portl) -{ - TSPortEle *port_ele; - - if (!portl) { - return; - } - // dequeue each element and free it - while (!queue_is_empty((LLQ *)portl)) { - port_ele = (TSPortEle *)dequeue((LLQ *)portl); - - if (!port_ele) { - continue; - } - - TSPortEleDestroy(port_ele); - } - - /* we have removed everything on the list so free list */ - delete_queue((LLQ *)portl); - return; -} - -tsapi TSMgmtError -TSPortListEnqueue(TSPortList portl, TSPortEle *port) -{ - int ret; - - ink_assert(portl && port); - if (!portl || !port) { - return TS_ERR_PARAMS; - } - - ret = enqueue((LLQ *)portl, port); /* returns TRUE=1 or FALSE=0 */ - if (ret == 0) { - return TS_ERR_FAIL; - } else { - return TS_ERR_OKAY; - } -} - -tsapi TSPortEle * -TSPortListDequeue(TSPortList portl) -{ - ink_assert(portl); - if (!portl || queue_is_empty((LLQ *)portl)) { - return nullptr; - } - - return (TSPortEle *)dequeue((LLQ *)portl); -} - -tsapi int -TSPortListLen(TSPortList portl) -{ - ink_assert(portl); - if (!portl) { - return -1; - } - - return queue_len((LLQ *)portl); -} - -tsapi bool -TSPortListIsEmpty(TSPortList portl) -{ - ink_assert(portl); - if (!portl) { - return true; - } - - return queue_is_empty((LLQ *)portl); -} - -/*--- TSDomainList operations -----------------------------------------*/ -tsapi TSDomainList -TSDomainListCreate() -{ - return (void *)create_queue(); /* this queue will be a list of char* */ -} - -tsapi void -TSDomainListDestroy(TSDomainList domainl) -{ - TSDomain *domain; - - if (!domainl) { - return; - } - - /* dequeue each element and free it */ - while (!queue_is_empty((LLQ *)domainl)) { - domain = (TSDomain *)dequeue((LLQ *)domainl); - - if (!domain) { - continue; - } - - TSDomainDestroy(domain); - } - - delete_queue((LLQ *)domainl); -} - -tsapi TSMgmtError -TSDomainListEnqueue(TSDomainList domainl, TSDomain *domain) -{ - int ret; - - ink_assert(domainl && domain); - if (!domainl || !domain) { - return TS_ERR_PARAMS; - } - - ret = enqueue((LLQ *)domainl, domain); /* returns TRUE=1 or FALSE=0 */ - if (ret == 0) { - return TS_ERR_FAIL; - } else { - return TS_ERR_OKAY; - } -} - -tsapi TSDomain * -TSDomainListDequeue(TSDomainList domainl) -{ - ink_assert(domainl); - if (!domainl || queue_is_empty((LLQ *)domainl)) { - return nullptr; - } - - return (TSDomain *)dequeue((LLQ *)domainl); -} - -tsapi bool -TSDomainListIsEmpty(TSDomainList domainl) -{ - ink_assert(domainl); - if (!domainl) { - return true; - } - - return queue_is_empty((LLQ *)domainl); -} - -tsapi int -TSDomainListLen(TSDomainList domainl) -{ - ink_assert(domainl); - if (!domainl) { - return -1; - } - - return queue_len((LLQ *)domainl); -} - -// returns false if encounter a NULL hostname and ip -tsapi bool -TSDomainListIsValid(TSDomainList domainl) -{ - int i, len; - TSDomain *dom; - - if (!domainl) { - return false; - } - - len = queue_len((LLQ *)domainl); - for (i = 0; i < len; i++) { - dom = (TSDomain *)dequeue((LLQ *)domainl); - if (!dom) { - return false; - } - if (!dom->domain_val) { - return false; - } - enqueue((LLQ *)domainl, dom); - } - return true; -} - /*--- TSStringList operations --------------------------------------*/ tsapi TSStringList TSStringListCreate() @@ -638,25 +361,6 @@ TSIntListIsValid(TSIntList intl, int min, int max) return true; } -// helper fn that sets default values for the info passed in -void -init_pdss_format(TSPdSsFormat &info) -{ - info.pd_type = TS_PD_UNDEFINED; - info.pd_val = nullptr; - info.sec_spec.active = 0; - info.sec_spec.time.hour_a = 0; - info.sec_spec.time.min_a = 0; - info.sec_spec.time.hour_b = 0; - info.sec_spec.time.min_b = 0; - info.sec_spec.src_ip = TS_INVALID_IP_ADDR; - info.sec_spec.prefix = nullptr; - info.sec_spec.suffix = nullptr; - info.sec_spec.port = TS_INVALID_PORT; - info.sec_spec.method = TS_METHOD_UNDEFINED; - info.sec_spec.scheme = TS_SCHEME_UNDEFINED; -} - /*--- allocate/deallocate operations --------------------------------------*/ tsapi TSMgmtEvent * TSEventCreate(void) @@ -706,519 +410,6 @@ TSRecordEleDestroy(TSRecordEle *ele) return; } -tsapi TSIpAddrEle * -TSIpAddrEleCreate(void) -{ - TSIpAddrEle *ele = (TSIpAddrEle *)ats_malloc(sizeof(TSIpAddrEle)); - - /* set default values */ - ele->type = TS_IP_UNDEFINED; - ele->ip_a = TS_INVALID_IP_ADDR; - ele->cidr_a = TS_INVALID_IP_CIDR; - ele->port_a = TS_INVALID_PORT; - ele->ip_b = TS_INVALID_IP_ADDR; - ele->cidr_b = TS_INVALID_IP_CIDR; - ele->port_b = TS_INVALID_PORT; - return ele; -} - -tsapi void -TSIpAddrEleDestroy(TSIpAddrEle *ele) -{ - if (ele) { - ats_free(ele->ip_a); - ats_free(ele->ip_b); - ats_free(ele); - } - - return; -} - -tsapi TSPortEle * -TSPortEleCreate(void) -{ - TSPortEle *ele = (TSPortEle *)ats_malloc(sizeof(TSPortEle)); - - ele->port_a = TS_INVALID_PORT; - ele->port_b = TS_INVALID_PORT; - - return ele; -} - -tsapi void -TSPortEleDestroy(TSPortEle *ele) -{ - ats_free(ele); - return; -} - -tsapi TSDomain * -TSDomainCreate() -{ - TSDomain *ele = (TSDomain *)ats_malloc(sizeof(TSDomain)); - - ele->domain_val = nullptr; - ele->port = TS_INVALID_PORT; - - return ele; -} - -tsapi void -TSDomainDestroy(TSDomain *ele) -{ - if (ele) { - ats_free(ele->domain_val); - ats_free(ele); - } -} - -tsapi TSSspec * -TSSspecCreate(void) -{ - TSSspec *sec_spec = (TSSspec *)ats_malloc(sizeof(TSSspec)); - - /* set defaults */ - sec_spec->active = 0; - (sec_spec->time).hour_a = 0; - (sec_spec->time).min_a = 0; - (sec_spec->time).hour_b = 0; - (sec_spec->time).min_b = 0; - sec_spec->src_ip = TS_INVALID_IP_ADDR; - sec_spec->prefix = nullptr; - sec_spec->suffix = nullptr; - sec_spec->port = nullptr; - sec_spec->method = TS_METHOD_UNDEFINED; - sec_spec->scheme = TS_SCHEME_UNDEFINED; - return sec_spec; -} - -tsapi void -TSSspecDestroy(TSSspec *ele) -{ - if (ele) { - ats_free(ele->prefix); - ats_free(ele->suffix); - if (ele->port) { - TSPortEleDestroy(ele->port); - } - ats_free(ele); - } - return; -} - -tsapi TSPdSsFormat * -TSPdSsFormatCreate(void) -{ - TSPdSsFormat *ele = (TSPdSsFormat *)ats_malloc(sizeof(TSPdSsFormat)); - - /* should set default values here */ - ele->pd_type = TS_PD_UNDEFINED; - ele->pd_val = nullptr; - - ele->sec_spec.active = 0; - (ele->sec_spec.time).hour_a = -1; - (ele->sec_spec.time).min_a = -1; - (ele->sec_spec.time).hour_b = -1; - (ele->sec_spec.time).min_b = -1; - ele->sec_spec.src_ip = TS_INVALID_IP_ADDR; - ele->sec_spec.prefix = nullptr; - ele->sec_spec.suffix = nullptr; - ele->sec_spec.port = nullptr; - ele->sec_spec.method = TS_METHOD_UNDEFINED; - ele->sec_spec.scheme = TS_SCHEME_UNDEFINED; - - return ele; -} - -tsapi void -TSPdSsFormatDestroy(TSPdSsFormat &ele) -{ - ats_free(ele.pd_val); - ats_free(ele.sec_spec.src_ip); - ats_free(ele.sec_spec.prefix); - ats_free(ele.sec_spec.suffix); - if (ele.sec_spec.port) { - TSPortEleDestroy(ele.sec_spec.port); - } -} - -/*------------------------------------------------------------- - * CacheObj - *-------------------------------------------------------------*/ -tsapi TSCacheEle * -TSCacheEleCreate(TSRuleTypeT type) -{ - TSCacheEle *ele; - - if (type != TS_CACHE_NEVER && type != TS_CACHE_IGNORE_NO_CACHE && type != TS_CACHE_IGNORE_CLIENT_NO_CACHE && - type != TS_CACHE_IGNORE_SERVER_NO_CACHE && type != TS_CACHE_PIN_IN_CACHE && type != TS_CACHE_REVALIDATE && - type != TS_CACHE_TTL_IN_CACHE && type != TS_CACHE_AUTH_CONTENT && type != TS_TYPE_UNDEFINED) { - return nullptr; // invalid type - } - - ele = (TSCacheEle *)ats_malloc(sizeof(TSCacheEle)); - - /* set defaults */ - ele->cfg_ele.type = type; - ele->cfg_ele.error = TS_ERR_OKAY; - init_pdss_format(ele->cache_info); - ele->time_period.d = 0; - ele->time_period.h = 0; - ele->time_period.m = 0; - ele->time_period.s = 0; - - return ele; -} - -tsapi void -TSCacheEleDestroy(TSCacheEle *ele) -{ - if (ele) { - TSPdSsFormatDestroy(ele->cache_info); - ats_free(ele); - } - return; -} - -/*------------------------------------------------------------- - * CongestionObj - *-------------------------------------------------------------*/ -// FIXME: for now use defaults specified in feature spec; the -// defaults though are configurable as records, so should use -// records values instead -tsapi TSCongestionEle * -TSCongestionEleCreate() -{ - TSCongestionEle *ele = (TSCongestionEle *)ats_malloc(sizeof(TSCongestionEle)); - - /* set defaults */ - ele->cfg_ele.type = TS_CONGESTION; - ele->cfg_ele.error = TS_ERR_OKAY; - // init_pdss_format(ele->congestion_info); - ele->pd_type = TS_PD_UNDEFINED; - ele->pd_val = nullptr; - ele->prefix = nullptr; - ele->port = TS_INVALID_PORT; - ele->scheme = TS_HTTP_CONGEST_PER_IP; - ele->max_connection_failures = 5; - ele->fail_window = 120; - ele->proxy_retry_interval = 10; - ele->client_wait_interval = 300; - ele->wait_interval_alpha = 30; - ele->live_os_conn_timeout = 60; - ele->live_os_conn_retries = 2; - ele->dead_os_conn_timeout = 15; - ele->dead_os_conn_retries = 1; - ele->max_connection = -1; - ele->error_page_uri = ats_strdup("congestion#retryAfter"); - - return ele; -} - -tsapi void -TSCongestionEleDestroy(TSCongestionEle *ele) -{ - if (ele) { - ats_free(ele->pd_val); - ats_free(ele->prefix); - ats_free(ele->error_page_uri); - ats_free(ele); - } - return; -} - -/*------------------------------------------------------------- - * HostingObj - *-------------------------------------------------------------*/ -tsapi TSHostingEle * -TSHostingEleCreate() -{ - TSHostingEle *ele = (TSHostingEle *)ats_malloc(sizeof(TSHostingEle)); - - ele->cfg_ele.type = TS_HOSTING; - ele->cfg_ele.error = TS_ERR_OKAY; - ele->pd_type = TS_PD_UNDEFINED; - ele->pd_val = nullptr; - ele->volumes = TS_INVALID_LIST; - - return ele; -} - -tsapi void -TSHostingEleDestroy(TSHostingEle *ele) -{ - if (ele) { - ats_free(ele->pd_val); - if (ele->volumes) { - TSIntListDestroy(ele->volumes); - } - ats_free(ele); - } - return; -} - -/*------------------------------------------------------------- - * TSIpAllowEle - *-------------------------------------------------------------*/ -tsapi TSIpAllowEle * -TSIpAllowEleCreate() -{ - TSIpAllowEle *ele = (TSIpAllowEle *)ats_malloc(sizeof(TSIpAllowEle)); - - ele->cfg_ele.type = TS_IP_ALLOW; - ele->cfg_ele.error = TS_ERR_OKAY; - ele->src_ip_addr = TS_INVALID_IP_ADDR; - ele->action = TS_IP_ALLOW_UNDEFINED; - - return ele; -} - -tsapi void -TSIpAllowEleDestroy(TSIpAllowEle *ele) -{ - if (ele) { - if (ele->src_ip_addr) { - TSIpAddrEleDestroy(ele->src_ip_addr); - } - ats_free(ele); - } - return; -} - -/*------------------------------------------------------------- - * TSParentProxyEleCreate - *-------------------------------------------------------------*/ -tsapi TSParentProxyEle * -TSParentProxyEleCreate(TSRuleTypeT type) -{ - TSParentProxyEle *ele; - - if (type != TS_PP_PARENT && type != TS_PP_GO_DIRECT && type != TS_TYPE_UNDEFINED) { - return nullptr; - } - - ele = (TSParentProxyEle *)ats_malloc(sizeof(TSParentProxyEle)); - - ele->cfg_ele.type = type; - ele->cfg_ele.error = TS_ERR_OKAY; - init_pdss_format(ele->parent_info); - ele->rr = TS_RR_NONE; - ele->proxy_list = TS_INVALID_LIST; - ele->direct = false; - - return ele; -} - -tsapi void -TSParentProxyEleDestroy(TSParentProxyEle *ele) -{ - if (ele) { - TSPdSsFormatDestroy(ele->parent_info); - if (ele->proxy_list) { - TSDomainListDestroy(ele->proxy_list); - } - ats_free(ele); - } - - return; -} - -/*------------------------------------------------------------- - * TSVolumeEle - *-------------------------------------------------------------*/ -tsapi TSVolumeEle * -TSVolumeEleCreate() -{ - TSVolumeEle *ele = (TSVolumeEle *)ats_malloc(sizeof(TSVolumeEle)); - - ele->cfg_ele.type = TS_VOLUME; - ele->cfg_ele.error = TS_ERR_OKAY; - ele->volume_num = 0; - ele->scheme = TS_VOLUME_UNDEFINED; - ele->volume_size = 0; - ele->size_format = TS_SIZE_FMT_UNDEFINED; - - return ele; -} - -tsapi void -TSVolumeEleDestroy(TSVolumeEle *ele) -{ - ats_free(ele); - return; -} - -/*------------------------------------------------------------- - * TSPluginEle - *-------------------------------------------------------------*/ -tsapi TSPluginEle * -TSPluginEleCreate() -{ - TSPluginEle *ele = (TSPluginEle *)ats_malloc(sizeof(TSPluginEle)); - - ele->cfg_ele.type = TS_PLUGIN; - ele->cfg_ele.error = TS_ERR_OKAY; - ele->name = nullptr; - ele->args = TS_INVALID_LIST; - - return ele; -} - -tsapi void -TSPluginEleDestroy(TSPluginEle *ele) -{ - if (ele) { - ats_free(ele->name); - if (ele->args) { - TSStringListDestroy(ele->args); - } - ats_free(ele); - } - return; -} - -/*------------------------------------------------------------- - * TSRemapEle - *-------------------------------------------------------------*/ -TSRemapEle * -TSRemapEleCreate(TSRuleTypeT type) -{ - TSRemapEle *ele; - - if (type != TS_REMAP_MAP && type != TS_REMAP_REVERSE_MAP && type != TS_REMAP_REDIRECT && type != TS_REMAP_REDIRECT_TEMP && - type != TS_TYPE_UNDEFINED) { - return nullptr; - } - - ele = (TSRemapEle *)ats_malloc(sizeof(TSRemapEle)); - ele->cfg_ele.type = type; - ele->cfg_ele.error = TS_ERR_OKAY; - ele->map = true; - ele->from_scheme = TS_SCHEME_UNDEFINED; - ele->from_host = nullptr; - ele->from_port = TS_INVALID_PORT; - ele->from_path_prefix = nullptr; - ele->to_scheme = TS_SCHEME_UNDEFINED; - ele->to_host = nullptr; - ele->to_port = TS_INVALID_PORT; - ele->to_path_prefix = nullptr; - - return ele; -} - -void -TSRemapEleDestroy(TSRemapEle *ele) -{ - if (ele) { - ats_free(ele->from_host); - ats_free(ele->from_path_prefix); - ats_free(ele->to_host); - ats_free(ele->to_path_prefix); - ats_free(ele); - } -} - -/*------------------------------------------------------------- - * TSSocksEle - *-------------------------------------------------------------*/ -TSSocksEle * -TSSocksEleCreate(TSRuleTypeT type) -{ - TSSocksEle *ele = (TSSocksEle *)ats_malloc(sizeof(TSSocksEle)); - - ele->cfg_ele.type = type; - ele->cfg_ele.error = TS_ERR_OKAY; - ele->ip_addrs = TS_INVALID_LIST; - ele->dest_ip_addr = TS_INVALID_IP_ADDR; - ele->socks_servers = TS_INVALID_LIST; - ele->rr = TS_RR_NONE; - ele->username = nullptr; - ele->password = nullptr; - - return ele; -} - -void -TSSocksEleDestroy(TSSocksEle *ele) -{ - if (ele) { - if (ele->ip_addrs) { - TSIpAddrListDestroy(ele->ip_addrs); - } - if (ele->dest_ip_addr) { - TSIpAddrEleDestroy(ele->dest_ip_addr); - } - if (ele->socks_servers) { - TSDomainListDestroy(ele->socks_servers); - } - ats_free(ele->username); - ats_free(ele->password); - ats_free(ele); - } -} - -/*------------------------------------------------------------- - * TSSplitDnsEle - *-------------------------------------------------------------*/ -TSSplitDnsEle * -TSSplitDnsEleCreate() -{ - TSSplitDnsEle *ele = (TSSplitDnsEle *)ats_malloc(sizeof(TSSplitDnsEle)); - - ele->cfg_ele.type = TS_SPLIT_DNS; - ele->cfg_ele.error = TS_ERR_OKAY; - ele->pd_type = TS_PD_UNDEFINED; - ele->pd_val = nullptr; - ele->dns_servers_addrs = TS_INVALID_LIST; - ele->def_domain = nullptr; - ele->search_list = TS_INVALID_LIST; - - return ele; -} - -void -TSSplitDnsEleDestroy(TSSplitDnsEle *ele) -{ - if (ele) { - ats_free(ele->pd_val); - if (ele->dns_servers_addrs) { - TSDomainListDestroy(ele->dns_servers_addrs); - } - ats_free(ele->def_domain); - if (ele->search_list) { - TSDomainListDestroy(ele->search_list); - } - ats_free(ele); - } - return; -} - -/*------------------------------------------------------------- - * TSStorageEle - *-------------------------------------------------------------*/ -TSStorageEle * -TSStorageEleCreate() -{ - TSStorageEle *ele = (TSStorageEle *)ats_malloc(sizeof(TSStorageEle)); - - ele->cfg_ele.type = TS_STORAGE; - ele->cfg_ele.error = TS_ERR_OKAY; - ele->pathname = nullptr; - ele->size = -1; - - return ele; -} - -void -TSStorageEleDestroy(TSStorageEle *ele) -{ - if (ele) { - ats_free(ele->pathname); - ats_free(ele); - } - return; -} - /*************************************************************************** * API Core ***************************************************************************/ diff --git a/mgmt/api/include/mgmtapi.h b/mgmt/api/include/mgmtapi.h index 6dbea26..7f1be29 100644 --- a/mgmt/api/include/mgmtapi.h +++ b/mgmt/api/include/mgmtapi.h @@ -118,9 +118,6 @@ typedef char *TSIpAddr; typedef void *TSHandle; typedef TSHandle TSList; -typedef TSHandle TSIpAddrList; /* contains TSIpAddrEle *'s */ -typedef TSHandle TSPortList; /* conatins TSPortEle *'s */ -typedef TSHandle TSDomainList; /* contains TSDomain *'s */ typedef TSHandle TSStringList; /* contains char* 's */ typedef TSHandle TSIntList; /* contains int* 's */ @@ -173,95 +170,7 @@ typedef enum { TS_REC_UNDEFINED, } TSRecordT; -typedef enum { - TS_IP_SINGLE, /* single ip address */ - TS_IP_RANGE, /* range ip address, eg. 1.1.1.1-2.2.2.2 */ - TS_IP_UNDEFINED -} TSIpAddrT; - -typedef enum { - TS_CON_TCP, /* TCP connection */ - TS_CON_UDP, /* UDP connection */ - TS_CON_UNDEFINED -} TSConnectT; - -typedef enum /* primary destination types */ -{ TS_PD_DOMAIN, /* domain name */ - TS_PD_HOST, /* hostname */ - TS_PD_IP, /* ip address */ - TS_PD_URL_REGEX, /* regular expression in url */ - TS_PD_URL, /* regular expression in url */ - TS_PD_UNDEFINED } TSPrimeDestT; - -typedef enum /* header information types */ -{ TS_HDR_DATE, - TS_HDR_HOST, - TS_HDR_COOKIE, - TS_HDR_CLIENT_IP, - TS_HDR_UNDEFINED } TSHdrT; - -/* TODO: This should be removed */ -typedef enum /* access privileges to news articles cached by Traffic Server */ -{ TS_IP_ALLOW_ALLOW, - TS_IP_ALLOW_DENY, - TS_IP_ALLOW_UNDEFINED } TSIpAllowT; - -typedef enum /* multicast time to live options */ -{ TS_MC_TTL_SINGLE_SUBNET, /* forward multicast datagrams to single subnet */ - TS_MC_TTL_MULT_SUBNET, /* deliver multicast to more than one subnet */ - TS_MC_TTL_UNDEFINED } TSMcTtlT; - -typedef enum /* methods of specifying groups of clients */ -{ TS_CLIENT_GRP_IP, /* ip range */ - TS_CLIENT_GRP_DOMAIN, /* domain */ - TS_CLIENT_GRP_HOSTNAME, /* hostname */ - TS_CLIENT_GRP_UNDEFINED } TSClientGroupT; - -typedef enum { - TS_RR_TRUE, /* go through parent cache list in round robin */ - TS_RR_STRICT, /* Traffic Server machines serve requests striclty in turn */ - TS_RR_FALSE, /* no round robin selection */ - TS_RR_NONE, /* no round-robin action tag specified */ - TS_RR_UNDEFINED -} TSRrT; - -typedef enum /* a request URL method; used in Secondary Specifiers */ -{ TS_METHOD_NONE, - TS_METHOD_GET, - TS_METHOD_POST, - TS_METHOD_PUT, - TS_METHOD_TRACE, - TS_METHOD_PUSH, - TS_METHOD_UNDEFINED } TSMethodT; - -typedef enum /* possible URL schemes */ -{ TS_SCHEME_NONE, - TS_SCHEME_HTTP, - TS_SCHEME_HTTPS, - TS_SCHEME_UNDEFINED } TSSchemeT; - -typedef enum /* possible schemes to divide volume by */ -{ TS_VOLUME_HTTP, - TS_VOLUME_UNDEFINED } TSVolumeSchemeT; - -/* specifies how size is specified */ -typedef enum { - TS_SIZE_FMT_PERCENT, /* as a percentage */ - TS_SIZE_FMT_ABSOLUTE, /* as an absolute value */ - TS_SIZE_FMT_UNDEFINED, -} TSSizeFormatT; - -typedef enum { - TS_HTTP_CONGEST_PER_IP, - TS_HTTP_CONGEST_PER_HOST, - TS_HTTP_CONGEST_UNDEFINED, -} TSCongestionSchemeT; - -typedef enum { - TS_PROTOCOL_DNS, - TS_PROTOCOL_UNDEFINED, -} TSProtocolT; - +/* ToDo: This should be moved over to the core, into the GenericParser.h */ typedef enum { TS_FNAME_CACHE_OBJ, /* cache.config */ TS_FNAME_CONGESTION, /* congestion.config */ @@ -280,39 +189,6 @@ typedef enum { TS_FNAME_UNDEFINED } TSFileNameT; -/* Each rule type within a file has its own enumeration. - * Need this enumeration because it's possible there are different Ele's used - * for rule types within the same file - */ -typedef enum { - TS_CACHE_NEVER, /* cache.config */ - TS_CACHE_IGNORE_NO_CACHE, - TS_CACHE_IGNORE_CLIENT_NO_CACHE, - TS_CACHE_IGNORE_SERVER_NO_CACHE, - TS_CACHE_PIN_IN_CACHE, - TS_CACHE_REVALIDATE, - TS_CACHE_TTL_IN_CACHE, - TS_CACHE_AUTH_CONTENT, - TS_CONGESTION, /* congestion.config */ - TS_HOSTING, /* hosting.config */ - TS_IP_ALLOW, /* ip_allow.config */ - TS_PP_PARENT, /* parent.config */ - TS_PP_GO_DIRECT, - TS_VOLUME, /* volume.config */ - TS_PLUGIN, /* plugin.config */ - TS_REMAP_MAP, /* remap.config */ - TS_REMAP_REVERSE_MAP, - TS_REMAP_REDIRECT, - TS_REMAP_REDIRECT_TEMP, - TS_SOCKS_BYPASS, /* socks.config */ - TS_SOCKS_AUTH, - TS_SOCKS_MULTIPLE, - TS_SPLIT_DNS, /* splitdns.config */ - TS_STORAGE, /* storage.config */ - TS_TYPE_UNDEFINED, - TS_TYPE_COMMENT /* for internal use only */ -} TSRuleTypeT; - /* These are initialization options for the Init() function. */ typedef enum { TS_MGMT_OPT_DEFAULTS = 0, @@ -329,17 +205,7 @@ typedef enum { * Structures ***************************************************************************/ -/*--- general -------------------------------------------------------------*/ - -typedef struct { - int d; /* days */ - int h; /* hours */ - int m; /* minutes */ - int s; /* seconds */ -} TSHmsTime; - /*--- records -------------------------------------------------------------*/ - typedef union { /* record value */ TSInt int_val; TSCounter counter_val; @@ -404,202 +270,9 @@ typedef struct { /*unsigned long timestamp; */ /* only applies to active events */ } TSActiveEvent; -/*--- abstract file operations --------------------------------------------*/ - -typedef struct { - TSIpAddrT type; /* single ip or an ip-range */ - TSIpAddr ip_a; /* first ip */ - int cidr_a; /* CIDR value, 0 if not defined */ - int port_a; /* port, 0 if not defined */ - TSIpAddr ip_b; /* second ip (if ip-range) */ - int cidr_b; /* CIDR value, 0 if not defined */ - int port_b; /* port, 0 if not defined */ -} TSIpAddrEle; - -typedef struct { - int port_a; /* first port */ - int port_b; /* second port (0 if not a port range) */ -} TSPortEle; - -typedef struct { - char *domain_val; /* a server name can be specified by name or IP address */ - /* used for www.host.com:8080 or 11.22.33.44:8000 */ - int port; /* (optional) */ -} TSDomain; - -/* there are a variety of secondary specifiers that can be used in a rule; more than - * one secondary specifier can be used per rule, but a secondary specifier can only - * be used once per rule (eg. time, src_ip, prefix, suffix, port, method, scheme) - */ -typedef struct { - uint32_t active; /* valid field: TS_SSPEC_xxx */ - struct { /* time range */ - int hour_a; - int min_a; - int hour_b; - int min_b; - } time; - TSIpAddr src_ip; /* client/source ip */ - char *prefix; /* prefix in path part of URL */ - char *suffix; /* suffix in the URL */ - TSPortEle *port; /* requested URL port */ - TSMethodT method; /* get, post, put, trace */ - TSSchemeT scheme; /* HTTP */ -} TSSspec; /* Sspec = Secondary Specifier */ - -typedef struct { - TSPrimeDestT pd_type; /* primary destination type: TS_PD_xxx */ - char *pd_val; /* primary destination value; refers to the requested domain name, - host name, ip address, or regular expression to - be found in a URL */ - TSSspec sec_spec; /* secondary specifier */ -} TSPdSsFormat; /* PdSs = Primary Destination Secondary Specifier */ - -/* Generic Ele struct which is used as first member in all other Ele structs. - * The TSCfgContext operations deal with TSCfgEle* type, so must typecast - * all Ele's to an TSCfgEle* - */ -typedef struct { - TSRuleTypeT type; - TSMgmtError error; -} TSCfgEle; - -/* cache.config */ -typedef struct { - TSCfgEle cfg_ele; - TSPdSsFormat cache_info; /* general PdSs information */ - TSHmsTime time_period; /* only valid if cache_act == TS_CACHE_PIN_IN_CACHE */ -} TSCacheEle; - -/* congestion.config */ -typedef struct { - TSCfgEle cfg_ele; - TSPrimeDestT pd_type; - char *pd_val; - char *prefix; /* optional */ - int port; /* optional */ - TSCongestionSchemeT scheme; /* per_ip or per_host */ - int max_connection_failures; - int fail_window; - int proxy_retry_interval; - int client_wait_interval; - int wait_interval_alpha; - int live_os_conn_timeout; - int live_os_conn_retries; - int dead_os_conn_timeout; - int dead_os_conn_retries; - int max_connection; - char *error_page_uri; -} TSCongestionEle; - -/* hosting.config */ -typedef struct { - TSCfgEle cfg_ele; - TSPrimeDestT pd_type; - char *pd_val; /* domain or hostname */ - TSIntList volumes; /* must be a list of ints */ -} TSHostingEle; - -/* ip_allow.config */ -typedef struct { - TSCfgEle cfg_ele; - TSIpAddrEle *src_ip_addr; /* source ip address (single or range) */ - TSIpAllowT action; -} TSIpAllowEle; - -/* parent.config */ -typedef struct { - TSCfgEle cfg_ele; - TSPdSsFormat parent_info; /* general PdSs information */ - TSRrT rr; /* possible values are TS_RRT_TRUE (go through proxy - parent list in round robin),TS_RRT_STRICT (server - requests striclty in turn), or TS_RRT_FALSE (no - round robin selection) */ - TSDomainList proxy_list; /* ordered list of parent proxies */ - bool direct; /* indicate if go directly to origin server, default = false and does - not bypass parent heirarchies */ -} TSParentProxyEle; /* exactly one of rr or parent_proxy_act must be defined */ - -/* volume.config */ -typedef struct { - TSCfgEle cfg_ele; - int volume_num; /* must be in range 1 - 255 */ - TSVolumeSchemeT scheme; /* http */ - int volume_size; /* >= 128 MB, multiple of 128 */ - TSSizeFormatT size_format; /* percentage or absolute */ -} TSVolumeEle; - -/* plugin.config */ -typedef struct { - TSCfgEle cfg_ele; - char *name; /* name of plugin */ - TSStringList args; /* list of arguments */ -} TSPluginEle; - -/* remap.config */ -typedef struct { - TSCfgEle cfg_ele; - bool map; /* if true: map, if false: remap */ - TSSchemeT from_scheme; /* http, https, <scheme>://<host>:<port>/<path_prefix> */ - char *from_host; /* from host */ - int from_port; /* from port (can be 0) */ - char *from_path_prefix; /* from path_prefix (can be NULL) */ - TSSchemeT to_scheme; - char *to_host; /* to host */ - int to_port; /* to port (can be 0) */ - char *to_path_prefix; /* to path_prefix (can be NULL) */ -} TSRemapEle; - -/* socks.config */ -/* TSqa10915: supports two rules types - the first rule type specifies the - IP addresses of origin servers that TS should bypass SOCKS and access - directly (this is when ip_addrs is used); the second rule - type specifies which SOCKS servers to use for the addresses specified - in dest_ip_addr; so this means that either ip_addrs is specified OR - dest_ip_addr/socks_servers/rr are */ -typedef struct { - TSCfgEle cfg_ele; - TSIpAddrList ip_addrs; /* list of ip addresses to bypass SOCKS server (TS_SOCKS_BYPASS) */ - TSIpAddrEle *dest_ip_addr; /* ip address(es) that will use the socks server - specified in parent_list (TS_SOCKS_MULTIPLE rule) */ - TSDomainList socks_servers; /* ordered list of SOCKS servers (TS_SOCKS_MULTIPLE rule) */ - TSRrT rr; /* possible values are TS_RRT_TRUE (go through proxy - parent list in round robin),TS_RRT_STRICT (server - requests striclty in turn), or TS_RRT_FALSE (no - round robin selection) (TS_SOCKS_MULTIPLE rule) */ - char *username; /* used for TS_SOCKS_AUTH rule */ - char *password; /* used for TS_SOCKS_AUTH rule */ -} TSSocksEle; - -/* splitdns.config */ -typedef struct { - TSCfgEle cfg_ele; - TSPrimeDestT pd_type; /* TS_PD_DOMAIN, TS_PD_HOST, TS_PD_URL_REGEX only */ - char *pd_val; /* primary destination value */ - TSDomainList dns_servers_addrs; /* list of dns servers */ - char *def_domain; /* (optional) default domain name (can be NULL) */ - TSDomainList search_list; /* (optinal) domain search list (can be INVALID) */ -} TSSplitDnsEle; - -/* storage.config */ -typedef struct { - TSCfgEle cfg_ele; - char *pathname; /* the name of a disk partition, directory, or file */ - int size; /* size of the named pathname (in bytes); optional if raw disk partitions */ -} TSStorageEle; - -/* rmserver.cfg */ -typedef struct { - TSCfgEle cfg_ele; - char *Vname; - char *str_val; - int int_val; -} TSRmServerEle; - /*************************************************************************** * Function Types ***************************************************************************/ - typedef void (*TSEventSignalFunc)(char *name, char *msg, int pri, void *data); typedef void (*TSDisconnectFunc)(void *data); @@ -630,23 +303,6 @@ tsapi bool TSListIsEmpty(TSList l); tsapi int TSListLen(TSList l); /* returns -1 if list is invalid */ tsapi bool TSListIsValid(TSList l); -/*--- TSIpAddrList operations --------------------------------------------*/ -tsapi TSIpAddrList TSIpAddrListCreate(); -tsapi void TSIpAddrListDestroy(TSIpAddrList ip_addrl); -tsapi TSMgmtError TSIpAddrListEnqueue(TSIpAddrList ip_addrl, TSIpAddrEle *ip_addr); -tsapi TSIpAddrEle *TSIpAddrListDequeue(TSIpAddrList ip_addrl); -tsapi int TSIpAddrListLen(TSIpAddrList ip_addrl); -tsapi bool TSIpAddrListIsEmpty(TSIpAddrList ip_addrl); -tsapi int TSIpAddrListLen(TSIpAddrList ip_addrl); - -/*--- TSPortList operations ----------------------------------------------*/ -tsapi TSPortList TSPortListCreate(); -tsapi void TSPortListDestroy(TSPortList portl); -tsapi TSMgmtError TSPortListEnqueue(TSPortList portl, TSPortEle *port); -tsapi TSPortEle *TSPortListDequeue(TSPortList portl); -tsapi bool TSPortListIsEmpty(TSPortList portl); -tsapi int TSPortListLen(TSPortList portl); - /*--- TSStringList operations --------------------------------------------*/ tsapi TSStringList TSStringListCreate(); tsapi void TSStringListDestroy(TSStringList strl); @@ -665,71 +321,10 @@ tsapi bool TSIntListIsEmpty(TSIntList intl); tsapi int TSIntListLen(TSIntList intl); tsapi bool TSIntListIsValid(TSIntList intl, int min, int max); -/*--- TSDomainList operations --------------------------------------------*/ -tsapi TSDomainList TSDomainListCreate(); -tsapi void TSDomainListDestroy(TSDomainList domainl); -tsapi TSMgmtError TSDomainListEnqueue(TSDomainList domainl, TSDomain *domain); -tsapi TSDomain *TSDomainListDequeue(TSDomainList domainl); -tsapi bool TSDomainListIsEmpty(TSDomainList domainl); -tsapi int TSDomainListLen(TSDomainList domainl); -tsapi bool TSDomainListIsValid(TSDomainList domainl); - -/*--- allocate/deallocate operations -------------------------------------*/ -/* NOTE: - * 1) Default values for TSxxEleCreate functions: - * - for all lists, default value is TS_INVALID_LIST. NO memory is - * allocated for an Ele's list type member. The user must - * explicity call the TSxxListCreate() function to initialize it. - * - for char*'s and TSIpAddr the default is NULL (or TS_INVALID_IP_ADDR - * for TSIpAddr's); user must assign allocated memory to initialize any - * string or TSIpAddr members of an TSxxxEle - * - * 2) An Ele corresponds to a rule type in a file; this is why each Ele has an - * TSRuleType to identify which type of rule it corresponds to. - * For config files which only have one rule type, we can easily set the - * rule type of the Ele in the EleCreate function since there's only one possible - * option. However, note that for those config files with more than one rule - * type, we cannot set the rule type in the EleCreate function since - * we don't know which rule type the Ele corresponds to yet. Thus, the user must - * specify the TSRuleTypeT when he/she creates the Ele. - */ - tsapi TSMgmtEvent *TSEventCreate(); tsapi void TSEventDestroy(TSMgmtEvent *event); tsapi TSRecordEle *TSRecordEleCreate(); tsapi void TSRecordEleDestroy(TSRecordEle *ele); -tsapi TSIpAddrEle *TSIpAddrEleCreate(); -tsapi void TSIpAddrEleDestroy(TSIpAddrEle *ele); -tsapi TSPortEle *TSPortEleCreate(); -tsapi void TSPortEleDestroy(TSPortEle *ele); -tsapi TSDomain *TSDomainCreate(); -tsapi void TSDomainDestroy(TSDomain *ele); -tsapi TSSspec *TSSspecCreate(); -tsapi void TSSspecDestroy(TSSspec *ele); -tsapi TSPdSsFormat *TSPdSsFormatCreate(); -tsapi void TSPdSsFormatDestroy(TSPdSsFormat &ele); -tsapi TSCacheEle *TSCacheEleCreate(TSRuleTypeT type); -tsapi void TSCacheEleDestroy(TSCacheEle *ele); -tsapi TSCongestionEle *TSCongestionEleCreate(); -tsapi void TSCongestionEleDestroy(TSCongestionEle *ele); -tsapi TSHostingEle *TSHostingEleCreate(); -tsapi void TSHostingEleDestroy(TSHostingEle *ele); -tsapi TSIpAllowEle *TSIpAllowEleCreate(); -tsapi void TSIpAllowEleDestroy(TSIpAllowEle *ele); -tsapi TSParentProxyEle *TSParentProxyEleCreate(TSRuleTypeT type); -tsapi void TSParentProxyEleDestroy(TSParentProxyEle *ele); -tsapi TSVolumeEle *TSVolumeEleCreate(); -tsapi void TSVolumeEleDestroy(TSVolumeEle *ele); -tsapi TSPluginEle *TSPluginEleCreate(); -tsapi void TSPluginEleDestroy(TSPluginEle *ele); -tsapi TSRemapEle *TSRemapEleCreate(TSRuleTypeT type); -tsapi void TSRemapEleDestroy(TSRemapEle *ele); -tsapi TSSocksEle *TSSocksEleCreate(TSRuleTypeT type); -tsapi void TSSocksEleDestroy(TSSocksEle *ele); -tsapi TSSplitDnsEle *TSSplitDnsEleCreate(); -tsapi void TSSplitDnsEleDestroy(TSSplitDnsEle *ele); -tsapi TSStorageEle *TSStorageEleCreate(); -tsapi void TSStorageEleDestroy(TSStorageEle *ele); /*************************************************************************** * API Core -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
