示例#1
0
文件: poll.py 项目: randix/aprsna
def poll():
  global lasttime_snasrv
  global lasttime_server
  global lasttime_event
  global lasttime_atmx25
  global lasttime_refresh
  global lasttime_settime
  global lasttime_poll

  #--------------------------now
  now = int(time.time())

  sys.stdout.flush()
  sys.stderr.flush()
  if now == lasttime_poll:
    return
  lasttime_poll = now

  #--------------------------shutdown
  drain = 0

  if cfg.stopping:
    log.l.LogIt('RTP002', '1', 'stopping', ())

    # close sna server channel
    if cfg.sna_hdlr:
      cfg.sna_hdlr.handle_close()
      drain = 1

    # wait io
    if drain: return

    # close data and event channels (if open)
    if cfg.event_hdlr:
      cfg.event_ip = ''
      cfg.event_hdlr.handle_close()
      drain = 1

    if cfg.data_hdlr:
      cfg.data_ip = ''
      cfg.data_hdlr.handle_close()
      drain = 1

    # wait io
    if drain: return

    # close server channels
    for ip in cfg.servers.keys():
      if cfg.servers[ip]['cmdchan']:
        cfg.servers[ip]['cmdchan'].handle_close()
        drain = 1

    # wait io
    if drain:
      return

    # stop cmd listener
    if cfg.listeners.has_key('cmd'):
      cfg.listeners['cmd'].handle_close()
      drain = 1

    # wait io
    if drain:
      return

    cfg.counter = cfg.counter - 1
    if cfg.counter >= 0:
      log.l.LogIt('RTP003', '1', 'counter', ())
      return

    print 'socket_map', sock.socket_map        # to be found in init.log
    print 'router: cannot get here'
    sys.exit(0)

  #--------------------------check atm request timeouts
  for wsid in cfg.atm.keys():
    if cfg.atm[wsid]['gastate'] == '=':
      log.l.LogIt('RTP004', '1', '%s: wait for config server', (wsid))
      if (now - cfg.atm[wsid]['ga_conn']) > (routercfg.config):
        cfg.atm[wsid]['ga_conn'] = now 
        ga_hdlr.getdomain_next(wsid)

  #--------------------------restart ga listeners
  # Listen for client GAs
  for port in routercfg.DomainPorts:
    if not cfg.listeners.has_key(port):
      ga_hdlr.ga(port)

  #--------------------------reconnect snasrv
  if (now - lasttime_snasrv) > routercfg.snasrv:
    lasttime_snasrv = now
    if cfg.sna_use:
      if not cfg.sna_hdlr:
        sna_hdlr.sna()

  #--------------------------reconnect cfg, bnmroutc, ga, stat
  if (now - lasttime_server) > routercfg.server:
    lasttime_server = now

    # check ports, attempt to reopen as necessary
    list = cfg.servers.keys()
    list.sort()
    for ip in list:
      if not cfg.servers[ip]['cmdchan']:
        srv_hdlr.srv(ip)
      if not cfg.servers[ip]['routc']:
        routc_hdlr.bnmroutc(ip)
      else:
        cfg.servers[ip]['routc'].routcHB()

    list = cfg.atm.keys()
    list.sort()
    for wsid in list:
      # check open ga's, attempt to connect bnm as necessary
      if cfg.atm[wsid]['gastate'] == 'o' and cfg.atm[wsid]['bnmstate'] != 'o':
        ga_hdlr.gaconnect(wsid, 0)

    if not cfg.stat_hdlr:
      cfg.stat_buf = []
      evt_hdlr.stat()

  #--------------------------reconnect event and data
  if (now - lasttime_event) > routercfg.event:
    lasttime_event = now

    if not cfg.event_hdlr:
      if cfg.event_ip != '':
        evt_hdlr.event()
    else:
      if cfg.event_ip == '':
        cfg.event_hdlr.handle_close()

    if not cfg.data_hdlr:
      if cfg.data_ip != '':
        evt_hdlr.data()
    else:
      if cfg.data_ip == '':
        cfg.data_hdlr.handle_close()

  #--------------------------reconnect X25 ATMs
  if (now - lasttime_atmx25) > routercfg.atmx25:
    lasttime_atmx25 = now

    if cfg.sna_use:
      sna_hdlr.snapoll()

  #--------------------------refresh aprstat
  if routercfg.refresh:
    if (now - lasttime_refresh) > routercfg.refresh:
      lasttime_refresh = now

      evt_hdlr.refresh()
示例#2
0
文件: router.py 项目: randix/aprsna
signal.signal(signal.SIGTERM, sig_end)
signal.signal(signal.SIGHUP, signal.SIG_IGN)

# ------------------------------------------------
# Get Start-up Configuration Information from
initcfg.InitCfg()

# ------------------------------------------------
# Connect to all aprsrv and bnmroutc channels
list = cfg.servers.keys()
list.sort()
for ip in list:
    if not cfg.servers[ip]["cmdchan"]:
        srv_hdlr.srv(ip)
    if not cfg.servers[ip]["routc"]:
        routc_hdlr.bnmroutc(ip)

# ------------------------------------------------
try:

    # Listen for connections from 'aprcmd's
    cmd_hdlr.cmd()

    # Set SNA Server connect flag
    try:
        f = open("/router/snasrv/snasrv", "r")
        f.close()
        cfg.sna_use = 1
    except:
        cfg.sna_use = 0