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)
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', {}
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
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)
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
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']
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']
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
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