Ejemplo n.º 1
0
def readXmlDataFromURI(dev, URI, xmlRootNode, xmlChildNode, timeout=5):
    params, code, elementCount = {}, HTTP_ERROR, 0

    data = format_http_get(URI, 0, "")
    log.info(data)
    dev.openLEDM()
    dev.writeLEDM(data)
    response = cStringIO.StringIO()
    try:
        while dev.readLEDM(1024, response, timeout):
            pass
    except Error:
        dev.closeLEDM()
        log.error("Unable to read LEDM Channel")
    dev.closeEWS_LEDM()
    strResp = str(response.getvalue())
    if strResp is not None:
        code = get_error_code(strResp)
        pos = strResp.find(xmlRootNode, 0, len(strResp))
        repstr = strResp[pos:].strip()
        elementCount = repstr.count(xmlChildNode)
        try:
            params = utils.XMLToDictParser().parseXML(repstr)
        except xml.parsers.expat.ExpatError, e:
            log.error("XML parser failed: %s" % e)
Ejemplo n.º 2
0
def _readWriteWifiConfig(dev, request):
    if not request:
        log.error("Invalid request")
        return 'executionfailed', {}

    log.debug("Sending request on wifi config channel...")
    log.log_data(request)
    #log.xml(request)

    bytes_written = dev.writeWifiConfig(request)
    log.debug("Wrote %d bytes." % bytes_written)

    data = cStringIO.StringIO()
    log.debug("Reading response on wifi config channel...")
    bytesread = dev.readWifiConfig(device.MAX_BUFFER, stream=data, timeout=30)
    i = 0
    # if response data is > 8192 bytes, make sure we have read it all...
    while True:
        i += 1
        bytesread = dev.readWifiConfig(device.MAX_BUFFER,
                                       stream=data,
                                       timeout=1)
        if not bytesread or i > MAX_RETRIES:
            break

    data = data.getvalue()

    #log.xml(repr(data))

    # Convert any char references
    data = utils.unescape(data)

    #log.xml(repr(data))
    data = unicode(data, 'utf-8')

    #log.xml(repr(data))

    # C4380 returns invalid XML for DeviceCapabilitiesResponse
    # Eliminate any invalid characters
    data = data.replace(u"Devicecapabilities",
                        u"DeviceCapabilities").replace('\x00', '')

    log.log_data(data)
    log.debug("Read %d bytes." % len(data))

    if not data:
        log.error("No data")
        return 'executionfailed', {}

    #log.xml(data)

    try:
        params = utils.XMLToDictParser().parseXML(data)
    except xml.parsers.expat.ExpatError, e:
        log.error("XML parser failed: %s" % e)
        match = re.search(r"""line\s*(\d+).*?column\s*(\d+)""", str(e), re.I)
        if match is not None:
            log.error(data[int(match.group(2)):])
        return 'executionfailed', {}
Ejemplo n.º 3
0
def readXmlDataFromURI(dev, URI, xmlRootNode, xmlChildNode, timeout=5):
    params, code, elementCount = {}, HTTP_ERROR, 0

    data = format_http_get(URI, 0, "")
    log.info(data)
    response = cStringIO.StringIO()
    if dev.openLEDM() == -1:
        dev.closeLEDM()
        if dev.openEWS_LEDM() == -1:

            dev.openMarvell_EWS()
            dev.writeMarvell_EWS(data)
            try:
                while dev.readMarvell_EWS(1024, response, timeout):
                    pass
            except Error:
                dev.closeMarvell_EWS()
                log.error("Unable to read Marvell_EWS Channel")
        else:
            dev.writeEWS_LEDM(data)
            try:
                while dev.readEWS_LEDM(1024, response, timeout):
                    pass
            except Error:
                dev.closeEWS_LEDM()
                log.error("Unable to read EWS_LEDM Channel")
    else:
        dev.writeLEDM(data)
        try:
            while dev.readLEDM(1024, response, timeout):
                pass
        except Error:
            dev.closeLEDM()
            log.error("Unable to read LEDM Channel")
    #dev.closeEWS_LEDM()
    strResp = str(response.getvalue())
    if strResp is not None:
        code = get_error_code(strResp)
        if code == HTTP_OK:
            strResp = utils.unchunck_xml_data(strResp)

        pos = strResp.find(xmlRootNode, 0, len(strResp))
        repstr = strResp[pos:].strip()
        repstr = filter(
            lambda c: c not in "\r\t\n",
            repstr)  # To remove formating characters from the received xml
        repstr = repstr.rstrip(
            '0')  # To remove trailing zero from the received xml
        elementCount = repstr.count(xmlChildNode)
        try:
            params = utils.XMLToDictParser().parseXML(repstr)
        except xml.parsers.expat.ExpatError, e:
            log.debug("XML parser failed: %s" %
                      e)  #changed from error to debug
Ejemplo n.º 4
0
    def setDateAndTime(self):
        stream = cStringIO.StringIO()
        self.getEWSUrl("/hp/device/settings_fax_setup_wizard.xml", stream)
        fax_setup = utils.XMLToDictParser().parseXML(stream.getvalue())
        timeformat = fax_setup['faxsetupwizard-time-timeformat']

        try:
            timeformat = int(timeformat)
        except (ValueError, TypeError):
            timeformat = TIME_FORMAT_AM_PM

        log.debug("timeformat: %d" % timeformat)

        dateformat = fax_setup['faxsetupwizard-date-dateformat']

        try:
            dateformat = int(dateformat)
        except (ValueError, TypeError):
            dateformat = DATE_FORMAT_DD_MM_YYYY

        log.debug("dateformat: %d" % dateformat)

        t = time.localtime()
        hr = t[3]

        am_pm = PM
        if t[3] < 12:
            am_pm = AM

        if timeformat == TIME_FORMAT_AM_PM and hr > 12:
            hr -= 12

        post = {
            "DateFormat": dateformat,
            "Year": t[0],
            "Month": t[1],
            "Day": t[2],
            "TimeFormat": timeformat,
            "Hour": hr,
            "Minute": t[4]
        }

        if timeformat == TIME_FORMAT_AM_PM:
            post['AM'] = am_pm

        return self.post("/hp/device/set_config.html", post)
Ejemplo n.º 5
0
    def checkForError(self, uri):
        stream = BytesIO()
        data = self.dev.FetchLEDMUrl(uri)
        if not data:
            log.error("Unable To read the XML data from device")
            return ""

        xmlDict = utils.XMLToDictParser().parseXML(data)
        log.debug("Read Attribute:%s and it is value:%s" % (uri, data))

        FAX_SEND_STATE_ERROR = 20
        FAX_SEND_STATE_SUCCESS = 30
        state = FAX_SEND_STATE_ERROR
        Fax_send_state = STATUS_ERROR

        if cmp(xmlDict['j:job-faxpcsendstatus-faxtxmachinestatus'],"Transmitting")==0 \
            and cmp(xmlDict['j:job-faxpcsendstatus-faxtxerrorstatus'],"CommunicationError")== 0:
            state = FAX_SEND_STATE_ERROR
            Fax_send_state = STATUS_ERROR_IN_TRANSMITTING
        elif(cmp(xmlDict['j:job-faxpcsendstatus-faxtxmachinestatus'],"Connecting")==0 \
            and cmp(xmlDict['j:job-faxpcsendstatus-faxtxerrorstatus'],"NoAnswer")== 0):
            state = FAX_SEND_STATE_ERROR
            Fax_send_state = STATUS_ERROR_IN_CONNECTING
        elif(cmp(xmlDict['j:job-faxpcsendstatus-faxtxerrorstatus'],"PcDisconnect")==0 \
            and cmp(xmlDict['j:job-faxpcsendstatus-pagestatus-state'],"Error")== 0):
            state = FAX_SEND_STATE_ERROR
            Fax_send_state = STATUS_ERROR_PROBLEM_IN_FAXLINE
        elif(cmp(xmlDict['j:job-faxpcsendstatus-faxtxerrorstatus'],"Stop")==0 \
            and cmp(xmlDict['j:job-faxpcsendstatus-pagestatus-state'],"Error")== 0):
            state = FAX_SEND_STATE_ERROR
            Fax_send_state = STATUS_JOB_CANCEL
        elif (cmp(xmlDict['j:job-faxpcsendstatus-faxtxmachinestatus'],
                  "Transmitting") == 0):
            state = FAX_SEND_STATE_SUCCESS
            Fax_send_state = FAX_SEND_STATE_SUCCESS
        return state, Fax_send_state
Ejemplo n.º 6
0
 def getStationName(self):
     stream = cStringIO.StringIO()
     self.getEWSUrl("/hp/device/settings_fax_setup_wizard.xml", stream)
     fax_setup = utils.XMLToDictParser().parseXML(stream.getvalue())
     return fax_setup['faxsetupwizard-userinformation-faxcompanyname']
Ejemplo n.º 7
0
 def getPhoneNum(self):
     stream = cStringIO.StringIO()
     self.getEWSUrl("/hp/device/settings_fax_setup_wizard.xml", stream)
     fax_setup = utils.XMLToDictParser().parseXML(stream.getvalue())
     return fax_setup['faxsetupwizard-faxvoicenumber-faxnumber']
Ejemplo n.º 8
0
def getLocation(bssid, ss):
    log.debug("Getting location for wifi AP: %s" % bssid)
    request = """<?xml version='1.0'?>
<LocationRQ xmlns='http://skyhookwireless.com/wps/2005' version='2.6' street-address-lookup='full'>
<authentication version='2.0'>
<simple>
<username>beta</username>
<realm>js.loki.com</realm>
</simple>
</authentication>
<access-point>
<mac>%s</mac>
<signal-strength>%d</signal-strength>
</access-point>
</LocationRQ>""" % (bssid.encode("utf-8"), ss)

    import httplib, socket
    ret = {}
    request_len = len(request)

    log.log_data(request)

    try:
        conn = httplib.HTTPSConnection("api.skyhookwireless.com")
        conn.putrequest("POST", "/wps2/location")
        conn.putheader("Content-type", "text/xml")
        conn.putheader("Content-Length", str(request_len))
        conn.endheaders()
        conn.send(request)
    except (socket.gaierror, socket.error):
        log.debug("Host connection error")
        return {}

    response = conn.getresponse()
    if response.status != 200:
        log.debug("Connection to location server failed")
        return {}

    xml = response.read()
    log.log_data(xml)

    try:
        params = utils.XMLToDictParser().parseXML(xml)
    except xml.parsers.expat.ExpatError:
        return {}

    if 'locationrs-error' in params:
        log.debug("Location server returned failure")
        return {}

    ret['latitude'] = params.get('locationrs-location-latitude', 0)
    ret['longitude'] = params.get('locationrs-location-longitude', 0)
    street_number = params.get(
        'locationrs-location-street-address-street-number', '')
    street_name = params.get('locationrs-location-street-address-address-line',
                             '')
    city = params.get('locationrs-location-street-address-city', '')
    country = params.get('locationrs-location-street-address-country-code', '')

    address = "%s %s, %s, %s" % (street_number, street_name, city, country)
    ret['address'] = address.strip()

    return ret
Ejemplo n.º 9
0
def readXmlTagDataFromURI(dev, URI, xmlRootNode, xmlReqDataNode, timeout=5):
    paramsList, code = [], HTTP_ERROR

    data = format_http_get(URI, 0, "")
    log.info(data)
    response = cStringIO.StringIO()
    if dev.openLEDM() == -1:
        dev.closeLEDM()
        if dev.openEWS_LEDM() == -1:

            dev.openMarvell_EWS()
            dev.writeMarvell_EWS(data)
            try:
                while dev.readMarvell_EWS(1024, response, timeout):
                    pass
            except Error:
                dev.closeMarvell_EWS()
                log.error("Unable to read Marvell_EWS Channel")
        else:
            dev.writeEWS_LEDM(data)
            try:
                while dev.readEWS_LEDM(1024, response, timeout):
                    pass
            except Error:
                dev.closeEWS_LEDM()
                log.error("Unable to read EWS_LEDM Channel")
    else:
        dev.writeLEDM(data)
        try:
            while dev.readLEDM(1024, response, timeout):
                pass
        except Error:
            dev.closeLEDM()
            log.error("Unable to read LEDM Channel")

    #dev.closeEWS_LEDM()
    strResp = str(response.getvalue())
    if strResp is not None:
        code = get_error_code(strResp)
        if code == HTTP_OK:
            strResp = utils.unchunck_xml_data(strResp)

        pos = strResp.find(xmlRootNode, 0, len(strResp))
        repstr = strResp[pos:].strip()
        repstr = filter(
            lambda c: c not in "\r\t\n",
            repstr)  # To remove formating characters from the received xml
        repstr = repstr.rstrip(
            '0')  # To remove trailing zero from the received xml
        try:
            parser_object = utils.extendedExpat()
            root_element = parser_object.Parse(repstr)
            xmlReqDataNode = filter(
                lambda c: c not in "<>",
                xmlReqDataNode)  # To remove '<' and '>' characters
            reqDataElementList = root_element.getElementsByTagName(
                xmlReqDataNode)
            for node in reqDataElementList:
                repstr = node.toString()
                repstr = filter(
                    lambda c: c not in "\r\t\n", repstr
                )  # To remove formating characters from the received xml
                params = utils.XMLToDictParser().parseXML(repstr)
                paramsList.append(params)
        except xml.parsers.expat.ExpatError, e:
            log.debug("XML parser failed: %s" %
                      e)  #changed from error to debug