File: //usr/lib/python2.7/site-packages/wsdiscovery/actions/hello.py
from ..namespaces import NS_WSA, NS_WSD
from ..envelope import SoapEnvelope
from ..util import createSkelSoapMessage, getBodyEl, getHeaderEl, addElementWithText, \
addTypes, addScopes, getDocAsString, getScopes, getQNameFromValue, \
addEPR, addXAddrs, _parseAppSequence, getTypes, getXAddrs
ACTION_HELLO = "http://schemas.xmlsoap.org/ws/2005/04/discovery/Hello"
def createHelloMessage(env):
doc = createSkelSoapMessage(ACTION_HELLO)
bodyEl = getBodyEl(doc)
headerEl = getHeaderEl(doc)
addElementWithText(doc, headerEl, "wsa:MessageID", NS_WSA, env.getMessageId())
if len(env.getRelatesTo()) > 0:
addElementWithText(doc, headerEl, "wsa:RelatesTo", NS_WSA, env.getRelatesTo())
relatesToEl = headerEl.getElementsByTagNameNS(NS_WSA, "RelatesTo")[0]
relatesToEl.setAttribute("RelationshipType", "wsd:Suppression")
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)
helloEl = doc.createElementNS(NS_WSD, "wsd:Hello")
addEPR(doc, helloEl, env.getEPR())
addTypes(doc, helloEl, env.getTypes())
addScopes(doc, helloEl, env.getScopes())
addXAddrs(doc, helloEl, env.getXAddrs())
addElementWithText(doc, helloEl, "wsd:MetadataVersion", NS_WSD, env.getMetadataVersion())
bodyEl.appendChild(helloEl)
return getDocAsString(doc)
def parseHelloMessage(dom):
env = SoapEnvelope()
env.setAction(ACTION_HELLO)
try:
env.setMessageId(dom.getElementsByTagNameNS(NS_WSA, "MessageID")[0].firstChild.data.strip())
env.setTo(dom.getElementsByTagNameNS(NS_WSA, "To")[0].firstChild.data.strip())
_parseAppSequence(dom, env)
relatesToNodes = dom.getElementsByTagNameNS(NS_WSA, "RelatesTo")
if len(relatesToNodes) > 0:
env.setRelatesTo(relatesToNodes[0].firstChild.data.strip())
env.setRelationshipType(getQNameFromValue( \
relatesToNodes[0].getAttribute("RelationshipType"), relatesToNodes[0]))
env.setEPR(dom.getElementsByTagNameNS(NS_WSA, "Address")[0].firstChild.data.strip())
typeNodes = dom.getElementsByTagNameNS(NS_WSD, "Types")
if len(typeNodes) > 0:
env.setTypes(getTypes(typeNodes[0]))
scopeNodes = dom.getElementsByTagNameNS(NS_WSD, "Scopes")
if len(scopeNodes) > 0:
env.setScopes(getScopes(scopeNodes[0]))
xNodes = dom.getElementsByTagNameNS(NS_WSD, "XAddrs")
if len(xNodes) > 0:
env.setXAddrs(getXAddrs(xNodes[0]))
env.setMetadataVersion(dom.getElementsByTagNameNS(NS_WSD, "MetadataVersion")[0].firstChild.data.strip())
return env
except Exception:
env = None
return None