23 November 2016

Import contacts on old Bluetooth Phones

Few weeks ago, my smartphone died. Someone lent me an old Nokia phone (6021) and I was looking for a way to send all my contacts and phone numbers to it.

The Nokia phone supports Bluetooth connectivity and seems to understand the vCard standard (rfc6350). All contacts can be exported as vCard file using Mozilla Thunderbird "Export" features in Address Book.

We will see that Nokia phone does not follow the vCard standard and we will need to hack the vCard information to be understandable by the phone. I use Python with module vobject to do that.

Exporting contacts as vCard file

I use Thunderbird as mail client, and my contact are stored on my server using the Caldav protocol. Mozilla Thunderbird offers to export contacts in the main address book interface ( « Tools -> Export » and choose vCard export type)

If you use an other way of storing your contacts, like Google with Gmail, you can also export your contact with vCard export format.

I have created two contacts to show the incompatibility with the phone.

  • test 1
  • test éàéç 2

You will end up with a file like this one « vcard_test_export.vcf » :

begin:vcard
fn:test 1
n:1;test
tel;cell:+33 6 00 00 00 00
version:2.1
end:vcard

begin:vcard
fn;quoted-printable:test =C3=A9=C3=A0=C3=A9=C3=A7 2
n;quoted-printable:2;test =C3=A9=C3=A0=C3=A9=C3=A7
tel;cell:+33 7 00 00 00 00
version:2.1
end:vcard

Sending vCard to Nokia phone

If we try to send this file to the Nokia phone, via Bluetooth, it detects it correctly as a vCard file, and ask you to add the contact to the phone. But, it will do it only for the first contact in the file ("test 1" in our example).

So the first issue is that the Nokia phone does not support multiple contact in one vCard file. We will have to split each contact in its own vCard file.

Also, the second contact has specific characters that are not part of the ASCII table. You can see that exporting a vCard will output the specific character as "quoted-printable" format with some specific code like : "=C3=A9".

Quoted-printable strings are a manner of encoding character which prevent to be incorrectly parsed when exporting (or sending over a wire) data. All escape code are prefixed by a "=" sign followed by the code.

So here : =C3=A9 is : \xc3\xa9. It is UTF-8 encoding for representing the character "é".

But, what happens if we sent the second contact via Bluetooth ? The Nokia phone do not understand the UTF-8 encoding, and save the contact name as is like:

"test =C3=A9=C3=A0=C3=A9=C3=A7 2"

If we look at the standard page for Charset specification (section #3.1) it says:

« The charset (see [RFC3536] for internationalization terminology) for vCard is UTF-8 as defined in [RFC3629]. »

And it is quite clear with this sentence:

« There is no way to override this. »

So the phone tricks the standard. But how to find the expecting encoding charset for vCard on this Nokia Phone ? This is simple, we will create a contact on the Nokia phone, "test éçà" and send it via Bluetooth to the computer. (Menu contact, "Send bus. card"-> "via Bluetooth")

Open the VCF file on your computer, and what do you see ? The Nokia phone overrides the encoding information by adding a Charset specification ("N;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:").

ISO-8859-1 is another Charset specification, widely used before UTF-8 encoding for encoding latin specific characters.

So we have 2 issues here:

  • Charset encoding
  • vCard Split: One VCF file per contact

Issue 1 : Hacking the vCard encoding

We will need to hack the vCard output to transform quoted-printable in UTF-8 format to be quoted-printable in ISO-8859-1. Also, to keep easy the formating I decide to remove the field FN from vCard output. (Only N; field will be kept)

Issue 2 : Splitting the vCard file

For each vCard contact discovered in the vCard output, we will create a single VCF file with the vCard information.

Bonus : Filtering interesting contact

As a Bonus, I will only kept contact with a phone number.

Python Script

I made a simple Python script (2.7) to address theses two issues. It takes one argument, a vCard file and re-encode and split all contact in it (only those with a phone number) to the "out/" directory by creating one VCF file per contact.

When done, you will end up with all your vCard files in the "out/" directory. Each vCard file is named by the contact name. To send it to your phone, you must send each separate vCard file via Bluetooth, and for each contact, manually accept it on the phone. (It takes me about 10 minutes for ~ 200 contacts)

  • For vCard parsing I use the module « vobject » python module.
  • For quoted-printable decode and re-encode, I use quopri python module.
  • To hack the encoding for N field and to remove the FN field, I use two simples regular expressions, with Python « re » module.

The python script is available on my personal git repository here.

You can clone it:

$ git clone https://dev.beneth.fr/beneth/vcard_legacy.git

The script name is split_vcard.py.

To run it, you have to give as first argument your vCard export file, like this:

$ ./split_vcard.py vcard_test_file/vcard_test_file_1.vcf

Do not hesitate to comment and/or improve the script if you use it.

Links

5 October 2016

Nginx & Letsencrypt: HTTPS for all

[object Object]

Why HTTPS?

Securing a web server using HTTPS not only gives you encryption but also guarantees that the request reaches the destination without being compromised.

The request crosses over a lot of network paths to reach the destination, and if not secured (using HTTP), its content can be changed or it can be redirected to another server without knowing it.

With a well configured HTTPS server, using a public Web-Of-Trust, you have this assurance.

This post will briefly cover how Letsencrypt works, and how to configure Nginx to handle the ACME challenge protocol. Also, we will see how to tell Nginx to redirect all HTTP traffic to HTTPS, and will use safe SSL/TLS Ciphers parameters.

Continue reading

21 September 2013

Nouveau Serveur gonflé aux chroot LXC

On dépoussière le blog, ni vu ni connu ! (Et oui, ça faisait une éternité que je n’avez pas posté de billet…) Nous sommes passé de OVH (Kimsufi, sans trop de patates) à Online (Dedibox en édition limité) qui nous offre un peu plus de souplesse niveau ressources. Tellement d’ailleurs, que je me suis  […]

Continue reading

17 September 2009

Juggle Light Graph

JuggleLG1

Deux petites photos très sympathiques qui commencent à dater Ps: merci pedrov :)  […]

Continue reading

28 April 2009

Le domaine Audible de l'oreille humaine (Attention Migraine !)

La légende commune dit qu’un humain entend les sons de 20Hz à 20KHz en moyenne. La bande de fréquence se réduit avec l’âge pour à priori plusieurs raisons :

  • Dégradation de l’audition
  • Perte progressives des sons de hautes fréquences (> 16KHz) du fait du peu d’habitude d’entendre des sons aussi aigus.

Continue reading

27 April 2009

im.beneth.fr -> Ouverture d'un serveur Jabber

Pourquoi Jabber ?

Imaginer tout simplement, que depuis une adresse MSN vous puissiez rajouter un contact sur ICQ ? Une seule adresse pour joindre des contacts connectés sur des serveurs complètement différents. C’est exactement le principe d’XMPP (Jabber). Avec une adresse Gmail, en utilisant Gtalk qui utilise en fait le protocole Jabber, vous pouvez ajouter des contacts de serveurs différents comme "@jabber.fr" ou bien maintenant "@im.beneth.fr" ou tant d’autres !

Continue reading

14 October 2008

Carte Graphique ATI (Chip R500) Accélération 3d Libre !

Ça faisait longtemps que je voulais poster sur ce sujet. Depuis maintenant quelque temps, les chips ATI r500 bénéficient de l’accélération 3d libre avec le driver ati ! Je ne perd pas de vu le driver Radeonhd, qui d’ailleurs vient d’inclure DRI pour les chips r500 et rs600, cependant après  […]

Continue reading

23 June 2008

Les artistes unis contre le téléchargement

[object Object]

Étienne Daho, Christophe Maé, Kery James, Sinik, Francis Cabrel, Patrick Bruel, Jean-Jacques Goldman, Jenifer, Stanislas, Raphaël, M Pokora, Keren Ann, Thomas Dutronc, Eddy Mitchell, Isabelle Boulay, Maxime Le Forestier, Martin Solveig, Marc Lavoine, Calogero, Gérard Darmon, Pascal Obispo, Jacob  […]

Continue reading

15 May 2008

Faille de Sécurité Critique dans OpenSSL de Debian.

Une faille de sécurité existante depuis 2006 dans OpenSSL, vient d’être publiée. Celle ci est critique car toute les générations de clés censé être aléatoire, n’était pas si aléatoire que ça au final ! De ce que j’ai compris, le générateur de nombre aléatoire se basait seulement sur le PID du  […]

Continue reading

16 October 2007

Driver libre ATI " Radonhd " Enfin une Alternative !

Ma carte Graphique étant une Radeon Mobility X1700, aucun driver libre ne faisait fonctionner cette carte sur mon laptop. J’avais comme seule alternative libre le driver VESA qui est limité à une résolution de 1024x768. Sur un écran de portable supportant du 1440x900 c’est un peu limite... Je fus  […]

Continue reading

8 May 2007

ATI Radeon X1700 sous linux ( Debian Etch )

J’ai fais très récemment l’acquisition d’un ordinateur Portable muni d’une carte graphique Radeon Mobility X1700.

Je me suis empressé d’installer mon OS favoris, mais j’ai eu beaucoup de mal à installer correctement le driver propriétaire de ATI.

Pourquoi le propriétaire ? Tout simplement parce que pour ce type de carte, le driver libre ne marche pas, il ne semble pas supporter le chipset X1700; en revance, le driver propriétaire, bien que cela ne soit pas mentionné sur le site, le supporte.

Voilà donc la marche à suivre pour installer ce fameux driver et sortir du très sobre mode VESA ...

Petit recommandation:
(Je pense que cela ne marche pas avec xorg 7.2, la version stable de etch étant dans les 7.1.x , il y a surement des astuces qui devraient figurer dans les liens à la fin du billet. Mon noyau est un 2.6.21-1 fraichement compilé.)
Up : Cela marche très bien avec xorg 7.2 depuis les drivers 8.37.6. Le driver fonctionne et se compile parfaitement sous une debian Sid.


Continue reading

16 April 2007

Mencoder, encodage Avi et Split d'une Video

J’ai récupéré hier des Vidéos enregistrées depuis la Freebox HD, petit problème c’est du format DVD et on a en général beaucoup d’image entre ce qui nous interresse.   Voilà donc comment j’ai procédé vite fait bien fait, pour que plus tard je m’en rappelle facilement.   ps: Je ne saurai expliquer  […]

Continue reading

8 April 2007

Installer Postfix + Maildrop, Comptes Virtuels avec gestion Mysql

Ce billet est un aide mémoire des étapes pour l’installation d’un Serveur mail (ici Postfix) avec un ajout simplifié d’utilisateur à travers une base mysql.

Continue reading

Page top