<?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. Shares will always be remounted regardless if they can be reached on the network or not. '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="Premount">
      <tp:docstring>
       'Premounts' a given share by attempting to call smbc_opendir on given share path. Shares will only be premounted if shares are reachable on the network. Premount will succeed if there is an authentication failure.
       'Premounts' 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 PremountOptionsProto 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="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="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>

    <method name="StartCopy">
      <tp:docstring>
        Starts a CopyEntry operation.
      </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>
      <arg name="copy_token" type="i" direction="out">
        <tp:docstring>
          Unique identifier of the in-progress copy operation. Used to call ContinueCopy.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>

    <method name="ContinueCopy">
      <tp:docstring>
        Continues a CopyEntry operation.
      </tp:docstring>
      <arg name="mount_id" type="i" direction="in">
        <tp:docstring>
          Unique identifier of the mounted share.
        </tp:docstring>
      </arg>
      <arg name="copy_token" type="i" direction="in">
        <tp:docstring>
          Unique identifier of the in-progress copy operation.
        </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="StartReadDirectory">
      <tp:docstring>
        Starts a ReadDirectory operation.
      </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>
      <arg name="read_dir_token" type="i" direction="out">
        <tp:docstring>
          Unique identifier of the in-progress read directory operation. Used to call ContinueReadDirectory.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>

    <method name="ContinueReadDirectory">
      <tp:docstring>
        Continues a ReadDirectory operation.
      </tp:docstring>
      <arg name="mount_id" type="i" direction="in">
        <tp:docstring>
          Unique identifier of the mounted share.
        </tp:docstring>
      </arg>
      <arg name="read_dir_token" type="i" direction="in">
        <tp:docstring>
          Unique identifier of the in-progress read directory operation.
        </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="UpdateMountCredentials">
      <tp:docstring>
        Updates the credentials of a mount.
      </tp:docstring>
      <arg name="options_blob" type="ay" direction="in">
        <tp:docstring>
          Serialized UpdateMountCredentialsOptions 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="UpdateSharePath">
      <tp:docstring>
        Updates the share path of a mount.
      </tp:docstring>
      <arg name="options_blob" type="ay" direction="in">
        <tp:docstring>
          Serialized UpdateSharePathOptions 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>

  </interface>
</node>
