#!/usr/bin/python

import time
import dbus

bus = dbus.SystemBus()

xml = ' \
<?xml version="1.0" encoding="UTF-8" ?> 	\
<record>					\
  <attribute id="0x0001">			\
    <sequence>					\
      <uuid value="0x1101"/>			\
    </sequence>					\
  </attribute>					\
						\
  <attribute id="0x0002">			\
     <uint32 value="0"/>			\
  </attribute>					\
						\
  <attribute id="0x0003">			\
    <uuid value="00001101-0000-1000-8000-00805f9b34fb"/> \
  </attribute>					\
						\
  <attribute id="0x0004">			\
    <sequence>					\
      <sequence>				\
        <uuid value="0x0100"/>			\
      </sequence>				\
      <sequence>				\
        <uuid value="0x0003"/>			\
        <uint8 value="23"/>			\
      </sequence>				\
    </sequence>					\
  </attribute>					\
						\
  <attribute id="0x0005">			\
    <sequence>					\
      <uuid value="0x1002"/>			\
    </sequence>					\
  </attribute>					\
						\
  <attribute id="0x0006">			\
    <sequence>					\
      <uint16 value="0x656e"/>			\
      <uint16 value="0x006a"/>			\
      <uint16 value="0x0100"/>			\
    </sequence>					\
  </attribute>					\
						\
  <attribute id="0x0007">			\
     <uint32 value="0"/>			\
  </attribute>					\
						\
  <attribute id="0x0008">			\
     <uint8 value="0xff"/>			\
  </attribute>					\
						\
  <attribute id="0x0009">			\
    <sequence>					\
      <sequence>				\
        <uuid value="0x1101"/>			\
        <uint16 value="0x0100"/>		\
      </sequence>				\
    </sequence>					\
  </attribute>					\
						\
  <attribute id="0x000a">			\
    <url value="http://www.bluez.org/"/>	\
  </attribute>					\
						\
  <attribute id="0x000b">			\
    <url value="http://www.bluez.org/"/>	\
  </attribute>					\
						\
  <attribute id="0x000c">			\
    <url value="http://www.bluez.org/"/>	\
  </attribute>					\
						\
  <attribute id="0x0100">			\
    <text value="Serial Port"/>			\
  </attribute>					\
						\
  <attribute id="0x0101">			\
    <text value="Serial Port Service"/>		\
  </attribute>					\
						\
  <attribute id="0x0102">			\
     <text value="BlueZ"/>			\
  </attribute>					\
						\
  <attribute id="0x0200">			\
    <sequence>					\
      <uint16 value="0x0100"/>			\
    </sequence>					\
  </attribute>					\
						\
  <attribute id="0x0201">			\
     <uint32 value="0"/>			\
  </attribute>					\
</record>					\
'

database = dbus.Interface(bus.get_object('org.bluez', '/org/bluez'),
							'org.bluez.Database')

handle = database.AddServiceRecordFromXML(xml)

print "Service record with handle 0x%04x added" % (handle)

print "Press CTRL-C to remove service record"

try:
	time.sleep(1000)
	print "Terminating session"
except:
	pass

database.RemoveServiceRecord(dbus.UInt32(handle))
