GithubHelp home page GithubHelp logo

la5nta / pat Goto Github PK

View Code? Open in Web Editor NEW
457.0 457.0 84.0 5.3 MB

A cross-platform Winlink client written in Go

Home Page: https://getpat.io

License: MIT License

Go 71.65% Shell 1.81% JavaScript 15.32% HTML 9.03% Rich Text Format 0.41% SCSS 1.54% Dockerfile 0.24%
ardop ax25 ham-radio pactor vara winlink

pat's Introduction

Build status Go Report Card Liberapay Patreons

Overview

Pat is a cross platform Winlink client with basic messaging capabilities.

It is the primary sandbox/prototype application for the wl2k-go project, and provides both a command line interface and a responsive (mobile-friendly) web interface.

It is mainly developed for Linux, but is also known to run on OS X, Windows and Android.

Features

  • Message composer/reader (basic mailbox functionality).
  • Auto-shrink image attachments.
  • Post position reports with location from local GPS, browser location or manual entry.
  • Rig control (using hamlib).
  • CRON-like syntax for execution of scheduled commands (e.g. QSY or connect).
  • Built in http-server with web interface (mobile friendly).
  • Git style command line interface.
  • Listen for P2P connections using multiple modes concurrently.
  • AX.25, telnet, PACTOR and ARDOP support.
  • Experimental gzip message compression (See "Gzip experiment" below).
Example
martinhpedersen@duo:~$ pat interactive
> listen winmor,telnet-p2p,ax25
2015/02/03 10:33:10 Listening for incoming traffic (winmor,telnet-p2p,ax25)...
> connect winmor:///LA3F
2015/02/03 10:34:28 Connecting to winmor:LA3F...
2015/02/03 10:34:33 Connected to WINMOR:LA3F
RMS Trimode 1.3.3.0 Follo.SE Oslo. Pactor & Winmor Hybrid Gateway
LA5NTA has 117 minutes remaining with LA3F
[WL2K-2.8.4.8-B2FWIHJM$]
Wien CMS via LA3F >
>FF
FC EM FOYNU8AKXX59 260 221 0
F> 68
1 proposal(s) received
Accepting FOYNU8AKXX59
Receiving [//WL2K test til linux] [offset 0]
>FF
FQ
Waiting for remote node to close the connection...
> _

Gzip experiment

Gzip message compression has been added as an experimental B2F extension. The extension is implemented as a backwards compatible alternative to the ancient LZHUF compression.

This experiment is enabled by default and sessions between two Pat nodes (or other software supporting this B2F extension) will use gzip compression when transferring messages.

For more information, see https://github.com/la5nta/wl2k-go#gzip-experiment.

Copyright/License

Copyright (c) 2020 Martin Hebnes Pedersen LA5NTA

Contributors (alphabetical)

  • DL1THM - Torsten Harenberg
  • HB9GPA - Matthias Renner
  • K0RET - Ryan Turner
  • K0SWE - Chris Keller
  • KD8DRX - Will Davidson
  • KE8HMG - Andrew Huebner
  • KI7RMJ - Rainer Grosskopf
  • LA3QMA - Kai Günter Brandt
  • LA4TTA - Erlend Grimseid
  • LA5NTA - Martin Hebnes Pedersen
  • N2YGK - Alan Crosswell
  • VE7GNU - Doug Collinge
  • W6IPA - JC Martin
  • WY2K - Benjamin Seidenberg

Thanks to

The JNOS developers for the properly maintained lzhuf implementation, as well as the original author Haruyasu Yoshizaki.

The paclink-unix team (Nicholas S. Castellano N2QZ and others) - reference implementation

Amateur Radio Safety Foundation, Inc. - The Winlink 2000 project

F6FBB Jean-Paul ROUBELAT - the FBB forwarding protocol

Pat/wl2k-go is not affiliated with The Winlink Development Team nor the Winlink 2000 project [http://winlink.org].

pat's People

Contributors

amatecha avatar andrew-h3 avatar as3ii avatar blockmurder avatar cminyard avatar dependabot[bot] avatar dforsi avatar dougcollinge avatar fmarier avatar harenber avatar la3qma avatar martinhpedersen avatar n2ygk avatar rainerg2000 avatar richcannings avatar sit avatar toddejohnson avatar turnrye avatar xylo04 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pat's Issues

User community list

A user community mailing list / forum should be provided for users to share experience and discuss usage of Pat.

Enable gzip experiment by default

The gzip experiment in wl2k-go has been around for quite some time now, but I suspect it haven't been used much. Most people are not aware of it.

We may get some more feedback if we enable support for gzip compression by default. It's backwards compatible with LZHUF, so most users should be unaffected.

Wiki Edit: macOS instructions should use Homebrew to install

Mac ports is is generally considered deprecated by the community, and is not recommended due to how it installs packages and modifies the OS. The preferred tool by most macOS users is Homebrew (brew.sh), which is far easier to install and itself installs packages to /usr/local, thus preventing issues with SIP that generic *nix apps may run afoul of.

Package names are generally the same between the two. For example, to install hamlib the command would be brew install hamlib.

I'm happy to edit those entries if given the privileges.

macOS Sierra support

There are some issues regarding breaking changes of gettimeofday in macOS Sierra that may cause trouble for pre Go 1.7 compiled software. We should upgrade to Go 1.7 (scheduled to be released any day now) for our v0.2.0 release. See golang/go#16579 for more info.

In light of the macOS Sierra gatekeeper changes (issue #48) it would also be nice to have a signed release ready before macOS Sierra is released.

@kd8drx: Do you have access to a Mac with macOS Sierra beta installed? It would be nice to test wether or not v0.1.5 will run on it, and also start testing with Go 1.7 compiled binaries. I can provide you with pre-compiled binaries if necessary.

Filename extension for mailbox messages

The current mailbox implementation uses only the MID as filename when storing messages (no filename extension).

This turned out to be a bad idea, because it's hard to distinguish proper messages from temp-files and other garbage from other applications (e.g. emacs' backup-files and syncthing artifacts).

By adding a file extension, most of these problems can be easily avoided by only attempting to open files with the expected extension.

Mac OS Installer not compatible with 10.11+

The Mac OS Installer package tries to install pat to /usr/bin, which is protected by System Integrety Protection in Mac OS El Capitan and later versions - causing the installer to fail. An easy solution is to install the binary to /usr/local/bin, which is the "Apple Approved" directory for such software, and is in the default $PATH.

I'm happy to build and provide the installer - being a Mac admin, I have all the tools already. Even better, I can sign the package to prevent additional security warnings.

Thanks!

Linux ax25 scripts: Add method for custom TNC initialization

Most physical TNCs require some pre-kissattach initializations.

As pointed out by @dranch, the share/bin/axup script contained some old references to the tmd710_tncsetup tool for this purpose. The references was removed, but it would be nice to have a method for custom initialization in axup.

Modifying the axup file after installation is not practical as it would be overwritten on the next Pat update.

A custom variable in /etc/default/ax25 which is eval'ed before kissattach seems like a decent solution, allowing users to bring/write their own initialization scripts.

Windows: File locking error when moving message from out/ to sent/

Win 7 enterprice works ok but with a few windows specific bugz.

  • File locked when composing a message using the command line.
  • Trying to use a PNG image as attachment:

2016/03/09 10:37:49 Auto converting 'c14428aa-ee06-425e-bae7-9359825da005-medium.png'[image/png]...
2016/03/09 10:37:49 Error converting image: Invalid Parameter - -quality

-2016/03/09 10:38:27 Unable to move C:\Users\install/.wl2k/mailbox/LA3QMA/out/QIG
S6JK3CYTF to C:\Users\install/.wl2k/mailbox/LA3QMA/sent/QIGS6JK3CYTF: rename C:
Users\install/.wl2k/mailbox/LA3QMA/out/QIGS6JK3CYTF C:\Users\install/.wl2k/mailb
ox/LA3QMA/sent/QIGS6JK3CYTF: The process cannot access the file because it is be
ing used by another process.

Support both utf8 and iso-8859-1 encoded subject header

Turns out CMS may encode the subject header as utf8 when receiving q-encoded words, and not the normal ISO-8859-1. Both encoding violates the FBB-protocol, but that's another story.

wl2k-go now handles this. Update the gitmodule and we're good to go :)

PGP signed messages

@t-o-k sent me an email requesting/suggesting support for PGP signed messages.

PGP signing of the whole message (including attachments and maybe some headers) would be great, but I don't see how we could do this and still be compatible with regular email clients (messages sent to the internet via CMS and SMTP).

However, "PGP SIGNED MESSAGE" embedded in the message body will probably be compatible with common PGP aware email clients (verification needed), and it does not violate the winlink message format.

Signing and automatic/semi-automatic verification of a received PGP signed message would be a very nice feature for emcomm use of Pat.

Example:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

This is an example of a PGP signed message.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.14 (GNU/Linux)

iF4EAREIAAYFAlK5pacACgkQuJVtv+58EFxiXgD/QGwQVCZMAlE7fL6V1Kbv4Ogq
Sa9VTEw+s9mWwiBInp4A/3guc2PvZb8iIdrCyWGwIMJIOQS8OuhWfjtN3CBhOSA1
=S+B+
-----END PGP SIGNATURE-----

winmor: Unexpected EOF

When two Pat clients have a winmor P2P session, the client that does not send FQ will not receive it before the winmor connection ends.

According to the FBB protocol spesification a node should disconnect after sending the FQ:

If the other side has no message (after receiving an FF), it sends a line:

   FQ

and disconnects.

My guess is that the WINMOR TNC does not flush it's buffer before sending the DISC frame, the resulting being that "FQ" never reaches the other node.

One way of fixing this may be to wait until the out buffer in transport/winmor is empty before sending the DISCONNECT command.

lzhuf tests not passing on appveyor (windows build)

The windows build of develop is failing after upgrade to the golang port of lzhuf (issue #50). Specifically go test ./vendor/github.com/la5nta/wl2k-go/lzhuf.

The wl2k-go build (same build env, same code) passes all tests, which is very strange.

--- FAIL: TestWriterTestdata (0.14s)
lzhuf_test.go:156: Running LPE5NXDVLVSQ.b2f...
lzhuf_test.go:156: Running Mark.Twain-Tom.Sawyer.txt...
lzhuf_test.go:179: Mark.Twain-Tom.Sawyer.txt: Byte idx 0 not matching. Skipping rest of compare.
lzhuf_test.go:156: Running e.txt...
lzhuf_test.go:179: e.txt: Byte idx 0 not matching. Skipping rest of compare.
lzhuf_test.go:156: Running gettysburg.txt...
lzhuf_test.go:179: gettysburg.txt: Byte idx 1 not matching. Skipping rest of compare.
lzhuf_test.go:156: Running pi.txt...
lzhuf_test.go:179: pi.txt: Byte idx 0 not matching. Skipping rest of compare.
FAIL

Case sensitive callsigns

Currently Pat (and probably wl2k-go) treats callsigns case sensitive. This results in some unexpected behaviours.

Thanks LA4TTA!

Pull last changes in wl2k-go

It includes some bug fixes/enhancements, including:

  • Send smallest messages first (suggested in the Winlink FAQ).
  • Fixes handling of proposal code H.
  • Fixes handling of blocks with all messages deferred/rejected.
  • Fixes unstable serialization of messages that could result in corrupt partial message transfer.

The changes is not merged to master yet, but will be soon.

web ui: About menu item not working

As reported by @kd8drx:

In the web interface, the settings and about options do not work (Safari 10.0)

(For settings, see issue #5)

The about menu item is a placeholder for the unimplemented about box. It is probably a good idea to implement it.

fsnotify submodule clone issue

The gopkg.in proxy import path of fsnotify is causing issues for users with older git versions.

A workaround would be to use the github.com import path directly:
github.com/fsnotify/fsnotify (tag v1.2.10)

Big thanks to @dranch for tracking down and reporting this.

Write contribution guidelines

Contributions from the community is very important if this project is going to survive over time. We need some guidelines that encourages any user to pitch in.

Some important topics:

  • How to supply patches.
  • Code formatting (that's easy: gofmt).
  • Info on the git workflow and release process.
  • Using the issue tracker.
  • Links to good articles on how to get started with git and github.

Print stylesheet for web UI

Feature request from LA4TTA.

Printing a message from the web UI results in very bad formatting and layout.

Maube it's possible to add a print stylesheet to the web UIs main page. Another approach can be to create a single message view page. A completely different approach could be to render and serve the message as PDF from the daemon.

Post version info to Winlink CMS Web Services

RMS Express and all other mainstream clients reports the user callsign, appname and version frequently to the winlink web API.

The feature/version_report branch implements this feature for Pat, but I guess there may be some privacy concerns about enabling this by default.

PROS:

  • Simple way to get usage statistics for Pat, the data is publicly available through the API for retrieval.
  • Needed to get the application listed under live winlink info @ winlink.org.

CONS:

  • The data must be sent unencrypted (the API does not support https).
  • Some users may dislike the "broadcasting" of platform/application.
  • Winlink exposes a datetime-field that leaks information on when the application was running.

The feature will be optional, but enabled by default.

Feedback please :)

Signed Mac OS releases (.dpk)

From @kd8drx #47:

I'm happy to build and provide the installer - being a Mac admin, I have all the tools already. Even better, I can sign the package to prevent additional security warnings.

Having the Mac OS package signed so users don't have to work around the security system in OS X would be nice!

As mentioned in #47, I've already semi-automated the .pkg packaging using using Packages. Have a look at osx/pat.pkgproj. I do not have much experience with .pkg-packages, don't even know if I picked the right tool for the job ;)

Could you describe how you would go about packaging Pat for Mac OS? Which tools would you use?

Regarding package signing, how could we ensure that other project members can step in and sign a release if you're not available for some reason? In other words, is it possible to have multiple people signing releases?

Thanks for your interest in contributing, this is much appreciated.

Proper website

A proper website for Pat is currently under construction.

The website will give a brief overview of the application's features and links to:

  • Download (github releases)
  • User community (issue #1)
  • Documentation (github wiki)
  • Source code repository (github)

PTT -- w/o full rig control

Hello, All. (esp. Martin @martinhpedersen )

I have everything working well (Pat and WINMOR) with one exception: controlling the PPT line via a simple RS-232/one-transister switch, without full CAT/CI-V rig control. I have Icom radios, but no CI-V control converter box.

I tried to set definitions with rigctld, but just managed to mess up things up and nothing in Pat would work at all. I'm back to a clean install and config file, and I can get everything working properly with VOX ptt, but that is where success ended (no connects, VOX circuit not nearly fast enough for WINMOR).

My question: how would I set up Pat's congif file to set the serial RTS line high, thus closing the PTT circuit via my simple little interface, but not using any form of remote (CAT/CI-V) rig control? In other words, to get it to function exactly as FlDigi or packet does? :^) I think such a set-up would benefit many hams, especially those on a budget.

Any ideas would be appreciated.

Best regards and 73,
Dave Hassler
K7CCC

Ardop v0.5 support

ARDOP_WIN changed it's host interface in v0.5. We need to migrate to the new interface.

Support running http server while in interactive mode

This is a feature request from LA4TTA.

The interactive command-line interface provides some nice functionality that is not available through the Web UI. If it was possible to run the http server in background while in interactive mode, this would give the users more flexibility.

Winlink hybrid: Update MPS list

For users to fully take advantage of the Winlink Hybrid Network, they would need a way to update their MPS (Message Pickup Station) lists.

Winlink Express updates the MPS list via the Winlink Web API directly over HTTP, or by posting a special INQUIRY message containing a sequence of these API requests.

These updates (requests) are guarded by a WebServiceAccessCode which we need to obtain/generate in order for users to update their MPS list via Pat.

Example update message:

Message ID: U2YDOUIYDUA4
Date: 2016/03/27 14:52
From: LA4TTA
To: INQUIRY 
Source: LA4TTA
Subject: CMSWEBSVC

/mps/delete?requester=LA4TTA&callsign=LA4TTA&WebServiceAccessCode=F630KKDH9L
/mps/add?requester=LA4TTA&callsign=LA4TTA&mpsCallsign=LA3F&WebServiceAccessCode=F630KKDH9L
/mps/add?requester=LA4TTA&callsign=LA4TTA&mpsCallsign=SM5RVH&WebServiceAccessCode=F630KKDH9L
/mps/add?requester=LA4TTA&callsign=LA4TTA&mpsCallsign=HB9AW&WebServiceAccessCode=F630KKDH9L
/mps/delete?requester=LE1OG&callsign=LE1OG&WebServiceAccessCode=F630KKDH9L
/mps/add?requester=LE1OG&callsign=LE1OG&mpsCallsign=LA3F&WebServiceAccessCode=F630KKDH9L
/mps/add?requester=LE1OG&callsign=LE1OG&mpsCallsign=SM5RVH&WebServiceAccessCode=F630KKDH9L
/mps/add?requester=LE1OG&callsign=LE1OG&mpsCallsign=HB9AW&WebServiceAccessCode=F630KKDH9L

The original WebServiceAccessCode have been changed, in case it contains sensitive information. Thanks to LA4TTA for providing this example.

Until this is implemented users are advised to update their MPS list using Winlink Express.

secure_login_password in config ignored if callsign is not all upper case

Reported by AB4MW on the pat-users list:

Hello and thank you for this project. So tired of Windows/Wine hacks for WL2K.

I did my configuration and entered my call in lower case. Pat will not authenticate automatically.
(0.1.3 deb file)

I had to change my call to UPPER case for it to work properly. That's odd because the password does not appear to be case sensitive!

Suggest that if upper case call sign is a requirement, to have the code automatically upper case the call sign, at least for authentication purposes.

73,

Mitch, ab4mw

Command line-interface composer whitespace bug

This bug does not effect the web UI's composer, only the command-line interface is affected.

Commit f995029 (in v0.1.4) changed the way the cli composer reads input from the user (to, cc, subject etc).

The new method introduced a bug that makes it impossible to input whitespaces in the subject field (amongst others).

The easy fix is to revert back to using a bufio.Reader.

Support for PACTOR

@martinhpedersen Well, the title says it all... Is this planned (shouldn't be that bad since the command structure ist quite similar to other TNCs)?

I don't have any experience using GO (though I'm not new to programming), so I'm not sure I can help much with the Implementation, but I should be able to get hold of some older PTCs and possibly a newer one in the not too distant future, all of which can be used for testing.

There's quite a bit of useful info on the SCS website, http://www.scs-ptc.com/en/Downloads.html

Support image resize in cli composer

The image resize feature is only accessible from the web UI. The ability to resize image attachments has proven very convenient, so it's time to make this accessible from the command line interface too.

Update to golang port of lzhuf

Ref la5nta/wl2k-go#41:

Porting the code to Go would eliminate the need for cgo, thus making the wl2k-go framework even more portable. It will also allow us to further improve the code, getting rid of the intermediate temp files and other rough edges.

This will also enable us to cross compile Pat to a handful new platforms (dragonfly, freebsd, netbsd, openbsd, solaris, plan9). We could even cross compile the windows and darwin releases from a Linux host.

The port has already been written, but need further testing.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.