Service Profiles are intended to describe variants of the basic protocols 
supported by telepathy CMs (Connection Managers): An example of this would 
be Google Talk vs Jabber/XMPP - Google Talk is a specific case of XMPP with
well-known capabilities, quirks and settings.

Since there is a lot of common content/use overlap between Telepathy
profiles and libaccounts services, the intention is to describe a single
file format that can and will be shared by both.

<service id="google-talk">
  <type>IM</type> <!-- the standard type for all services MC will
                       be expected to show an interest in.        -->
  <provider>google</provider>
  <name>GoogleTalk</name>
  <icon>base-name-of-icon</icon>

  <manager name="gabble">       <!-- the telepathy cm name  -->

    <protocol>jabber</protocol> <!-- the telepathy protocol -->

    <!-- non-parameter settings are specified here - their types correspond 
         to dbus types -->
    <setting name="some-non-parameter-setting" type="i">-29</setting>

    <!-- now on to parameters: these are of types corrspoonding to dbus
         types (only simple types so far) and may be mandatory, which 
         implies that the setting value is intrinsic to the profile and
         may not be changed by the user (ie if it's not talk.google.com,
         it's not google talk) -->
    <!-- the default type is "s" -->
    <parameters>
      <setting name="server"  type="s" mandatory="1">talk.google.com</setting>
      <setting name="port"    type="u" mandatory="1">5223</setting>
      <setting name="old-ssl" type="b" mandatory="1">1</setting>
      <setting name="fallback-conference-server">conference.jabber.org</setting>
    </parameters>

    <!-- in this example we specify some additional statuses + labels
         to be added to the stock list, and disable one   -->
    <!-- if omitted, the standard manager presences apply -->
    <!-- if the apply="modify" (the default), the presences should be 
         added to the list. If the mode is "replace", the list is
         comprehensive and none of the presences supplied by the CM by 
         default should be used at all, only the ones listed -->
    <!-- a disabled presence should not be presented to the user of this 
         service as it is unsupported (by the service - the CM obviously
         still supports it) -->
    <presences apply="modify">
      <presence id="offline"   label="Offline"/>
      <presence id="available" label="Available"
                icon="gtalk-online"/>
      <presence id="away"      label="Away"
                message="1">Asleep at my desk</presence>
      <presence id="hidden"    label="Invisible" default="1"/>
      <presence id="busy"      label="Busy"
                icon="gtalk-hold-my-calls"/>
      <presence id="xa"        label="" disabled="1"/>
    </presences>

    <!-- if omitted, the standard manager channel classes are supported -->
    <!-- here we disable one channel type not normally available -->
    <!-- you could in principle _add_ channel types here, but since the 
         CM wouldn't support them, that wouldn't mean much… -->
    <channel-types apply="modify">
      <!-- this service doesn't support streamed media (video, audio) at all -->
      <channel disable="1" type="StreamedMedia"/>
      <channel type="text">
        <!-- this service does support 1:1 and contact lists -->
        <handle-type>contact</handle-type>
        <handle-type>list</handle-type>
        <!-- this service does not support rooms/mucs/etc -->
        <handle-type disable="1">room</handle-type>
      </channel>
    </channel-types>

  </manager>

  <!-- our hypothetical alternate CM -->  
  <manager name="alt-xmpp-cm">
    <protocol>jabber</protocol><!-- our noddy alternate CM only supports text
         and only 1:1 IMs at that (on this service) -->
    <channel-types apply="replace">
      <channel type="Text">
        <handle-type>contact</handle-type>
      </channel>
    </channel-types>

    <!-- our noddy alternate CM only supports two presences too -->
    <presences apply="replace">
      <presence id="offline"   label="Offline"/>
      <presence id="available" label="Online"/>
    </presences>

  </manager>

</service>