File: //usr/lib/python2.7/site-packages/wsdiscovery/actions/resolvematch.py
from ..namespaces import NS_WSA, NS_WSD
from ..envelope import SoapEnvelope
from ..util import createSkelSoapMessage, getBodyEl, getHeaderEl, addElementWithText, \
addTypes, getTypes, addScopes, getDocAsString, getScopes, addEPR, \
addXAddrs, getXAddrs, _parseAppSequence
from .probematch import ProbeResolveMatch
ACTION_RESOLVE_MATCH = "http://schemas.xmlsoap.org/ws/2005/04/discovery/ResolveMatches"
def createResolveMatchMessage(env):
doc = createSkelSoapMessage(ACTION_RESOLVE_MATCH)
bodyEl = getBodyEl(doc)
headerEl = getHeaderEl(doc)
addElementWithText(doc, headerEl, "wsa:MessageID", NS_WSA, env.getMessageId())
addElementWithText(doc, headerEl, "wsa:RelatesTo", NS_WSA, env.getRelatesTo())
addElementWithText(doc, headerEl, "wsa:To", NS_WSA, env.getTo())
appSeqEl = doc.createElementNS(NS_WSD, "wsd:AppSequence")
appSeqEl.setAttribute("InstanceId", env.getInstanceId())
appSeqEl.setAttribute("MessageNumber", env.getMessageNumber())
headerEl.appendChild(appSeqEl)
resolveMatchesEl = doc.createElementNS(NS_WSD, "wsd:ResolveMatches")
if len(env.getProbeResolveMatches()) > 0:
resolveMatch = env.getProbeResolveMatches()[0]
resolveMatchEl = doc.createElementNS(NS_WSD, "wsd:ResolveMatch")
addEPR(doc, resolveMatchEl, resolveMatch.getEPR())
addTypes(doc, resolveMatchEl, resolveMatch.getTypes())
addScopes(doc, resolveMatchEl, resolveMatch.getScopes())
addXAddrs(doc, resolveMatchEl, resolveMatch.getXAddrs())
addElementWithText(doc, resolveMatchEl, "wsd:MetadataVersion", NS_WSD, resolveMatch.getMetadataVersion())
resolveMatchesEl.appendChild(resolveMatchEl)
bodyEl.appendChild(resolveMatchesEl)
return getDocAsString(doc)
def parseResolveMatchMessage(dom):
env = SoapEnvelope()
env.setAction(ACTION_RESOLVE_MATCH)
try:
env.setMessageId(dom.getElementsByTagNameNS(NS_WSA, "MessageID")[0].firstChild.data.strip())
env.setRelatesTo(dom.getElementsByTagNameNS(NS_WSA, "RelatesTo")[0].firstChild.data.strip())
env.setTo(dom.getElementsByTagNameNS(NS_WSA, "To")[0].firstChild.data.strip())
_parseAppSequence(dom, env)
nodes = dom.getElementsByTagNameNS(NS_WSD, "ResolveMatch")
if len(nodes) > 0:
node = nodes[0]
epr = node.getElementsByTagNameNS(NS_WSA, "Address")[0].firstChild.data.strip()
typeNodes = node.getElementsByTagNameNS(NS_WSD, "Types")
types = []
if len(typeNodes) > 0:
types = getTypes(typeNodes[0])
scopeNodes = node.getElementsByTagNameNS(NS_WSD, "Scopes")
scopes = []
if len(scopeNodes) > 0:
scopes = getScopes(scopeNodes[0])
xAddrs = getXAddrs(node.getElementsByTagNameNS(NS_WSD, "XAddrs")[0])
mdv = node.getElementsByTagNameNS(NS_WSD, "MetadataVersion")[0].firstChild.data.strip()
env.getProbeResolveMatches().append(ProbeResolveMatch(epr, types, scopes, xAddrs, mdv))
return env
except Exception:
env = None
return None