Archive for category Pidgin

Four more prpls

It suddenly occurred to me that I never posted about the new prpls that I’ve written since the Hangouts prpl. Today we shall fix that.
Read the rest of this entry »

No Comments

A Hangouts Prpl

So Pidgin has fairly alrightish support for Hangouts through the XMPP server that Google provides. Unfortunately it’s missing a whole bunch of stuff – like group chats, self-sent messages et. al. – that make it just that little bit annoying to use.

So we had a Summer of Code 2015 student start work on a new protocol plugin (prpl) for Pidgin. Unfortunately due to a few roadblocks (mostly around new stuff in libpurple3) it didn’t get completed, so I’ve spent the last too-many weeks implementing the pblite/protobuf-json/jsprotobuf protocol (TODO find a link for this one) that Google uses, in C using the amazing protobuf-c library (in combination with the always awesome json-glib), to begin work on a new Hangouts prpl for Pidgin.

After the pblite-madness set in (seriously, that stuff will give you nightmares), Maiku came on board to help, and now we have a plugin that’s at a ‘good enough’ state right now that people can start using it.

We’ve taken inspiration from the Python-based Hangups library, and used the authentication code that Nakul wrote as part of GSoC2015 to come up with some moderately-sane code that works for both Pidgin 2.x and those foolish enough to be using Pidgin 3. There’s still a lot of pieces of the puzzle missing (you’ll see what I mean when you try it), but I think it’s good enough now that I’ve ditched my XMPP account in favour of it.

Please give it a go and tell us what you think. Just to be different, it’s over on BitBucket instead of GitHub.

1 Comment

Retiring the MightyText plugin

So unfortunately I’ve had to discontinue work on the MightyText plugin for Pidgin.

Semi-recently, Google changed their authentication process to no longer allow an old type of auth. Unfortunately, the new system (OAuth) relies on the user having a web browser to login with, which isn’t something we can assume with libpurple (have you tried using a text-based web browser with Finch?!). Although I managed to find a way around this, to connect back from OAuth into the MightyText server requires a great deal of effort that ended up going nowhere.

So, regretfully I’ve had to stop.

Read the rest of this entry »

No Comments

Using the new “Skype for Web”

So, Skype have recently announced a new, web-accessible version of Skype. Currently it’s invite-only, closed beta but I’ve managed to have a look around to see what it’s capable of and how it works. They’ve talked about making it work with WebRTC but at the moment it needs a separate download to get a browser plugin. Thus, a lot of the peer-to-peer features (such as file transfers or audio/video calls) don’t work. The major benefit of the new system is that it complements existing Desktop API or SkypeKit messaging by providing access to the server-stored “thread” chats. It’s also interesting to see that the ‘endpoint’ information for users, including what platform they’re using the Skype client on, is being provided. The downside is that it’s still beta, that it destroyed my buddy list and can’t handle talking to older, pre-microsoft Skype clients or in the older type of multi-user chats — I guess that’s why they’ve been so desperate to block older clients and get everyone moved onto a new version of the client.

Everything (other than login) is mostly JSON message sending/receiving with an HTTP-long polling connection for events. You’ll also need to do a bit of XML parsing for some of the messages, particularly for some metadata about chat rooms (adding/removing users). The ‘protocol’ also can’t make up it’s mind about whether it wants to identify a user or conversation by a URL or a id. Probably the worst part about it is how very sensitive it is to be 100% exact.

Ah well. I’ve been working on a new plugin for the last week, if anyone else is interested in testing it out. It’s got a few bugs, a few segfaults but the hard part is out of the way. Please grab it from svn on googlecode, the skypeweb subfolder of trunk, give it a compile and email me when you find all the fun bugs 🙂

No Comments

Setting up the MSN-XMPP plugin in Pidgin

Fun conversation in the #pidgin IRC channel this morning about the latest news about Microsoft shutting down the MSN servers later this year. As part of it, a few people wanted to start using MSN-over-XMPP using the msn-xmpp plugin for Pidgin. I have some uncommitted (and unfinished) code on my computer to convert the plugin from just an authorising mechanism to a proper protocol plugin but in its presently available state, it’s a fairly manual process. Just to make people’s lives easier I’m documenting here the setup process (might even put some info on the Google code page 🙂 )

First of all, grab the plugin, install it and enable it through Tools->Plugins

Then create a new XMPP account in your Pidgin Accounts page. You’ll want to use your MSN/Live/WLM email address with the ‘@’ characters replaced with ‘%40’ for the username, and as the domain

Save and enable the account and follow all the popup prompts and login pages in your browser. You’ll also want to open the debug log in Pidgin through Help->Debug Window. You’re watching for a message saying ‘see-other-host’ (you can filter by it if you want). You want to then take that value and cram it into the ‘Connect Server’ setting in the Advanced tab.


Latest stuffs in the world of Skype

So with the launch of Skype 6, and with a few patches sent from a very helpful user by the name of gabriele0101, I’ve had the chance to do a little bit of work on the Skype plugin.

One of the most annoying things that’s happened with newer versions of Skype – and the single largest cause of emails about the plugin – is the bug in Skype where it doesn’t always send notifications of new messages. Foolishly, I’ve been waiting for Skype to fix the bug in their software, and in the mean time told people to roll back to an older version of Skype. I’ve been suggesting the use of Skype on Windows, since a friend of mine found that it uses the least amount of memory, cpu and disk space; but with the release of Skype 6 only recently decided to install a newer version of Skype to see if I could workaround the missing messages bug.

So far I’ve come up with a hackish polling for any missed messages every 10 seconds. While not perfect, it does workaround the problem, but it does mean an up-to 10s delay in getting some messages, and potential for messages to arrive out of order. I’m working on trying out a couple of other potential workarounds but they’re not ready yet.

Gabriele and I have also been working on cleaning up the code a tiny bit, removing a lot of the threading code, attempting to get it to work with InstantBird and made the ‘Get Info’ popup actually show some useful information. Once I sort out the missing messages bug properly, I’ll be sure to roll out a new version of the plugin to people. If you’re interested in testing the latest Windows plugin for Pidgin, feel free to send me a message on Skype.

And so comes some interesting stuff about Skype 6. After upgrading to it, it has a new feature that lets you login to MSN/WLM messenger. On closer inspection it uses the MSN XMPP servers to connect through to MSN. You can also video call people on MSN and they’ll get a popup at their end to install a plugin. On closer inspection this is the same plugin or similar plugin to what’s used on the FB website for making video calls. It’s basically a NAPI-based browser plugin that provides a JavaScript frontend through a webpage. As of newer versions of Skype, it appears that Skype is moving away from its proprietary Kazaa data storage and into using SQLite data stores instead.

Also interesting is the effect of linking your MSN & FB accounts to Skype and the resulting messages that get passed through the Skype API. If you have your FB account linked you get a lot of “USER ONLINESTATUS” messages. And calls from people on Facebook can be answered by the Skype API, although they come through as being from a username of “fb:198374ldshflsk”. Online status and status messages for MSN contacts is a bit weird: the API will often leave out the username and say “USER MOOD_TEXT xyzabc”, and when placing a call it will be to/from a user with a username of “live:asdkfhaslkfdhj”, which appears to be the part of the MSN username before the @, and messages will appear to come from “” (but you can’t send messages to a “1:” user).

So where does that leave us? Well, still looking for alternatives. I’d love to not be reliant on having a Skype/Skypekit client running to connect to Skype and I’ve been carefully paying attention to all the reverse engineering attempts out there. The skype-open-source team have been doing a lot of good work and the recent update from oklabs looks promising too. Unfortunately not quite ready yet to try and pull apart and turn into a library for Pidgin to use just yet, but watch this space!

Update: Thought I’d mention another side effect of linking your Live/MSN account with your Skype account: You’re going to start receiving offline messages on your MSN account from “skypeusername@fakeSkypeDomain.fakedomain”, every time you receive a Skype message. It appears that the messages are being sent from the newer Skype clients from the other party; that they’re also forwarding their messages through the ‘old’ MSN offline message servers. You can’t reply to these email addresses, nor can you add them to your buddy list. They’re just a completely fake address. Personally, I don’t understand the logic behind forwarding all messages through the MSN offline message servers; all I can see is that it introduces further privacy concerns of your messages being stored somewhere else – another privacy concern. This really furthers my belief that you shouldn’t be using newer versions of the Skype client – although this doesn’t help anything unless the person you’re talking to is also not using the latest Skype.


Summer of Code 2012

I’m proud to announce that I’m a mentor in this year’s Google Summer of Code. I’m mentoring Sanket, who’s going to be writing a plugin for Pidgin/libpurple that will record statistics and send them to a server for display. Kinda like Adium’s Sparkle stats.

I’m really excited about his project and I’m really keen to see some of the stats that come out of it. It’ll be great to know how many people are using my plugins for one 😉 but will also be good to see what operating systems Pidgin runs on primarily. There’s already been a request from the Instantbird guys about getting stats of popular protocols based on system locales, which is going to be a pretty cool metric to see 🙂

There’s already been a lot of great discussion between Sanket and I about what stats will be useful in terms of CPU and operating system. Do you have any thoughts on what stats you’d like to see out of Pidgin?


New Steam Mobile App

There’s now a new Steam app for mobile devices that’s currently in limited beta. The best part about the new app is that it allows you to chat on Steam Friends, without using a Steam client, which means a Pidgin/Adium plugin is more likely to be on its way. The second best part is that you can be logged into the mobile client at the same time as being logged into the desktop, so signing into this mythical Pidgin plugin wouldn’t sign you out on your desktop machine.

Let me know if you’re in the beta at the moment (ie, have you managed to sign into Steam from your mobile) as I’d be keen to hear your experiences with it. 🙂

Edit: The Steam plugin for Pidgin has been connecting to the mobile API for a while now; Steam no longer needs to be running to be able to chat with your friends 🙂


Prevent a Pidgin crash on Windows

I’ve created a new plugin that prevents a crash in Pidgin on Windows, due to an annoying GTK+/Pango bug. This bug currently affects all GTK+ apps on Windows, not just Pidgin.

If you’re using winpidgin, I’d suggest you download and enable the pidgin-win32-non-bmp plugin to prevent remote crashes.

No Comments