コード例 #1
0
ファイル: ftnpoll.py プロジェクト: fidoman/PyFTN
    def do(self):
        to_poll = set()
        for d in self.dests:
            to_poll.update(
                map(lambda x: x[0], ftnexport.get_subscribers(self.db, d)))
        self.dests = set()
        myzone = ftn.addr.str2addr(ftnconfig.ADDRESS)[0]
        #print (myzone)
        for a in to_poll:
            #print("poll", a)
            a = ftnconfig.get_addr(self.db, a)[1]
            #print (a)
            link_id = ftnconfig.find_link(self.db, a)
            if ftnconfig.get_link_polling(self.db, link_id):
                print("poll", a)
            else:
                #print ("not needed")
                continue
            addr = ftn.addr.str2addr(a)
            if addr[0] == myzone:
                zonepath = ftnconfig.BINKLEYSTYLE
            else:
                zonepath = ftnconfig.BINKLEYSTYLE + ".%d" % addr[0]
            if addr[3] == 0:
                pollfilename = "%04x%04x.dlo" % (addr[1], addr[2])
                basepath = zonepath
            else:
                pollfilename = "0000%04x.dlo" % addr[3]
                basepath = os.path.join(zonepath,
                                        "%04x%04x.pnt" % (addr[1], addr[2]))

            try:
                os.makedirs(basepath, exist_ok=True)
            except FileExistsError:
                pass
            except:
                print("could not create outbound directory")
                return
            try:
                touch = open(os.path.join(basepath, pollfilename), "a")
                touch.close()
            except:
                print("could not poll", a)
                traceback.print_exc()
コード例 #2
0
ファイル: ftnpoll.py プロジェクト: fidoman/PyFTN
  def do(self):
    to_poll = set()
    for d in self.dests:
      to_poll.update(map(lambda x: x[0], ftnexport.get_subscribers(self.db,d)))
    self.dests=set()
    myzone=ftn.addr.str2addr(ftnconfig.ADDRESS)[0]
    #print (myzone)
    for a in to_poll:
      #print("poll", a)
      a=ftnconfig.get_addr(self.db, a)[1]
      #print (a)
      link_id=ftnconfig.find_link(self.db, a)
      if ftnconfig.get_link_polling(self.db, link_id):
         print ("poll",a)
      else:
        #print ("not needed")
        continue
      addr=ftn.addr.str2addr(a)
      if addr[0]==myzone:
        zonepath=ftnconfig.BINKLEYSTYLE
      else:
        zonepath=ftnconfig.BINKLEYSTYLE+".%d"%addr[0]
      if addr[3]==0:
        pollfilename="%04x%04x.dlo"%(addr[1], addr[2])
        basepath=zonepath
      else:
        pollfilename="0000%04x.dlo"%addr[3]
        basepath=os.path.join(zonepath, "%04x%04x.pnt"%(addr[1], addr[2]))

      try:
        os.makedirs(basepath, exist_ok=True)
      except FileExistsError:
        pass
      except:
        print ("could not create outbound directory")
        return
      try:
        touch=open(os.path.join(basepath,pollfilename),"a")
        touch.close()
      except:
        print ("could not poll", a)
        traceback.print_exc()
コード例 #3
0
ファイル: util_purge.py プロジェクト: fidoman/PyFTN
        print(area, os.listdir("/tank/home/fido/fareas/" + area.lower()))
    elif domain == "echo":
        count = db.prepare(
            "select count(*) from messages where destination=$1").first(aid)
        print(area, count)
        if count:
            continue

    else:
        1 / 0
    # 2. send message to subscribers
    # 3. remove subscriptions and address
    with ftnimport.session(db) as sess:
        for node in [
                ftnconfig.get_addr(db, x[0])[1]
                for x in ftnexport.get_subscribers(db, aid)
        ]:
            print(node)

        input("enter to purge, Ctrl-C to abort")
        for node in [
                ftnconfig.get_addr(db, x[0])[1]
                for x in ftnexport.get_subscribers(db, aid)
        ]:
            print(node)
            sess.send_message(
                ftnconfig.SYSOP, ("node", node), "Sysop", None,
                "Area Expunging notification", """Dear Sysop,

%s %s is about to be deleted from node %s.
Please find new uplink for the area or 
コード例 #4
0
ファイル: stat_netmail_queue.py プロジェクト: askovpen/PyFTN
import ftnconfig
import ftnimport
import ftnexport
from functools import *

db=ftnconfig.connectdb()

x=db.prepare("""select m.id, s.domain, s.text, d.domain, d.text, d.id 
                from messages m, addresses s, addresses d 
                where d.id=m.destination and m.processed=0 and d.domain=$1 and s.id=m.source""")

outp = []

for mid, sd, st, dd, dt, did in x(db.FTN_domains["node"]):
  s = {}
  for sid, _, slevel in ftnexport.get_subscribers(db, did, True):
     s.setdefault(slevel, []).append(sid)

  if len(s.keys()):
    lev=min(s.keys())
    links = "via " + ", ".join(map(lambda x: ftnexport.get_addr(db, x)[1], s[lev]))
  else:
    links = "nowhere to route"

  outp.append("msg #%d %d|%s->%d|%s (destid %d, %s)\n"%(mid,sd,st,dd,dt,did,links))

#print("".join(outp))
#exit()

with ftnimport.session(db) as sess:
  sess.send_message("Sergey Dorofeev", ("echo", "FLUID.REPORTS"), "All", None, "почтовая очередь",
コード例 #5
0
#!/usr/local/bin/python3 -bb

import ftnconfig
import ftnexport
import ftnimport

db = ftnconfig.connectdb()

bydomain = {}

for domain in ["echo", "fileecho"]:
    #print ("domain", domain)
    for t in ftnexport.get_all_targets(db, domain):
        tid = ftnconfig.get_addr_id(db, db.FTN_domains[domain], t)
        ulist = []
        for x in ftnexport.get_subscribers(db, tid, True):
            ulist.append("%d|%s" % ftnconfig.get_addr(db, x[0]) + "!%d" % x[2])
        #print
        ulist.sort()
        bydomain.setdefault(domain, {}).setdefault(", ".join(ulist),
                                                   []).append(t)

with ftnimport.session(db) as sess:
    for d, byuplink in bydomain.items():
        outp = []
        for u, targets in byuplink.items():
            outp.append("  uplink = [" + u + "]\n")
            targets.sort()
            for t in targets:
                outp.append("    " + t + "\n")
            outp.append("\n")
コード例 #6
0
ファイル: util_subscription.py プロジェクト: fidoman/PyFTN
      print ("local subscription")

  elif cmd == "query": # send areafix request
    sess.send_message(my_addr, ftnconfig.SYSOP, ("node", subscriber), robot, None, pw, "%QUERY", sendmode="direct")

  elif cmd == "list": # send areafix request
    sess.send_message(my_addr, ftnconfig.SYSOP, ("node", subscriber), robot, None, pw, "%LIST", sendmode="direct")

  elif cmd == "show": # show subscribed areas
    if area==".": # show for link
      for x in ftnexport.get_node_subscriptions(db, subscriber, domain):
        print (x)
    else: # show from area
      tid =  ftnconfig.get_addr_id(db, db.FTN_domains[domain], area)
      print (tid)
      for aid, vital, level in ftnexport.get_subscribers(db, tid):
        print (ftnconfig.get_addr(db, aid))

  elif cmd == "showuplink": # show areas subsribed as vital
    if area==".": # show for link
      for x in ftnexport.get_node_subscriptions(db, subscriber, domain, asuplink=True):
        print (x)
    else: # show from area
      tid =  ftnconfig.get_addr_id(db, db.FTN_domains[domain], area)
      print (tid)
      for x in ftnexport.get_subscribers(db, tid, True):
        print (x)      

  elif cmd == "verifyuplink":
    a_uplink = set(ftnexport.get_node_subscriptions(db, subscriber, domain, asuplink=True))
    a_all = set(ftnexport.get_node_subscriptions(db, subscriber, domain))
コード例 #7
0
ファイル: stat_uplinks.py プロジェクト: askovpen/PyFTN
#!/usr/local/bin/python3 -bb

import ftnconfig
import ftnexport
import ftnimport

db = ftnconfig.connectdb()

bydomain = {}

for domain in ["echo", "fileecho"]:
  #print ("domain", domain)
  for t in ftnexport.get_all_targets(db, domain):
    tid = ftnconfig.get_addr_id(db, db.FTN_domains[domain], t)
    ulist = []
    for x in ftnexport.get_subscribers(db, tid, True):
        ulist.append("%d|%s"%ftnconfig.get_addr(db, x[0])+"!%d"%x[2])
    #print 
    ulist.sort()
    bydomain.setdefault(domain, {}).setdefault(", ".join(ulist), []).append(t)


with ftnimport.session(db) as sess:
  for d, byuplink in bydomain.items():
    outp=[]
    for u, targets in byuplink.items():
      outp.append("  uplink = ["+u+"]\n")
      targets.sort()
      for t in targets:
        outp.append("    "+t+"\n")
      outp.append("\n")
コード例 #8
0
        sess.send_message(my_addr,
                          ftnconfig.SYSOP, ("node", subscriber),
                          robot,
                          None,
                          pw,
                          "%LIST",
                          sendmode="direct")

    elif cmd == "show":  # show subscribed areas
        if area == ".":  # show for link
            for x in ftnexport.get_node_subscriptions(db, subscriber, domain):
                print(x)
        else:  # show from area
            tid = ftnconfig.get_addr_id(db, db.FTN_domains[domain], area)
            print(tid)
            for aid, vital, level in ftnexport.get_subscribers(db, tid):
                print(ftnconfig.get_addr(db, aid))

    elif cmd == "showuplink":  # show areas subsribed as vital
        if area == ".":  # show for link
            for x in ftnexport.get_node_subscriptions(db,
                                                      subscriber,
                                                      domain,
                                                      asuplink=True):
                print(x)
        else:  # show from area
            tid = ftnconfig.get_addr_id(db, db.FTN_domains[domain], area)
            print(tid)
            for x in ftnexport.get_subscribers(db, tid, True):
                print(x)
コード例 #9
0
ファイル: util_purge.py プロジェクト: fidoman/PyFTN
  # 1. verify that there is nothing there
  if domain == "fileecho":
    print (area, os.listdir("/tank/home/fido/fareas/"+area.lower()))
  elif domain == "echo":
    count = db.prepare("select count(*) from messages where destination=$1").first(aid)
    print (area, count)
    if count:
      continue

  else:
    1/0
  # 2. send message to subscribers
  # 3. remove subscriptions and address
  with ftnimport.session(db) as sess:
    for node in [ftnconfig.get_addr(db, x[0])[1] for x in ftnexport.get_subscribers(db, aid)]:
      print (node)

    input("enter to purge, Ctrl-C to abort")
    for node in [ftnconfig.get_addr(db, x[0])[1] for x in ftnexport.get_subscribers(db, aid)]:
      print (node)
      sess.send_message(ftnconfig.SYSOP, ("node", node),
                            "Sysop", None, "Area Expunging notification", """Dear Sysop,

%s %s is about to be deleted from node %s.
Please find new uplink for the area or 
expunge it too.
"""%(domain, area, ftnconfig.ADDRESS))

      sess.remove_subscription(domain, area, node)