la5nta / pat

A cross-platform Winlink client written in Go
https://getpat.io
MIT License
479 stars 86 forks source link

Iridium Go! #181

Open captcha1 opened 4 years ago

captcha1 commented 4 years ago

Can pat use an "Iridium Go!" ?

I wonder if it makes sense to add code to "pat" to make the "Iridium Go!" open a connection to the Internet ?

I had the use of an "Iridium Go!" last summer, and figured out how it works : it uses XML SOAP to tell the "Iridium Go!" to open a connection and what the firewall rules are. It creates an Internet connection that is very slow (2400 bps) with high latency, so typically the firewall rules limit connections to a particular host and port.

The API is documented in the "Iridium GO! Web Services API", but this document requires a valid Development License Agreement or Partner Agreement with Iridium.

But I was able to make a simple script that used "curl" to send an HTTP POST with the XML SOAP and open a connection and then use "pat" to check email.

Not an expert, but I think the "right" way to do this is to use WSDL, or Web Service Description Language : an XML based definition language. It's used for describing the functionality of a SOAP based web service.

I was able to get the WSDL file from the "Iridium Go!" with this url : http://iridiumgo.lan/sdk/sdk.php?wsdl .

FYI the "Iridium Go!" also has a SIP server to send SMS & VoIP, but it didn't use that much.

DC7IA commented 4 years ago

Hello "captcha1",

I do not see why this would be included in pat since pat is a WINLINK client, not an IRIDIUM client. But maybe @martinhpedersen thinks differently about this.

captcha1 commented 4 years ago

Pat uses a modem to connect to a winlink server. The modem can be ardop or pactor ... or broadband (DSL / DOCSIS / GPON) ... or Iridium.

AIrmail ( http://siriuscyber.net/airmail/ ) is a winlink client and can do pactor & Internet (broadband or Iridium).

My use case is on a sailboat. On shore, I'll use broadband. At sea, I'll use the pactor or Iridium.

Actually, the general case for Iridium would include the "handsets", which have a serial port and use PPP to create an Internet connection. I suppose that somewhere in the world people still use modems on POTS phone lines using PPP.

I suppose the general case would also include calling uqmi or umbim or nmcli or mmcli ( http://www.freedesktop.org/wiki/Software/ModemManager) for setting up WWAN modems.

Anyway, it might be nice to be able to tell pat to execute some code before connecting to the winlink server. That code would execute pppd or wvdial or send some XML SOAP (and monitor the connection as well). And shut down the connection when it's done (Iridium handset airtime is expensive : at least $1 per minute ... "Iridium Go!" data airtime is "unlimited").

captcha1 commented 4 years ago

Maybe just have the ability to do a "system" call before and after connecting to the winlink server.

This could even be used to start "ardopc" ...

yangl1996 commented 3 years ago

I just bumped into this discussion when searching for API documentation for Iridium GO. Like @captcha1 mentioned, the documentation requires being a partner with Iridium. However, it seems that someone uploaded (an early version of) the document to CourseHero: https://www.coursehero.com/file/27045261/Iridium-GO-Web-Services-API-rev-020pdf/

captcha1 commented 3 years ago

I noticed that ... but it all seems to be "grayed out" ...

I've been meaning to write some python XML SOAP code for this (eg : python zeep) ... but I don't have access to an "Iridium Go!" now ...

yangl1996 commented 3 years ago

The document is behind a paywall. (CourseHero charges membership fees when user wants to download a document, and redacts contents so that one has to pay and download to see the full content.)

Yea… I don’t have a device either. Could be hard to test without a real device.

On Jun 1, 2021, at 4:07 PM, captcha1 @.***> wrote:

 I noticed that ... but it all seems to be "grayed out" ...

I've been meaning to write some python XML SOAP code for this (eg : python zeep) ... but I don't have access to an "Iridium Go!" now ...

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

captcha1 commented 2 years ago

FYI, I tested this "python zeep" script w/ "pat" and it works : https://pastebin.com/0JSqEnQg . Basically, it tells the "Iridium Go!" to start an Internet connect, but only open port 8772 (used by "pat") ... so that other network processes won't overwhelm the low bandwidth connection. It's a bit crude (eg : it hardcodes the userName / password).

harenber commented 2 years ago

Great stuff @captcha1 Happy to see that working. Reading through that Python code, I am sure that could be "Go-langed" and incoorperated into Pat quite easily. I know that sailors use this access method for SailMail as well.

Unfortunately, I only own a Garmin inreach device, which does not offer general purpose TCP connections at all :-(

captcha1 commented 2 years ago

Yes, I think it would translate to a golang based SOAP library.

FYI, I made a simpler version by using python "dictionaries" & lists : https://pastebin.com/zMFvtjTB ...

rego21 commented 4 months ago

Hey @captcha1 ,

Sorry for being late but I stumble upon this issue recently. And sorry, because the question Im about to ask is not related with pat. I was able with your script to send the task Internet Call to the Iridium Go, however I'm trying to understand what it does in fact. It means I can connect any device to the Iridium Go and have full internet access ? Or it just opens to specific things ?

Thank you and sorry again!

captcha1 commented 4 months ago

I can connect any device to the Iridium Go and have full internet access ? Or it just opens to specific things ?

First off, I'm not an expert. I looked at other code and kinda of guessed how this works.

It seems the "Firewall exceptions" parameter limits addresses and ports that you can connect to.

In the pastebin above, it's set to "all-8772-tcp", which limits it to port 8772 (used by winlink). The winlink protocol is designed for low bandwidth connections.

You could set it to 'all-all-all', but it's not practical. Iridium Go is very slow (about 2400 bps). It also doesn't seem to like "https" connections. I think this is because getting a SSL / TLS connection up requires a lot of round trips.

rego21 commented 4 months ago

Thanks for the quick reply @captcha1 !

So, do you think something like sending a MQTT message to AWS using Iridium GO would be possible ? Im not familiar with the Wilink protocol sadly...