Obexftp API available as html?

  • Haraldsh

    Haraldsh - 2007-08-15

    Trying to locate an official api of this library, however to no avail. I reckon there is a quick way of doing it yourself, but I rather check first if there already exsists one.

    Currently figuring out obexftp, however, it's hard to see what the different functions do if you don't have the api right in front of you.

    • Christian W. Zuckschwerdt

      There are some examples in the wiki, e.g.

      A little more info is in obexftp/client.h.

      The HTML developer docs are still WIP, sorry.

      • Haraldsh

        Haraldsh - 2007-08-19

        Hmm... are there any examples for how to listen for a incomming request/transmission etc?

        For example, a server waiting for a connection from a bluetooth device.

        So far I've done a combo of Bluez for the sdp and obexftp for the file transfer from laptop to btd.. WIP I guess.

        • Haraldsh

          Haraldsh - 2007-08-19

          Meh, I'm getting the sense that obexftp can't pull data..

        • Christian W. Zuckschwerdt

          The obexftp-0.22 (pre-release) offers simple sdp wrappers. Version 0.23 will offer a server API to complement the client API.

          • Haraldsh

            Haraldsh - 2007-08-19

            Heck, call me stupid. But where do I read about this sdp wrapper? And can obexftp receive data from a phone? If obexftp can receive data, how do you setup the listning part?

    • Haraldsh

      Haraldsh - 2007-08-19

      Btw, any eta on the 0.23? Would be very nifty to have =D

    • Haraldsh

      Haraldsh - 2007-08-19

      Just posted this though on the Bluez mailing list:
      "Hi there.

      I'm been trying to develop a bluetooth software that can send and receive data from a server - client view. I'm doing the development in PyBluez (might have to change it if something else supports all the operations i need to do).

      I want to create sort of an interactive bluetooth service, where the user operates the bluetooth device to interact with a server to get information. The data excahnged between the sides is either text or a image. My biggest problem is to be able to send data back and forth.

      I've been looking at obexftp, however that library seems (to me at least) to only support push operation and not pull. I can't figure out how to send something from for example to my phone (client) and to my laptop (aka the server) and back.

      I've been looking at the source code from several known programs, however, they confuse me more than help (due to the lack of comments ..).

      I'm using bluez for the sdp query, mostly due to the fact I can't see anything similar in obexftp. Obexftp just detects devices as far as I can see (correct me if I'm wrong)

      I know this is the mailing list for Bluez, I dunno how much you've been into obexftp. Any insight in the matter would anyway be quite nice.


      The code I've written so far is:


      ## This example is a combo of what you may find at
      ## the bluez and the obexftp homepage..

      import bluetooth
      import obexftp

      SVC_HOST        =       0
      SVC_PROTOCOL    =       1
      SVC_PORT        =       2
      SVC_SERVICE_ID  =       3

      ## Locates the bluetooth devices nearby and returns the
      ## the list of devices to locate_services
      def locate_btd():
         target_address = None
         target_name = None
           # doing a sdp query (to put it bluntly
         nearby_devices = bluetooth.discover_devices()
           for bdaddr in nearby_devices:
                 target_name = bluetooth.lookup_name(bdaddr)
                 print "Discovered: %s" % target_name
           return nearby_devices

      ## Locates the services depending wheter there are
      ## are any devices nearby by using Bluez
      ## Might be done by obexftp, however obexftp does not
      ## indicate afaik the port
      def locate_services():
           bt_devices = []
           print "Searching for services.."
               # Locate all the bluetooth devices in the area
         btd = locate_btd()
              if btd == None:
           print "length of btd: %d" % len(btd)
               for target in btd:              services = bluetooth.find_service(address=target)
               if len(services) == 0:
                 print "The device does not have the required service: %s" % bluetooth.lookup_name(target)
                 print " ----------------------------------- "
                 for svc in services:
                     if svc["name"] == "OBEX Object Push":
                         print "Found Required Service on Bluetooth Device"
                         print "____________________________________ "
                         print "Service Name: %s"    % svc["name"]
                         print "    Host:        %s" % svc["host"]
                         print "    Hostname:    %s" % bluetooth.lookup_name(target)
                         print "    Description: %s" % svc["description"]
                         print "    Provided By: %s" % svc["provider"]
                         print "    Protocol:    %s" % svc["protocol"]
                         print "    channel/PSM: %s" % svc["port"]
                         print "    svc classes: %s "% svc["service-classes"]
                         print "    profiles:    %s "% svc["profiles"]
                         print "    service id:  %s "% svc["service-id"]
                         print ":::::::::::::::::::::::::::::::::::: "
                                           # STORES THE DEVICES THAT HAS THE REQUIRED SERVICES
                         bt_devices.append((svc["host"], svc["protocol"], svc["port"], svc["service-id"]))
                   return bt_devices

      # Broadcast the bt device has been spotted
      def obexftp_send_message(bt_devices):
             data_message = "You have been spotted by a bluetooth service detector"
           i = 0
           ## just broadcasting after detecting devices..
         while i < len(bt_devices):
                   client = obexftp.client(obexftp.BLUETOOTH)
                   if (client.connectpush(bt_devices[i][SVC_HOST], bt_devices[i][SVC_PORT])) != 1:
                 print "Could not send data to %s", bt_devices[i][SVC_HOST]
             #print bt_devices[i][SVC_HOST]
             #print bt_devices[i][SVC_PORT]
                   # can't use put_file() for some reason...
             # must add extension to make it, hence the .txt at the end
             if (client.put_data(data_message, "INFO.txt")) != 1:
                 print "error: breaking"                i = i + 1
              ## Need to know wheter the service the clients provides
      ## supports the obex service...
      def obex_handler():
           # Are there any services
         bt_devices = locate_services()
         print bt_devices

         i = 0

         # trying to connect
         while i < len(bt_devices):
             if bt_devices[i][SVC_PROTOCOL] != 'RFCOMM':             print "The device %s has a mismatching protocol %s" % (bt_devices[i][SVC_HOST], bt_devices[i][SVC_PROTOCOL])
             i = i + 1



    • Haraldsh

      Haraldsh - 2007-08-21

      Okay, so far I've figured out i need a texting program on the phone itself. Plus I need to figure out how I can receive files from a client upon request.

      Any ideas, would be nice...

      • Christian W. Zuckschwerdt

        If I get this right, this is what you want:
        1) a client (phone, probably j2me midlet) to browse and upload/download
        2) a server (linux box) supporting the above

        If you are interested, obexftpd can do (2) and I once wrote a midlet doing (1).
        http://zuckschwerdt.org/blueload/ -- most likely it needs an overhaul.

        • Haraldsh

          Haraldsh - 2007-08-21

          Close, but not entirely.

          I'm creating a information service based on a bluetooth piconet. Where the clients connects and needs to use a text editor or a program that can create *.txt files which it sends to the server. The server prosses the text file from the client, and delivers a counterresponse.


          1. A text editor that be used on most cellphones (would be nice if it had a send option too). Browsing is not needed. The reason why I need a text editor is mostly due to the fact that you can't send a sms directly through the bluetooth.

          2. A server that can receive the messages as they come.

          • Christian W. Zuckschwerdt

            A J2ME Midlet text editor with BT OBEX send option should be straight forward.
            For the server I'd recommend the nice and flexible sobexsrv.
            btw: obexftp is the client part. obexftpd is a server.

            • Haraldsh

              Haraldsh - 2007-08-21

              I have little or no knowledge about J2ME, so the "A J2ME Midlet text editor with BT OBEX send option should be straight forward." feels like way over my head at the moment.

              Obexftpd is a package or a program?

              • Christian W. Zuckschwerdt

                Well there is little choice when you want apps to run on the majority of phones. I'd say you need to learn Java and J2ME programming or get someone to do it for you.
                The obexftpd server application is included with ObexFTP-0.22.
                Also ObexFTP runs on Win32. http://triq.net/obexftp/obex-win32.zip use the static obexftpd.exe for quickest results.

    • Haraldsh

      Haraldsh - 2007-08-21

      Btw, how do you use obexftp for the server part?

    • Haraldsh

      Haraldsh - 2007-08-21

      Might sound like a weird question I know, but I think there is a obexftpd you can run. Sitting in Windows at the moment, so I can't check.

      so it will be like

      import obexftpd


    • Haraldsh

      Haraldsh - 2007-08-22

      No, obexftpd is not what I am looking for. The obexftpd is a filesharing server, what I'm looking for is a way to let the server get the text directly from the client.

      something like:

      #client side:
      serv.send(text_data, "message.txt")

      #server side:
      cli.recv(text_data, text_id)

      message = parse_text(text_data)

      do something:

    • Haraldsh

      Haraldsh - 2007-08-27

      Realized Obexftp, though it has some functionality, it isn't what I'm looking for.

      I think I have to use OpenObex, but the thing with OpenObex, is it's poorly documented usage. I'm having a hard time figuring out how it works. Been looking at the obexftp source without getting any real clue what to do.

    • Rizwan Basha

      Rizwan Basha - 2008-11-27

      On making obexftp-0.22 these errors appear :

      obexftpd.c:81: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
      obexftpd.c: In function ‘start_server’:
      obexftpd.c:891: warning: implicit declaration of function ‘BtOBEX_ServerRegister’
      obexftpd.c:891: error: ‘bt_src’ undeclared (first use in this function)
      obexftpd.c:891: error: (Each undeclared identifier is reported only once
      obexftpd.c:891: error: for each function it appears in.)
      make[2]: *** [obexftpd.o] Error 1
      make[2]: Leaving directory `/root/Desktop/obexftp-0.22/apps'
      make[1]: *** [all-recursive] Error 1
      make[1]: Leaving directory `/root/Desktop/obexftp-0.22'
      make: *** [all] Error 2

      How can these be avoided .


Log in to post a comment.