HEX
Server: Apache/2.2.34 (Unix) mod_fastcgi/mod_fastcgi-SNAP-0910052141
System: Linux Kou-Etsu-Dou 4.4.59+ #25556 SMP PREEMPT Thu Mar 4 18:03:46 CST 2021 x86_64
User: hosam (1026)
PHP: 7.2.29
Disabled: NONE
Upload Files
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