TSMBufferCreate

Traffic Server marshall buffer API.

概要

#include <ts/ts.h>
TSMBuffer TSMBufferCreate(void)
TSReturnCode TSMBufferDestroy(TSMBuffer bufp)
TSReturnCode TSHandleMLocRelease(TSMBuffer bufp, TSMLoc parent, TSMLoc mloc)

解説

マーシャルバッファー すなわち TSMBuffer はパースされた URL 、MIME ヘッダー、HTTP ヘッダーを格納するヒープデータ構造です。マーシャルバッファーの外で新しいオブジェクトを割り当て、その値をマーシャルバッファー内で変更することができます。オブジェクトを操作するときにはいつでも、オブジェクト (TSMLoc) のハンドルとオブジェクトを含んでいるマーシャルバッファー (TSMBuffer) が必要になります。

Any marshal buffer fetched by transaction getters will be used by other parts of the system. Be careful not to destroy these shared, transaction marshal buffers.

TSMBufferCreate() は新しいマーシャルバッファーを作成し参照数を初期化します。TSMBufferDestroy() は参照数を無視してマーシャルバッファー bufp を破棄します。マーシャルバッファーに紐付けられた内部データバッファーがマーシャルバッファーによって割り当てられていた場合はそれも破棄されます。

TSHandleMLocRelease() Releases the TSMLoc mloc created from the TSMLoc parent. If a TSMLoc is obtained from a transaction, it does not have a parent TSMLoc. Use the the constant TS_NULL_MLOC as its parent.

戻り値

TSMBufferDestroy() and TSHandleMLocRelease() return TS_SUCCESS on success, or TS_ERROR on failure. TSMBufferCreate() returns the new TSMBuffer.

#include <ts/ts.h>

static void
copyResponseMimeHdr (TSCont pCont, TSHttpTxn pTxn)
{
    TSMBuffer respHdrBuf, tmpBuf;
    TSMLoc respHttpHdrLoc, tmpMimeHdrLoc;

    if (!TSHttpTxnClientRespGet(pTxn, &respHdrBuf, &respHttpHdrLoc)) {
        TSError("couldn't retrieve client response header0);
        TSHandleMLocRelease(respHdrBuf, TS_NULL_MLOC, respHttpHdrLoc);
        goto done;
    }

    tmpBuf = TSMBufferCreate();
    tmpMimeHdrLoc = TSMimeHdrCreate(tmpBuf);
    TSMimeHdrCopy(tmpBuf, tmpMimeHdrLoc, respHdrBuf, respHttpHdrLoc);
    TSHandleMLocRelease(tmpBuf, TS_NULL_MLOC, tmpMimeHdrLoc);
    TSHandleMLocRelease(respHdrBuf, TS_NULL_MLOC, respHttpHdrLoc);
    TSMBufferDestroy(tmpBuf);

done:
    TSHttpTxnReenable(pTxn, TS_EVENT_HTTP_CONTINUE);
}

参考

TSAPI(3ts)