static int print_events(WsXmlDocH indoc, void *data) { FILE *f = stdout; const char *filename = output_file; struct tm *tm; time_t now; char timestr[128]; char *log_msg; time(&now); tm = localtime(&now); // strftime(timestr, 128, "%b %e %T", tm); if (filename) { f = fopen(filename, "a+"); if (f == NULL) { error("Could not open file for writing"); return -1; } } if(f == stdout) log_msg = u_strdup_printf("\t\t\033[22;32mAt %s received:\033[m \n\n",timestr); else log_msg = u_strdup_printf("At %s received:\n\n", timestr); //fprintf(f, "%s", log_msg); // ws_xml_dump_node_tree(f, ws_xml_get_doc_root(indoc)); { WsXmlNodeH node; WsXmlNodeH class_node; char* class_name; int child_count; int i; node = ws_xml_get_soap_body (indoc); class_node = ws_xml_get_child (node, 0, NULL, NULL); class_name = ws_xml_get_node_local_name (class_node); printf ("\n%s\n", class_name); child_count = ws_xml_get_child_count (class_node); for (i = 0; i < child_count; i++) { WsXmlNodeH child_node; WsXmlAttrH attr; char* node_name; child_node = ws_xml_get_child (class_node, i, NULL, NULL); attr = ws_xml_get_node_attr (child_node, 0); node_name = ws_xml_get_attr_value (attr); printf ("%-25s - %s\n", ws_xml_get_node_local_name (child_node), ws_xml_get_node_text (child_node)); } } fflush(f); if (f != stdout) { fclose(f); } u_free(log_msg); return 0; }
WsXmlAttrH ws_xml_find_node_attr(WsXmlNodeH node, const char *attrNs, const char *attrName) { WsXmlAttrH attr = NULL; if (node && attrName) { int i = 0; for (i = 0; (attr = ws_xml_get_node_attr(node, i)) != NULL; i++) { char *curNsUri = ws_xml_get_attr_ns(attr); char *curName = ws_xml_get_attr_name(attr); if ((attrNs == curNsUri) || (attrNs != NULL && curNsUri != NULL && !strcmp(curNsUri, attrNs))) { if (!strcmp(attrName, curName)) break; } } } return attr; }
/** * Duplicate an XML attribute * @param dstNode Destination XML node * @param srcNode Source Node */ void ws_xml_duplicate_attr(WsXmlNodeH dstNode, WsXmlNodeH srcNode) { int i; WsXmlAttrH attr; for (i = 0; (attr = ws_xml_get_node_attr(srcNode, i)) != NULL; i++) { ws_xml_add_node_attr(dstNode, ws_xml_get_attr_ns(attr), ws_xml_get_attr_name(attr), ws_xml_get_attr_value(attr)); } }
static void cimxml_build_response_msg(WsXmlDocH indoc, WsXmlDocH *outdoc) { WsXmlDocH doc = NULL; WsXmlNodeH outnode = NULL; WsXmlNodeH innode = NULL; WsXmlNodeH temp = NULL; WsXmlNodeH temp2 = NULL; doc = ws_xml_create_doc(NULL, CIMXML_CIM); outnode = ws_xml_get_doc_root(doc); innode = ws_xml_get_doc_root(indoc); // char *value = ws_xml_get_node_attr(WsXmlNodeH node, int index) ws_xml_add_node_attr(outnode, NULL, CIMXML_CIMVERSION, "2.0"); ws_xml_add_node_attr(outnode, NULL, CIMXML_DTDVERSION, "2.0"); outnode = ws_xml_add_child(outnode, NULL, CIMXML_MESSAGE, NULL); innode = ws_xml_get_child(innode, 0, NULL, CIMXML_MESSAGE); int n = ws_xml_get_node_attr_count(innode); int i = 0; while(i < n) { WsXmlAttrH attr = ws_xml_get_node_attr(innode, i); char *name = ws_xml_get_attr_name(attr); char *value = ws_xml_get_attr_value(attr); ws_xml_add_node_attr(outnode, NULL, name, value); i++; } temp = ws_xml_get_child(innode, 0, NULL, CIMXML_SIMPLEEXPREQ); if(temp) { outnode = ws_xml_add_child(outnode, NULL, CIMXML_SIMPLEEXPRSP, NULL); outnode = ws_xml_add_child(outnode, NULL, CIMXML_EXPMETHODRESPONSE, NULL); ws_xml_add_node_attr(outnode, NULL, CIMXML_NAME, "ExportIndication"); ws_xml_add_child(outnode, NULL, CIMXML_IRETURNVALUE, NULL); } else { temp = ws_xml_get_child(innode, 0, NULL, CIMXML_MULTIEXPREQ); outnode = ws_xml_add_child(outnode, NULL, CIMXML_MULTIEXPRSQ, NULL); n = ws_xml_get_child_count(temp); i = 0; while(i < n) { innode = ws_xml_get_child(temp, i, NULL, CIMXML_SIMPLEEXPREQ); temp2 = ws_xml_add_child(outnode, NULL, CIMXML_EXPMETHODRESPONSE, NULL); ws_xml_add_node_attr(temp2, NULL, CIMXML_NAME, "ExportIndication"); ws_xml_add_child(temp2, NULL, CIMXML_IRETURNVALUE, NULL); i++; } } *outdoc = doc; }