File: //lib64/python2.7/site-packages/wsdiscovery/actions/probe.py
from xml.dom import minidom
from ..namespaces import NS_WSA, NS_WSD
from ..envelope import SoapEnvelope
from ..util import createSkelSoapMessage, getBodyEl, getHeaderEl, addElementWithText, \
addTypes, getTypes, addScopes, getDocAsString, getScopes
ACTION_PROBE = "http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe"
def createProbeMessage(env):
doc = createSkelSoapMessage(ACTION_PROBE)
bodyEl = getBodyEl(doc)
headerEl = getHeaderEl(doc)
addElementWithText(doc, headerEl, "wsa:MessageID", NS_WSA, env.getMessageId())
addElementWithText(doc, headerEl, "wsa:To", NS_WSA, env.getTo())
if len(env.getReplyTo()) > 0:
addElementWithText(doc, headerEl, "wsa:ReplyTo", NS_WSA, env.getReplyTo())
probeEl = doc.createElementNS(NS_WSD, "wsd:Probe")
bodyEl.appendChild(probeEl)
addTypes(doc, probeEl, env.getTypes())
addScopes(doc, probeEl, env.getScopes())
return getDocAsString(doc)
def parseProbeMessage(dom):
env = SoapEnvelope()
env.setAction(ACTION_PROBE)
try:
env.setMessageId(dom.getElementsByTagNameNS(NS_WSA, "MessageID")[0].firstChild.data.strip())
replyToNodes = dom.getElementsByTagNameNS(NS_WSA, "ReplyTo")
if len(replyToNodes) > 0 and \
isinstance(replyToNodes[0].firstChild, minidom.Text):
env.setReplyTo(replyToNodes[0].firstChild.data.strip())
env.setTo(dom.getElementsByTagNameNS(NS_WSA, "To")[0].firstChild.data.strip())
typeNodes = dom.getElementsByTagNameNS(NS_WSD, "Types")
if len(typeNodes) > 0:
env.getTypes().extend(getTypes(typeNodes[0]))
scopeNodes = dom.getElementsByTagNameNS(NS_WSD, "Scopes")
if len(scopeNodes) > 0:
env.getScopes().extend(getScopes(scopeNodes[0]))
return env
except Exception:
env = None
return None