void wsmc_add_selector_from_uri(WsXmlDocH doc, const char *resource_uri) { u_uri_t *uri; WsXmlNodeH header = ws_xml_get_soap_header(doc); hash_t *query; hnode_t *hn; hscan_t hs; if (resource_uri != NULL) { if (u_uri_parse((const char *) resource_uri, &uri) != 0) return; else if (!uri->query) goto cleanup; } query = u_parse_query(uri->query); hash_scan_begin(&hs, query); while ((hn = hash_scan_next(&hs))) { wsman_add_selector(header, (char *) hnode_getkey(hn), (char *) hnode_get(hn)); debug("key=%s value=%s", (char *) hnode_getkey(hn), (char *) hnode_get(hn)); } hash_free_nodes(query); hash_destroy(query); cleanup: if (uri) { u_uri_free(uri); } }
void wsman_add_namespace_as_selector(WsXmlDocH doc, const char *_namespace) { WsXmlNodeH header = ws_xml_get_soap_header(doc); wsman_add_selector(header, CIM_NAMESPACE_SELECTOR, _namespace); return; }
void wsmc_add_selector_from_options(WsXmlDocH doc, client_opt_t *options) { WsXmlNodeH header; hnode_t *hn; hscan_t hs; if (!options->selectors || hash_count(options->selectors) == 0) return; header = ws_xml_get_soap_header(doc); hash_scan_begin(&hs, options->selectors); while ((hn = hash_scan_next(&hs))) { wsman_add_selector(header, (char *) hnode_getkey(hn), (char *) hnode_get(hn)); debug("key = %s value=%s", (char *) hnode_getkey(hn), (char *) hnode_get(hn)); } }
static WsXmlDocH wsmc_build_envelope(WsSerializerContextH serctx, const char *action, const char *reply_to_uri, const char *resource_uri, const char *to_uri, client_opt_t *options) { WsXmlNodeH node; char uuidBuf[100]; WsXmlNodeH header; WsXmlDocH doc = ws_xml_create_envelope(); if (!doc) { error("Error while creating envelope"); return NULL; } header = ws_xml_get_soap_header(doc); generate_uuid(uuidBuf, sizeof(uuidBuf), 0); if (reply_to_uri == NULL) { reply_to_uri = WSA_TO_ANONYMOUS; } if (to_uri == NULL) { to_uri = WSA_TO_ANONYMOUS; } if (action != NULL) { ws_serialize_str(serctx, header, (char *)action, XML_NS_ADDRESSING, WSA_ACTION, 1); } if (to_uri) { ws_serialize_str(serctx, header, (char *)to_uri, XML_NS_ADDRESSING, WSA_TO, 1); } if (resource_uri) { ws_serialize_str(serctx, header, (char *)resource_uri, XML_NS_WS_MAN, WSM_RESOURCE_URI, 1); } if (uuidBuf[0] != 0) { ws_serialize_str(serctx, header, uuidBuf, XML_NS_ADDRESSING, WSA_MESSAGE_ID, 1); } if (options->timeout) { /* FIXME: see wsman-xml-serialize.c */ char buf[20]; sprintf(buf, "PT%u.%uS", (unsigned int) options->timeout / 1000, (unsigned int) options->timeout % 1000); ws_serialize_str(serctx, header, buf, XML_NS_WS_MAN, WSM_OPERATION_TIMEOUT, 0); } if (options->max_envelope_size) { ws_serialize_uint32(serctx, header, options->max_envelope_size, XML_NS_WS_MAN, WSM_MAX_ENVELOPE_SIZE, options->flags & FLAG_MUND_MAX_ESIZE); } if (options->fragment) { int mu = 0; if ((options->flags & FLAG_MUND_FRAGMENT) == FLAG_MUND_FRAGMENT) mu = 1; ws_serialize_str(serctx, header, options->fragment, XML_NS_WS_MAN, WSM_FRAGMENT_TRANSFER, 1); } node = ws_xml_add_child(header, XML_NS_ADDRESSING, WSA_REPLY_TO, NULL); ws_xml_add_child(node, XML_NS_ADDRESSING, WSA_ADDRESS, (char *)reply_to_uri); /* Do not add the selectors to the header for reference instances */ if ((options->flags & FLAG_CIM_REFERENCES) != FLAG_CIM_REFERENCES) { wsmc_add_selector_from_options(doc, options); if (options->cim_ns) { wsman_add_selector(header, CIM_NAMESPACE_SELECTOR, options->cim_ns); } } return doc; }