/** * <user_agent> */ static void s_set_user_agent_data(Doc *doc, apr_pool_t *p, mod_chxj_config *conf, Node *node) { 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 (STRCASEEQ('u','U',"user_agent",name)) { Attr *attr; device_table_list *dtl; if (! conf->devices) { conf->devices = apr_pcalloc(p, sizeof(device_table_list)); conf->devices->next = NULL; conf->devices->pattern = NULL; conf->devices->table = NULL; conf->devices->tail = NULL; dtl = conf->devices; } else { for (t = conf->devices; t ; t = t->next) { if (! t->next) break; } t->next = apr_pcalloc(p, sizeof(device_table_list)); t->next->next = NULL; t->next->pattern = NULL; t->next->table = NULL; t->next->tail = NULL; dtl = t->next; } for (attr = qs_get_attr(doc,child); attr ; attr = qs_get_next_attr(doc,attr)) { 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, (const char *)dtl->pattern, AP_REG_EXTENDED|AP_REG_ICASE); } } s_set_device_data(doc, p, dtl, child); } } }
static void s_get_tag_and_class_and_id(Doc *doc, Node *node, char **tag_name, char **class_name, char **id) { Attr *attr; *tag_name = node->name; for (attr = qs_get_attr(doc, node); attr; attr = qs_get_next_attr(doc,attr)) { char *name = qs_get_attr_name(doc,attr); char *value = qs_get_attr_value(doc,attr); if (STRCASEEQ('c','C', "class", name)) { if (*value != 0) { *class_name = value; } } else if (STRCASEEQ('i','I', "id", name)) { if (*value != 0) { *id = value; } } if (*id && *class_name) break; } }