Author: bcall
Date: Thu Nov 10 19:37:52 2011
New Revision: 1200498
URL: http://svn.apache.org/viewvc?rev=1200498&view=rev
Log:
Changed the apis to work with apache traffic server 3.0 apis
Modified:
trafficserver/plugins/trunk/buffer_upload/buffer_upload.cc
Modified: trafficserver/plugins/trunk/buffer_upload/buffer_upload.cc
URL:
http://svn.apache.org/viewvc/trafficserver/plugins/trunk/buffer_upload/buffer_upload.cc?rev=1200498&r1=1200497&r2=1200498&view=diff
==============================================================================
--- trafficserver/plugins/trunk/buffer_upload/buffer_upload.cc (original)
+++ trafficserver/plugins/trunk/buffer_upload/buffer_upload.cc Thu Nov 10
19:37:52 2011
@@ -8,7 +8,6 @@
#include <string.h>
#include <ctype.h>
#include <limits.h>
-//#define bool int
#include <ts/ts.h>
#include <sys/types.h>
#include <sys/stat.h>
@@ -17,6 +16,7 @@
#include <pwd.h>
#include <dirent.h>
#include <unistd.h>
+#include <stdlib.h>
#define true 1
#define false 0
@@ -28,28 +28,28 @@
Log macros for error code return verification
**************************************************/
#define PLUGIN_NAME "buffer_upload"
-#define LOG_SET_FUNCTION_NAME(NAME) const char * FUNCTION_NAME = NAME
+//#define LOG_SET_FUNCTION_NAME(NAME) const char * FUNCTION_NAME = NAME
#define LOG_ERROR(API_NAME) { \
- TS_ERROR("%s: %s %s %s File %s, line number %d", PLUGIN_NAME, API_NAME,
"APIFAIL", \
- FUNCTION_NAME, __FILE__, __LINE__); \
+ TSError("%s: %s %s %s File %s, line number %d", PLUGIN_NAME, API_NAME,
"APIFAIL", \
+ __FUNCTION__, __FILE__, __LINE__); \
}
#define LOG_ERROR_AND_RETURN(API_NAME) { \
LOG_ERROR(API_NAME); \
return TS_ERROR; \
}
-#define VALID_PTR(X) ((X != NULL) && (X != TS_ERROR_PTR))
-#define NOT_VALID_PTR(X) ((X == NULL) || (X == TS_ERROR_PTR))
+#define VALID_PTR(X) (X != NULL)
+#define NOT_VALID_PTR(X) (X == NULL)
struct upload_config_t
{
bool use_disk_buffer;
bool convert_url;
- size_t mem_buffer_size;
- size_t chunk_size;
+ int64_t mem_buffer_size;
+ int64_t chunk_size;
char *url_list_file;
- size_t max_url_length;
+ int64_t max_url_length;
int url_num;
char **urls;
char *base_dir;
@@ -76,7 +76,7 @@ struct config_val_ul
void *val;
};
-static TSStat upload_vc_count;
+static int upload_vc_count;
static upload_config *uconfig = NULL;
@@ -104,15 +104,15 @@ struct pvc_state_t
int fd;
char *filename;
- int req_finished;
- int resp_finished;
- int nbytes_to_consume;
- int req_size;
- int size_written;
- int size_read;
+ int64_t req_finished;
+ int64_t resp_finished;
+ int64_t nbytes_to_consume;
+ int64_t req_size;
+ int64_t size_written;
+ int64_t size_read;
- int write_offset;
- int read_offset;
+ int64_t write_offset;
+ int64_t read_offset;
char *chunk_buffer; // buffer to store the data read from disk
int is_reading_from_disk;
@@ -123,33 +123,35 @@ struct pvc_state_t
typedef struct pvc_state_t pvc_state;
// print IOBuffer for test purpose
+/*
static void
print_buffer(TSIOBufferReader reader)
{
TSIOBufferBlock block;
- int size;
+ int64_t size;
const char *ptr;
block = TSIOBufferReaderStart(reader);
- while (block != NULL && block != TS_ERROR_PTR) {
+ while (block != NULL) {
ptr = TSIOBufferBlockReadStart(block, reader, &size);
TSDebug(DEBUG_TAG, "buffer size: %d", size);
TSDebug(DEBUG_TAG, "buffer: %.*s", size, ptr);
block = TSIOBufferBlockNext(block);
}
}
+*/
static int
write_buffer_to_disk(TSIOBufferReader reader, pvc_state * my_state, TSCont
contp)
{
TSIOBufferBlock block;
- int size;
+ int64_t size;
const char *ptr;
char *pBuf;
- LOG_SET_FUNCTION_NAME("write_buffer_to_disk");
+ //LOG_SET_FUNCTION_NAME("write_buffer_to_disk");
block = TSIOBufferReaderStart(reader);
- while (block != NULL && block != TS_ERROR_PTR) {
+ while (block != NULL) {
ptr = TSIOBufferBlockReadStart(block, reader, &size);
pBuf = (char *) TSmalloc(sizeof(char) * size);
if (pBuf == NULL) {
@@ -168,24 +170,25 @@ write_buffer_to_disk(TSIOBufferReader re
static int
call_httpconnect(TSCont contp, pvc_state * my_state)
{
- LOG_SET_FUNCTION_NAME("call_httpconnect");
+ //LOG_SET_FUNCTION_NAME("call_httpconnect");
- unsigned int client_ip = TSHttpTxnClientIPGet(my_state->http_txnp);
+ //unsigned int client_ip = TSHttpTxnClientIPGet(my_state->http_txnp);
+ sockaddr const *client_ip = TSHttpTxnClientAddrGet(my_state->http_txnp);
TSDebug(DEBUG_TAG, "call TSHttpConnect() ...");
- if (TSHttpConnect(htonl(client_ip), 9999, &(my_state->net_vc)) == TS_ERROR) {
+ if ((my_state->net_vc = TSHttpConnect(client_ip)) == NULL) {
LOG_ERROR_AND_RETURN("TSHttpConnect");
}
my_state->p_write_vio = TSVConnWrite(my_state->p_vc, contp,
my_state->resp_reader, INT_MAX);
- if (my_state->p_write_vio == TS_ERROR_PTR) {
+ if (my_state->p_write_vio == NULL) {
LOG_ERROR_AND_RETURN("TSVConnWrite");
}
my_state->n_read_vio = TSVConnRead(my_state->net_vc, contp,
my_state->resp_buffer, INT_MAX);
- if (my_state->n_read_vio == TS_ERROR_PTR) {
+ if (my_state->n_read_vio == NULL) {
LOG_ERROR_AND_RETURN("TSVConnRead");
}
my_state->n_write_vio = TSVConnWrite(my_state->net_vc, contp,
my_state->req_reader, INT_MAX);
- if (my_state->n_write_vio == TS_ERROR_PTR) {
+ if (my_state->n_write_vio == NULL) {
LOG_ERROR_AND_RETURN("TSVConnWrite");
}
return TS_SUCCESS;
@@ -194,38 +197,24 @@ call_httpconnect(TSCont contp, pvc_state
static void
pvc_cleanup(TSCont contp, pvc_state * my_state)
{
- LOG_SET_FUNCTION_NAME("pvc_cleanup");
-
if (my_state->req_buffer) {
- if (TSIOBufferReaderFree(my_state->req_reader) == TS_ERROR) {
- LOG_ERROR("TSIOBufferReaderFree");
- }
+ TSIOBufferReaderFree(my_state->req_reader);
my_state->req_reader = NULL;
- if (TSIOBufferDestroy(my_state->req_buffer) == TS_ERROR) {
- LOG_ERROR("TSIOBufferDestroy");
- }
+ TSIOBufferDestroy(my_state->req_buffer);
my_state->req_buffer = NULL;
}
if (my_state->resp_buffer) {
- if (TSIOBufferReaderFree(my_state->resp_reader) == TS_ERROR) {
- LOG_ERROR("TSIOBufferReaderFree");
- }
+ TSIOBufferReaderFree(my_state->resp_reader);
my_state->resp_reader = NULL;
- if (TSIOBufferDestroy(my_state->resp_buffer) == TS_ERROR) {
- LOG_ERROR("TSIOBufferDestroy");
- }
+ TSIOBufferDestroy(my_state->resp_buffer);
my_state->resp_buffer = NULL;
}
if (my_state->req_hdr_buffer) {
- if (TSIOBufferReaderFree(my_state->req_hdr_reader) == TS_ERROR) {
- LOG_ERROR("TSIOBufferReaderFree");
- }
+ TSIOBufferReaderFree(my_state->req_hdr_reader);
my_state->req_hdr_reader = NULL;
- if (TSIOBufferDestroy(my_state->req_hdr_buffer) == TS_ERROR) {
- LOG_ERROR("TSIOBufferDestroy");
- }
+ TSIOBufferDestroy(my_state->req_hdr_buffer);
my_state->req_hdr_buffer = NULL;
}
@@ -246,26 +235,18 @@ pvc_cleanup(TSCont contp, pvc_state * my
}
TSfree(my_state);
- if (TSContDestroy(contp) == TS_ERROR) {
- LOG_ERROR("TSContDestroy");
- }
+ TSContDestroy(contp);
/* Decrement upload_vc_count */
- TSStatDecrement(upload_vc_count);
+ TSStatIntDecrement(upload_vc_count, 1);
}
static void
pvc_check_done(TSCont contp, pvc_state * my_state)
{
- LOG_SET_FUNCTION_NAME("pvc_check_done");
-
if (my_state->req_finished && my_state->resp_finished) {
- if (TSVConnClose(my_state->p_vc) == TS_ERROR) {
- LOG_ERROR("TSVConnClose");
- }
- if (TSVConnClose(my_state->net_vc) == TS_ERROR) {
- LOG_ERROR("TSVConnClose");
- }
+ TSVConnClose(my_state->p_vc);
+ TSVConnClose(my_state->net_vc);
pvc_cleanup(contp, my_state);
}
}
@@ -273,9 +254,7 @@ pvc_check_done(TSCont contp, pvc_state *
static void
pvc_process_accept(TSCont contp, int event, void *edata, pvc_state * my_state)
{
- LOG_SET_FUNCTION_NAME("pvc_process_accept");
-
- //TSDebug(DEBUG_TAG, "plugin called: pvc_process_accept with event %d",
event);
+ TSDebug(DEBUG_TAG, "plugin called: pvc_process_accept with event %d", event);
if (event == TS_EVENT_NET_ACCEPT) {
my_state->p_vc = (TSVConn) edata;
@@ -284,22 +263,20 @@ pvc_process_accept(TSCont contp, int eve
my_state->req_reader = TSIOBufferReaderAlloc(my_state->req_buffer);
// set the maximum memory buffer size for request (both request header and
post data), default is 32K
// only apply to memory buffer mode
- if (!uconfig->use_disk_buffer &&
TSIOBufferWaterMarkSet(my_state->req_buffer, uconfig->mem_buffer_size) ==
TS_ERROR) {
- LOG_ERROR("TSIOBufferWaterMarkSet");
+ if (uconfig->use_disk_buffer == 0) {
+ TSIOBufferWaterMarkSet(my_state->req_buffer, uconfig->mem_buffer_size);
}
my_state->resp_buffer = TSIOBufferCreate();
my_state->resp_reader = TSIOBufferReaderAlloc(my_state->resp_buffer);
- if ((my_state->req_buffer == TS_ERROR_PTR) || (my_state->req_reader ==
TS_ERROR_PTR)
- || (my_state->resp_buffer == TS_ERROR_PTR) || (my_state->resp_reader
== TS_ERROR_PTR)) {
+ if ((my_state->req_buffer == NULL) || (my_state->req_reader == NULL)
+ || (my_state->resp_buffer == NULL) || (my_state->resp_reader == NULL))
{
LOG_ERROR("TSIOBufferCreate || TSIOBufferReaderAlloc");
- if (TSVConnClose(my_state->p_vc) == TS_ERROR) {
- LOG_ERROR("TSVConnClose");
- }
+ TSVConnClose(my_state->p_vc);
pvc_cleanup(contp, my_state);
} else {
my_state->p_read_vio = TSVConnRead(my_state->p_vc, contp,
my_state->req_buffer, INT_MAX);
- if (my_state->p_read_vio == TS_ERROR_PTR) {
+ if (my_state->p_read_vio == NULL) {
LOG_ERROR("TSVConnRead");
}
}
@@ -313,8 +290,6 @@ pvc_process_accept(TSCont contp, int eve
static void
pvc_process_p_read(TSCont contp, TSEvent event, pvc_state * my_state)
{
- LOG_SET_FUNCTION_NAME("pvc_process_p_read");
- int bytes;
int size, consume_size;
//TSDebug(DEBUG_TAG, "plugin called: pvc_process_p_read with event %d",
event);
@@ -324,7 +299,7 @@ pvc_process_p_read(TSCont contp, TSEvent
// Here we need to replace the server request header with client request
header
// print_buffer(my_state->req_reader);
if (my_state->nbytes_to_consume == -1) { // -1 is the initial value
- TSHttpTxnServerReqHdrBytesGet(my_state->http_txnp,
&(my_state->nbytes_to_consume));
+ my_state->nbytes_to_consume =
TSHttpTxnServerReqHdrBytesGet(my_state->http_txnp);
}
size = TSIOBufferReaderAvail(my_state->req_reader);
if (my_state->nbytes_to_consume > 0) {
@@ -354,7 +329,7 @@ pvc_process_p_read(TSCont contp, TSEvent
TSMutexUnlock(my_state->disk_io_mutex);
} else {
// never get chance to test this line, didn't get a test case to
fall into this situation
- TSIOBufferCopy(my_state->req_hdr_reader, my_state->req_reader, size,
0);
+ TSIOBufferCopy(my_state->req_hdr_buffer, my_state->req_reader, size,
0);
}
TSIOBufferReaderConsume(my_state->req_reader, size);
}
@@ -401,9 +376,7 @@ pvc_process_p_read(TSCont contp, TSEvent
my_state->p_read_vio = NULL;
- if (TSVConnShutdown(my_state->p_vc, 1, 0) == TS_ERROR) {
- LOG_ERROR("TSVConnShutdown");
- }
+ TSVConnShutdown(my_state->p_vc, 1, 0);
// if client aborted the uploading in middle, need to cleanup the file
from disk
if (event == TS_EVENT_VCONN_EOS && uconfig->use_disk_buffer &&
my_state->fd != -1) {
close(my_state->fd);
@@ -422,8 +395,6 @@ pvc_process_p_read(TSCont contp, TSEvent
static void
pvc_process_n_write(TSCont contp, TSEvent event, pvc_state * my_state)
{
- LOG_SET_FUNCTION_NAME("pvc_process_n_write");
- int bytes;
int size;
//TSDebug(DEBUG_TAG, "plugin called: pvc_process_n_write with event %d",
event);
@@ -446,18 +417,14 @@ pvc_process_n_write(TSCont contp, TSEven
break;
case TS_EVENT_ERROR:
if (my_state->p_read_vio) {
- if (TSVConnShutdown(my_state->p_vc, 1, 0) == TS_ERROR) {
- LOG_ERROR("TSVConnShutdown");
- }
+ TSVConnShutdown(my_state->p_vc, 1, 0);
my_state->p_read_vio = NULL;
}
/* FALL THROUGH */
case TS_EVENT_VCONN_WRITE_COMPLETE:
/* We should have already shutdown read pvc side */
TSAssert(my_state->p_read_vio == NULL);
- if (TSVConnShutdown(my_state->net_vc, 0, 1) == TS_ERROR) {
- LOG_ERROR("TSVConnShutdown");
- }
+ TSVConnShutdown(my_state->net_vc, 0, 1);
my_state->req_finished = 1;
if (uconfig->use_disk_buffer && my_state->fd != -1) {
@@ -477,17 +444,12 @@ pvc_process_n_write(TSCont contp, TSEven
static void
pvc_process_n_read(TSCont contp, TSEvent event, pvc_state * my_state)
{
- LOG_SET_FUNCTION_NAME("pvc_process_n_read");
- int bytes;
-
//TSDebug(DEBUG_TAG, "plugin called: pvc_process_n_read with event %d",
event);
switch (event) {
case TS_EVENT_VCONN_READ_READY:
// print_buffer(my_state->resp_reader);
- if (TSVIOReenable(my_state->p_write_vio) == TS_ERROR) {
- LOG_ERROR("TSVIOReenable");
- }
+ TSVIOReenable(my_state->p_write_vio);
break;
case TS_EVENT_VCONN_READ_COMPLETE:
case TS_EVENT_VCONN_EOS:
@@ -503,12 +465,8 @@ pvc_process_n_read(TSCont contp, TSEvent
}
my_state->n_read_vio = NULL;
- if (TSVIONBytesSet(my_state->p_write_vio, ndone) == TS_ERROR) {
- LOG_ERROR("TSVIONBytesSet");
- }
- if (TSVConnShutdown(my_state->net_vc, 1, 0) == TS_ERROR) {
- LOG_ERROR("TSVConnShutdown");
- }
+ TSVIONBytesSet(my_state->p_write_vio, ndone);
+ TSVConnShutdown(my_state->net_vc, 1, 0);
todo = TSVIONTodoGet(my_state->p_write_vio);
if (todo == TS_ERROR) {
@@ -519,14 +477,10 @@ pvc_process_n_read(TSCont contp, TSEvent
if (todo == 0) {
my_state->resp_finished = 1;
- if (TSVConnShutdown(my_state->p_vc, 0, 1) == TS_ERROR) {
- LOG_ERROR("TSVConnShutdown");
- }
+ TSVConnShutdown(my_state->p_vc, 0, 1);
pvc_check_done(contp, my_state);
} else {
- if (TSVIOReenable(my_state->p_write_vio) == TS_ERROR) {
- LOG_ERROR("TSVIOReenable");
- }
+ TSVIOReenable(my_state->p_write_vio);
}
break;
@@ -540,33 +494,24 @@ pvc_process_n_read(TSCont contp, TSEvent
static void
pvc_process_p_write(TSCont contp, TSEvent event, pvc_state * my_state)
{
- LOG_SET_FUNCTION_NAME("pvc_process_p_write");
- int bytes;
-
//TSDebug(DEBUG_TAG, "plugin called: pvc_process_p_write with event %d",
event);
switch (event) {
case TS_EVENT_VCONN_WRITE_READY:
if (my_state->n_read_vio) {
- if (TSVIOReenable(my_state->n_read_vio) == TS_ERROR) {
- LOG_ERROR("TSVIOReenable");
- }
+ TSVIOReenable(my_state->n_read_vio);
}
break;
case TS_EVENT_ERROR:
if (my_state->n_read_vio) {
- if (TSVConnShutdown(my_state->net_vc, 1, 0) == TS_ERROR) {
- LOG_ERROR("INVConnShutdown");
- }
+ TSVConnShutdown(my_state->net_vc, 1, 0);
my_state->n_read_vio = NULL;
}
/* FALL THROUGH */
case TS_EVENT_VCONN_WRITE_COMPLETE:
/* We should have already shutdown read net side */
TSAssert(my_state->n_read_vio == NULL);
- if (TSVConnShutdown(my_state->p_vc, 0, 1) == TS_ERROR) {
- LOG_ERROR("TSVConnShutdown");
- }
+ TSVConnShutdown(my_state->p_vc, 0, 1);
my_state->resp_finished = 1;
pvc_check_done(contp, my_state);
break;
@@ -579,7 +524,8 @@ pvc_process_p_write(TSCont contp, TSEven
static int
pvc_plugin(TSCont contp, TSEvent event, void *edata)
{
- pvc_state *my_state = TSContDataGet(contp);
+ pvc_state *my_state = static_cast<pvc_state*>(TSContDataGet(contp));
+ TSAIOCallback callback = static_cast<TSAIOCallback>(edata);
if (my_state == NULL) {
TSReleaseAssert(!"Unexpected: my_state is NULL");
@@ -598,8 +544,8 @@ pvc_plugin(TSCont contp, TSEvent event,
pvc_process_n_write(contp, event, my_state);
} else if (event == TS_AIO_EVENT_DONE && uconfig->use_disk_buffer) {
TSMutexLock(my_state->disk_io_mutex);
- int size = TSAIONBytesGet(edata);
- char *buf = TSAIOBufGet(edata);
+ int size = TSAIONBytesGet(callback);
+ char *buf = TSAIOBufGet(callback);
if (buf != my_state->chunk_buffer) {
// this TS_AIO_EVENT_DONE event is from TSAIOWrite()
TSDebug(DEBUG_TAG, "aio write size: %d", size);
@@ -624,9 +570,7 @@ pvc_plugin(TSCont contp, TSEvent event,
my_state->fd = -1;
}
my_state->is_reading_from_disk = 0;
- if (TSVIOReenable(my_state->n_write_vio) == TS_ERROR) {
- TS_ERROR("TSVIOReenable");
- }
+ TSVIOReenable(my_state->n_write_vio);
}
TSMutexUnlock(my_state->disk_io_mutex);
@@ -649,8 +593,7 @@ convert_url_func(TSMBuffer req_bufp, TSM
const char *str;
int len, port;
- url_loc = TSHttpHdrUrlGet(req_bufp, req_loc);
- if (NOT_VALID_PTR(url_loc))
+ if (TSHttpHdrUrlGet(req_bufp, req_loc, &url_loc) == TS_ERROR)
return;
char *hostname = (char *) getenv("HOSTNAME");
@@ -662,16 +605,16 @@ convert_url_func(TSMBuffer req_bufp, TSM
// for now we assume the <upload proxy service domain> in the format is the
hostname
// but this needs to be verified later
- if (NOT_VALID_PTR(str) || !strncmp(str, hostname, len) && strlen(hostname)
== len) {
+ if (NOT_VALID_PTR(str) || !strncmp(str, hostname, len) && strlen(hostname)
== (size_t)len) {
char *slash;
char *colon;
- if (VALID_PTR(str))
- TSHandleStringRelease(req_bufp, url_loc, str);
+ //if (VALID_PTR(str))
+ // TSHandleStringRelease(req_bufp, url_loc, str);
str = TSUrlPathGet(req_bufp, url_loc, &len);
slash = strstr(str, "/");
if (slash == NULL) {
- if (VALID_PTR(str))
- TSHandleStringRelease(req_bufp, url_loc, str);
+ //if (VALID_PTR(str))
+ // TSHandleStringRelease(req_bufp, url_loc, str);
TSHandleMLocRelease(req_bufp, req_loc, url_loc);
return;
}
@@ -695,14 +638,14 @@ convert_url_func(TSMBuffer req_bufp, TSM
TSUrlHostSet(req_bufp, url_loc, str, colon - str);
TSUrlPathSet(req_bufp, url_loc, slash + 1, len - (slash - str) - 1);
- if ((field_loc = TSMimeHdrFieldRetrieve(req_bufp, req_loc,
TS_MIME_FIELD_HOST)) != TS_ERROR_PTR &&
+ if ((field_loc = TSMimeHdrFieldFind(req_bufp, req_loc, TS_MIME_FIELD_HOST,
TS_MIME_LEN_HOST)) != TS_NULL_MLOC &&
field_loc != NULL) {
TSMimeHdrFieldValueStringSet(req_bufp, req_loc, field_loc, 0, str, slash
- str);
TSHandleMLocRelease(req_bufp, req_loc, field_loc);
}
} else {
- if (VALID_PTR(str))
- TSHandleStringRelease(req_bufp, url_loc, str);
+ //if (VALID_PTR(str))
+ // TSHandleStringRelease(req_bufp, url_loc, str);
}
TSHandleMLocRelease(req_bufp, req_loc, url_loc);
@@ -711,8 +654,6 @@ convert_url_func(TSMBuffer req_bufp, TSM
static int
attach_pvc_plugin(TSCont contp, TSEvent event, void *edata)
{
- LOG_SET_FUNCTION_NAME("attach_pvc_plugin");
-
TSHttpTxn txnp = (TSHttpTxn) edata;
TSMutex mutex;
TSCont new_cont;
@@ -723,15 +664,12 @@ attach_pvc_plugin(TSCont contp, TSEvent
TSMLoc url_loc;
char *url;
int url_len;
- int value;
- int val_len;
int content_length = 0;
const char *method;
int method_len;
const char *str;
int str_len;
- const char *ptr;
-
+
switch (event) {
case TS_EVENT_HTTP_READ_REQUEST_PRE_REMAP:
@@ -752,35 +690,37 @@ attach_pvc_plugin(TSCont contp, TSEvent
break;
}
// only deal with POST method
- if (method_len != strlen(TS_HTTP_METHOD_POST) || strncasecmp(method,
TS_HTTP_METHOD_POST, method_len) != 0) {
- TSHandleStringRelease(req_bufp, req_loc, method);
+ if (static_cast<size_t>(method_len) != strlen(TS_HTTP_METHOD_POST) ||
strncasecmp(method, TS_HTTP_METHOD_POST, method_len) != 0) {
+ //TSHandleStringRelease(req_bufp, req_loc, method);
TSHandleMLocRelease(req_bufp, TS_NULL_MLOC, req_loc);
break;
}
- TSHandleStringRelease(req_bufp, req_loc, method);
+ //TSHandleStringRelease(req_bufp, req_loc, method);
TSDebug(DEBUG_TAG, "Got POST req");
if (uconfig->url_list_file != NULL) {
TSDebug(DEBUG_TAG, "url_list_file != NULL");
// check against URL list
- url_loc = TSHttpHdrUrlGet(req_bufp, req_loc);
+ if (TSHttpHdrUrlGet(req_bufp, req_loc, &url_loc) == TS_ERROR) {
+ LOG_ERROR("Couldn't get the url");
+ }
str = TSUrlHostGet(req_bufp, url_loc, &str_len);
if (NOT_VALID_PTR(str) || str_len <= 0) {
// reverse proxy mode
field_loc = TSMimeHdrFieldFind(req_bufp, req_loc, TS_MIME_FIELD_HOST,
-1);
if (NOT_VALID_PTR(field_loc)) {
- if (VALID_PTR(str))
- TSHandleStringRelease(req_bufp, url_loc, str);
+ //if (VALID_PTR(str))
+ // TSHandleStringRelease(req_bufp, url_loc, str);
LOG_ERROR("Host field not found.");
TSHandleMLocRelease(req_bufp, req_loc, url_loc);
TSHandleMLocRelease(req_bufp, TS_NULL_MLOC, req_loc);
break;
}
- str = TSMimeHdrFieldValueGet(req_bufp, req_loc, field_loc, 0,
&str_len);
+ str = TSMimeHdrFieldValueStringGet(req_bufp, req_loc, field_loc, 0,
&str_len);
if (NOT_VALID_PTR(str) || str_len <= 0) {
- if (VALID_PTR(str))
- TSHandleStringRelease(req_bufp, field_loc, str);
+ //if (VALID_PTR(str))
+ // TSHandleStringRelease(req_bufp, field_loc, str);
TSHandleMLocRelease(req_bufp, req_loc, field_loc);
TSHandleMLocRelease(req_bufp, req_loc, url_loc);
TSHandleMLocRelease(req_bufp, TS_NULL_MLOC, req_loc);
@@ -794,10 +734,10 @@ attach_pvc_plugin(TSCont contp, TSEvent
TSUrlHostSet(req_bufp, url_loc, str, str_len);
- TSHandleStringRelease(req_bufp, field_loc, str);
+ //TSHandleStringRelease(req_bufp, field_loc, str);
TSHandleMLocRelease(req_bufp, req_loc, field_loc);
} else {
- TSHandleStringRelease(req_bufp, url_loc, str);
+ //TSHandleStringRelease(req_bufp, url_loc, str);
}
int i = uconfig->url_num;
@@ -815,7 +755,7 @@ attach_pvc_plugin(TSCont contp, TSEvent
}
}
- TSHandleStringRelease(req_bufp, url_loc, url);
+ //TSHandleStringRelease(req_bufp, url_loc, url);
}
TSHandleMLocRelease(req_bufp, req_loc, url_loc);
@@ -831,19 +771,21 @@ attach_pvc_plugin(TSCont contp, TSEvent
convert_url_func(req_bufp, req_loc);
}
- if ((field_loc = TSMimeHdrFieldRetrieve(req_bufp, req_loc,
TS_MIME_FIELD_CONTENT_LENGTH)) == TS_ERROR_PTR ||
+ if ((field_loc = TSMimeHdrFieldFind(req_bufp, req_loc,
TS_MIME_FIELD_CONTENT_LENGTH, TS_MIME_LEN_CONTENT_LENGTH)) ||
field_loc == NULL) {
TSHandleMLocRelease(req_bufp, TS_NULL_MLOC, req_loc);
LOG_ERROR("TSMimeHdrFieldRetrieve");
break;
}
- if (TSMimeHdrFieldValueIntGet(req_bufp, req_loc, field_loc, 0, &value) ==
TS_ERROR) {
+ content_length = TSMimeHdrFieldValueIntGet(req_bufp, req_loc, field_loc,
0);
+ /*{
TSHandleMLocRelease(req_bufp, req_loc, field_loc);
TSHandleMLocRelease(req_bufp, TS_NULL_MLOC, req_loc);
LOG_ERROR("TSMimeFieldValueGet");
} else
- content_length = value;
+ */
+ // content_length = value;
mutex = TSMutexCreate();
if (NOT_VALID_PTR(mutex)) {
@@ -898,8 +840,6 @@ attach_pvc_plugin(TSCont contp, TSEvent
LOG_ERROR("TSMutexCreate");
}
- int size;
-
my_state->req_hdr_buffer = TSIOBufferCreate();
my_state->req_hdr_reader = TSIOBufferReaderAlloc(my_state->req_hdr_buffer);
TSHttpHdrPrint(req_bufp, req_loc, my_state->req_hdr_buffer);
@@ -908,7 +848,7 @@ attach_pvc_plugin(TSCont contp, TSEvent
my_state->req_size += TSIOBufferReaderAvail(my_state->req_hdr_reader);
/* Increment upload_vc_count */
- TSStatIncrement(upload_vc_count);
+ TSStatIntIncrement(upload_vc_count, 1);
if (!uconfig->use_disk_buffer && my_state->req_size >
uconfig->mem_buffer_size) {
TSDebug(DEBUG_TAG,
@@ -921,14 +861,7 @@ attach_pvc_plugin(TSCont contp, TSEvent
break;
}
- if (TSContDataSet(new_cont, my_state) == TS_ERROR) {
- LOG_ERROR("TSContDataSet");
-
- pvc_cleanup(new_cont, my_state);
- TSHandleMLocRelease(req_bufp, req_loc, field_loc);
- TSHandleMLocRelease(req_bufp, TS_NULL_MLOC, req_loc);
- break;
- }
+ TSContDataSet(new_cont, my_state);
if (uconfig->use_disk_buffer) {
char path[500];
@@ -960,14 +893,7 @@ attach_pvc_plugin(TSCont contp, TSEvent
TSDebug(DEBUG_TAG, "calling TSHttpTxnIntercept() ...");
- if (TSHttpTxnIntercept(new_cont, txnp) == TS_ERROR) {
- LOG_ERROR("TSHttpTxnIntercept");
-
- pvc_cleanup(new_cont, my_state);
- TSHandleMLocRelease(req_bufp, req_loc, field_loc);
- TSHandleMLocRelease(req_bufp, TS_NULL_MLOC, req_loc);
- break;
- }
+ TSHttpTxnIntercept(new_cont, txnp);
break;
default:
@@ -975,10 +901,7 @@ attach_pvc_plugin(TSCont contp, TSEvent
break;
}
- if (TSHttpTxnReenable(txnp, TS_EVENT_HTTP_CONTINUE) == TS_ERROR) {
- LOG_ERROR_AND_RETURN("TSHttpTxnReenable");
- }
-
+ TSHttpTxnReenable(txnp, TS_EVENT_HTTP_CONTINUE);
return 0;
}
@@ -993,26 +916,26 @@ create_directory()
struct passwd *pwd;
if (getcwd(cwd, 4096) == NULL) {
- TS_ERROR("getcwd fails");
+ TSError("getcwd fails");
return 0;
}
if ((pwd = getpwnam("nobody")) == NULL) {
- TS_ERROR("can't get passwd entry for \"nobody\"");
+ TSError("can't get passwd entry for \"nobody\"");
goto error_out;
}
if (chdir(uconfig->base_dir) < 0) {
if (mkdir(uconfig->base_dir, S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
- TS_ERROR("Unable to enter or create %s", uconfig->base_dir);
+ TSError("Unable to enter or create %s", uconfig->base_dir);
goto error_out;
}
if (chown(uconfig->base_dir, pwd->pw_uid, pwd->pw_gid) < 0) {
- TS_ERROR("Unable to chown %s", uconfig->base_dir);
+ TSError("Unable to chown %s", uconfig->base_dir);
goto error_out;
}
if (chdir(uconfig->base_dir) < 0) {
- TS_ERROR("Unable enter %s", uconfig->base_dir);
+ TSError("Unable enter %s", uconfig->base_dir);
goto error_out;
}
}
@@ -1020,20 +943,20 @@ create_directory()
snprintf(str, 10, "%02X", i);
if (chdir(str) < 0) {
if (mkdir(str, S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
- TS_ERROR("Unable to enter or create %s/%s", uconfig->base_dir, str);
+ TSError("Unable to enter or create %s/%s", uconfig->base_dir, str);
goto error_out;
}
if (chown(str, pwd->pw_uid, pwd->pw_gid) < 0) {
- TS_ERROR("Unable to chown %s", str);
+ TSError("Unable to chown %s", str);
goto error_out;
}
if (chdir(str) < 0) {
- TS_ERROR("Unable to enter %s/%s", uconfig->base_dir, str);
+ TSError("Unable to enter %s/%s", uconfig->base_dir, str);
goto error_out;
}
}
dir = opendir(".");
- while (d = readdir(dir)) {
+ while ((d = readdir(dir))) {
remove(d->d_name);
}
chdir("..");
@@ -1062,7 +985,7 @@ load_urls(char *filename)
for (i = 0; i < 2; i++) {
if ((file = TSfopen(filename, "r")) == NULL) {
TSfree(url_buf);
- TS_ERROR("Fail to open %s", filename);
+ TSError("Fail to open %s", filename);
return;
}
if (i == 0) { //first round
@@ -1112,7 +1035,7 @@ parse_config_line(char *line, const stru
int iv = strtol(tok, &end, 10);
if (end && *end == '\0') {
*((int *) cv->val) = iv;
- TS_ERROR("Parsed int config value %s : %d", cv->str, iv);
+ TSError("Parsed int config value %s : %d", cv->str, iv);
TSDebug(DEBUG_TAG, "Parsed int config value %s : %d", cv->str,
iv);
}
break;
@@ -1122,7 +1045,7 @@ parse_config_line(char *line, const stru
unsigned int uiv = strtoul(tok, &end, 10);
if (end && *end == '\0') {
*((unsigned int *) cv->val) = uiv;
- TS_ERROR("Parsed uint config value %s : %u", cv->str, uiv);
+ TSError("Parsed uint config value %s : %u", cv->str, uiv);
TSDebug(DEBUG_TAG, "Parsed uint config value %s : %u",
cv->str, uiv);
}
break;
@@ -1132,7 +1055,7 @@ parse_config_line(char *line, const stru
long lv = strtol(tok, &end, 10);
if (end && *end == '\0') {
*((long *) cv->val) = lv;
- TS_ERROR("Parsed long config value %s : %ld", cv->str, lv);
+ TSError("Parsed long config value %s : %ld", cv->str, lv);
TSDebug(DEBUG_TAG, "Parsed long config value %s : %ld",
cv->str, lv);
}
break;
@@ -1142,7 +1065,7 @@ parse_config_line(char *line, const stru
unsigned long ulv = strtoul(tok, &end, 10);
if (end && *end == '\0') {
*((unsigned long *) cv->val) = ulv;
- TS_ERROR("Parsed ulong config value %s : %lu", cv->str, ulv);
+ TSError("Parsed ulong config value %s : %lu", cv->str, ulv);
TSDebug(DEBUG_TAG, "Parsed ulong config value %s : %lu",
cv->str, ulv);
}
break;
@@ -1152,7 +1075,7 @@ parse_config_line(char *line, const stru
if (len > 0) {
*((char **) cv->val) = (char *) TSmalloc(len + 1);
strcpy(*((char **) cv->val), tok);
- TS_ERROR("Parsed string config value %s : %s", cv->str, tok);
+ TSError("Parsed string config value %s : %s", cv->str, tok);
TSDebug(DEBUG_TAG, "Parsed string config value %s : %s",
cv->str, tok);
}
break;
@@ -1164,7 +1087,7 @@ parse_config_line(char *line, const stru
*((bool *) cv->val) = true;
else
*((bool *) cv->val) = false;
- TS_ERROR("Parsed bool config value %s : %d", cv->str, *((bool
*) cv->val));
+ TSError("Parsed bool config value %s : %d", cv->str, *((bool
*) cv->val));
TSDebug(DEBUG_TAG, "Parsed bool config value %s : %d",
cv->str, *((bool *) cv->val));
}
break;
@@ -1221,7 +1144,7 @@ read_upload_config(const char *file_name
}
TSfclose(conf_file);
} else {
- TS_ERROR("Failed to open upload config file %s", file_name);
+ TSError("Failed to open upload config file %s", file_name);
// if fail to open config file, use the default config
}
@@ -1249,12 +1172,6 @@ read_upload_config(const char *file_name
void
TSPluginInit(int argc, const char *argv[])
{
- LOG_SET_FUNCTION_NAME("TSPluginInit");
-
- TSMLoc field_loc;
- const char *p;
- int i;
- int c;
TSPluginRegistrationInfo info;
TSCont contp;
char default_filename[1024];
@@ -1269,15 +1186,15 @@ TSPluginInit(int argc, const char *argv[
if (!read_upload_config(conf_filename) || !uconfig) {
if (argc > 1) {
- TS_ERROR("Failed to read upload config %s\n", argv[1]);
+ TSError("Failed to read upload config %s\n", argv[1]);
} else {
- TS_ERROR("No config file specified. Specify conf file in plugin.conf: "
- "'buffer_upload.so /path/to/upload.conf'\n");
+ TSError("No config file specified. Specify conf file in plugin.conf: "
+ "'buffer_upload.so /path/to/upload.conf'\n");
}
}
// set the num of threads for disk AIO
if (TSAIOThreadNumSet(uconfig->thread_num) == TS_ERROR) {
- TS_ERROR("Failed to set thread number.");
+ TSError("Failed to set thread number.");
}
TSDebug(DEBUG_TAG, "uconfig->url_list_file: %s", uconfig->url_list_file);
@@ -1286,31 +1203,22 @@ TSPluginInit(int argc, const char *argv[
TSDebug(DEBUG_TAG, "loaded uconfig->url_list_file, num urls: %d",
uconfig->url_num);
}
- info.plugin_name = "buffer_upload";
- info.vendor_name = "";
- info.support_email = "";
+ info.plugin_name = const_cast<char*>("buffer_upload");
+ info.vendor_name = const_cast<char*>("");
+ info.support_email = const_cast<char*>("");
if (uconfig->use_disk_buffer && !create_directory()) {
- TS_ERROR("Directory creation failed.");
+ TSError("Directory creation failed.");
uconfig->use_disk_buffer = 0;
}
if (!TSPluginRegister(TS_SDK_VERSION_2_0, &info)) {
- TS_ERROR("Plugin registration failed.");
+ TSError("Plugin registration failed.");
}
/* create the statistic variables */
- upload_vc_count = TSStatCreate("upload_vc.count", TSSTAT_TYPE_INT64);
- if (upload_vc_count == TS_ERROR_PTR) {
- LOG_ERROR("TSStatsCreate");
- }
+ upload_vc_count = TSStatCreate("upload_vc.count", TS_RECORDDATATYPE_INT,
TS_STAT_NON_PERSISTENT, TS_STAT_SYNC_SUM);
contp = TSContCreate(attach_pvc_plugin, NULL);
- if (contp == TS_ERROR_PTR) {
- LOG_ERROR("TSContCreate");
- } else {
- if (TSHttpHookAdd(TS_HTTP_READ_REQUEST_PRE_REMAP_HOOK, contp) == TS_ERROR)
{
- LOG_ERROR("TSHttpHookAdd");
- }
- }
+ TSHttpHookAdd(TS_HTTP_READ_REQUEST_PRE_REMAP_HOOK, contp);
}