1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
/*
* 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.
*/
#include "utils.h"
#include <string>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <getopt.h>
#include <netinet/in.h>
#include <arpa/inet.h>
void
HttpDebugHeader(TSMBuffer mbuf, TSMLoc mhdr)
{
HttpIoBuffer iobuf;
int64_t nbytes;
int64_t avail;
const char *ptr;
TSIOBufferBlock blk;
TSHttpHdrPrint(mbuf, mhdr, iobuf.buffer);
blk = TSIOBufferReaderStart(iobuf.reader);
avail = TSIOBufferBlockReadAvail(blk, iobuf.reader);
ptr = TSIOBufferBlockReadStart(blk, iobuf.reader, &nbytes);
AuthLogDebug("http request (%u of %u bytes):\n%*.*s", (unsigned)nbytes, (unsigned)avail, (int)nbytes, (int)nbytes, ptr);
}
void
HttpSetMimeHeader(TSMBuffer mbuf, TSMLoc mhdr, const char *name, unsigned value)
{
TSMLoc mloc;
mloc = TSMimeHdrFieldFind(mbuf, mhdr, name, -1);
if (mloc == TS_NULL_MLOC) {
TSReleaseAssert(TSMimeHdrFieldCreateNamed(mbuf, mhdr, name, -1, &mloc) == TS_SUCCESS);
} else {
TSReleaseAssert(TSMimeHdrFieldValuesClear(mbuf, mhdr, mloc) == TS_SUCCESS);
}
TSReleaseAssert(TSMimeHdrFieldValueUintInsert(mbuf, mhdr, mloc, 0 /* index */, value) == TS_SUCCESS);
TSReleaseAssert(TSMimeHdrFieldAppend(mbuf, mhdr, mloc) == TS_SUCCESS);
TSHandleMLocRelease(mbuf, mhdr, mloc);
}
void
HttpSetMimeHeader(TSMBuffer mbuf, TSMLoc mhdr, const char *name, const char *value)
{
TSMLoc mloc;
mloc = TSMimeHdrFieldFind(mbuf, mhdr, name, -1);
if (mloc == TS_NULL_MLOC) {
TSReleaseAssert(TSMimeHdrFieldCreateNamed(mbuf, mhdr, name, -1, &mloc) == TS_SUCCESS);
} else {
TSReleaseAssert(TSMimeHdrFieldValuesClear(mbuf, mhdr, mloc) == TS_SUCCESS);
}
TSReleaseAssert(TSMimeHdrFieldValueStringInsert(mbuf, mhdr, mloc, 0 /* index */, value, -1) == TS_SUCCESS);
TSReleaseAssert(TSMimeHdrFieldAppend(mbuf, mhdr, mloc) == TS_SUCCESS);
TSHandleMLocRelease(mbuf, mhdr, mloc);
}
unsigned
HttpGetContentLength(TSMBuffer mbuf, TSMLoc mhdr)
{
TSMLoc mloc;
unsigned value = 0;
mloc = TSMimeHdrFieldFind(mbuf, mhdr, TS_MIME_FIELD_CONTENT_LENGTH, -1);
if (mloc != TS_NULL_MLOC) {
value = TSMimeHdrFieldValueUintGet(mbuf, mhdr, mloc, 0 /* index */);
}
TSHandleMLocRelease(mbuf, mhdr, mloc);
return value;
}
bool
HttpIsChunkedEncoding(TSMBuffer mbuf, TSMLoc mhdr)
{
TSMLoc mloc;
bool ischunked = false;
mloc = TSMimeHdrFieldFind(mbuf, mhdr, TS_MIME_FIELD_TRANSFER_ENCODING, -1);
if (mloc != TS_NULL_MLOC) {
const char *str;
int len;
str = TSMimeHdrFieldValueStringGet(mbuf, mhdr, mloc, -1 /* index */, &len);
if (str && len) {
ischunked = (strncmp("chunked", str, len) == 0);
}
}
TSHandleMLocRelease(mbuf, mhdr, mloc);
return ischunked;
}
// vim: set ts=4 sw=4 et :
|