/*
+ * Copyright (C) 2005-2009 Atsushi Konno All rights reserved.
* Copyright (C) 2005 QSDN,Inc. All rights reserved.
- * Copyright (C) 2005 Atsushi Konno All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include "chxj_str_util.h"
-static void s_set_devices_data(Doc* doc, apr_pool_t* p, mod_chxj_config* conf, Node* node) ;
-static void s_set_user_agent_data(Doc* doc, apr_pool_t* p, mod_chxj_config* conf, Node* node) ;
-static void s_set_device_data(Doc* doc, apr_pool_t* p, device_table_list_t* dtl, Node* node) ;
+static void s_set_devices_data(
+ Doc *doc,
+ apr_pool_t *p,
+ mod_chxj_config *conf,
+ Node *node) ;
+
+static void s_set_user_agent_data(
+ Doc *doc,
+ apr_pool_t *p,
+ mod_chxj_config *conf,
+ Node *node);
+
+static void s_set_device_data(
+ Doc *doc,
+ apr_pool_t *p,
+ device_table_list *dtl,
+ Node *node) ;
+
+
/**
* load device_data.xml
*/
void
-chxj_load_device_data(Doc* doc, apr_pool_t *p, mod_chxj_config* conf)
+chxj_load_device_data(Doc *doc, apr_pool_t *p, mod_chxj_config *conf)
{
conf->devices = NULL;
s_set_devices_data(doc, p, conf,qs_get_root(doc));
-
}
+
/**
* <devices>
*/
static void
-s_set_devices_data(Doc* doc, apr_pool_t* p, mod_chxj_config* conf, Node* node)
+s_set_devices_data(Doc *doc, apr_pool_t *p, mod_chxj_config *conf, Node *node)
{
- Node* child;
+ Node *child;
for (child = qs_get_child_node(doc,node);
child ;
child = qs_get_next_node(doc,child)) {
- char* name = qs_get_node_name(doc,child);
- if (strcasecmp(name, "devices") == 0)
+ char *name = qs_get_node_name(doc,child);
+ if (STRCASEEQ('d','D',"devices",name)) {
s_set_user_agent_data(doc, p, conf, child);
+ }
}
}
* <user_agent>
*/
static void
-s_set_user_agent_data(Doc* doc, apr_pool_t* p, mod_chxj_config* conf, Node* node)
+s_set_user_agent_data(Doc *doc, apr_pool_t *p, mod_chxj_config *conf, Node *node)
{
- Node* child;
- device_table_list_t* t;
+ Node *child;
+ device_table_list *t;
for (child = qs_get_child_node(doc,node);
child ;
child = qs_get_next_node(doc,child)) {
- char* name = qs_get_node_name(doc,child);
-
- if (strcasecmp(name, "user_agent") == 0 ) {
- Attr* attr;
- device_table_list_t* dtl;
+ char *name = qs_get_node_name(doc,child);
+ if (STRCASEEQ('u','U',"user_agent",name)) {
+ Attr *attr;
+ device_table_list *dtl;
if (! conf->devices) {
- conf->devices = apr_pcalloc(p, sizeof(device_table_list_t));
+ conf->devices = apr_pcalloc(p, sizeof(device_table_list));
conf->devices->next = NULL;
conf->devices->pattern = NULL;
conf->devices->table = NULL;
if (! t->next)
break;
}
- t->next = apr_pcalloc(p, sizeof(device_table_list_t));
+ t->next = apr_pcalloc(p, sizeof(device_table_list));
t->next->next = NULL;
t->next->pattern = NULL;
t->next->table = NULL;
for (attr = qs_get_attr(doc,child);
attr ;
attr = qs_get_next_attr(doc,attr)) {
- if (strcasecmp(qs_get_attr_name(doc,attr), "pattern") == 0) {
+ char *attr_name = qs_get_attr_name(doc,attr);
+
+ if (STRCASEEQ('p','P',"pattern",attr_name)) {
dtl->pattern = apr_pstrdup(p, qs_get_attr_value(doc,attr));
- dtl->regexp = ap_pregcomp(p, dtl->pattern, AP_REG_EXTENDED);
+ dtl->regexp = ap_pregcomp(p, (const char *)dtl->pattern, AP_REG_EXTENDED|AP_REG_ICASE);
}
}
s_set_device_data(doc, p, dtl, child);
}
}
+
static void
-s_set_device_data(Doc* doc, apr_pool_t* p, device_table_list_t* dtl, Node* node)
+s_set_device_data(Doc *doc, apr_pool_t *p, device_table_list *dtl, Node *node)
{
- Node* child;
- device_table_t* dt;
+ Node *child;
+ device_table *dt;
- dt = apr_pcalloc(p, sizeof(device_table_t));
+ dt = apr_pcalloc(p, sizeof(device_table));
dt->next = NULL;
+ dt->provider = CHXJ_PROVIDER_UNKNOWN;
dt->device_id = NULL;
dt->device_name = NULL;
dt->html_spec_type = CHXJ_SPEC_Chtml_3_0;
for (child = qs_get_child_node(doc,node);
child ;
child = qs_get_next_node(doc,child)) {
- char* name = qs_get_node_name(doc,child);
- if (strcasecmp(name, "device") == 0) {
- s_set_device_data(doc,p, dtl, child);
- }
- else
- if (strcasecmp(name, "device_id") == 0) {
- Node* ch = qs_get_child_node(doc, child);
- if (ch && strcasecmp(qs_get_node_name(doc,ch), "text") == 0) {
- dt->device_id = apr_pstrdup(p, qs_get_node_value(doc, ch));
+ char *name = qs_get_node_name(doc,child);
+ switch (*name) {
+ case 'd':
+ case 'D':
+ if (strcasecmp(name, "device") == 0) {
+ s_set_device_data(doc,p, dtl, child);
}
- }
- else
- if (strcasecmp(name, "device_name") == 0) {
- Node* ch = qs_get_child_node(doc, child);
- if (ch && strcasecmp(qs_get_node_name(doc,ch), "text") == 0) {
- dt->device_name = apr_pstrdup(p, qs_get_node_value(doc, ch));
- }
- }
- else
- if (strcasecmp(name, "html_spec_type") == 0) {
- Node* ch = qs_get_child_node(doc, child);
- if (ch && strcasecmp(qs_get_node_name(doc,ch), "text") == 0) {
- char* vv = qs_get_node_value(doc, ch);
- if (strcasecmp(vv, "xhtml_mobile_1_0") == 0) {
- dt->html_spec_type = CHXJ_SPEC_XHtml_Mobile_1_0;
- }
- else
- if (strcasecmp(vv, "chtml_1_0") == 0) {
- dt->html_spec_type = CHXJ_SPEC_Chtml_1_0;
- }
- else
- if (strcasecmp(vv, "chtml_2_0") == 0) {
- dt->html_spec_type = CHXJ_SPEC_Chtml_2_0;
- }
- else
- if (strcasecmp(vv, "chtml_3_0") == 0) {
- dt->html_spec_type = CHXJ_SPEC_Chtml_3_0;
- }
- else
- if (strcasecmp(vv, "chtml_4_0") == 0) {
- dt->html_spec_type = CHXJ_SPEC_Chtml_4_0;
- }
- else
- if (strcasecmp(vv, "chtml_5_0") == 0) {
- dt->html_spec_type = CHXJ_SPEC_Chtml_5_0;
- }
- else
- if (strcasecmp(vv, "hdml") == 0) {
- dt->html_spec_type = CHXJ_SPEC_Hdml;
- }
- else
- if (strcasecmp(vv, "jhtml") == 0) {
- dt->html_spec_type = CHXJ_SPEC_Jhtml;
+ else
+ if (strcasecmp(name, "device_id") == 0) {
+ Node* ch = qs_get_child_node(doc, child);
+ if (ch && strcasecmp(qs_get_node_name(doc,ch), "text") == 0) {
+ dt->device_id = apr_pstrdup(p, qs_get_node_value(doc, ch));
}
}
- }
- else
- if (strcasecmp(name, "width") == 0) {
- Node* ch = qs_get_child_node(doc, child);
- if (ch && strcasecmp(qs_get_node_name(doc,ch), "text") == 0) {
- char *vv = qs_get_node_value(doc,ch);
- int ii;
- for (ii=0; ii<strlen(vv); ii++) {
- if ((vv[ii] >= '1' && vv[ii] <= '9') || vv[ii] == '0')
- continue;
- break;
- }
- if (ii == strlen(vv))
- dt->width = atoi(qs_get_node_value(doc,ch));
- else
- dt->width = 0;
- }
- }
- else
- if (strcasecmp(name, "heigh") == 0) {
- Node* ch = qs_get_child_node(doc, child);
- if (ch && strcasecmp(qs_get_node_name(doc,ch), "text") == 0) {
- char *vv = qs_get_node_value(doc,ch);
- int ii;
- for (ii=0; ii<strlen(vv); ii++) {
- if ((vv[ii] >= '1' && vv[ii] <= '9') || vv[ii] == '0')
- continue;
- break;
+ else
+ if (strcasecmp(name, "device_name") == 0) {
+ Node* ch = qs_get_child_node(doc, child);
+ if (ch && strcasecmp(qs_get_node_name(doc,ch), "text") == 0) {
+ dt->device_name = apr_pstrdup(p, qs_get_node_value(doc, ch));
}
-
- if (ii == strlen(vv))
- dt->heigh = atoi(qs_get_node_value(doc,ch));
- else
- dt->heigh = 0;
}
- }
- else
- if (strcasecmp(name, "gif") == 0) {
- Node* ch = qs_get_child_node(doc, child);
- if (ch && strcasecmp(qs_get_node_name(doc,ch), "text") == 0) {
- char *vv = qs_get_node_value(doc,ch);
- if (strcasecmp(vv, "true") == 0)
- {
- dt->available_gif = 1;
- }
- else
- {
- dt->available_gif = 0;
- }
- }
- }
- else
- if (strcasecmp(name, "jpeg") == 0 || strcasecmp(name, "jpg") == 0)
- {
- Node* ch = qs_get_child_node(doc, child);
- if (ch != NULL && strcasecmp(qs_get_node_name(doc,ch), "text") == 0)
- {
- char *vv = qs_get_node_value(doc,ch);
- if (strcasecmp(vv, "true") == 0)
- {
- dt->available_jpeg = 1;
- }
- else
- {
- dt->available_jpeg = 0;
+ else
+ if (strcasecmp(name, "dpi_width") == 0) {
+ Node* ch = qs_get_child_node(doc, child);
+ if (ch && strcasecmp(qs_get_node_name(doc,ch), "text") == 0) {
+ char *vv = qs_get_node_value(doc,ch);
+ unsigned int ii;
+ for (ii=0; ii<strlen(vv); ii++) {
+ if ((vv[ii] >= '1' && vv[ii] <= '9') || vv[ii] == '0')
+ continue;
+ break;
+ }
+ if (ii == strlen(vv))
+ dt->dpi_width = atoi(qs_get_node_value(doc,ch));
+ else
+ dt->dpi_width = 0;
}
}
- }
- else
- if (strcasecmp(name, "png") == 0)
- {
- Node* ch = qs_get_child_node(doc, child);
- if (ch != NULL && strcasecmp(qs_get_node_name(doc,ch), "text") == 0)
- {
- char *vv = qs_get_node_value(doc,ch);
- if (strcasecmp(vv, "true") == 0)
- {
- dt->available_png = 1;
- }
- else
- {
- dt->available_png = 0;
+ else
+ if (strcasecmp(name, "dpi_heigh") == 0) {
+ Node* ch = qs_get_child_node(doc, child);
+ if (ch && strcasecmp(qs_get_node_name(doc,ch), "text") == 0) {
+ char *vv = qs_get_node_value(doc,ch);
+ unsigned int ii;
+ for (ii=0; ii<strlen(vv); ii++) {
+ if ((vv[ii] >= '1' && vv[ii] <= '9') || vv[ii] == '0')
+ continue;
+ break;
+ }
+
+ if (ii == strlen(vv))
+ dt->dpi_heigh = atoi(qs_get_node_value(doc,ch));
+ else
+ dt->dpi_heigh = 0;
}
}
- }
- else
- if (strcasecmp(name, "bmp2") == 0)
- {
- Node* ch = qs_get_child_node(doc, child);
- if (ch != NULL && strcasecmp(qs_get_node_name(doc,ch), "text") == 0)
- {
- char *vv = qs_get_node_value(doc,ch);
- if (strcasecmp(vv, "true") == 0)
- {
- dt->available_bmp2 = 1;
- }
- else
- {
- dt->available_bmp2 = 0;
+ break;
+
+ case 'h':
+ case 'H':
+ if (strcasecmp(name, "html_spec_type") == 0) {
+ Node *ch = qs_get_child_node(doc, child);
+ if (ch && strcasecmp(qs_get_node_name(doc,ch), "text") == 0) {
+ char *vv = qs_get_node_value(doc, ch);
+ if (STRCASEEQ('x','X',"xhtml_mobile_1_0",vv)) {
+ dt->html_spec_type = CHXJ_SPEC_XHtml_Mobile_1_0;
+ dt->provider = CHXJ_PROVIDER_AU;
+ }
+ else if (STRCASEEQ('c','C',"chtml_1_0",vv)) {
+ dt->html_spec_type = CHXJ_SPEC_Chtml_1_0;
+ dt->provider = CHXJ_PROVIDER_DOCOMO;
+ }
+ else if (STRCASEEQ('c','C',"chtml_2_0",vv)) {
+ dt->html_spec_type = CHXJ_SPEC_Chtml_2_0;
+ dt->provider = CHXJ_PROVIDER_DOCOMO;
+ }
+ else if (STRCASEEQ('c','C',"chtml_3_0",vv)) {
+ dt->html_spec_type = CHXJ_SPEC_Chtml_3_0;
+ dt->provider = CHXJ_PROVIDER_DOCOMO;
+ }
+ else if (STRCASEEQ('c','C',"chtml_4_0",vv)) {
+ dt->html_spec_type = CHXJ_SPEC_Chtml_4_0;
+ dt->provider = CHXJ_PROVIDER_DOCOMO;
+ }
+ else if (STRCASEEQ('c','C',"chtml_5_0",vv)) {
+ dt->html_spec_type = CHXJ_SPEC_Chtml_5_0;
+ dt->provider = CHXJ_PROVIDER_DOCOMO;
+ }
+ else if (STRCASEEQ('c','C',"chtml_6_0",vv)) {
+ dt->html_spec_type = CHXJ_SPEC_Chtml_6_0;
+ dt->provider = CHXJ_PROVIDER_DOCOMO;
+ }
+ else if (STRCASEEQ('c','C',"chtml_7_0",vv)) {
+ dt->html_spec_type = CHXJ_SPEC_Chtml_7_0;
+ dt->provider = CHXJ_PROVIDER_DOCOMO;
+ }
+ else if (STRCASEEQ('h','H',"hdml",vv)) {
+ dt->html_spec_type = CHXJ_SPEC_Hdml;
+ dt->provider = CHXJ_PROVIDER_AU;
+ }
+ else if (STRCASEEQ('j','J',"jhtml",vv)) {
+ dt->html_spec_type = CHXJ_SPEC_Jhtml;
+ dt->provider = CHXJ_PROVIDER_SOFTBANK;
+ }
+ else if (STRCASEEQ('j','J',"jxhtml",vv)) {
+ dt->html_spec_type = CHXJ_SPEC_Jxhtml;
+ dt->provider = CHXJ_PROVIDER_SOFTBANK;
+ }
}
}
- }
- else
- if (strcasecmp(name, "bmp4") == 0)
- {
- Node* ch = qs_get_child_node(doc, child);
- if (ch != NULL && strcasecmp(qs_get_node_name(doc,ch), "text") == 0)
- {
- char *vv = qs_get_node_value(doc,ch);
- if (strcasecmp(vv, "true") == 0)
- {
- dt->available_bmp4 = 1;
- }
- else
- {
- dt->available_bmp4 = 0;
+ else
+ if (strcasecmp(name, "heigh") == 0) {
+ Node* ch = qs_get_child_node(doc, child);
+ if (ch && strcasecmp(qs_get_node_name(doc,ch), "text") == 0) {
+ char *vv = qs_get_node_value(doc,ch);
+ unsigned int ii;
+ for (ii=0; ii<strlen(vv); ii++) {
+ if ((vv[ii] >= '1' && vv[ii] <= '9') || vv[ii] == '0')
+ continue;
+ break;
+ }
+
+ if (ii == strlen(vv))
+ dt->heigh = atoi(qs_get_node_value(doc,ch));
+ else
+ dt->heigh = 0;
}
}
- }
- else
- if (strcasecmp(name, "color") == 0)
- {
- Node* ch = qs_get_child_node(doc, child);
- if (ch != NULL && strcasecmp(qs_get_node_name(doc,ch), "text") == 0)
- {
- char *vv = qs_get_node_value(doc,ch);
- if (chxj_chk_numeric(vv) != 0)
- {
- dt->color = 0;
- }
- else
- {
- dt->color = chxj_atoi(vv);
+ break;
+
+ case 'w':
+ case 'W':
+ if (strcasecmp(name, "width") == 0) {
+ Node *ch = qs_get_child_node(doc, child);
+ if (ch && strcasecmp(qs_get_node_name(doc,ch), "text") == 0) {
+ char *vv = qs_get_node_value(doc,ch);
+ unsigned int ii;
+ for (ii=0; ii<strlen(vv); ii++) {
+ if ((vv[ii] >= '1' && vv[ii] <= '9') || vv[ii] == '0')
+ continue;
+ break;
+ }
+ if (ii == strlen(vv))
+ dt->width = atoi(qs_get_node_value(doc,ch));
+ else
+ dt->width = 0;
}
}
- }
- else
- if (strcasecmp(name, "emoji_type") == 0)
- {
- Node* ch = qs_get_child_node(doc, child);
- if (ch != NULL && strcasecmp(qs_get_node_name(doc,ch), "text") == 0)
- {
- dt->emoji_type = apr_pstrdup(p, qs_get_node_value(doc, ch));
- }
- }
- else
- if (strcasecmp(name, "wp_width") == 0)
- {
- Node* ch = qs_get_child_node(doc, child);
- if (ch != NULL && strcasecmp(qs_get_node_name(doc,ch), "text") == 0)
- {
- char *vv = qs_get_node_value(doc,ch);
- int ii;
- for (ii=0; ii<strlen(vv); ii++)
- {
- if ((vv[ii] >= '1' && vv[ii] <= '9') || vv[ii] == '0')
- {
- continue;
+ else
+ if (strcasecmp(name, "wp_width") == 0) {
+ Node *ch = qs_get_child_node(doc, child);
+ if (ch && strcasecmp(qs_get_node_name(doc,ch), "text") == 0) {
+ char *vv = qs_get_node_value(doc,ch);
+ unsigned int ii;
+ for (ii=0; ii<strlen(vv); ii++) {
+ if ((vv[ii] >= '1' && vv[ii] <= '9') || vv[ii] == '0')
+ continue;
+ break;
}
- break;
- }
- if (ii == strlen(vv))
- {
- dt->wp_width = atoi(qs_get_node_value(doc,ch));
- }
- else
- {
- dt->wp_width = 0;
+
+ if (ii == strlen(vv))
+ dt->wp_width = atoi(qs_get_node_value(doc,ch));
+ else
+ dt->wp_width = 0;
}
}
- }
- else
- if (strcasecmp(name, "wp_heigh") == 0)
- {
- Node* ch = qs_get_child_node(doc, child);
- if (ch != NULL && strcasecmp(qs_get_node_name(doc,ch), "text") == 0)
- {
- char *vv = qs_get_node_value(doc,ch);
- int ii;
- for (ii=0; ii<strlen(vv); ii++)
- {
- if ((vv[ii] >= '1' && vv[ii] <= '9') || vv[ii] == '0')
- {
- continue;
+ else
+ if (strcasecmp(name, "wp_heigh") == 0) {
+ Node *ch = qs_get_child_node(doc, child);
+ if (ch && strcasecmp(qs_get_node_name(doc,ch), "text") == 0) {
+ char *vv = qs_get_node_value(doc,ch);
+ unsigned int ii;
+ for (ii=0; ii<strlen(vv); ii++) {
+ if ((vv[ii] >= '1' && vv[ii] <= '9') || vv[ii] == '0')
+ continue;
+ break;
}
- break;
- }
- if (ii == strlen(vv))
- {
- dt->wp_heigh = atoi(qs_get_node_value(doc,ch));
- }
- else
- {
- dt->wp_heigh = 0;
+
+ if (ii == strlen(vv))
+ dt->wp_heigh = atoi(qs_get_node_value(doc,ch));
+ else
+ dt->wp_heigh = 0;
}
}
- }
- else
- if (strcasecmp(name, "cache") == 0)
- {
- Node* ch = qs_get_child_node(doc, child);
- if (ch != NULL && strcasecmp(qs_get_node_name(doc,ch), "text") == 0)
- {
- char *vv = qs_get_node_value(doc,ch);
- int ii;
- for (ii=0; ii<strlen(vv); ii++)
- {
- if ((vv[ii] >= '1' && vv[ii] <= '9') || vv[ii] == '0')
- {
- continue;
- }
- break;
+ break;
+
+ case 'g':
+ case 'G':
+ if (strcasecmp(name, "gif") == 0) {
+ Node *ch = qs_get_child_node(doc, child);
+ if (ch && strcasecmp(qs_get_node_name(doc,ch), "text") == 0) {
+ char *vv = qs_get_node_value(doc,ch);
+
+ if (strcasecmp(vv, "true") == 0)
+ dt->available_gif = 1;
+ else
+ dt->available_gif = 0;
}
- if (ii == strlen(vv))
- {
- dt->cache = atoi(qs_get_node_value(doc,ch));
+ }
+ break;
+
+ case 'j':
+ case 'J':
+ if (strcasecmp(name, "jpeg") == 0 || strcasecmp(name, "jpg") == 0) {
+ Node *ch = qs_get_child_node(doc, child);
+ if (ch != NULL && strcasecmp(qs_get_node_name(doc,ch), "text") == 0) {
+ char *vv = qs_get_node_value(doc,ch);
+
+ if (strcasecmp(vv, "true") == 0)
+ dt->available_jpeg = 1;
+ else
+ dt->available_jpeg = 0;
}
- else
- {
- dt->cache = 0;
+ }
+ break;
+
+ case 'p':
+ case 'P':
+ if (strcasecmp(name, "png") == 0) {
+ Node *ch = qs_get_child_node(doc, child);
+ if (ch && strcasecmp(qs_get_node_name(doc,ch), "text") == 0) {
+ char *vv = qs_get_node_value(doc,ch);
+
+ if (strcasecmp(vv, "true") == 0)
+ dt->available_png = 1;
+ else
+ dt->available_png = 0;
}
}
- }
- else
- if (strcasecmp(name, "dpi_width") == 0)
- {
- Node* ch = qs_get_child_node(doc, child);
- if (ch != NULL && strcasecmp(qs_get_node_name(doc,ch), "text") == 0)
- {
- char *vv = qs_get_node_value(doc,ch);
- int ii;
- for (ii=0; ii<strlen(vv); ii++)
- {
- if ((vv[ii] >= '1' && vv[ii] <= '9') || vv[ii] == '0')
- {
- continue;
- }
- break;
+ break;
+
+ case 'b':
+ case 'B':
+ if (strcasecmp(name, "bmp2") == 0) {
+ Node *ch = qs_get_child_node(doc, child);
+ if (ch && strcasecmp(qs_get_node_name(doc,ch), "text") == 0) {
+ char *vv = qs_get_node_value(doc,ch);
+
+ if (strcasecmp(vv, "true") == 0)
+ dt->available_bmp2 = 1;
+ else
+ dt->available_bmp2 = 0;
}
- if (ii == strlen(vv))
- {
- dt->dpi_width = atoi(qs_get_node_value(doc,ch));
+ }
+ else
+ if (strcasecmp(name, "bmp4") == 0) {
+ Node *ch = qs_get_child_node(doc, child);
+ if (ch && strcasecmp(qs_get_node_name(doc,ch), "text") == 0) {
+ char *vv = qs_get_node_value(doc,ch);
+
+ if (strcasecmp(vv, "true") == 0)
+ dt->available_bmp4 = 1;
+ else
+ dt->available_bmp4 = 0;
}
- else
- {
- dt->dpi_width = 0;
+ }
+ break;
+
+ case 'c':
+ case 'C':
+ if (strcasecmp(name, "color") == 0) {
+ Node *ch = qs_get_child_node(doc, child);
+ if (ch && strcasecmp(qs_get_node_name(doc,ch), "text") == 0) {
+ char *vv = qs_get_node_value(doc,ch);
+
+ if (chxj_chk_numeric(vv) != 0)
+ dt->color = 0;
+ else
+ dt->color = chxj_atoi(vv);
}
}
- }
- else
- if (strcasecmp(name, "dpi_heigh") == 0)
- {
- Node* ch = qs_get_child_node(doc, child);
- if (ch != NULL && strcasecmp(qs_get_node_name(doc,ch), "text") == 0)
- {
- char *vv = qs_get_node_value(doc,ch);
- int ii;
- for (ii=0; ii<strlen(vv); ii++)
- {
- if ((vv[ii] >= '1' && vv[ii] <= '9') || vv[ii] == '0')
- {
- continue;
+ else
+ if (strcasecmp(name, "cache") == 0) {
+ Node *ch = qs_get_child_node(doc, child);
+ if (ch && strcasecmp(qs_get_node_name(doc,ch), "text") == 0) {
+ char *vv = qs_get_node_value(doc,ch);
+ unsigned int ii;
+ for (ii=0; ii<strlen(vv); ii++) {
+ if ((vv[ii] >= '1' && vv[ii] <= '9') || vv[ii] == '0')
+ continue;
+ break;
}
- break;
- }
- if (ii == strlen(vv))
- {
- dt->dpi_heigh = atoi(qs_get_node_value(doc,ch));
- }
- else
- {
- dt->dpi_heigh = 0;
+
+ if (ii == strlen(vv))
+ dt->cache = atoi(qs_get_node_value(doc,ch));
+ else
+ dt->cache = 0;
}
}
+ break;
+
+ case 'e':
+ case 'E':
+ if (strcasecmp(name, "emoji_type") == 0) {
+ Node *ch = qs_get_child_node(doc, child);
+ if (ch && strcasecmp(qs_get_node_name(doc,ch), "text") == 0)
+ dt->emoji_type = apr_pstrdup(p, qs_get_node_value(doc, ch));
+ }
+ break;
+ default:
+ break;
}
}
- if (dt->device_id != NULL)
- {
- if (dtl->table == NULL)
- {
+ if (dt->device_id) {
+ if (! dtl->table) {
dtl->table = dt;
dtl->tail = dt;
}
- else
- {
+ else {
dtl->tail->next = dt;
dtl->tail = dt;
}
}
}
+
+/**
+ * load device_data.xml
+ */
+void
+chxj_load_device_tsv_data(apr_file_t *fp,apr_pool_t *p, mod_chxj_config *conf)
+{
+ apr_status_t st;
+
+ char *pstat;
+ char *pair;
+
+ char *line = apr_palloc(p,256);
+
+ int is_header = 1;
+ int keynum = 0;
+ int valnum = 0;
+
+ conf->device_keys = apr_array_make(p,2, sizeof(const char*));
+ conf->device_hash = apr_hash_make(p);
+
+ while(APR_EOF != (st=apr_file_eof(fp))){
+ st = apr_file_gets(line,1024,fp);
+ if(st == APR_SUCCESS){
+ if(is_header){
+ keynum=0;
+
+ for(pair = apr_strtok(line,"\t",&pstat); pair != NULL; pair = apr_strtok(NULL,"\t",&pstat)){
+ apr_collapse_spaces(pair,pair);
+ if(keynum < 128){
+ *(const char**)apr_array_push(conf->device_keys) = apr_pstrdup(p,pair);
+ }
+
+ //ap_log_error(APLOG_MARK, APLOG_CRIT, 0, NULL, "V[[%s]]", pair);
+ keynum++;
+ }
+ is_header = 0;
+ }
+ else{
+ apr_table_t *tsv_table = apr_table_make(p,keynum);
+ valnum = 0;
+ char *uid = NULL;
+ char *provider = NULL;
+ for(pair = apr_strtok(line,"\t",&pstat); pair != NULL; pair = apr_strtok(NULL,"\t",&pstat)){
+ apr_collapse_spaces(pair,pair);
+ if(valnum < keynum){
+ const char *kn = ((const char**)conf->device_keys->elts)[valnum];
+ if(strcasecmp("-",pair) != 0){
+ apr_table_set(tsv_table,kn,pair);
+ if(strcasecmp(kn,"device_id") == 0){
+ uid = apr_pstrdup(p,pair);
+ }
+ else if(strcasecmp(kn,"provider") == 0){
+ if(strcasecmp(pair,"docomo") == 0){
+ provider = "1";
+ }
+ else if(strcasecmp(pair,"au") == 0){
+ provider = "2";
+ }
+ else if(strcasecmp(pair,"softbank") == 0){
+ provider = "3";
+ }
+ else{
+ provider = apr_pstrdup(p,pair);
+ }
+ }
+ //ap_log_error(APLOG_MARK, APLOG_CRIT, 0, NULL, "[%s] %d:V[%s] = [%s]", uid,valnum,kn,pair);
+ }
+ }
+ valnum++;
+ }
+ if(uid != NULL && *uid && provider != NULL && *provider){
+ char *key = apr_psprintf(p,"%s.%s",provider,uid);
+ //ap_log_error(APLOG_MARK, APLOG_CRIT, 0, NULL, "save hash [%s]",key );
+ apr_hash_set(conf->device_hash,key,APR_HASH_KEY_STRING,tsv_table);
+ }
+ }
+ }
+ }
+}
+
/*
* vim:ts=2 et
*/