| /** @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. |
| */ |
| |
| #pragma once |
| |
| #ifndef tsapi |
| #define tsapi |
| #endif |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif /* __cplusplus */ |
| |
| #define TSREMAP_VMAJOR 3 /* major version number */ |
| #define TSREMAP_VMINOR 0 /* minor version number */ |
| #define TSREMAP_VERSION ((TSREMAP_VMAJOR << 16) | TSREMAP_VMINOR) |
| |
| typedef struct _tsremap_api_info { |
| unsigned long size; /* in: sizeof(struct _tsremap_api_info) */ |
| unsigned long tsremap_version; /* in: TS supported version ((major << 16) | minor) */ |
| } TSRemapInterface; |
| |
| typedef struct _tm_remap_request_info { |
| /* Important: You should *not* release these buf pointers or TSMLocs from your plugin! */ |
| |
| /* these URL mloc's are read only, use normal ts/ts.h APIs for accessing */ |
| TSMLoc mapFromUrl; |
| TSMLoc mapToUrl; |
| |
| /* the request URL mloc and buffer pointers are read-write. You can read and modify the |
| requestUrl using normal ts/ts.h APIs, which is how you change the destination URL. */ |
| TSMLoc requestUrl; |
| |
| /* requestBufp and requestHdrp are the equivalent of calling TSHttpTxnClientReqGet(). */ |
| TSMBuffer requestBufp; |
| TSMLoc requestHdrp; |
| |
| /* 0 - don't redirect, 1 - use the (new)request URL as a redirect */ |
| int redirect; |
| } TSRemapRequestInfo; |
| |
| /* This is the type returned by the TSRemapDoRemap() callback */ |
| typedef enum { |
| TSREMAP_NO_REMAP = 0, /* No remapping was done, continue with next in chain */ |
| TSREMAP_DID_REMAP = 1, /* Remapping was done, continue with next in chain */ |
| TSREMAP_NO_REMAP_STOP = 2, /* No remapping was done, and stop plugin chain evaluation */ |
| TSREMAP_DID_REMAP_STOP = 3, /* Remapping was done, but stop plugin chain evaluation */ |
| |
| /* In the future, the following error codes can also be used: |
| -400 to -499 |
| -500 to -599 |
| .... |
| This would allow a plugin to generate an error page. Right now, |
| setting the return code to any negative number is equivalent to TSREMAP_NO_REMAP */ |
| TSREMAP_ERROR = -1 /* Some error, that should generate an error page */ |
| } TSRemapStatus; |
| |
| /* Status code passed to the plugin by TSRemapPostConfigReload() signaling |
| * (1) if the configuration reload was successful and |
| * (2) if (1) is successful show if the plugin was part of the new configuration */ |
| typedef enum { |
| TSREMAP_CONFIG_RELOAD_FAILURE = 0, /* notify the plugin that configuration parsing failed */ |
| TSREMAP_CONFIG_RELOAD_SUCCESS_PLUGIN_USED = 1, /* configuration parsing succeeded and plugin was used by the new configuration */ |
| TSREMAP_CONFIG_RELOAD_SUCCESS_PLUGIN_UNUSED = |
| 2 /* configuration parsing succeeded but plugin was NOT used by the new configuration */ |
| } TSRemapReloadStatus; |
| |
| /* ---------------------------------------------------------------------------------- |
| These are the entry points a plugin can implement. Note that TSRemapInit() and |
| TSRemapDoRemap() are both required. |
| ---------------------------------------------------------------------------------- |
| */ |
| |
| /* Plugin initialization - called first. |
| Mandatory interface function. |
| Return: TS_SUCCESS |
| TS_ERROR - error, errbuf can include error message from plugin |
| */ |
| tsapi TSReturnCode TSRemapInit(TSRemapInterface *api_info, char *errbuf, int errbuf_size); |
| |
| /* This gets called every time before remap.config is reloaded. This is complementary |
| to TSRemapInit() which gets called when the plugin is first loaded. |
| It is guaranteed to be called before TSRemapInit() and TSRemapNewInstance(). |
| It cannot fail, or cause reload to stop here, it's merely a notification. |
| Optional function. |
| Params: none |
| Return: none |
| */ |
| tsapi void TSRemapPreConfigReload(void); |
| |
| /* This gets called every time afterremap.config is reloaded. This is complementary |
| to TSRemapInit() which gets called when the plugin is first loaded. |
| It is guaranteed to be called after TSRemapInit() and TSRemapNewInstance(). |
| It cannot fail, or cause reload to stop here, it's merely a notification that |
| the (re)load is done and provide a status of its success or failure.. |
| Optional function. |
| Params: reloadStatus - TS_SUCCESS - (re)load was successful, |
| TS_ERROR - (re)load failed. |
| Return: none |
| */ |
| tsapi void TSRemapPostConfigReload(TSRemapReloadStatus reloadStatus); |
| |
| /* Remap new request |
| Mandatory interface function. |
| Remap API plugin can/should use SDK API function calls inside this function! |
| return: TSREMAP_NO_REMAP - No remapping was done, continue with next in chain |
| TSREMAP_DID_REMAP - Remapping was done, continue with next in chain |
| TSREMAP_NO_REMAP_STOP - No remapping was done, and stop plugin chain evaluation |
| TSREMAP_DID_REMAP_STOP - Remapping was done, but stop plugin chain evaluation |
| */ |
| tsapi TSRemapStatus TSRemapDoRemap(void *ih, TSHttpTxn rh, TSRemapRequestInfo *rri); |
| |
| /* Plugin shutdown, called when plugin is unloaded. |
| Optional function. */ |
| tsapi void TSRemapDone(void); |
| |
| /* Plugin new instance. Create new plugin processing entry for unique remap record. |
| First two arguments in argv vector are - fromURL and toURL from remap record. |
| Please keep in mind that fromURL and toURL will be converted to canonical view. |
| Return: TS_SUCCESS |
| TS_ERROR - instance creation error |
| */ |
| tsapi TSReturnCode TSRemapNewInstance(int argc, char *argv[], void **ih, char *errbuf, int errbuf_size); |
| tsapi void TSRemapDeleteInstance(void *); |
| |
| /* Check response code from Origin Server |
| os_response_type -> TSServerState |
| Remap API plugin can use InkAPI function calls inside TSRemapDoRemap() |
| Return: none |
| */ |
| tsapi void TSRemapOSResponse(void *ih, TSHttpTxn rh, int os_response_type); |
| |
| #ifdef __cplusplus |
| } |
| #endif /* __cplusplus */ |