As the coronavirus spreads it's going to be harder and harder for us musicians to make a living so if you have enjoyed the content of this blog or some of my videos or enjoyed my gigs in the past please consider making a donation, "every little helps" as a certain supermarket likes to say and would much appreciated!
NetRexx is a ‘new’ project I've been working on for the last couple of years, with some long breaks, due to other commitments, both musical and coding related.
The project consists of a suite of applications implementing a custom internet protocol which allows you to access the ARexx ports of applications on remote machines.
The protocol is inspired by webdav / http, but doesn't adhere to them strictly, more taking the useful parts in a pragmatic way.
Security is implemented at several levels, the actual connection can be protected by TLS with implicit and explicit modes (similar to ftps/ftpes). Access over this connection is password protected. Then the range of application ports sharable can be controlled by the servers configuration file.
A server client model is used, the server (NRServer) collates incoming requests and forwards them on to the ARexx ports of the the applications, returning the results in the body of the http style response. Support for setting local ARexx vars is supported (analagous to SetRexxVarFromMsg()) allowing the use of stem variables to pass and retrieve data, however network latency can make this the less efficient choice.
Currently there are two client implmentations, a “native client” (NRClient) and a python module (netrexx) which offers an API very similar to the AmigaOS arexx python module, this module is both python 2.5 / python 3 compatible.
The “native client” creates local arexx ports in a “portname@hostname” format, which can be used in a ARexx script just as any normal port. Just remember to quote the portnames! An special “COMMAND@hostname” port allows you execute commands on the remote machine to start applications, or retrieve directory listings etc. The feature can be switched off in the server config file if desired. As a slight change in API, compared with traditional ARexx, the output from the command executed is returned in the result variable (subject to ARexx string size limits of 32k characters). At some stage filtering of allowed commands may be implemented as an additional security measure.
The following video is a quick and dirty demo of NetRexx, with a server running on my X1000. A python based script on my phone to driving TuneNet is demonstrated along with a a natie script taking data from Ignition running on my SAM Flex, and drawing a graph using SketchBlock on the X1000.
I'm hopeing this system will be useful to other AmigaOS 4 users, and although there is more work to be done (including potential 68k client and server programs) I hope to get something released in the new year.
Happy New Year!