def __init__(self, port): self.soctx = None self.rxdtq = Queue.Queue() self.txdtq = Queue.Queue() self.evntq = Queue.Queue() self.bcntx = None self.axhdr = None self.srvid = '' self.srvpr = 0 self.srvfl = '' self.connr = 0 try: self.soctx = dixdrvudp.UDPTx(port) self.soctx.settimeout(0.001) except socket.error: self.soctx = None return
def start(self): self.dbcon = sqlite3.connect(':memory:') self.dbcur = self.dbcon.cursor() self.dbcur.execute( '''CREATE TABLE traffic (tm real, ln integer, rxtx integer)''') self.dbcon.commit() if self.udptx <> None: try: self.soctx = dixdrvudp.UDPTx(self.udptx) except socket.error: pass if self.hwtyp == 'KISS': self.drvpr = multiprocessing.Process(target=dixpkiss.procmain, args=(self.prtid, (self.udpmn, \ self.udpgw, self.udptx, self.udpcc), (self.hwcfg[0], self.hwcfg[1], self.hwcfg[2]), \ self.ptton, self.debug, cvars.get('genCFGcall'))) self.drvpr.start() elif self.hwtyp == 'AGWPE': self.drvpr = multiprocessing.Process(target=dixpagwpe.procmain, args=(self.prtid, (self.udpmn, \ self.udpgw, self.udptx, self.udpcc), (self.hwcfg[0], self.hwcfg[1], self.hwcfg[2], self.hwcfg[3]), \ self.ptton, self.debug, cvars.get('genCFGcall'))) self.drvpr.start() elif self.hwtyp == "AX25": self.drvpr = multiprocessing.Process(target=dixpax25.procmain, args=(self.prtid, (self.udpmn, \ self.udpgw, self.udptx, self.udpcc), (self.hwcfg[0], self.hwcfg[1]), self.ptton, self.debug, cvars.get('genCFGcall'))) self.drvpr.start() return
def procmain(udpbase, servr, prtnr, ruser, filtr, versn): ################################################# # Default settings ################################################# ################################################# # Initialize variables igate = IGATECON() igate.servr = servr igate.prtnr = prtnr igate.ruser = ruser igate.filtr = filtr igate.versn = versn # Setup UDP listening port socrx = dixdrvudp.UDPRx(udpbase + 1) socrx.settimeout(1.0) # Setup UDP sending port soctx = dixdrvudp.UDPTx(udpbase) # Setup server connection igate.phase = 0 # Main program loop while True: try: # Wait for data or command # This is the highest priority event v = socrx.receive() t1 = time.time() # Process packets received from UDP command/data port if v <> None: if True: #if v[1][0] == '127.0.0.1': cmd = v[0] # Rf->Igate gating data if cmd == 'R': w = v[3:] # Unwrap encapsulated frames for gating while True: k = w.find(':') if k < 0: break try: id = w[k + 1] except IndexError: break if id <> '}': break w = w[k + 2:] # Is it a generic query? k = w.find(':') if k > 6: try: id = w[k + 1] head = w[:k] tail = w[k + 1:] if tail[0] <> '?': if head.find('TCPIP') < 0 and head.find('TCPXX') < 0 \ and head.find('NOGATE') < 0 and head.find('RFONLY') < 0: r2 = head + ',qAR,%s:' % ( igate.ruser) + tail # Send r2 to igate igate.send(r2) except IndexError: pass # Data frame received elif cmd == 'D': igate.send(v[1:]) # Termination command received elif cmd == 'Q': break else: # Do lower priority job # Send status / life beat signal to main program soctx.send('SI0' + "%d|%s|%d" % (igate.phase, igate.srvid, igate.connr)) # Check Internet incoming data server while True: igate.engine() r = igate.receive() # Process received lines from server if r <> None: soctx.send('RI0' + r) else: break except KeyboardInterrupt: pass print "igate terminating" # Shutting down socrx.close() soctx.close() igate.stop()
return w def procmain(dev, (udptx, udpgw, udprx, udpcc), (axdev, ctrl), ptt, debug, mycall): # Open UDP ports socgw = None socrx = None soctx = None soccc = [] if udpgw <> 0: socgw = dixdrvudp.UDPTx(udpgw) socgw.settimeout(0.01) if udprx <> 0: socrx = dixdrvudp.UDPRx(udprx) socrx.settimeout(0.01) if udptx <> 0: soctx = dixdrvudp.UDPTx(udptx) soctx.settimeout(0.01) for i in range(0, len(udpcc)): soccc.append(socket.socket(socket.AF_INET, socket.SOCK_DGRAM)) soccc[i].settimeout(0.1) # Initialize AX25 port