From c92c41523caac58abe3cc884d8d13c1a048e2a43 Mon Sep 17 00:00:00 2001 From: zhengchao Date: Sun, 11 Nov 2018 17:14:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dcachekey=E7=94=9F=E6=88=90?= =?UTF-8?q?=E8=BF=87=E7=A8=8B=E4=B8=AD=E8=A7=A3=E6=9E=90cookie=E7=9A=84bug?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/pangu/pangu_ctrl.json | 2 +- .../pangu-http/src/pangu_web_cache.cpp | 82 ++++++++++++------- 2 files changed, 52 insertions(+), 32 deletions(-) diff --git a/conf/pangu/pangu_ctrl.json b/conf/pangu/pangu_ctrl.json index 9f20c5d..f7ee135 100644 --- a/conf/pangu/pangu_ctrl.json +++ b/conf/pangu/pangu_ctrl.json @@ -176,7 +176,7 @@ "table_name": "PXY_CACHE_HTTP_URL", "table_type": "string", "table_content": { - "keywords": "mesalab.com", + "keywords": "mesalab.cn", "expr_type": "none", "match_method": "sub", "format": "uncase plain" diff --git a/plugin/business/pangu-http/src/pangu_web_cache.cpp b/plugin/business/pangu-http/src/pangu_web_cache.cpp index 977289a..48b73cb 100644 --- a/plugin/business/pangu-http/src/pangu_web_cache.cpp +++ b/plugin/business/pangu-http/src/pangu_web_cache.cpp @@ -342,33 +342,50 @@ char is_dynamic_url(const char* url) } return 0; } -char * cookie_scanvalue(const char * key, const char * qs, char * val, size_t val_len) + +char * cookie_scanvalue(const char * key, const char * cookies, char * val, size_t val_len) { - int i=0, key_len=0; + int i=0, j=0, k=0, key_len=0; + int found=1; + char* key_dup=ALLOC(char, strlen(key)+2); + char* cookie_dup=ALLOC(char, strlen(cookies)+1); + strcat(key_dup, key); + if(key_dup[strlen(key)]!='=') + { + strcat(key_dup, "="); + } + for(i=0; i 0) + { + val[0] = '\0'; + } + FREE(&key_dup); + FREE(&cookie_dup); return val; } @@ -479,7 +496,7 @@ void cache_param_new(int idx, const struct Maat_rule_t* rule, const char* srv_de } } item=cJSON_GetObjectItem(key_desc,"cookie"); - if(item && item->type==cJSON_String) param->key_descr.include_cookie=tfe_strdup(param->key_descr.include_cookie); + if(item && item->type==cJSON_String) param->key_descr.include_cookie=tfe_strdup(item->valuestring); } @@ -758,6 +775,7 @@ static void cache_query_obj_on_succ(future_result_t * result, void * user) { struct promise * p = (struct promise *) user; struct cache_query_context* ctx=(struct cache_query_context*)promise_get_ctx(p); + int last_call=0; ctx->ref_tango_cache_result=tango_cache_read_result(result); switch(ctx->ref_tango_cache_result->type) { @@ -778,7 +796,7 @@ static void cache_query_obj_on_succ(future_result_t * result, void * user) //last call. ATOMIC_DEC(&(ctx->ref_handle->stat_val[STAT_CACHE_QUERYING])); promise_dettach_ctx(p); - cache_query_ctx_free_cb(ctx); + last_call=1; break; case RESULT_TYPE_BODY: ATOMIC_ADD(&(ctx->ref_handle->stat_val[STAT_CACHE_QUERY_BYTES]), ctx->ref_tango_cache_result->size); @@ -787,6 +805,7 @@ static void cache_query_obj_on_succ(future_result_t * result, void * user) break; } promise_success(p, ctx); + if(last_call) cache_query_ctx_free_cb(ctx); return; } @@ -956,6 +975,8 @@ enum cache_pending_result web_cache_async_pending(struct cache_handle* handle, u if(ret>0) { + + TFE_LOG_DEBUG(handle->logger, "cache policy %d matched: %s", cache_policy.config_id, request->req_spec.url); ex_data=Maat_rule_get_ex_data(handle->ref_feather, &cache_policy, handle->cache_param_idx); if(ex_data!=NULL) { @@ -963,15 +984,15 @@ enum cache_pending_result web_cache_async_pending(struct cache_handle* handle, u _mid->is_using_exception_param=1; _mid->param=param; } - if(cache_policy.action==CACHE_ACTION_BYPASS) + if((unsigned char)cache_policy.action==CACHE_ACTION_BYPASS) { _mid->shall_bypass=1; } _mid->cfg_id=cache_policy.config_id; } - if(_mid->shall_bypass || - (!param->cache_dyn_url && _mid->is_dyn_url && param->key_descr.qs_num==0) || - (param->cache_cookied_cont && _mid->has_cookie) ) + if(_mid->shall_bypass || + (!param->force_caching && !param->cache_dyn_url && _mid->is_dyn_url && param->key_descr.qs_num==0) || + (!param->force_caching && param->cache_cookied_cont && _mid->has_cookie)) { _mid->result=PENDING_RESULT_FOBIDDEN; return _mid->result; @@ -1169,7 +1190,6 @@ struct cache_update_context* web_cache_update_start(struct cache_handle* handle, || (!param->cache_cookied_cont && _mid->has_cookie) ) { ATOMIC_INC(&(handle->stat_val[STAT_CACHE_UPLOAD_BYPASS])); - TFE_LOG_DEBUG(handle->logger, "cache update bypass: %d : %s", _mid->cfg_id, session->req->req_spec.url); return NULL; } break;