self.secret = secret self.timeout = timeout self.retry = retry self.debug = debug self.syslog = syslog or logger.SysLogger(config.find_config()) self.port = reactor.listenUDP(0, self) def close(self): self.transport = None self.results.clear() self.port.stopListening() @defer.inlineCallbacks def sendto(self,req,(host,port),recv=True): if self.debug: print ":: Hexdump >> %s" % hexdump(str(req),len(req)) self.syslog.info("Start send packet To AC (%s:%s) >> %s"%(host,port,repr(req))) if not recv: self.transport.write(str(req),(host,port)) return for attempt in range(self.retry): self.syslog.info("Send portal packet times %s" % attempt) self.transport.write(str(req),(host,port)) now = time.time() waitto = now + self.timeout while now < waitto: if req.sid in self.results: defer.returnValue(self.results.pop(req.sid))
except Exception as err: log.err( err, ':: Send packet Error (%s:%s) >> %s' % (host, port, str(err))) raise err def datagramReceived(self, datagram, (host, port)): if self.prot == 'CMCC': self.processCMCC(datagram, (host, port)) elif self.prot == 'Huawei': self.processHuawei(datagram, (host, port)) def processCMCC(self, datagram, (host, port)): try: if self.debug: print ":: Hexdump > %s" % cmcc.hexdump(datagram, len(datagram)) resp = cmcc.PortalV2(packet=datagram, secret=self.secret) self.results[resp.sid] = resp log.msg(":: Received cmcc packet from AC %s >> %s " % ((host, port), repr(resp))) except Exception as err: log.err( err, ':: Dropping invalid cmcc packet from %s >> %s' % ((host, port), str(err))) def processHuawei(self, datagram, (host, port)): try: if self.debug: print ":: Hexdump > %s" % huawei.hexdump( datagram, len(datagram))
raise Timeout except Exception as err: log.err(err,':: Send packet Error (%s:%s) >> %s'%(host, port,str(err))) raise err def datagramReceived(self, datagram, (host, port)): if self.prot == 'CMCC': self.processCMCC(datagram, (host, port)) elif self.prot == 'Huawei': self.processHuawei(datagram, (host, port)) def processCMCC(self, datagram, (host, port)): try: if self.debug: print ":: Hexdump > %s" % cmcc.hexdump(datagram, len(datagram)) resp = cmcc.PortalV2(packet=datagram, secret=self.secret) self.results[resp.sid] = resp log.msg(":: Received cmcc packet from AC %s >> %s " % ((host, port), repr(resp))) except Exception as err: log.err(err, ':: Dropping invalid cmcc packet from %s >> %s' % ((host, port), str(err))) def processHuawei(self, datagram, (host, port)): try: if self.debug: print ":: Hexdump > %s" % huawei.hexdump(datagram, len(datagram)) resp = huawei.PortalV2(packet=datagram, secret=self.secret) self.results[resp.sid] = resp