}
}
}
+ else{
+ if(strncmp(r->content_type,"image/",6) == 0){
+ if (dconf->image_rewrite == CHXJ_IMG_REWRITE_ON && !apr_table_get(r->headers_in, CHXJ_IMG_X_HTTP_IMAGE_FILENAME)){
+ if(dconf->image_rewrite_mode == CHXJ_IMG_REWRITE_MODE_ALL){
+ // all image
+ apr_table_set(r->headers_in, CHXJ_IMG_X_HTTP_IMAGE_FILENAME, r->filename);
+ apr_table_set(r->headers_in, CHXJ_IMG_X_HTTP_IMAGE_TYPE,r->content_type);
+ r->filename = apr_pstrcat(r->pool,"img-redirect:",dconf->image_rewrite_url,NULL);
+ r->handler = "chxj-image-redirect-handler";
+ return OK;
+ }
+ else{
+ // has _chxj_imgrewrite=on in args
+ char *args_tmp = chxj_url_decode(r->pool, r->args);
+ if (strstr(args_tmp,CHXJ_IMG_REWRITE_URL_STRING)){
+ apr_table_set(r->headers_in, CHXJ_IMG_X_HTTP_IMAGE_FILENAME, r->filename);
+ apr_table_set(r->headers_in, CHXJ_IMG_X_HTTP_IMAGE_TYPE,r->content_type);
+ r->filename = apr_pstrcat(r->pool,"img-redirect:",dconf->image_rewrite_url,NULL);
+ r->handler = "chxj-image-redirect-handler";
+ return OK;
+ }
+ }
+ }
+ }
+ }
chxj_add_device_env(r, spec);
return DECLINED;
}
+static int
+chxj_image_redirect_handler(request_rec *r)
+{
+
+ if (strcmp(r->handler, "chxj-image-redirect-handler")) {
+ return DECLINED;
+ }
+
+ if (strncmp(r->filename, "img-redirect:", 13) != 0) {
+ return DECLINED;
+ }
+ DBG(r,"start chxj_image_redirect_handler");
+ ap_internal_redirect(apr_pstrcat(r->pool, r->filename+13,
+ r->args ? "?" : NULL, r->args, NULL), r);
+ DBG(r,"end chxj_image_redirect_handler");
+ return OK;
+}
+
static void
s_clear_cookie_header(request_rec *r, device_table *spec)
}
if (!r->header_only) {
+
if ((entryp->action & CONVRULE_COOKIE_ONLY_BIT) && cookie) {
dst = chxj_cookie_only_mode(r, *src, (apr_size_t *)len, cookie);
}
}
}
}
+ if (*len > 0){
+ if (strcasecmp(spec->output_encoding,"UTF-8") == 0){
+ dst = chxj_iconv(r,r->pool,dst,len,"CP932","UTF-8");
+ }
+ }
+
+
ap_set_content_length(r, *len);
if (*len == 0) {
}
+
DBG(r, "REQ[%X] end of chxj_convert()", (unsigned int)(apr_size_t)r);
return dst;
dlen = strlen(value);
DBG(r, "************ before encoding[%s]", value);
- dvalue = chxj_rencoding(r, value, &dlen);
+ dvalue = chxj_rencoding(r, value, &dlen,spec->output_encoding);
dvalue = chxj_url_encode(r->pool, dvalue);
DBG(r, "************ after encoding[%s]", dvalue);
if (name && *name != 0) {
name = chxj_url_decode(r->pool, name);
dlen = strlen(name);
- dname = chxj_rencoding(r, name, &dlen);
+ dname = chxj_rencoding(r, name, &dlen,spec->output_encoding);
dname = chxj_url_encode(r->pool, dname);
}
else {
if (value && *value != 0) {
value = chxj_url_decode(pool, value);
dlen = strlen(value);
- dvalue = chxj_rencoding(r, value, &dlen);
+ dvalue = chxj_rencoding(r, value, &dlen,spec->output_encoding);
dvalue = chxj_url_encode(pool, dvalue);
}
else {
if (name && *name != 0) {
name = chxj_url_decode(pool, name);
dlen = strlen(name);
- dname = chxj_rencoding(r, name, &dlen);
+ dname = chxj_rencoding(r, name, &dlen,spec->output_encoding);
dname = chxj_url_encode(pool, dname);
}
else {
dlen = strlen(value);
value = chxj_url_decode(pool, value);
- dvalue = chxj_rencoding(r, value, &dlen);
+ dvalue = chxj_rencoding(r, value, &dlen,spec->output_encoding);
dvalue = chxj_url_encode(pool,dvalue);
result = apr_pstrcat(pool, result, &name[8], "=", dvalue, NULL);
}
if (dlen) {
value = chxj_url_decode(pool, value);
- dvalue = chxj_rencoding(r, value, &dlen);
+ dvalue = chxj_rencoding(r, value, &dlen,spec->output_encoding);
dvalue = chxj_url_encode(pool,dvalue);
if (r->args && strlen(r->args) > 0) {
r->args = apr_pstrcat(pool, r->args, "&", &name[sizeof(CHXJ_QUERY_STRING_PARAM_PREFIX)-1], "=", dvalue, NULL);
dlen = strlen(value);
if (dlen && value) {
value = chxj_url_decode(pool, value);
- dvalue = chxj_rencoding(r, value, &dlen);
+ dvalue = chxj_rencoding(r, value, &dlen,spec->output_encoding);
dvalue = chxj_url_encode(pool,dvalue);
if (r->args && strlen(r->args) > 0) {
r->args = apr_pstrcat(pool, r->args, "&", &name[sizeof(CHXJ_QUERY_STRING_PARAM_PREFIX_ENC)-1], "=", dvalue, NULL);
DBG(r, "REQ[%X] METHOD [%s]", TO_ADDR(r), r->method);
DBG(r, "REQ[%X] ", (unsigned int)(apr_size_t)r);
DBG(r, "REQ[%X] =======================================================================", (unsigned int)(apr_size_t)r);
+
+ mod_chxj_config *dconf;
+ dconf = chxj_get_module_config(r->per_dir_config, &chxj_module);
+ /*
+ if (dconf->image_rewrite ==CHXJ_IMG_REWRITE_ON ){
+ if(r->args && strcasecmp(r->args,"rewrite") == 0){
+ DBG(r, "image rewrite is ON [%s] - %s", dconf->image_rewrite_url ,r->content_type);
+ r->filename = apr_pstrcat(r->pool,dconf->image_rewrite_url,NULL);
+ return OK;
+ }
+ }
+ */
+
#if 0
return chxj_trans_name(r);
#else
ap_hook_handler(chxj_img_conv_format_handler, NULL, NULL, APR_HOOK_MIDDLE);
ap_hook_handler(chxj_qr_code_handler, NULL, NULL, APR_HOOK_MIDDLE);
ap_hook_handler(chxj_input_handler, NULL, NULL, APR_HOOK_MIDDLE);
+
+ ap_hook_handler(chxj_image_redirect_handler, NULL, NULL, APR_HOOK_MIDDLE);
+
ap_hook_translate_name(chxj_translate_name, NULL, NULL, APR_HOOK_MIDDLE);
ap_hook_fixups(chxj_headers_fixup, NULL, NULL, APR_HOOK_FIRST);
+
}
/* Default is copyleft */
conf->image_copyright = NULL;
+ conf->image_rewrite = CHXJ_IMG_REWRITE_NONE;
+ conf->image_rewrite_mode = CHXJ_IMG_REWRITE_MODE_NONE;
+ conf->image_rewrite_url = NULL;
+
return conf;
}
mrg->device_hash = base->device_hash;
}
+ if (add->image_rewrite == CHXJ_IMG_REWRITE_NONE){
+ mrg->image_rewrite = base->image_rewrite;
+ }
+ else{
+ mrg->image_rewrite = add->image_rewrite;
+ }
+
+ if (add->image_rewrite_url) {
+ mrg->image_rewrite_url = add->image_rewrite_url;
+ }
+ else{
+ mrg->image_rewrite_url = base->image_rewrite_url;
+ }
+
+ if (add->image_rewrite_mode == CHXJ_IMG_REWRITE_MODE_NONE){
+ mrg->image_rewrite_mode = base->image_rewrite_mode;
+ }
+ else{
+ mrg->image_rewrite_mode = add->image_rewrite_mode;
+ }
+
return mrg;
}
return NULL;
}
+static const char *
+cmd_image_rewrite(cmd_parms *parms, void *mconfig, const char *arg)
+{
+ mod_chxj_config *conf;
+ if (strlen(arg) > 256){
+ return "mod_chxj: set rewrite too long.";
+ }
+ conf = (mod_chxj_config *)mconfig;
+ if (strcasecmp("ON", arg) == 0) {
+ conf->image_rewrite = CHXJ_IMG_REWRITE_ON;
+ }
+ else if(strcasecmp("OFF",arg) == 0) {
+ conf->image_rewrite = CHXJ_IMG_REWRITE_OFF;
+ }
+ else {
+ conf->image_rewrite = CHXJ_IMG_REWRITE_NONE;
+ }
+ return NULL;
+}
+
+static const char *
+cmd_image_rewrite_url(cmd_parms *parms, void *mconfig, const char *arg)
+{
+ mod_chxj_config *conf;
+ if (strlen(arg) > 256){
+ return "mod_chxj: set rewrite url too long.";
+ }
+ conf = (mod_chxj_config *)mconfig;
+ conf->image_rewrite_url = apr_pstrdup(parms->pool, arg);;
+ return NULL;
+}
+
+static const char *
+cmd_image_rewrite_mode(cmd_parms *parms, void *mconfig, const char *arg)
+{
+ mod_chxj_config *conf;
+ if (strlen(arg) > 256){
+ return "mod_chxj: set rewrite mode is too long.";
+ }
+
+ conf = (mod_chxj_config *)mconfig;
+ if (strcasecmp("all",arg) == 0) {
+ conf->image_rewrite_mode = CHXJ_IMG_REWRITE_MODE_ALL;
+ }
+ else if (strcasecmp("user",arg) == 0) {
+ conf->image_rewrite_mode = CHXJ_IMG_REWRITE_MODE_USER;
+ }
+ else if (strcasecmp("tag",arg) == 0) {
+ conf->image_rewrite_mode = CHXJ_IMG_REWRITE_MODE_TAG;
+ }
+ else{
+ conf->image_rewrite_mode = CHXJ_IMG_REWRITE_MODE_NONE;
+ }
+ return NULL;
+}
+
static const command_rec cmds[] = {
AP_INIT_TAKE1(
"ChxjLoadDeviceData",
NULL,
OR_ALL,
"Additional devices TSV data"),
+ AP_INIT_TAKE1(
+ "ChxjImageRewrite",
+ cmd_image_rewrite,
+ NULL,
+ OR_ALL,
+ "Rewrite Image"
+ ),
+ AP_INIT_TAKE1(
+ "ChxjImageRewriteUrl",
+ cmd_image_rewrite_url,
+ NULL,
+ OR_ALL,
+ "Set rewrite Image url"
+ ),
+ AP_INIT_TAKE1(
+ "ChxjImageRewriteMode",
+ cmd_image_rewrite_mode,
+ NULL,
+ OR_ALL,
+ "Set rewrite Image rewrite url mode"
+ ),
{NULL,{NULL},NULL,0,0,NULL},
};