int outbound_addressing_filter(SoapOpH opHandle, void *data, void *opaqueData) { WsXmlDocH in_doc = soap_get_op_doc(opHandle, 1); WsXmlDocH out_doc = soap_get_op_doc(opHandle, 0); WsXmlNodeH outHeaders = wsman_get_soap_header_element(out_doc, NULL, NULL); if (!outHeaders) { return 0; } if (ws_xml_get_child(outHeaders, 0, XML_NS_ADDRESSING, WSA_MESSAGE_ID) == NULL && !wsman_is_identify_request(in_doc)) { char uuidBuf[100]; generate_uuid(uuidBuf, sizeof(uuidBuf), 0); ws_xml_add_child(outHeaders, XML_NS_ADDRESSING, WSA_MESSAGE_ID, uuidBuf); debug("Adding message id: %s", uuidBuf); } if (in_doc != NULL) { WsXmlNodeH inMsgIdNode; inMsgIdNode = wsman_get_soap_header_element(in_doc,XML_NS_ADDRESSING, WSA_MESSAGE_ID); if (inMsgIdNode != NULL && !ws_xml_get_child(outHeaders, 0, XML_NS_ADDRESSING, WSA_RELATES_TO)) { ws_xml_add_child(outHeaders, XML_NS_ADDRESSING, WSA_RELATES_TO, ws_xml_get_node_text(inMsgIdNode)); } } return 0; }
int Redirect_transfer_action ( SoapOpH op, void* appData, void *opaqueData) { //Same function to be called for Get, Put, Create, Delete Actions WsmanMessage *msg = wsman_get_msg_from_op(op); SoapH soap = soap_get_op_soap(op); WsXmlDocH in_doc = soap_get_op_doc(op, 1); WsContextH cntx = ws_create_ep_context(soap, in_doc); WsManClient *cl=NULL; WsXmlDocH response=NULL; debug ("Test Get Endpoint Called"); cl = setup_redirect_client(cntx, msg->auth_data.username, msg->auth_data.password ); wsman_send_request(cl,cntx->indoc); if (wsmc_get_last_error(cl) != WS_LASTERR_OK ){ //CURL/ HTTP errors soap_set_op_doc(op, redirect_generate_fault( cntx->indoc , cl), 0); return 1; } response = wsmc_build_envelope_from_response(cl); soap_set_op_doc(op, ws_xml_duplicate_doc(response), 0); wsmc_release(cl); return 0; }