#!/usr/bin/python

import sys
import time
import dbus

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>					\
'

bus = dbus.SystemBus()
manager = dbus.Interface(bus.get_object("org.bluez", "/"),
						"org.bluez.Manager")

if len(sys.argv) > 1:
	path = manager.FindAdapter(sys.argv[1])
else:
	path = manager.DefaultAdapter()

service = dbus.Interface(bus.get_object("org.bluez", path),
						"org.bluez.Service")

handle = service.AddRecord(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

service.RemoveRecord(dbus.UInt32(handle))
