示例#1
0
        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))
示例#2
0
        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))
示例#3
0
            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