OBEX File Transfer on Series 60, with Bluetooth File Exchange on OS X

This only conserns Series 60 2nd edition (and probably 1st edition, too), 3rd edition and Series 80 work as they should.

Overview

Ever since starting to use Series 60 phones with OS X, I've been annoyed by the fact that Bluetooth File Exchange can't browse them. The only way of transferring files between them is by using OBEX push, that is, by sending individual files (which then on the phone end up in the inbox).

This is bearable, but sometimes you'd want to send a bigger file straight to the memory card which doesn't even fit into the main memory of the phone.

I don't know about any OBEX FTP client for Series 60 either (is there any?), otherwise that would be a feasible workaround.

Initially, it seemed to me that Series 60 didn't work at all with Bluetooth File Exchange, since it only showed an empty folder. After quite some time, though, I figured out that it actually works, but not as one would hope. Uploading files works, and then the uploaded files are stored into the inbox. And in that case, the files which are in the inbox, uploaded using OBEX FTP earlier, are visible. But not files sent using OBEX push, and of course nothing outside of the inbox.

I had only tried using obexftp (which uses openobex) on Linux using USB earlier, and knew that that one works as I want to. Much later, when I tried using obexftp with Bluetooth, I found the same situation if one doesn't manually specify a specific RFCOMM channel. Using the wonderful tools in BlueZ (more specifically, sdptool), I could view a dump of all SDP (service discovery protocol) records on the phone, and suddenly everything made sense.

The phone advertises quite a few different services, among them a standard OBEX FTP service and OBEX PC Suite services. The RFCOMM channel one had to specify in order to make obexftp work was the PC Suite channel.

In other words, Series 60 advertises two services which speak the OBEX FTP protocol, one very crippled advertised with the ordinary OBEX FTP service UUID and one full-fledged service with a PC Suite-specific UUID.

One can't expect Bluetooth File Exchange to look for the non-standard PC Suite service UUID, and I don't know of any other OBEX FTP application for OS X. But there's still another (quite hackish) solution: make the phone advertise the PC Suite service using the OBEX service UUID.

Ideally, the hack would consist of a simple application on the phone, which investigates the local SDP database and makes the necessary modifications. Unfortunately, the SDP APIs on Symbian don't seem to provide any way of reading what's in the database, and the APIs for reading SDP records from other devices don't seem to be able to connect to the local SDP server. In other words, the investigation of the SDP database must be done on some other device.

Solution

Note, I take no responsibility whatsover for the effects of using these tools. They work for me, at least.

SdpBrowser

Download:

SdpBrowser is a tool for OS X, which more or less does the same as sdptool in BlueZ - it's capable of listing all the SDP record data on a remote device. (Bluetooth Explorer in the Xcode Developer Tools does more or less the same, but only for the local SDP database.) This can be useful when developing Bluetooth applications for some other device than the local mac.

Since SdpBrowser is made specifically for this need, it also can try to parse out the necessary information from the SDP records.

SDP Editor

Download:

SDP Editor is a small tool for Series 60 for updating already existing SDP records on the phone. Enter a SDP record handle and a RFCOMM channel, and that record is updated to advertise the given channel.

The changes aren't persistent, everything is back to normal after restarting the phone.

The APIs don't work too well if the given record handle doesn't already exist, on 6630 the SDP server crashes. Updating the wrong record makes some other service unusable. In all cases, restarting the phone should restore everything.

Usage

Using SdpBrowser, select Get PC Suite info in the Device menu, select the phone and click browse. If everything works as it should, it gives the SDP record handle of the OBEX FTP record and the RFCOMM channel of the PC Suite service.

Then start SDP Editor on the phone, choose Update channel in the menu, and enter the handle and RFCOMM channel given by SdpBrowser. Then, Bluetooth File Exchange should be able to browse the files on the phone.

The handle and channel shouldn't change as long as you don't install/remove any service on the phone, so in general you'll only need to rerun the application on the phone with the last, working values.

If it doesn't give all the necessary information, you can try to read it manually from the raw SDP records. Select Browse in the Device menu, and select the phone. Look for a record with the text "OBEX File Transfer", and look for the number on the row starting with "0:" in this record (e.g. "0: 0x10006"). That's the record handle (in hexadecimal). Also look for a record with the text "Nokia OBEX PC Suite Services". That record should have a row like "4: { { <0100> } }, { { <0003> }, { 0xc } }, { { <0008> } }". Here 0xc, that is 12, is the RFCOMM channel.

Further improvements

This already is quite an improvement to the original "functionalty" of the crippled OBEX FTP service. But e.g. the System-directory is hidden - if one would be able to directly transfer files there, the development process of Series 60 applications would get a big speedup. This directory is still accessible, if one is able to manually enter a directory to open. (Incidentally, obexftp does this.)

So, the final wish is a "Go to directory"-dialog for Bluetooth File Exchange, or obexftp working on OS X. (openobex can be compiled with USB support on OS X, but I haven't gotten it to work... Perhaps I'll have to add support for OS X-bluetooth to it myself, sometime, if I have time and if noone else beats me to it.)

Contact

// Martin Storsjö ()