/*#define DUMP_CHTML10 "" */
#include "mod_chxj.h"
+#include "chxj_cookie.h"
/*----------------------------------------------------------------------------*/
/* Structure for HDML */
device_table* spec;
mod_chxj_config* conf;
chxjconvrule_entry* entryp;
- char* cookie_id;
+ cookie_t* cookie;
} chtml10_t;
/*----------------------------------------------------------------------------*/
/* Prototype */
/*----------------------------------------------------------------------------*/
-char* chxj_exchange_chtml10( request_rec* r, device_table* spec, const char* src, apr_size_t srclen, apr_size_t *dstlen, chxjconvrule_entry* entryp, const char* cookie_id);
+char* chxj_exchange_chtml10( request_rec* r, device_table* spec, const char* src, apr_size_t srclen, apr_size_t *dstlen, chxjconvrule_entry* , cookie_t*);
#endif
/*#define DUMP_CHTML20 ""*/
#include "mod_chxj.h"
+#include "chxj_cookie.h"
+
/*----------------------------------------------------------------------------*/
/* Structure for CHTML2.0 */
/*----------------------------------------------------------------------------*/
device_table* spec;
mod_chxj_config* conf;
chxjconvrule_entry* entryp;
- char* cookie_id;
+ cookie_t* cookie;
} chtml20_t;
/*----------------------------------------------------------------------------*/
apr_size_t srclen,
apr_size_t *dstlen,
chxjconvrule_entry* entryp,
- const char* cookie_id);
+ cookie_t* cookie);
#endif
/* #define DUMP_CHTML30 "" */
#include "mod_chxj.h"
+#include "chxj_cookie.h"
+
/*----------------------------------------------------------------------------*/
/* Structure for CHTML3.0 */
/*----------------------------------------------------------------------------*/
device_table* spec;
mod_chxj_config* conf;
chxjconvrule_entry* entryp;
- char* cookie_id;
+ cookie_t* cookie;
} chtml30_t;
/*----------------------------------------------------------------------------*/
apr_size_t srclen,
apr_size_t* dstlen,
chxjconvrule_entry* entryp,
- const char* cookie_id);
+ cookie_t* cookie);
#endif
#define CHXJ_COOKIE_PARAM "_chxj_cc"
-extern char* chxj_save_cookie(request_rec *r);
-extern char* chxj_add_cookie_parameter(request_rec* r, char* value, char* cookie_id);
+
+typedef struct cookie_t cookie_t;
+
+
+struct cookie_t {
+ char* cookie_id;
+ apr_array_header_t* cookie_headers;
+};
+
+extern cookie_t* chxj_save_cookie(request_rec *r);
+extern char* chxj_add_cookie_parameter(request_rec* r, char* value, cookie_t* cookie);
extern int chxj_cookie_check_host(request_rec* r, char* value);
-extern apr_array_header_t* chxj_load_cookie(request_rec* r, char* cookie_id);
+extern cookie_t* chxj_load_cookie(request_rec* r, char* cookie_id);
extern apr_file_t* chxj_cookie_db_lock(request_rec* r);
extern void chxj_cookie_db_unlock(request_rec* r, apr_file_t* file);
#define END_LINE "\0"
#include "mod_chxj.h"
+#include "chxj_cookie.h"
/*============================================================================*/
/* Structure for HDML */
mod_chxj_config* conf;
chxjconvrule_entry* entryp;
- char* cookie_id;
+ cookie_t* cookie;
} hdml_t;
/*============================================================================*/
/* Prototype declaration. */
apr_size_t srclen,
apr_size_t* dstlen,
chxjconvrule_entry* entryp,
- const char* cookie_id);
+ cookie_t* cookie);
char* qs_out_apr_pstrcat(request_rec* r, char* o, char* s, int* len);
char* qs_conv_istyle_to_format(request_rec* r, char* is);
device_table* spec;
mod_chxj_config* conf;
chxjconvrule_entry* entryp;
- char* cookie_id;
+ cookie_t* cookie;
} jhtml_t;
/*----------------------------------------------------------------------------*/
apr_size_t srclen,
apr_size_t *dstlen,
chxjconvrule_entry* entryp,
- const char* cookie_id) ;
+ cookie_t* cookie) ;
#endif
#define CHXJ_PIC_NG (0x00)
#include "mod_chxj.h"
+#include "chxj_cookie.h"
typedef struct _device_table_t {
device_table* tail;
} device_table_list;
-typedef struct _converter_t {
+typedef struct converter_t converter_t;
+
+struct converter_t {
/* convert routine */
char* (*converter)(request_rec* r,
struct _device_table_t* spec,
apr_size_t srclen,
apr_size_t* dstlen,
struct _chxjconvrule_entry* entryp,
- const char* cookie_id);
+ cookie_t* cookie);
char* (*encoder)(request_rec* r,
const char* src,
apr_size_t* len);
-} converter_t;
+};
extern converter_t convert_routine[];
device_table* spec;
mod_chxj_config* conf;
chxjconvrule_entry* entryp;
- char* cookie_id;
+ cookie_t* cookie;
} xhtml_t;
/*----------------------------------------------------------------------------*/
apr_size_t srclen,
apr_size_t *dstlen,
chxjconvrule_entry* entryp,
- const char* cookie_id) ;
+ cookie_t* cookie) ;
#endif
apr_size_t srclen,
apr_size_t* dstlen,
chxjconvrule_entry* entryp,
- const char* cookie_id
+ cookie_t* cookie
)
{
char* dst;
dst = NULL;
- DBG1(r, "start chxj_exchange_chtml10() cookie_id=[%s]", cookie_id);
+ DBG1(r, "start chxj_exchange_chtml10() cookie_id=[%s]", cookie->cookie_id);
/*--------------------------------------------------------------------------*/
/* If qrcode xml */
/*--------------------------------------------------------------------------*/
s_init_chtml10(&chtml10, &doc, r, spec);
chtml10.entryp = entryp;
- chtml10.cookie_id = (char*)cookie_id;
+ chtml10.cookie = cookie;
ap_set_content_type(r, "text/html; charset=Windows-31J");
chxj_dump_out("[dst] CHTML -> CHTML1.0", dst, *dstlen);
#endif
- DBG1(r, "end chxj_exchange_chtml10() cookie_id=[%s]", cookie_id);
+ DBG1(r, "end chxj_exchange_chtml10() cookie_id=[%s]", cookie->cookie_id);
return dst;
}
/*----------------------------------------------------------------------*/
/* CHTML1.0 */
/*----------------------------------------------------------------------*/
- value = chxj_add_cookie_parameter(r, value, chtml10->cookie_id);
+ value = chxj_add_cookie_parameter(r, value, chtml10->cookie);
chtml10->out = apr_pstrcat(r->pool,
chtml10->out,
/*----------------------------------------------------------------------*/
/* CHTML 1.0 */
/*----------------------------------------------------------------------*/
- value = chxj_add_cookie_parameter(r, value, chtml10->cookie_id);
+ value = chxj_add_cookie_parameter(r, value, chtml10->cookie);
chtml10->out = apr_pstrcat(r->pool,
chtml10->out,
/* CHTML 1.0 */
/*----------------------------------------------------------------------*/
#ifdef IMG_NOT_CONVERT_FILENAME
- value = chxj_add_cookie_parameter(r, value, chtml10->cookie_id);
+ value = chxj_add_cookie_parameter(r, value, chtml10->cookie);
chtml10->out = apr_pstrcat(r->pool,
chtml10->out, " src=\"",value,"\"", NULL);
#else
value = chxj_img_conv(r, spec, value);
- value = chxj_add_cookie_parameter(r, value, chtml10->cookie_id);
+ value = chxj_add_cookie_parameter(r, value, chtml10->cookie);
chtml10->out = apr_pstrcat(r->pool,
chtml10->out, " src=\"",
value,
apr_size_t srclen,
apr_size_t *dstlen,
chxjconvrule_entry* entryp,
- const char* cookie_id
+ cookie_t* cookie
)
{
char* dst = NULL;
apr_size_t srclen,
apr_size_t *dstlen,
chxjconvrule_entry* entryp,
- const char* cookie_id
+ cookie_t* cookie
)
{
char* dst = NULL;
/*
*
*/
-char*
+cookie_t*
chxj_save_cookie(request_rec* r)
{
int ii;
- char* cookie;
apr_array_header_t* headers;
apr_table_entry_t* hentryp;
apr_status_t retval;
apr_uuid_t uuid;
char* uuid_string;
unsigned char* md5_value;
- char* md5_string;
char* old_cookie_id;
mod_chxj_config* dconf;
chxjconvrule_entry* entryp;
apr_file_t* file;
apr_table_t* new_cookie_table;
- apr_array_header_t* old_cookie_headers;
int has_cookie = 0;
+ cookie_t* cookie;
+ cookie_t* old_cookie;
DBG(r, "start chxj_save_cookie()");
- md5_string = NULL;
+ cookie = (cookie_t*)apr_palloc(r->pool, sizeof(cookie_t));
+
+ cookie->cookie_id = NULL;
dconf = ap_get_module_config(r->per_dir_config, &chxj_module);
entryp = chxj_apply_convrule(r, dconf->convrules);
hentryp = (apr_table_entry_t*)headers->elts;
- cookie = apr_palloc(r->pool, 1);
- cookie[0] = 0;
-
new_cookie_table = apr_table_make(r->pool, headers->nelts);
for (ii=0; ii<headers->nelts; ii++) {
*/
old_cookie_id = (char*)apr_table_get(r->headers_in, "CHXJ_COOKIE_ID");
if (old_cookie_id) {
- old_cookie_headers = chxj_load_cookie(r, old_cookie_id);
- if (old_cookie_headers) {
- hentryp = (apr_table_entry_t*)old_cookie_headers->elts;
- for (ii=0; ii<old_cookie_headers->nelts; ii++) {
+ old_cookie = chxj_load_cookie(r, old_cookie_id);
+ if (old_cookie && old_cookie->cookie_headers) {
+ hentryp = (apr_table_entry_t*)old_cookie->cookie_headers->elts;
+ for (ii=0; ii<old_cookie->cookie_headers->nelts; ii++) {
if (apr_table_get(new_cookie_table, hentryp[ii].key) == NULL) {
apr_table_setn(new_cookie_table, hentryp[ii].key, hentryp[ii].val);
has_cookie = 1;
goto on_error;
}
- md5_string = apr_palloc(r->pool, apr_base64_encode_len(APR_MD5_DIGESTSIZE)+1);
- memset(md5_string, 0, APR_MD5_DIGESTSIZE+1);
- apr_base64_encode(md5_string, (char*)md5_value, APR_MD5_DIGESTSIZE);
+ cookie->cookie_id = apr_palloc(r->pool, apr_base64_encode_len(APR_MD5_DIGESTSIZE)+1);
+ memset(cookie->cookie_id, 0, APR_MD5_DIGESTSIZE+1);
+ apr_base64_encode(cookie->cookie_id, (char*)md5_value, APR_MD5_DIGESTSIZE);
- DBG1(r, "md5_string=[%s]", md5_string);
+ DBG1(r, "cookie->cookie_id=[%s]", cookie->cookie_id);
- md5_string = chxj_url_encode(r,md5_string);
+ cookie->cookie_id = chxj_url_encode(r,cookie->cookie_id);
- DBG1(r, "md5_string=[%s]", md5_string);
+ DBG1(r, "cookie->cookie_id=[%s]", cookie->cookie_id);
/*
* create key
*/
- dbmkey.dptr = md5_string;
- dbmkey.dsize = strlen(md5_string);
+ dbmkey.dptr = cookie->cookie_id;
+ dbmkey.dsize = strlen(cookie->cookie_id);
/*
* create val
*/
- headers = (apr_array_header_t*)apr_table_elts(new_cookie_table);
- dbmval.dptr = (char*)headers;
- dbmval.dsize = headers->elt_size * headers->nelts + sizeof(apr_array_header_t);
+ cookie->cookie_headers = (apr_array_header_t*)apr_table_elts(new_cookie_table);
+ dbmval.dptr = (char*)cookie->cookie_headers;
+ dbmval.dsize = cookie->cookie_headers->elt_size * cookie->cookie_headers->nelts + sizeof(apr_array_header_t);
/*
* store to db
chxj_cookie_db_unlock(r, file);
DBG(r, "end chxj_save_cookie()");
- return md5_string;
+ return cookie;
}
/*
*
* @return loaded data.
*/
-apr_array_header_t*
+cookie_t*
chxj_load_cookie(request_rec* r, char* cookie_id)
{
int ii;
mod_chxj_config* dconf;
chxjconvrule_entry* entryp;
apr_file_t* file;
- apr_array_header_t* cookie_headers;
apr_table_entry_t* hentryp;
+ cookie_t* cookie;
DBG(r, "start chxj_load_cookie()");
- cookie_headers = NULL;
+ cookie = (cookie_t*)apr_palloc(r->pool, sizeof(cookie_t));
+ cookie->cookie_headers = NULL;
+ cookie->cookie_id = apr_pstrdup(r->pool, cookie_id);
gconf = ap_get_module_config(r->server->module_config, &chxj_module);
/*
* create key
*/
- dbmkey.dptr = apr_pstrdup(r->pool, cookie_id);
+ dbmkey.dptr = apr_pstrdup(r->pool, cookie->cookie_id);
dbmkey.dsize = strlen(dbmkey.dptr);
retval = apr_dbm_fetch(f, dbmkey, &dbmval);
ERR2(r, "could not fetch dbm (type %s) auth file: %s", "default", "/tmp/cookie.db");
goto on_error;
}
- cookie_headers = (apr_array_header_t*)dbmval.dptr;
+ cookie->cookie_headers = (apr_array_header_t*)dbmval.dptr;
- hentryp = (apr_table_entry_t*)cookie_headers->elts;
+ hentryp = (apr_table_entry_t*)cookie->cookie_headers->elts;
- for (ii=0; ii<cookie_headers->nelts; ii++) {
+ for (ii=0; ii<cookie->cookie_headers->nelts; ii++) {
DBG2(r, "cookie=[%s:%s]", hentryp[ii].key, hentryp[ii].val);
apr_table_setn(r->headers_in, "Cookie", apr_pstrcat(r->pool, hentryp[ii].key, "=", hentryp[ii].val, NULL));
/*
* save cookie_id to request header.
*/
- apr_table_setn(r->headers_in, "CHXJ_COOKIE_ID", cookie_id);
+ apr_table_setn(r->headers_in, "CHXJ_COOKIE_ID", cookie->cookie_id);
DBG(r, " ");
on_error:
chxj_cookie_db_unlock(r, file);
DBG(r, "end chxj_load_cookie()");
- return cookie_headers;
+ return cookie;
}
char*
-chxj_add_cookie_parameter(request_rec* r, char* value, char* cookie_id)
+chxj_add_cookie_parameter(request_rec* r, char* value, cookie_t* cookie)
{
char* qs;
char* dst;
- DBG1(r, "start chxj_add_cookie_parameter() cookie_id=[%s]", cookie_id);
- if (!cookie_id) return value;
+ DBG1(r, "start chxj_add_cookie_parameter() cookie_id=[%s]", (cookie) ? cookie->cookie_id : NULL);
+
+ if (!cookie) return value;
+ if (!cookie->cookie_id) return value;
if (chxj_cookie_check_host(r, value) != 0) {
DBG(r, "end chxj_add_cookie_parameter()(check host)");
return value;
qs = strchr(dst, '?');
if (qs) {
- dst = apr_psprintf(r->pool, "%s&%s=%s", dst, CHXJ_COOKIE_PARAM, cookie_id);
+ dst = apr_psprintf(r->pool, "%s&%s=%s", dst, CHXJ_COOKIE_PARAM, cookie->cookie_id);
}
else {
- dst = apr_psprintf(r->pool, "%s?%s=%s", dst, CHXJ_COOKIE_PARAM, cookie_id);
+ dst = apr_psprintf(r->pool, "%s?%s=%s", dst, CHXJ_COOKIE_PARAM, cookie->cookie_id);
}
DBG1(r, "end chxj_add_cookie_parameter() dst=[%s]", dst);
apr_size_t srclen,
apr_size_t* dstlen,
chxjconvrule_entry* entryp,
- const char* cookie_id
+ cookie_t* cookie
)
{
char* dst = NULL;
apr_size_t srclen,
apr_size_t *dstlen,
chxjconvrule_entry* entryp,
- const char* cookie_id
+ cookie_t* cookie
)
{
char* dst = NULL;
apr_size_t srclen,
apr_size_t* dstlen,
chxjconvrule_entry* entryp,
- const char* cookie_id
+ cookie_t* cookie
)
{
char* dst = NULL;
char* user_agent;
char* dst;
char* tmp;
- char* cookie_id;
+ cookie_t* cookie;
mod_chxj_config* dconf;
chxjconvrule_entry* entryp;
/*
* save cookie.
*/
- cookie_id = NULL;
+ cookie = NULL;
if (entryp->action & CONVRULE_COOKIE_ON_BIT)
- cookie_id = chxj_save_cookie(r);
+ cookie = chxj_save_cookie(r);
if (!r->header_only) {
device_table* spec = chxj_specified_device(r, user_agent);
*len,
len,
entryp,
- cookie_id);
+ cookie);
else
dst = convert_routine[spec->html_spec_type].converter(r,
spec,
*len,
len,
entryp,
- cookie_id);
+ cookie);
}
}
/* _chxj_r_ */
/* _chxj_s_ */
for (;;) {
+ char* pair_sv;
pair = apr_strtok(buff, "&", &pstate);
if (pair == NULL)
buff = NULL;
+ pair_sv = apr_pstrdup(r->pool, pair);
+
name = apr_strtok(pair, "=", &vstate);
value = apr_strtok(NULL, "=", &vstate);
if (strncasecmp(name, "_chxj", 5) != 0) {
result = apr_pstrcat(r->pool, result, name, "=", dvalue, NULL);
}
else {
- if (strcmp(name, pair) != 0)
+ if (strcmp(name, pair_sv) != 0)
result = apr_pstrcat(r->pool, result, name, "=", value, NULL);
else
result = apr_pstrcat(r->pool, result, name, NULL);
char* contentLength;
apr_size_t len;
mod_chxj_ctx* ctx;
- char* cookie_id;
+ cookie_t* cookie;
char* location_header;
mod_chxj_config* dconf;
chxjconvrule_entry* entryp;
if (entryp->action & CONVRULE_COOKIE_ON_BIT) {
DBG(r, "entryp->action == COOKIE_ON_BIT");
- cookie_id = chxj_save_cookie(r);
+ cookie = chxj_save_cookie(r);
/*
* Location Header Check to add cookie parameter.
DBG1(r, "Location Header=[%s]", location_header);
location_header = chxj_add_cookie_parameter(r,
location_header,
- cookie_id);
+ cookie);
apr_table_setn(r->headers_out, "Location", location_header);
DBG1(r, "Location Header=[%s]", location_header);
}