Using a Vodafone R205/R208 mobile hotspot on another network

Before I dig into background and story, let me provide technical information of what this post is about. The Vodafone R205 is a Huawei-manufactured mobile hotspot; the R208 is its bigger brother, using a similar if not identical firmware. Vodafone sells these devices as “mobile broadband” throughout the world: I got mine in Ireland, my sister got one in Italy, and a quick googling showed it to be extremely common in Australia, too.

The R205 appears to be just a branded E586 (as noted by the hardware model silkscreened on the PCB — I have opened up the device, I’ll write about that in the future) with a custom Vodafone-specific firmware. There are out there shady sites that tell you how to flash any random E586 firmware on it, but I’m not really interested in doing something like that.

I moved to Dublin almost four years ago, and a few months after I was here, my sister planned to come visit me with friends. Because of the timing of her flights, that left them with about a day during which I still had to work, and they would just go randomly shopping and touristing around. She knew Dublin already, but at the same time as I had gotten to experience it better, they wanted to have me “at hand” to contact — since the roaming fees from Italy were crazy at the time, I decided to just buy a mobile hotspot (Vodafone R205 by Huawei) for cheap and get a month (because I needed more than a weekend) data on it, it was significantly cheaper than the roaming fees, and I kept the hotspot afterwards. I asked before buying, the device was neither SIM- nor network-locked, which is why I went for Vodafone rather than the other slightly cheaper options.

After the month ran out, instead of keeping the original SIM on it, I put another Vodafone SIM, coming from work. The reason was to be found in a number of issues with the connectivity of hotspot mode on Android phones, and in my need for a backup Internet connection while oncall. This worked out fine because the APNs of the business account matched the public account ones, so I had nothing to reconfigure: just plug the SIM in and it works.

Then came the day I went to Zurich on a work trip, and I needed connectivity. Since Switzerland is not part of EU, the special roaming rules don’t apply and the Vodafone roaming charge was just crazy insane, so I ended up grabbing a local data-only SIM card (including an USB mobile broadband modem). Unfortunately I wanted it on the go to play Ingress, too, and that was slightly more complicated to do with a USB device (never mind security frowning upon me even considering plugging in the USB device to my work laptop and installing its drivers). So I put the SIM into the hotspot, and it failed to connect. Ouch.

My first guess was that they told me a lie regarding the device not being network locked: a different Vodafone SIM worked, a Swiss Orange didn’t. But when I started googling for unlocking the device, a few of the more honest unlock services would actually tell you upfront what error message you need an unlock for. And I didn’t have that particular error message. Instead the problem was a failure to connect to the IP network. Which turned out to be an APN problem.

Indeed the APN for Orange (now Salt) is different from Vodafone’s, so you have to go and change it, which is fairly easy: there is a “Mobile Broadband” section, and within that there is a form to configure the various APN and login settings. Except every time I filled it in, it would error out with a “missing field” error.

I forgot how I ended up trying this, but since it was telling me it marked the field as red, and no field was red, I opened the Developer Tools and tried again. And I got an error log in the console:

setAccountTypeCallback failed

Put a breakpoint on the log in the JavaScript (that thankfully Huawei didn’t actually minify!) and I can figure out what is being called when I try to save. The important part is in this function:

if (value === "Custom") {
    callbacksToChain = 0;
    $.each(['setCustomAccountTypeCallBack', 'setConnectionModeCallback', 'setAccountTypeCallback'], function() {
        callbacksToChain++;
        Util.addHookAfter(window, this, doConnectionIfAllIsWell);
    });
    setMobileBroadbandConnectionSettings();
}
else {
    callbacksToChain = 0;
    $.each(['setConnectionModeCallback', 'setAccountTypeCallback'], function() {
        callbacksToChain++;
        Util.addHookAfter(window, this, doConnectionIfAllIsWell);
    });
    saveConnectionDetails();
    setAccountType();
}
Code language: JavaScript (javascript)

If the selected profile is ‘Custom’, then the form values are actually sent to the device. Otherwise only the profile name is sent over to be selected. This makes sense to a point, if the providers may have a long list of profiles with different configurations that may be updated via firmware update rather than asking the users to reconfigure it.

The problem is, of course, that there is no “Custom” profile in the interface of my R205 – but as I found out recently, there is on my sister’s R208 – and the only value for which the form gets enabled is selecting the empty row in the drop-down box. Which is then empty and causes the profile to be empty, and that explains the error message, and even the lack of red on the page: there is no CSS style for the drop-down box to be red.

Simply adding a “Custom” entry to the drop-down box is enough to make the device accept the parameters in the form, which is not horrible at all. Unfortunately doing so from a mobile phone is not easy, as you have to go and use the developer tools for it to work. At least it appears that as long as the last configuration was a Custom one, then the drop-down still lists Custom as an option, which allowed me to reconfigure the hotspot in Japan with just my mobile phone while sitting in a coffee shop in Fukuoka. The R208 I have from my sister is in Italian (since she got it in Italy) and has a “Custom” entry in the drop-down box, so it would be slightly handier to set up.

I have planned at some point to write a simple tool that can set the parameters without looking at the UI, but I have not done so yet. This should be fairly easy since it would just be a matter of sending a login request to get the admin cookie and then send the form with the right parameters. As a command-line thing on Linux it would make it easy to set up, but the useful part would be as a simple Android app that I can use to reconfigure the device without going crazy.

Expect another post in a few weeks about what I found inspecting the device a little bit in software and hardware, if nothing else because I was bored while waiting for some information and approvals to continue my other project.

Exit mobile version