<?xml version="1.0" ?>
<node name="/Debug"
  xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
  <tp:copyright>Copyright (C) 2009 Collabora Ltd.</tp:copyright>
  <tp:license xmlns="http://www.w3.org/1999/xhtml">
    <p>This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.</p>

<p>This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.</p>

<p>You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</p>
  </tp:license>
  <interface name="org.freedesktop.Telepathy.Debug">
    <tp:added version="0.17.27">(as stable API)</tp:added>

    <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
      <p>An interface for providing debug messages.</p>

      <p>This interface is primarily provided by one object per
      service, at the path <tt>/org/freedesktop/Telepathy/debug</tt>.</p>
    </tp:docstring>

    <property name="Enabled" type="b" access="readwrite"
      tp:name-for-bindings="Enabled">
      <tp:docstring>
        TRUE if the <tp:member-ref>NewDebugMessage</tp:member-ref> signal
        should be emitted when a new debug message is generated.
      </tp:docstring>
    </property>

    <method name="GetMessages" tp:name-for-bindings="Get_Messages">
      <tp:docstring>
        Retrieve buffered debug messages. An implementation could have a
        limit on how many message it keeps and so the array returned from
        this method should not be assumed to be all of the messages in
        the lifetime of the service.
      </tp:docstring>

      <arg direction="out" name="Messages" type="a(dsus)"
        tp:type="Debug_Message[]">
        <tp:docstring>
          A list of debug messages.
        </tp:docstring>
      </arg>
    </method>

    <signal name="NewDebugMessage" tp:name-for-bindings="New_Debug_Message">
      <tp:docstring>
        Emitted when a debug messages is generated if the
        <tp:member-ref>Enabled</tp:member-ref> property is set to TRUE.
      </tp:docstring>

      <arg name="time" type="d">
        <tp:docstring>
          Timestamp of the debug message.
        </tp:docstring>
      </arg>
      <arg name="domain" type="s">
        <tp:docstring>
          Domain of the debug message, as described in the Debug_Message struct.
        </tp:docstring>
      </arg>
      <arg name="level" type="u" tp:type="Debug_Level">
        <tp:docstring>
          Level of the debug message.
        </tp:docstring>
      </arg>
      <arg name="message" type="s">
        <tp:docstring>
          The text of the debug message.
        </tp:docstring>
      </arg>
    </signal>

    <tp:enum name="Debug_Level" type="u">
      <tp:enumvalue suffix="Error" value="0">
        <tp:docstring>
          Log level for errors. Error messages are always fatal, resulting
          in the service terminating after something completely
          unexpected occurred.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="Critical" value="1">
        <tp:docstring>
          Log level for critical messages. Critical messages are messages
          that the service might predict and it is up to the service itself
          to decide whether to terminate following a critical message.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="Warning" value="2">
        <tp:docstring>
          Log level for warnings.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="Message" value="3">
        <tp:docstring>
          Log level for messages.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="Info" value="4">
        <tp:docstring>
          Log level for information messages.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="Debug" value="5">
        <tp:docstring>
          Log level for debug messages.
        </tp:docstring>
      </tp:enumvalue>
    </tp:enum>

    <tp:struct name="Debug_Message" array-name="Debug_Message_List">
      <tp:docstring>
        A struct representing a debug message, as returned by
        <tp:member-ref>GetMessages</tp:member-ref>.
      </tp:docstring>

      <tp:member type="d" name="Timestamp">
        <tp:docstring>
          Timestamp of the debug message. This is a double to allow
          more accuracy in the time the message was logged.
        </tp:docstring>
      </tp:member>

      <tp:member type="s" name="Domain">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          <p>Domain of the debug message. This is used to identify
          the source of debug messages. For example, debug messages
          from a connection manager could have this Domain struct
          member be the name of the connection manager, and logs
          from any helper library could have the name of the helper
          library.</p>

          <p>The domain could also contain a category as to where
          the log message originated separated by a forward-slash.
          For example, if a debug message was output in a connection
          manager called "dummy", in the file-transfer code, this
          Domain struct member might be <tt>dummy/file-transfer</tt>.</p>
        </tp:docstring>
      </tp:member>

      <tp:member type="u" tp:type="Debug_Level" name="Level">
        <tp:docstring>
          Level of the debug message. This states the severity of the
          debug message.
        </tp:docstring>
      </tp:member>

      <tp:member type="s" name="Message">
        <tp:docstring>
          The text of the debug message.
        </tp:docstring>
      </tp:member>
    </tp:struct>

  </interface>
</node>
<!-- vim:set sw=2 sts=2 et ft=xml: -->
