-----------------------------------------
Windows port of the freedesktop.org D-Bus
-----------------------------------------

Features and completeness
-------------------------
The windows port of dbus provides the dbus-1 library and mostly
applications which are already available on unix. These applications
are: dbus-daemon, dbus-launch, dbus-monitor and dbus-send.
DBus comes with a test suite which is used on unix to guarantate
production quality and this test suite runs mostly. There are some
test not running yet and there is help needed to get them running.

Supported compilers
-------------------
On windows Microsoft Visual Studio 2010 (Express and professional variants) 
and mingw-w64|32 are known to work.

Building
--------
DBus can be built on windows using automake or cmake. See the
file README for more information.
Special cmake build instructions can be found in cmake/readme-cmake.txt


windbus and dbus4win Ports
--------------------------
The Windows ports from the windbus and dbus4win projects has been merged
into the freedesktop git master branch, as applicable. The spec has been
updated with windows specific stuff.


Tests
-----
 - dbus library check
    bin\dbus-test.exe <build-root>\test\data

 - bus daemon check
    bin\bus-test.exe <build-root>\test\data

 - check available names
    bin\test_names.exe

 - check if dbus-daemon is accessable
    bin\dbus-send.exe --session --type=method_call --print-reply --dest=org.freedesktop.DBus / org.freedesktop.DBus.ListNames method return sender=org.freedesktop.DBus -> dest=:1.4 array [ string "org.freedesktop.DBus"string ":1.4"]

 - start session dbus-daemon
    either by running
        bin\dbus-launch
    or
        start bin\dbus-daemon --session

    Before running these commands you may execute
        set DBUS_VERBOSE=1
    for getting debug infos


 - call function registerd in dbus
    bin\dbus-send.exe  --dest=org.freedesktop.DBus --print-reply --type=method_call / org.freedesktop.DBus.StartServiceByName string:org.freedesktop.DBus.TestSuiteEchoService  uint32:455 method return sender=org.freedesktop.DBus -> dest=:1.8 uint32 2

    note: When building with the Visual C++ IDE the *.exe files are in
          the bin/Debug and bin/Release folder, not in the bin folder.


FAQ
---

- How far is WinDBus from being usable for production ?

  dbus comes with a test suite which is used on unix to guarantate
  production quality and this test suite runs mostly. There are some
  test not running and we need help to get them running.
  In the pratice I and some other people are using dbus for at least more
  than four years in conjunction with kde on windows without any problems.

- On UNIX D-Bus uses UNIX sockets to communicate (correct me if I'm wrong).
  What is used on Windows ?

  tcp sockets, there are some efforts to get named pipe running, but some
  design problems of the win32 api, we are not able to solve without
  bigger changes to the dbus code base let us stop this effort.

- Do you have any clue if dbus-win32 can run in a Windows CE environment?

  dbus has been ported to wince, see README.wince for more information

- Do you know if the C++ binding made by OpenWengo will be easily portable to Windows?

  The OpenWengo dbus-c++ binding has been ported to windows see in WinDBus svn
  (http://sf.net/projects/windbus)
  The related test applicationa are running well.


TODO
----

Oktober 2010:

- the code wrapped with DBUS_WIN_FIXME should be inspected if it required for windows

- create a dbus setup installer

- implement system bus and system bus service starter
  see http://windbus.svn.sourceforge.net/viewvc/windbus/trunk/bus/bus-service-win.c
  for a starting point

- implement a real login session bus
  The scope parameter of the autolaunch meta protocol could be extended to support user
  specific session busses (like already done with the amarok bundled dbus which use a
  shared memory area named "DBusDaemonAddressInfo:<username>".
  Also the dbus installer should start a session bus on user login.
