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()TSMLoc parent で作成された TSMLoc mloc を解放します。TSMLoc がトランザクションから取得された場合は parent TSMLoc を持っていません。定数 TS_NULL_MLOC を parent として使用してください。

戻り値

TSMBufferDestroy()TSHandleMLocRelease() は 成功時に TS_SUCCESS を返し、失敗時には TS_ERROR を返します。TSMBufferCreate() は新しい 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)