You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by jp...@apache.org on 2012/05/11 06:01:18 UTC
[11/32] git commit: Initial header modification
Initial header modification
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/79e92e59
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/79e92e59
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/79e92e59
Branch: refs/heads/jpeach/lua
Commit: 79e92e594a6743d8d47d4f4cae16ebd08aef1be4
Parents: 30611e6
Author: James Peach <jp...@apache.org>
Authored: Mon Apr 23 20:15:56 2012 -0700
Committer: James Peach <jp...@apache.org>
Committed: Thu May 10 20:23:43 2012 -0700
----------------------------------------------------------------------
plugins/lua/lapi.cc | 49 +++++++++++++++++++++++++++++++++++++++------
1 files changed, 42 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/79e92e59/plugins/lua/lapi.cc
----------------------------------------------------------------------
diff --git a/plugins/lua/lapi.cc b/plugins/lua/lapi.cc
index 86ea7a3..a621408 100644
--- a/plugins/lua/lapi.cc
+++ b/plugins/lua/lapi.cc
@@ -316,7 +316,6 @@ LuaRemapHeaderIndex(lua_State * lua)
int vlen;
TSMLoc field;
-
hdrs = LuaRemapHeaders::get(lua, 1);;
index = luaL_checkstring(lua, 2);
@@ -336,16 +335,52 @@ LuaRemapHeaderIndex(lua_State * lua)
static int
LuaRemapHeaderNewIndex(lua_State * lua)
{
- const char * index;
- const char * value;
+ LuaRemapHeaders * hdrs;
+ const char * index;
+ const char * value;
+ size_t vlen;
+ TSMLoc field;
- TSAssert(lua_istable(lua, 1));
+ hdrs = LuaRemapHeaders::get(lua, 1);
index = luaL_checkstring(lua, 2);
- value = luaL_checkstring(lua, 3);
- TSDebug("lua", "%s[%s] = %s", __func__, index, value);
+ TSDebug("lua", "%s[%s] = (%s)", __func__, index, LTYPEOF(lua, 3));
+ field = TSMimeHdrFieldFind(hdrs->buffer, hdrs->headers, index, -1);
- lua_pushboolean(lua, 1);
+ // Setting a key to nil means to delete it.
+ if (lua_isnoneornil(lua, 3)) {
+ if (field != TS_NULL_MLOC) {
+ TSMimeHdrFieldDestroy(hdrs->buffer, hdrs->headers, field);
+ TSHandleMLocRelease(hdrs->buffer, hdrs->headers, field);
+ }
+
+ return 1;
+ }
+
+ // If the MIME field doesn't exist yet, we'd better make it.
+ if (field == TS_NULL_MLOC) {
+ TSMimeHdrFieldCreateNamed(hdrs->buffer, hdrs->headers, index, -1, &field);
+ TSMimeHdrFieldAppend(hdrs->buffer, hdrs->headers, field);
+ }
+
+ TSMimeHdrFieldValuesClear(hdrs->buffer, hdrs->headers, field);
+
+ // Finally, we can set it's value.
+ switch(lua_type(lua, 3)) {
+ case LUA_TBOOLEAN:
+ value = lua_toboolean(lua, 3) ? "1" : "0";
+ vlen = 1;
+ break;
+ default:
+ value = lua_tolstring(lua, 3, &vlen);
+ break;
+ }
+
+ if (value) {
+ TSMimeHdrFieldValueStringInsert(hdrs->buffer, hdrs->headers, field, -1, value, vlen);
+ }
+
+ TSHandleMLocRelease(hdrs->buffer, hdrs->headers, field);
return 1;
}