Long Text Messages

SMS text messages are historically limited to 160 characters (70 characters if in unicode). Years ago, devices would refuse to send a longer message, forcing users to break the message up themselves. These days, however, most devices will allow a user to create a much longer message.

So, what happens when you send a longer message?

There are two ways to handle SMS messages of excess length:
1. Split the text into multiple shorter messages, which might be reassembled into one message by the receiver, or might be presented as multiple messages. Each message is shortened by a few characters, to put in a reconstruction header that the receiver can use to put it together.
2. Change the text to an MMS message, which actually uses the data plan to communicate.

What is this MMS of Which You Speak?

MMS is an alternative texting data format that can also do images, sound files, etc. On most devices, if you try to send a text with a picture or other media file, the entire message is automatically upgraded to MMS. As mentioned, this uses the data plan to send the content, but uses the SMS channel to send meta-data that advises the receiving device to load the actual message using its data plan.

“Legacy” SMS Support on VoIP.ms

Up until August 2020, VoIP.ms did not support MMS. Neither did the two most common means of sending and receiving text messages on their platform. They do provide an API whereupon you can write your own interface (as Michael did for item 1 below).
1. The android application VoIP.ms SMS is an open source project developed by Michael Kourlas, an independent programmer. It only supports SMS, never has done MMS. Also, this application relies on his servers to transfer data – for which I am thankful, because I appreciate the service!
2. The “legacy” web application, has no MMS.

In both “legacy” programs,
1. If you try to send a long message, it splits it up automatically, according to the standard.
2. You can’t send any media.
3. If someone sends you a long text message, it’s a crap shoot – if it is split up by the sender, the pieces come through. If it isn’t split up, the message is just silently lost.
4. If someone sends you media, the message is just silently lost.

“New” MMS Support on VoIP.ms

A few months ago (around end of August), VoIP.ms started supporting MMS using a new web interface from the main page -> DID Numbers -> SMS/MMS Message Centre, or directly at the SMS/MMS portal. Here, you can do full SMS and MMS send and receive.

Now, can you use VoIP.ms as a “complete” alternative to your cell phone texting? Well… yes, and no.

Upgrade for the Android Application Some Day?

The old “legacy” app and web site still work, but they have the same limitations that they always had. This is unfortunate, especially for the Android app – it sure would be nice to have full MMS support on mobile devices. I’ve contacted Michael and asked if he planned to support it eventually, and he said “yes”, but had no further details. I thought I might assist, but when I looked at the code… well, it’s Android code, and it’s pretty opaque.

Not All Providers Can Send to VoIP.ms Text System?

Yes, if it works, then you are away to the races. I use it all the time to keep contact with folks in the US and elsewhere.

The interesting thing is that some texting systems will not send to VoIP.ms text system, not sure why. There is some kind of “provider matrix” used by each telco for delivery of their texts to another telco, and for whatever reason, VoIP.ms isn’t on some lists. For instance, my bank in the USA tries and tries to send SMS texts to my VoIP.ms number to confirm my login, but it never works. The telco automation provider Twilio sometimes has trouble too.

It all seems kind of hit-and-miss. Maybe harassing the VoIP.ms guys would get them to chase it down and get onto those “choice matrix” lists, but I have not tried.

Text Message Provider Matrix

This text message “provider matrix” thing has been around for a long time. Long time ago I found that every telco has an incoming E-mail to text message portal – and found out that you can just carpet bomb all of them with the telephone_number@each_telco. Those telcos who don’t have the specified number will silently ignore. By extension, connection between telcos is probably done the same way. If VoIP.ms were not on the list, then they would not get the message, and would not receive the text.

Other Means of Getting Your VoIP.ms Text Messages

You can also have text messages forwarded to a “real” cell phone, but you do have to remember if you reply that it comes from that “real” cell phone – so your correspondents will send to one number, get back from another. Worse if that number is out of country – you reply, it comes from your “real” cell phone, and you get charged for it.

You can also have incoming text messages bundled into an E-mail, but not sure how you would reply to that.

VoIP.ms SMS and Call Forwarding

So, here is how to set up VoIP.ms for SMS texting and call forwarding.

Important Term “DID”

The first thing to know is a specific term.  DID, or “direct inward dial”, is your telephone number that can be called.  In other contexts, it can mean the phone that will be connected to, when someone dials that number.  In our context, it will just be the number.

Why the distinction?  Outbound calls use a different system.  Simple as that.  Leave that for another time.

Bear in mind that, although the base cost for each DID is ridiculously low, nothing is free.  SMS texts cost something like ¾ cent each, inbound and outbound calls cost by the minute (something around 1 cent per minute).  I find this acceptable, because there’s no way that I could ever even come close to the cost of my old phone bill!

Accounting

OK, first thing is to create your account and fund it.  All amounts are in USD.  I would suggest using PayPal to fund it, and I’d suggest putting in US20 or US30 to start.  You can set an “alarm” on your account to send an E-mail when your balance falls below a certain amount.

Once you’ve got your account and it is funded, then for the task at hand, here are the main management menu items you will use.

Set Up Call Forwarding Target

First, set up a call forwarding target.  Select “Call Forwarding” and create an entry pointing to where you want calls to be potentially redirected to.  You can create more than one – you can select which one is the actual target, for each DID.

Here’s a sample entry screen.  You don’t have to touch anything else except to put the 10 digit phone number of the target to forward calls to.

Ordering Arbitrary DID(s)

If you don’t have any DID(s) yet, you will have to go to “Order DID” first, and create them.  The word “order” is a bit of a misnomer, because it’s all automatic and practically immediate.  You can create as many as you want, and it’s quick.  You can pick a telephone number in pretty well any area code in North America, and some numbers overseas.  Be conscious of their cost, they don’t all cost the same in monthly cost or in inbound & outbound per-minute charges.

You can also “port” your existing number from a cell phone or landline phone carrier to VoIP.ms.  It’s a bit of a process – not that hard, you just have to read the procedure and go through the steps.  The telcos are anal about making sure you follow the steps – they are trying to prevent port-out fraud, which has happened in the past, with disastrous consequences – think “SIM hijacking”, not nice.

Anyway, it is standard practice these days to set a port PIN on any mobile DID.  This is wise to do.  Be sure to keep it private.  If set, then without this PIN, port requests are ignored.  Of course, keep track of that port PIN, or else you won’t be able to perform a port either 😊   Keep these things in your password manager (use LastPass – don’t pass “go”, don’t do anything else – just do it).

When you port your cell phone number, be sure to indicate that it’s a mobile/cell phone.

Managing the DID Settings

Anyway, once you have any kind of DID in your account , go to “Manage DID(s)”:

On the left, under “Actions”, you will see three coloured icons – an orange pencil & paper (edit this DID settings), a blue paper with lines on it (read-only view this DID settings), and optionally a green cell phone, which indicates that this DID supports SMS & MMS.

Click the orange pencil & paper icon, which should bring you to this screen:

Select “call forwarding”, and if necessary, drop the selection box and choose where to route the call.

Scroll down and choose the DID point of presence:

This simply is the Internet server location that you will connect to, when you come around to using a VoIP phone.  I would select one close to your primary use location.  You can change it later, but for your VoIP phone to work (inbound and outbound), your VoIP phone must point to the same server name.

Continue to scroll and you will see the SMS settings.  Above that are a few key settings related to the cost of calls, review each one.

For SMS, you have to “enable SMS/MMS” and, if you want to SMS/MMS forward, to select this option and put the 10 digit target telephone number in here as well.

The “SMS/MMS URL Callback” option is for use with the VoIP.ms Android SMS application, see below.  You can leave it unchecked, but the value should be “https://us-central1-voip-ms-sms-9ee2b.cloudfunctions.net/notify?did={TO}“, per below.

Save the changes, and it should work!

Installation of Android App to Support Near-Native Texting

There are a few limitations, but it works very well for me.  It’s how I keep in touch with my friends in Phoenix (and formerly of Phoenix 😊).  I ported my US cell phone number to VoIP.ms and use this app to text with them.

Here is the Android application:

Now, the difficult part – setting it up.  The app is open source, and its help page looks like this:

You have to enter that string into the DID’s “callback” entry (see above),  then enable the API connection back on VoIP.ms, see below

Enabling the API Connection

From the VoIP.ms main page, select “Main Menu”, then “SOAP and REST/JSON API”:

Put in an API password (this will be what you give to the Android app, above), enable the API, and ensure that the “Enable IP Address” is set to 0.0.0.0.  You can restrict the IP address here, if it is well defined and won’t change.

I find it cool that I still have the same telephone number that I had in high school.  Yes, if you knew what my phone number was in high school, you can still reach me there now.

Once upon a Land Line

My family moved to Headingley, just west of Winnipeg, in October 1971.  At that time, Headingley was an independent rural municipality, separate from the city of Winnipeg.  We got a rural telephone number (204)-864-xxxx, typical of St. Francois Xavier and Lido Plage, to the west and north, further out of town.  This meant that calling into Winnipeg was long distance, even though it was only about 9 km (5.5 miles) away!  Very annoying.

There was quite a fuss going on in Headingley at the time.  Manitoba Telephone System (MTS), the government owned monopoly on phone service, claimed that if we wanted to have local calls to Winnipeg, then we had to be part of the city.  That was crap.  Communities to the northeast of the city, like Lockport, had local calling to the city, and were not part of the city.  The city of Winnipeg was actually several independent cities at that time, each with its own council and mayor/reeve.

Nonetheless, around 1972 the province of Manitoba amalgamated all the independent cities in an effort called “Unicity”, and in so doing, subsumed Headingley into the City of Winnipeg.  Now, I think that the Unicity concept was a good thing, especially in the area of control of development – although on the other hand, Winnipeg hasn’t done a very good job of development control…  more on that, another time.

So, around 1972, my family got a new Winnipeg phone number, (204)-xxx-1334.   All of my friends knew this number, of course.  And I knew all my friends’ numbers.  It was what we did in those days!

Dean gets his Own Phone – in His Basement Lab

Around 1980 or so, while living at home, I was frustrated by not being able to use the phone when I wanted to, and I had decent income, so I got my own phone installed into my lab in the basement, (204)-xxx-5620.  I was so thrilled!  When I tried to call my best friend Dave, his number was disconnected… oh no!  It turns out that when I was at Polo Park getting my number assigned, Dave’s mom was at another MTS store getting a new number as well, and she got the one just before mine, (204)-xxx-5619.  My personal number is long gone now, but she still has hers, and that’s how I remember it – one less than mine, ha ha ha.

Grabs Control of Old Family Telephone Number

Later, when Dayna and I bought the house and moved out to Headingley with Eric, I called MTS and told them that they had my first initial wrong (my mom’s initial is “M”), so effectively transferred the phone to me, heh heh.  Later, we “ported” the number to Shaw, our cable TV and Internet provider.

When I moved away in 2011/2012, Dayna let the phone lapse.  I called Shaw to get my own phone, they told me it had lapsed, so I picked it up again.

Moving to VoIP… and to Arizona!

In 2013, when I moved to Phoenix, I ported it to VoIP provider Les.net.  I had a Grandstream HandyTone 286 adapter, with a 4-phone Uniden cordless telephone system.  It was very nice in Phoenix, as I could have several phones about the house.

Way cool, I had my long time Manitoba telephone number, and it rang in Phoenix.  Caused pollsters and telephone solicitors no end of confusion, hehehe.

While I was in Phoenix, I actually signed up for a couple of other Les.net numbers, including a conference call number in Winnipeg, conference call number in Phoenix, a toll-free (800) number, just going crazy 🙂

Toll Free Line

The toll free number was to encourage my mom, my son and my brother to call more often, if they had no long distance.

Conference Call

I used the conference call number for governing board teleconference meetings, when I was chair of SAE Arizona & Nevada Section.  It was a bit expensive, as it cost me 1.5 cents per minute per caller…   and, as I seem to recall, it cost me big one time that someone didn’t hang up before I did!

Features

All the telephone numbers rang to the same phone.  It worked well.  An additional feature was an embedded answering machine – a message left on any number would be converted to a WAV file and E-mailed to me.  I could get them anywhere, how convenient.

Caller ID Foibles

The one challenge that I’ve had using VoIP.ms is the caller ID information on outgoing calls.

I don’t know if it’s my VoIP desk phone or the VoIP.ms system, but it sometimes gives the Arizona number for calls made from line 1 (the Manitoba line) and the Manitoba number for calls made from line 2 (the Arizona line).

Eric also reported that his phone claimed I was calling from Egypt (country code +20), so his phone was misinterpreting the caller ID information.  The start of the “204” Manitoba area code was getting interpreted as the country code.  Contrary to what VoIP.ms tells you, when it asks you to give the 10 digit caller ID number, give them 11 digits, prepending the “1”, and that fixed the problem.

Incoming Calls: the One Challenge

For some reason, incoming calls have been a challenge.  The VoIP server must be able to route back to your VoIP phone, in order to ring it and set up the connection.  Years ago, this seemed easy, and it all worked.  Of course, I didn’t make any notes about how to set it up (argh).  But recently, I found out that neither of my numbers would ring through to my desk phone.  Curses.

My solution was to forward a bunch of ports through my firewall to my VoIP phone.  UDP ports 5060 (1st line), 5062 (2nd line), and 10000-10200, to be precise.  Then I had to deal with my dynamic IP resolution.  Well, I have a subscription to dyndns.org, so I can readily resolve (say) something.dyndns.org (or whatever, they have lots of options for TLDs) to my local firewall’s outside address.  The challenge is getting the dyndns.org  (oops, now that it’s owned by Oracle, they call it dyn.com) server updated.  In the old days, I used an old WRT-54G firewall/router flashed with DD-WRT.  That worked well back in the day, but I’ve abandoned it recently because the WRT-54G got a bit sluggish and lacked features (like 5 GHz band support).  If you go that route, be careful – there are a lot of WRT-54G variants, and not all of them can be flashed to DD-WRT… and some that can, are restricted in functionality once flashed.

Anyway, without my handy DD-WRT router, I set up a Raspberry Pi that runs inside my network, with ddclient connected to dyndns (see directions), which keeps the IP address on dyndns pointed to my firewall/router.

S5 Flip Flap Flop

When we last left our hero (me? ha ha), he had installed the latest LineageOS installed on my second T-Mobile Samsung S5 (actually my original from T-Mobile). I like it! It’s not quite as pretty as the stock O/S (OK OK, stock ROM), but it works well, more quickly, and, most importantly (related to the quickness), uses much, much less flash!

I had to (re-re-) install all of my programs, of course, and that was a pain. Worse, several of my “go to” programs are now “abandonware”. Sigh. Notably, “Profiles”, which gave me one-touch change of settings – I used this to turn off BlueTooth, dim display, and, in earlier phones, change volumes etc. However, in the S5, even with the T-Mobile ROM, I had to use “do not disturb” to prevent overnight E-mail & text notifications.

Anyway, so now the phone works… mostly. Still adding programs…

My use case is to leave the phone plugged in, face down, on my dresser overnight. Often my tablet is sitting there as well, plugged in, because I like to read the news, devotions, etc., before going to sleep. Well, what do you know, the tablet is large and thin, so I put it on the dresser first, then the phone on top, face down.

The past two mornings, the phone is working – I can see notifications in my web-based “WhatsApp” and text messages on “PushBullet” – but it seems to be locked up! The clock is present on a blue background in the top half of the screen, but the bottom half of the screen is black 🙁 It’s doing the haptic feedback on button presses (including the “soft” buttons), but won’t change screens for anything. If you plug it into the charger, the blue background changes to yellow, whoo hoo. My only recourse was to open it up, remove the battery, and reboot the phone that way.

Well, it turns out that this is a known problem with the Galaxy S5 – well, actually, a feature! Ugh. Apparently, there are some cases out there (or “covers” as they are sometimes called) that have a magnet in them, so that the S5 knows when the face is closed. It’s called a “flip flap”. Well, when the face is closed for a period of time, it automatically goes into “flipflap” mode, which shows the clock on the solid background, per above, through a lightly tinted upper window in the cover.

There were posts on this issue from a year ago – see https://www.reddit.com/r/LineageOS/comments/6yzpn1/how_to_disable_flip_flap_klte/ . Apparently there was a setting to disable this so-called “feature” (does my disdain show here?), but it would keep re-enabling itself “automagically”, as one post put it. You have to use “debloat” under “Magisk”. Now, here is a journey down a rabbit hole.

Installing Terminal Emulator
Go to the Google Play store and install Terminal Emulator from Jack Palevich. It will eventually need root privileges, but that should be automatic. Just remember that.

Installing Magisk

Optionally Check for Root
The next part requires root access, so you can check for root with Root Checker from joeykrim. This may fail the first time, because Magisk has to wake up and ask to give it root privileges, which, if you want it to detect root privileges, you will say “yes” to. Ha ha.

Installing Debloater
Unfortunately, you are just getting started. You may have to reboot to get Magisk Manager fully loaded. Open Magisk Manager, click the upper left menu, go to Modules. It will be empty. OK then, click the upper left menu, go to Downloads. Install Bash for Android. Do not install Debloater from here, unless you are on Magisk 19 or later – this is a bug in my opinion. Instead, that thread leads to a scary filesharing site to get old version. Now go back to Modules, click the bottom middle plus, navigate and select the downloaded older debloat ZIP archive, and it will install.

Now, reboot.

Doing the Deed in Terminal Emulator
Once I got Terminal Emulator running, I just:

• su – up to superuser mode
• debloat – if it says “module not found” then you have too new of debloat, go to this thread which leads to a scary filesharing site to get old version
• 2 System Priv-Apps – which will list available applications to be removed / masked by debloat
• 25 – FlipFlap program!
• exit – to get out of “su” mode
• exit – to exit the terminal emulator
• – now, reboot the phone to apply changes
• Load Terminal Emulator again, do “su”, “debloat”, “2 System Priv-Apps” again, and “FlipFlap” is no longer in the list, yay!

Blank Terminal Emulator Screen
I goofed and uninstalled Bash for Android instead of the too-new version of Debloater. ( hint: there’s no double check, it just does it – so be careful! )

After I reinstalled Bash for Android, Terminal Emulator just gave a blank screen! I’m not sure if it was related. Maybe I hit the “X” to close a window, rather than typing “exit”.

Anyway, it did come in after some fiddling. Not sure what I did. I waited a long time, I went to “windows” and tried to add one (killed the program?), and I tried to add a window using the big plus on the screen. I uninstalled and reinstalled Terminal Emulator.

If this does happen, be patient. Click things, try things, it will eventually work.

Better, be careful when clicking things in Magisk.

Shall see if this fixes the problem. Maybe will find out tomorrow morning 🙂

Samsung Galaxy S5 needs a boost

Well, the Galaxy S5 was a nice phone when I bought it from T-Mobile in 2015 in Phoenix. Not a fire breather, by any stretch, but nice. Unfortunately, it has become a dog. I’m not sure that it’s the phone’s fault – with Samsung and T-Mobile putting all that “crapware” on it, taking way too much memory all the time. In addition to all that, T-Mobile is responsible for the base Android firmware updates, even though I’ve moved back to Canada and put it on Bell-MTS… and they haven’t updated it in over 18 months. They probably will never update it again.

So, now I’m thinking that I’ll have to do what I did on my trusty old Motorola Atrix phone when it started to dog out some 6 years ago – root it and put Cyanogenmod, or equivalent, on it. No crapware (nothing that you can’t delete anyway), only what you want, and up-to-date Android firmware. Cyanogenmod has morphed into Lineage OS. I don’t recall what the reason for the morph was, but I think it was that the Cyanogen corporation that was formed to maintain & support the O/S, got carried away and did some dumb things (including trying to make their own phone and compete with Apple/Samsung/LG etc.). Anyway, it’s Lineage OS now.

I actually have two identical phones, so I can modify one and not take the hit when I goof up. So I’m actually changing my original T-Mobile S5 phone, and my “newer” phone still has the original firmware. Ugh, it’s so slow that I can barely use it.

The T-Mobile Galaxy S5 is model SM-G900T. Lineage calls it “klte” and firmware for it is at this location on the LineageOS website. Note that it’s not an ARM64 but just ARM architecture.

You first need to root the phone. Go to this article in Tom’s Guide which will show you how to root your phone with a program called Odin. You should be able to boot the original Android firmware, but it will moan and groan about being rooted. Good!

Next you install TeamWin Recovery Program “TWRP”, which is a middle stage loader that allows you to change OSes (“ROMs” in Android parlance). To install TWRP, you use Odin again. You power down your phone, power up with a specific key combination to get into “recovery”, and then blast the TWRP image onto the phone. See this TWRP page to get the image, which right now is version twrp-3.2.3-0-klte.img.tar .