<?xml version="1.0" encoding="UTF-8" ?>

<node name="/org/chromium/SmbProvider"
    xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
  <interface name="org.chromium.SmbProvider">

    <method name="Mount">
      <tp:docstring>
        'Mounts' a given share by attempting to call smbc_opendir on given share path. 'Mounts' is
        in quotes because this does not actually do an actual mount since it is not needed on an SMB
        share. On success, this returns the corresponding mount id.
      </tp:docstring>
      <arg name="options_blob" type="ay" direction="in">
        <tp:docstring>
          Serialized MountOptions protobuf.
        </tp:docstring>
      </arg>
      <arg name="password_fd" type="h" direction="in">
        <tp:docstring>
          File descriptor of the file that contains the password.
        </tp:docstring>
      </arg>
      <arg name="error_code" type="i" direction="out">
        <tp:docstring>
          Returned error code. See ErrorType enum.
        </tp:docstring>
      </arg>
      <arg name="mount_id" type="i" direction="out">
        <tp:docstring>
          Unique identifier of the mounted share.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>

    <method name="Remount">
      <tp:docstring>
        'Remounts' a given share by attempting to call smbc_opendir on given share path. 'Remounts' is
        in quotes because similarly to Mount this does not do an actual mount since it is not needed on an SMB share.
        This will assign the mount the mount_id in the RemountOptions proto.
      </tp:docstring>
      <arg name="options_blob" type="ay" direction="in">
        <tp:docstring>
          Serialized RemountOptions protobuf.
        </tp:docstring>
      </arg>
      <arg name="password_fd" type="h" direction="in">
        <tp:docstring>
          File descriptor of the file that contains the password.
        </tp:docstring>
      </arg>
      <arg name="error_code" type="i" direction="out">
        <tp:docstring>
          Returned error code. See ErrorType enum.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>

    <method name="Unmount">
      <tp:docstring>
        Unmounts' the mount corresponding to the mount id. 'Unmounts' is in quotes because this
        does not do an actual unmount since SMB does not need to actually mount a share.
      </tp:docstring>
      <arg name="options_blob" type="ay" direction="in">
        <tp:docstring>
          Serialized UnmountOptions protobuf.
        </tp:docstring>
      </arg>
      <arg name="error_code" type="i" direction="out">
        <tp:docstring>
          Returned error code. See ErrorType enum.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>

    <method name="ReadDirectory">
      <tp:docstring>
        Reads the directory on a given path. This outputs a serialized DirectoryEntryList protobuf.
      </tp:docstring>
      <arg name="options_blob" type="ay" direction="in">
        <tp:docstring>
          Serialized ReadDirectoryOptions protobuf.
        </tp:docstring>
      </arg>
      <arg name="error_code" type="i" direction="out">
        <tp:docstring>
          Returned error code. See ErrorType enum.
        </tp:docstring>
      </arg>
      <arg name="entries" type="ay" direction="out">
        <tp:docstring>
          Serialized DirectoryEntryList protobuf.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>

    <method name="GetMetadataEntry">
      <tp:docstring>
        Gets the metadata of a given entry. This outputs an serialized DirectoryEntry protobuf.
      </tp:docstring>
      <arg name="options_blob" type="ay" direction="in">
        <tp:docstring>
          Serialized GetMetadataEntryOptions protobuf.
        </tp:docstring>
      </arg>
      <arg name="error_code" type="i" direction="out">
        <tp:docstring>
          Returned error code. See ErrorType enum.
        </tp:docstring>
      </arg>
      <arg name="entry" type="ay" direction="out">
        <tp:docstring>
          Serialized DirectoryEntry protobuf.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>

    <method name="OpenFile">
      <tp:docstring>
        Opens a file with a specified path.
      </tp:docstring>
      <arg name="options_blob" type="ay" direction="in">
        <tp:docstring>
          Serialized OpenFileOptions protobuf.
        </tp:docstring>
      </arg>
      <arg name="error_code" type="i" direction="out">
        <tp:docstring>
          Returned error code. See ErrorType enum.
        </tp:docstring>
      </arg>
      <arg name="file_id" type="i" direction="out">
        <tp:docstring>
          Unique identifier of the open file.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>

    <method name="CloseFile">
      <tp:docstring>
        Closes the file with the specified file handler.
      </tp:docstring>
      <arg name="options_blob" type="ay" direction="in">
        <tp:docstring>
          Serialized CloseFileOptions protobuf.
        </tp:docstring>
      </arg>
      <arg name="error_code" type="i" direction="out">
        <tp:docstring>
          Returned error code. See ErrorType enum.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>

    <method name="DeleteEntry">
      <tp:docstring>
        Deletes the entry with a specified path.
      </tp:docstring>
      <arg name="options_blob" type="ay" direction="in">
        <tp:docstring>
          Serialized DeleteEntryOptions protobuf.
        </tp:docstring>
      </arg>
      <arg name="error_code" type="i" direction="out">
        <tp:docstring>
          Returned error code. See ErrorType enum.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>

    <method name="ReadFile">
      <tp:docstring>
        Reads the file in a given samba file descriptor and writes the data in a temporary file.
        This outputs the file descriptor to the temporary file.
      </tp:docstring>
      <arg name="options_blob" type="ay" direction="in">
        <tp:docstring>
          Serialized ReadFileOptions protobuf.
        </tp:docstring>
      </arg>
      <arg name="error_code" type="i" direction="out">
        <tp:docstring>
          Returned error code. See ErrorType enum.
        </tp:docstring>
      </arg>
      <arg name="temp_fd" type="h" direction="out">
        <tp:docstring>
          File descriptor of the temporary file that contains the read data.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>

    <method name="CreateFile">
      <tp:docstring>
        Creates a file on the specified path.
      </tp:docstring>
      <arg name="options_blob" type="ay" direction="in">
        <tp:docstring>
          Serialized CreateFileOptions protobuf.
        </tp:docstring>
      </arg>
      <arg name="error_code" type="i" direction="out">
        <tp:docstring>
          Returned error code. See ErrorType enum.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>

    <method name="Truncate">
      <tp:docstring>
        Truncates a file on the specified path to a desired length.
      </tp:docstring>
      <arg name="options_blob" type="ay" direction="in">
        <tp:docstring>
          Serialized TruncateOptions protobuf.
        </tp:docstring>
      </arg>
      <arg name="error_code" type="i" direction="out">
        <tp:docstring>
          Returned error code. See ErrorType enum.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>

    <method name="WriteFile">
      <tp:docstring>
        Reads data from a temporary file and writes the data into the samba file with the specified
        handler.
      </tp:docstring>
      <arg name="options_blob" type="ay" direction="in">
        <tp:docstring>
          Serialized WriteFileOptionsProto protobuf.
        </tp:docstring>
      </arg>
      <arg name="temp_fd" type="h" direction="in">
        <tp:docstring>
          File descriptor of the temporary file that contains the data to be written.
        </tp:docstring>
      </arg>
      <arg name="error_code" type="i" direction="out">
        <tp:docstring>
          Returned error code. See ErrorType enum.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>

    <method name="CreateDirectory">
      <tp:docstring>
        Creates a directory at the specified path.
      </tp:docstring>
      <arg name="options_blob" type="ay" direction="in">
        <tp:docstring>
          Serialized CreateDirectoryOptionsProto protobuf.
        </tp:docstring>
      </arg>
      <arg name="error_code" type="i" direction="out">
        <tp:docstring>
          Returned error code. See ErrorType enum.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>

    <method name="MoveEntry">
      <tp:docstring>
        Moves an entry at the specified source path to the specified destination path.
      </tp:docstring>
      <arg name="options_blob" type="ay" direction="in">
        <tp:docstring>
          Serialized MoveEntryOptionsProto protobuf.
        </tp:docstring>
      </arg>
      <arg name="error_code" type="i" direction="out">
        <tp:docstring>
          Returned error code. See ErrorType enum.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>

    <method name="CopyEntry">
      <tp:docstring>
        Copies an entry at the specified source path to the specified destination path.
      </tp:docstring>
      <arg name="options_blob" type="ay" direction="in">
        <tp:docstring>
          Serialized CopyEntryOptionsProto protobuf.
        </tp:docstring>
      </arg>
      <arg name="error_code" type="i" direction="out">
        <tp:docstring>
          Returned error code. See ErrorType enum.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>

    <method name="GetDeleteList">
      <tp:docstring>
          Gets a list of entries to delete. The list of entries will be in order
          in which they should be deleted.
      </tp:docstring>
      <arg name="options_blob" type="ay" direction="in">
        <tp:docstring>
          Serialized GetDeleteListOptions protobuf.
        </tp:docstring>
      </arg>
      <arg name="error_code" type="i" direction="out">
        <tp:docstring>
          Returned error code. See ErrorType enum.
        </tp:docstring>
      </arg>
      <arg name="temp_fd" type="h" direction="out">
        <tp:docstring>
          File descriptor of the temporary file that contains a serialized
          DeleteList protobuf.
        </tp:docstring>
      </arg>
      <arg name="bytes_written" type="i" direction="out">
        <tp:docstring>
          Number of bytes written to the temporary file.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>

    <method name="GetShares">
      <tp:docstring>
        Gets a list of SMB shares from a host.
      </tp:docstring>
      <arg name="options_blob" type="ay" direction="in">
        <tp:docstring>
          Serialized GetSharesOptionsProto protobuf.
        </tp:docstring>
      </arg>
      <arg name="error_code" type="i" direction="out">
      <tp:docstring>
        Returned error code. See ErrorType enum.
      </tp:docstring>
      </arg>
      <arg name="shares" type="ay" direction="out">
        <tp:docstring>
          Serialized DirectoryEntryList protobuf.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>

    <method name="SetupKerberos">
      <tp:docstring>
        Sets up Kerberos for a user.
      </tp:docstring>
      <arg name="account_id" type="s" direction="in">
        <tp:docstring>
          Object GUID of the user account to setup Kerberos for.
        </tp:docstring>
      </arg>
      <arg name="success" type="b" direction="out">
        <tp:docstring>
          Boolean indicating success of the SetupKerberos operation.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="async"/>
    </method>

    <method name="ParseNetBiosPacket">
      <tp:docstring>
        Parses a NetBios Name Request Response packet.
      </tp:docstring>
      <arg name="packet" type="ay" direction="in">
        <tp:docstring>
          Packet received as a repsonse to a NetBios Name Request.
        </tp:docstring>
      </arg>
      <arg name="transaction_id" type="q" direction="in">
        <tp:docstring>
          Transaction ID for the NetBios Name Request. Any packet that does not
          contain a matching transaction ID is ignored.
        </tp:docstring>
      </arg>
      <arg name="hostnames" type="ay" direction="out">
        <tp:docstring>
          Serialized Hostnames protobuf.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>

  </interface>
</node>
