static int parseBody(Resolver * const me, xmlNodePtr cur) { xmlChar *key; if ((!xmlStrcmp(cur->name, (const xmlChar *)"message"))) { key = xmlGetProp(cur, (const xmlChar *)"code"); printf("\tcode:%s\n", key); /*������code�Ƿ�һ�£������������*/ if (CheckGatewayCode(key) != 0) { me->CMTID = -1; PrintfRed("getway code error!"); XmlFree(key); return -1; } me->CMTID = 0; XmlFree(key); cur = cur->xmlChildrenNode; while (cur != NULL) { if ((!xmlStrcmp(cur->name, (const xmlChar *)"config")))/*�������*/ { printf("%s:\n", cur->name); deviceMgmt->deletesensorconfig(deviceMgmt, UF_STATUS); deviceMgmt->deletezigbeeconfig(deviceMgmt); parseDevice(me, cur); deviceMgmt->disablecom(deviceMgmt); } else if ((!xmlStrcmp(cur->name, (const xmlChar *)"control"))) { printf("%s:\n", cur->name); key = xmlGetProp(cur, (const xmlChar *)"action"); printf("action:%s\n", key); XmlFree(key); key = xmlGetProp(cur, (const xmlChar *)"cid"); printf("cid:%s\n", key); XmlFree(key); key = xmlGetProp(cur, (const xmlChar *)"object"); printf("object:%s\n", key); XmlFree(key); } cur = cur->next; } } return -1; }
void parseDevices(xmlDocPtr doc, xmlNodePtr cur) { cur = cur->xmlChildrenNode; while (cur != NULL) { if ((!xmlStrcmp(cur->name, (const xmlChar *)"device"))) { control = g_malloc(sizeof(Controller_info)); control->serial = atoi(g_strdup((const char *) xmlGetProp(cur, BAD_CAST "id"))); control->name = g_strdup((const char *) xmlGetProp(cur, BAD_CAST "name")); control->def = xmlStrEqual(xmlGetProp(cur, BAD_CAST "default"), (const xmlChar *)"yes") ? TRUE : FALSE; control->config = FALSE; if (!control->serial) control->filename = g_strdup("/dev/stdin"); else control->filename = g_strdup(""); printf("Device 0x%08x : %s (%s) (%s)\n", control->serial, control->name, (control->def)?"yes":"no", control->filename); parseDevice(doc, cur); devices = g_list_append(devices, control); if (control->def) default_control = control; } cur = cur->next; } }