mirror of
https://github.com/JoelBender/bacpypes
synced 2025-09-28 22:15:23 +08:00
127 lines
3.5 KiB
Python
Executable File
127 lines
3.5 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
"""
|
|
This sample application has just a network stack, not a full application,
|
|
and is a way to create InitializeRoutingTable and WhoIsRouterToNetwork requests.
|
|
"""
|
|
|
|
from bacpypes.debugging import bacpypes_debugging, ModuleLogger
|
|
from bacpypes.consolelogging import ConfigArgumentParser
|
|
from bacpypes.consolecmd import ConsoleCmd
|
|
|
|
from bacpypes.core import run, enable_sleeping
|
|
|
|
from bacpypes.pdu import Address
|
|
from bacpypes.npdu import InitializeRoutingTable, WhoIsRouterToNetwork
|
|
|
|
from bacpypes.app import BIPNetworkApplication
|
|
|
|
# some debugging
|
|
_debug = 0
|
|
_log = ModuleLogger(globals())
|
|
|
|
# globals
|
|
this_application = None
|
|
this_console = None
|
|
|
|
#
|
|
# WhoIsRouterApplication
|
|
#
|
|
|
|
@bacpypes_debugging
|
|
class WhoIsRouterApplication(BIPNetworkApplication):
|
|
|
|
def __init__(self, *args):
|
|
if _debug: WhoIsRouterApplication._debug("__init__ %r", args)
|
|
BIPNetworkApplication.__init__(self, *args)
|
|
|
|
def request(self, adapter, npdu):
|
|
if _debug: WhoIsRouterApplication._debug("request %r %r", adapter, npdu)
|
|
BIPNetworkApplication.request(self, adapter, npdu)
|
|
|
|
def indication(self, adapter, npdu):
|
|
if _debug: WhoIsRouterApplication._debug("indication %r %r", adapter, npdu)
|
|
BIPNetworkApplication.indication(self, adapter, npdu)
|
|
|
|
def response(self, adapter, npdu):
|
|
if _debug: WhoIsRouterApplication._debug("response %r %r", adapter, npdu)
|
|
BIPNetworkApplication.response(self, adapter, npdu)
|
|
|
|
def confirmation(self, adapter, npdu):
|
|
if _debug: WhoIsRouterApplication._debug("confirmation %r %r", adapter, npdu)
|
|
BIPNetworkApplication.confirmation(self, adapter, npdu)
|
|
|
|
#
|
|
# WhoIsRouterConsoleCmd
|
|
#
|
|
|
|
@bacpypes_debugging
|
|
class WhoIsRouterConsoleCmd(ConsoleCmd):
|
|
|
|
def do_irt(self, args):
|
|
"""irt <addr>"""
|
|
args = args.split()
|
|
if _debug: WhoIsRouterConsoleCmd._debug("do_irt %r", args)
|
|
|
|
# build a request
|
|
try:
|
|
request = InitializeRoutingTable()
|
|
request.pduDestination = Address(args[0])
|
|
except:
|
|
print("invalid arguments")
|
|
return
|
|
|
|
# give it to the application
|
|
this_application.request(this_application.nsap.adapters[0], request)
|
|
|
|
def do_wirtn(self, args):
|
|
"""wirtn <addr> [ <net> ]"""
|
|
args = args.split()
|
|
if _debug: WhoIsRouterConsoleCmd._debug("do_irt %r", args)
|
|
|
|
# build a request
|
|
try:
|
|
request = WhoIsRouterToNetwork()
|
|
request.pduDestination = Address(args[0])
|
|
if (len(args) > 1):
|
|
request.wirtnNetwork = int(args[1])
|
|
except:
|
|
print("invalid arguments")
|
|
return
|
|
|
|
# give it to the application
|
|
this_application.request(this_application.nsap.adapters[0], request)
|
|
|
|
#
|
|
# __main__
|
|
#
|
|
|
|
def main():
|
|
global this_application
|
|
|
|
# parse the command line arguments
|
|
args = ConfigArgumentParser(description=__doc__).parse_args()
|
|
|
|
if _debug: _log.debug("initialization")
|
|
if _debug: _log.debug(" - args: %r", args)
|
|
|
|
# make a simple application
|
|
this_application = WhoIsRouterApplication(args.ini.address)
|
|
if _debug: _log.debug(" - this_application: %r", this_application)
|
|
|
|
# make a console
|
|
this_console = WhoIsRouterConsoleCmd()
|
|
if _debug: _log.debug(" - this_console: %r", this_console)
|
|
|
|
# enable sleeping will help with threads
|
|
enable_sleeping()
|
|
|
|
_log.debug("running")
|
|
|
|
run()
|
|
|
|
_log.debug("fini")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|