1 /* GIO - GLib Input, Output and Streaming Library 2 * 3 * Copyright (C) Carl-Anton Ingmarsson 2011 <ca.ingmarsson@gmail.com> 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General 16 * Public License along with this library; if not, write to the 17 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 18 * Boston, MA 02110-1301, USA. 19 * 20 * Author: Carl-Anton Ingmarsson <ca.ingmarsson@gmail.com> 21 */ 22 23 #ifndef _GVFSAFPCONNECTION_H_ 24 #define _GVFSAFPCONNECTION_H_ 25 26 #include <gio/gio.h> 27 28 #include "gvfsafputils.h" 29 30 G_BEGIN_DECLS 31 32 enum 33 { 34 AFP_GET_USER_INFO_BITMAP_GET_UID_BIT = 0x1, 35 AFP_GET_USER_INFO_BITMAP_GET_GID_BIT = 0x2, 36 AFP_GET_USER_INFO_BITMAP_GET_UUID_BIT = 0x4 37 }; 38 39 enum 40 { 41 AFP_MAP_NAME_FUNCTION_NAME_TO_USER_ID = 1, 42 AFP_MAP_NAME_FUNCTION_NAME_TO_GROUP_ID = 2, 43 AFP_MAP_NAME_FUNCTION_UTF8_NAME_TO_USER_ID = 3, 44 AFP_MAP_NAME_FUNCTION_UTF8_NAME_TO_GROUP_ID = 4, 45 AFP_MAP_NAME_FUNCTION_UTF8_NAME_TO_USER_UUID = 5, 46 AFP_MAP_NAME_FUNCTION_UTF8_NAME_TO_GROUP_UUID = 6 47 }; 48 49 typedef enum 50 { 51 AFP_PATH_TYPE_SHORT_NAME = 1, 52 AFP_PATH_TYPE_LONG_NAME = 2, 53 AFP_PATH_TYPE_UTF8_NAME = 3 54 } AfpPathType; 55 56 enum 57 { 58 AFP_ACCESS_MODE_READ_BIT = (1 << 0), 59 AFP_ACCESS_MODE_WRITE_BIT = (1 << 1), 60 AFP_ACCESS_MODE_DENY_READ_BIT = (1 << 4), 61 AFP_ACCESS_MODE_DENY_WRITE_BIT = (1 << 5) 62 }; 63 64 enum 65 { 66 AFP_FILEDIR_ATTRIBUTES_BITMAP_INVISIBLE_BIT = 0x1, 67 AFP_FILEDIR_ATTRIBUTES_BITMAP_SYSTEM_BIT = 0x4, 68 AFP_FILEDIR_ATTRIBUTES_BITMAP_WRITE_INHIBIT_BIT = 0x20, 69 AFP_FILEDIR_ATTRIBUTES_BITMAP_BACKUP_NEEDED_BIT = 0x40, 70 AFP_FILEDIR_ATTRIBUTES_BITMAP_RENAME_INHIBIT_BIT = 0x80, 71 AFP_FILEDIR_ATTRIBUTES_BITMAP_DELETE_INHIBIT_BIT = 0x100, 72 AFP_FILEDIR_ATTRIBUTES_BITMAP_COPY_PROTECT_BIT = 0x400, 73 AFP_FILEDIR_ATTRIBUTES_BITMAP_SET_CLEAR_BIT = 0x8000 74 }; 75 76 enum 77 { 78 AFP_FILEDIR_BITMAP_ATTRIBUTE_BIT = 0x1, 79 AFP_FILEDIR_BITMAP_PARENT_DIR_ID_BIT = 0x2, 80 AFP_FILEDIR_BITMAP_CREATE_DATE_BIT = 0x4, 81 AFP_FILEDIR_BITMAP_MOD_DATE_BIT = 0x8, 82 AFP_FILEDIR_BITMAP_BACKUP_DATE_BIT = 0x10, 83 AFP_FILEDIR_BITMAP_FINDER_INFO_BIT = 0x20, 84 AFP_FILEDIR_BITMAP_LONG_NAME_BIT = 0x40, 85 AFP_FILEDIR_BITMAP_SHORT_NAME_BIT = 0x80, 86 AFP_FILEDIR_BITMAP_NODE_ID_BIT = 0x100, 87 AFP_FILEDIR_BITMAP_UTF8_NAME_BIT = 0x2000, 88 AFP_FILEDIR_BITMAP_UNIX_PRIVS_BIT = 0x8000, 89 }; 90 91 enum 92 { 93 AFP_DIR_BITMAP_ATTRIBUTE_BIT = 0x1, 94 AFP_DIR_BITMAP_PARENT_DIR_ID_BIT = 0x2, 95 AFP_DIR_BITMAP_CREATE_DATE_BIT = 0x4, 96 AFP_DIR_BITMAP_MOD_DATE_BIT = 0x8, 97 AFP_DIR_BITMAP_BACKUP_DATE_BIT = 0x10, 98 AFP_DIR_BITMAP_FINDER_INFO_BIT = 0x20, 99 AFP_DIR_BITMAP_LONG_NAME_BIT = 0x40, 100 AFP_DIR_BITMAP_SHORT_NAME_BIT = 0x80, 101 AFP_DIR_BITMAP_NODE_ID_BIT = 0x100, 102 AFP_DIR_BITMAP_OFFSPRING_COUNT_BIT = 0x200, 103 AFP_DIR_BITMAP_OWNER_ID_BIT = 0x400, 104 AFP_DIR_BITMAP_GROUP_ID_BIT = 0x800, 105 AFP_DIR_BITMAP_ACCESS_RIGHTS_BIT = 0x1000, 106 AFP_DIR_BITMAP_UTF8_NAME_BIT = 0x2000, 107 AFP_DIR_BITMAP_UNIX_PRIVS_BIT = 0x8000, 108 AFP_DIR_BITMAP_UUID_BIT = 0x10000 // AFP version 3.2 and later (with ACL support) 109 }; 110 111 enum 112 { 113 AFP_FILE_BITMAP_ATTRIBUTE_BIT = 0x1, 114 AFP_FILE_BITMAP_PARENT_DIR_ID_BIT = 0x2, 115 AFP_FILE_BITMAP_CREATE_DATE_BIT = 0x4, 116 AFP_FILE_BITMAP_MOD_DATE_BIT = 0x8, 117 AFP_FILE_BITMAP_BACKUP_DATE_BIT = 0x10, 118 AFP_FILE_BITMAP_FINDER_INFO_BIT = 0x20, 119 AFP_FILE_BITMAP_LONG_NAME_BIT = 0x40, 120 AFP_FILE_BITMAP_SHORT_NAME_BIT = 0x80, 121 AFP_FILE_BITMAP_NODE_ID_BIT = 0x100, 122 AFP_FILE_BITMAP_DATA_FORK_LEN_BIT = 0x200, 123 AFP_FILE_BITMAP_RSRC_FORK_LEN_BIT = 0x400, 124 AFP_FILE_BITMAP_EXT_DATA_FORK_LEN_BIT = 0x800, 125 AFP_FILE_BITMAP_LAUNCH_LIMIT_BIT = 0x1000, 126 AFP_FILE_BITMAP_UTF8_NAME_BIT = 0x2000, 127 AFP_FILE_BITMAP_EXT_RSRC_FORK_LEN_BIT = 0x4000, 128 AFP_FILE_BITMAP_UNIX_PRIVS_BIT = 0x8000 129 }; 130 131 enum 132 { 133 AFP_VOLUME_ATTRIBUTES_BITMAP_READ_ONLY = 0x1, 134 AFP_VOLUME_ATTRIBUTES_BITMAP_HAS_VOLUME_PASSWORD = 0x2, 135 AFP_VOLUME_ATTRIBUTES_BITMAP_SUPPORTS_FILE_IDS = 0x4, 136 AFP_VOLUME_ATTRIBUTES_BITMAP_SUPPORTS_CAT_SEARCH = 0x8, 137 AFP_VOLUME_ATTRIBUTES_BITMAP_SUPPORTS_BLANK_ACCESS_PRIVS = 0x10, 138 AFP_VOLUME_ATTRIBUTES_BITMAP_SUPPORTS_UNIX_PRIVS = 0x20, 139 AFP_VOLUME_ATTRIBUTES_BITMAP_SUPPORTS_UTF8_NAMES = 0x40, 140 AFP_VOLUME_ATTRIBUTES_BITMAP_NO_NETWORK_USER_IDS = 0x80, 141 AFP_VOLUME_ATTRIBUTES_BITMAP_DEFUALT_PRIVS_FROM_PARENT = 0x100, 142 AFP_VOLUME_ATTRIBUTES_BITMAP_NO_EXCHANGE_FILES = 0x200, 143 AFP_VOLUME_ATTRIBUTES_BITMAP_SUPPORTS_EXT_ATTRS = 0x400, 144 AFP_VOLUME_ATTRIBUTES_BITMAP_SUPPORTS_ACL = 0x800, 145 AFP_VOLUME_ATTRIBUTES_BITMAP_CASE_SENSITIVE = 0x1000, 146 AFP_VOLUME_ATTRIBUTES_BITMAP_SUPPORTS_TM_LOCK_STEAL = 0x2000 147 }; 148 149 enum 150 { 151 AFP_VOLUME_BITMAP_ATTRIBUTE_BIT = 0x1, 152 AFP_VOLUME_BITMAP_SIGNATURE_BIT = 0x2, 153 AFP_VOLUME_BITMAP_CREATE_DATE_BIT = 0x4, 154 AFP_VOLUME_BITMAP_MOD_DATE_BIT = 0x8, 155 AFP_VOLUME_BITMAP_BACKUP_DATE_BIT = 0x10, 156 AFP_VOLUME_BITMAP_VOL_ID_BIT = 0x20, 157 AFP_VOLUME_BITMAP_BYTES_FREE_BIT = 0x40, 158 AFP_VOLUME_BITMAP_BYTES_TOTAL_BIT = 0x80, 159 AFP_VOLUME_BITMAP_NAME_BIT = 0x100, 160 AFP_VOLUME_BITMAP_EXT_BYTES_FREE_BIT = 0x200, 161 AFP_VOLUME_BITMAP_EXT_BYTES_TOTAL_BIT = 0x400, 162 AFP_VOLUME_BITMAP_BLOCK_SIZE_BIT = 0x800 163 }; 164 165 enum 166 { 167 AFP_ATTENTION_CODE_MESSAGE_AVAILABLE = 0x2, 168 AFP_ATTENTION_CODE_SERVER_NOTIFICATION = 0x3, 169 AFP_ATTENTION_CODE_IMMEDIATE_SHUTDOWN = 0x4, 170 AFP_ATTENTION_CODE_SHUTDOWN_NO_MESSAGE = 0x8, 171 AFP_ATTENTION_CODE_DISCONNECT_NO_MESSAGE = 0x9, 172 AFP_ATTENTION_CODE_SHUTDOWN_MESSAGE = 0xA, 173 AFP_ATTENTION_CODE_DISCONNECT_MESSAGE = 0xB 174 }; 175 176 enum 177 { 178 AFP_ATTENTION_MASK_DONT_RECONNECT_BIT = 0x1, 179 AFP_ATTENTION_MASK_SERVER_MESSAGE_BIT = 0x2, 180 AFP_ATTENTION_MASK_SERVER_CRASH_BIT = 0x4, 181 AFP_ATTENTION_MASK_SHUTDOWN_BIT = 0x8 182 }; 183 184 typedef enum 185 { 186 AFP_COMMAND_CLOSE_FORK = 4, 187 AFP_COMMAND_COPY_FILE = 5, 188 AFP_COMMAND_CREATE_DIR = 6, 189 AFP_COMMAND_CREATE_FILE = 7, 190 AFP_COMMAND_DELETE = 8, 191 AFP_COMMAND_GET_FORK_PARMS = 14, 192 AFP_COMMAND_GET_SRVR_INFO = 15, 193 AFP_COMMAND_GET_SRVR_PARMS = 16, 194 AFP_COMMAND_GET_VOL_PARMS = 17, 195 AFP_COMMAND_LOGIN = 18, 196 AFP_COMMAND_LOGIN_CONT = 19, 197 AFP_COMMAND_LOGOUT = 20, 198 AFP_COMMAND_MAP_ID = 21, 199 AFP_COMMAND_MAP_NAME = 22, 200 AFP_COMMAND_MOVE_AND_RENAME = 23, 201 AFP_COMMAND_OPEN_VOL = 24, 202 AFP_COMMAND_OPEN_FORK = 26, 203 AFP_COMMAND_RENAME = 28, 204 AFP_COMMAND_SET_FORK_PARMS = 31, 205 AFP_COMMAND_WRITE = 33, 206 AFP_COMMAND_GET_FILE_DIR_PARMS = 34, 207 AFP_COMMAND_SET_FILEDIR_PARMS = 35, 208 AFP_COMMAND_GET_SRVR_MSG = 35, 209 AFP_COMMAND_GET_USER_INFO = 37, 210 AFP_COMMAND_EXCHANGE_FILES = 42, 211 AFP_COMMAND_READ_EXT = 60, 212 AFP_COMMAND_WRITE_EXT = 61, 213 AFP_COMMAND_ENUMERATE_EXT = 66, 214 AFP_COMMAND_ENUMERATE_EXT2 = 68 215 } AfpCommandType; 216 217 /* 218 * GVfsAfpName 219 */ 220 typedef struct _GVfsAfpName GVfsAfpName; 221 222 GVfsAfpName* g_vfs_afp_name_new (guint32 text_encoding, 223 gchar *str, 224 gsize len); 225 226 void g_vfs_afp_name_unref (GVfsAfpName *afp_name); 227 void g_vfs_afp_name_ref (GVfsAfpName *afp_name); 228 229 char* g_vfs_afp_name_get_string (GVfsAfpName *afp_name); 230 231 /* 232 * GVfsAfpReply 233 */ 234 #define G_VFS_TYPE_AFP_REPLY (g_vfs_afp_reply_get_type ()) 235 #define G_VFS_AFP_REPLY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_VFS_TYPE_AFP_REPLY, GVfsAfpReply)) 236 #define G_VFS_AFP_REPLY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), G_VFS_TYPE_AFP_REPLY, GVfsAfpReplyClass)) 237 #define G_VFS_IS_AFP_REPLY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_VFS_TYPE_AFP_REPLY)) 238 #define G_VFS_IS_AFP_REPLY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), G_VFS_TYPE_AFP_REPLY)) 239 #define G_VFS_AFP_REPLY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), G_VFS_TYPE_AFP_REPLY, GVfsAfpReplyClass)) 240 241 typedef struct _GVfsAfpReplyClass GVfsAfpReplyClass; 242 typedef struct _GVfsAfpReply GVfsAfpReply; 243 244 gboolean g_vfs_afp_reply_read_byte (GVfsAfpReply *reply, guint8 *byte); 245 246 gboolean g_vfs_afp_reply_read_int64 (GVfsAfpReply *reply, gint64 *val); 247 gboolean g_vfs_afp_reply_read_int32 (GVfsAfpReply *reply, gint32 *val); 248 gboolean g_vfs_afp_reply_read_int16 (GVfsAfpReply *reply, gint16 *val); 249 250 gboolean g_vfs_afp_reply_read_uint64 (GVfsAfpReply *reply, guint64 *val); 251 gboolean g_vfs_afp_reply_read_uint32 (GVfsAfpReply *reply, guint32 *val); 252 gboolean g_vfs_afp_reply_read_uint16 (GVfsAfpReply *reply, guint16 *val); 253 254 gboolean g_vfs_afp_reply_get_data (GVfsAfpReply *reply, gsize size, guint8 **data); 255 gboolean g_vfs_afp_reply_dup_data (GVfsAfpReply *reply, gsize size, guint8 **data); 256 257 gboolean g_vfs_afp_reply_read_pascal (GVfsAfpReply *reply, gboolean is_utf8, char **str); 258 gboolean g_vfs_afp_reply_read_afp_name (GVfsAfpReply *reply, gboolean read_text_encoding, GVfsAfpName **afp_name); 259 260 gboolean g_vfs_afp_reply_seek (GVfsAfpReply *reply, goffset offset, GSeekType type); 261 gboolean g_vfs_afp_reply_skip_to_even (GVfsAfpReply *reply); 262 263 AfpResultCode g_vfs_afp_reply_get_result_code (GVfsAfpReply *reply); 264 goffset g_vfs_afp_reply_get_pos (GVfsAfpReply *reply); 265 gsize g_vfs_afp_reply_get_size (GVfsAfpReply *reply); 266 267 GType g_vfs_afp_reply_get_type (void) G_GNUC_CONST; 268 269 270 /* 271 * GVfsAfpCommand 272 */ 273 #define G_VFS_TYPE_AFP_COMMAND (g_vfs_afp_command_get_type ()) 274 #define G_VFS_AFP_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_VFS_TYPE_AFP_COMMAND, GVfsAfpCommand)) 275 #define G_VFS_AFP_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), G_VFS_TYPE_AFP_COMMAND, GVfsAfpCommandClass)) 276 #define G_VFS_IS_AFP_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_VFS_TYPE_AFP_COMMAND)) 277 #define G_VFS_IS_AFP_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), G_VFS_TYPE_AFP_COMMAND)) 278 #define G_VFS_AFP_COMMAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), G_VFS_TYPE_AFP_COMMAND, GVfsAfpCommandClass)) 279 280 typedef struct _GVfsAfpCommandClass GVfsAfpCommandClass; 281 typedef struct _GVfsAfpCommand GVfsAfpCommand; 282 283 284 GVfsAfpCommand* g_vfs_afp_command_new (AfpCommandType type); 285 286 void g_vfs_afp_command_put_byte (GVfsAfpCommand *comm, guint8 byte); 287 288 void g_vfs_afp_command_put_int16 (GVfsAfpCommand *comm, gint16 val); 289 void g_vfs_afp_command_put_int32 (GVfsAfpCommand *comm, gint32 val); 290 void g_vfs_afp_command_put_int64 (GVfsAfpCommand *comm, gint64 val); 291 292 void g_vfs_afp_command_put_uint16 (GVfsAfpCommand *comm, guint16 val); 293 void g_vfs_afp_command_put_uint32 (GVfsAfpCommand *comm, guint32 val); 294 void g_vfs_afp_command_put_uint64 (GVfsAfpCommand *comm, guint64 val); 295 296 void g_vfs_afp_command_put_pascal (GVfsAfpCommand *comm, const char *str); 297 void g_vfs_afp_command_put_afp_name (GVfsAfpCommand *comm, GVfsAfpName *afp_name); 298 void g_vfs_afp_command_put_pathname (GVfsAfpCommand *comm, const char *filename); 299 300 void g_vfs_afp_command_pad_to_even (GVfsAfpCommand *comm); 301 302 gsize g_vfs_afp_command_get_size (GVfsAfpCommand *comm); 303 char* g_vfs_afp_command_get_data (GVfsAfpCommand *comm); 304 305 void g_vfs_afp_command_set_buffer (GVfsAfpCommand *comm, char *buf, gsize size); 306 307 GType g_vfs_afp_command_get_type (void) G_GNUC_CONST; 308 309 310 311 312 /* 313 * GVfsAfpConnection 314 */ 315 #define G_VFS_TYPE_AFP_CONNECTION (g_vfs_afp_connection_get_type ()) 316 #define G_VFS_AFP_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_VFS_TYPE_AFP_CONNECTION, GVfsAfpConnection)) 317 #define G_VFS_AFP_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), G_VFS_TYPE_AFP_CONNECTION, GVfsAfpConnectionClass)) 318 #define G_VFS_IS_AFP_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_VFS_TYPE_AFP_CONNECTION)) 319 #define G_VFS_IS_AFP_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), G_VFS_TYPE_AFP_CONNECTION)) 320 #define G_VFS_AFP_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), G_VFS_TYPE_AFP_CONNECTION, GVfsAfpConnectionClass)) 321 322 typedef struct _GVfsAfpConnectionClass GVfsAfpConnectionClass; 323 typedef struct _GVfsAfpConnection GVfsAfpConnection; 324 typedef struct _GVfsAfpConnectionPrivate GVfsAfpConnectionPrivate; 325 326 struct _GVfsAfpConnectionClass 327 { 328 GObjectClass parent_class; 329 }; 330 331 struct _GVfsAfpConnection 332 { 333 GObject parent_instance; 334 335 GVfsAfpConnectionPrivate *priv; 336 }; 337 338 339 GType g_vfs_afp_connection_get_type (void) G_GNUC_CONST; 340 341 GVfsAfpReply* g_vfs_afp_query_server_info (GSocketConnectable *addr, 342 GCancellable *cancellable, 343 GError **error); 344 345 GVfsAfpConnection* g_vfs_afp_connection_new (GSocketConnectable *addr); 346 347 gboolean g_vfs_afp_connection_open_sync (GVfsAfpConnection *afp_connection, 348 GCancellable *cancellable, 349 GError **error); 350 351 gboolean g_vfs_afp_connection_close_sync (GVfsAfpConnection *afp_connection, 352 GCancellable *cancellable, 353 GError **error); 354 355 GVfsAfpReply* g_vfs_afp_connection_send_command_sync (GVfsAfpConnection *afp_connection, 356 GVfsAfpCommand *afp_command, 357 GCancellable *cancellable, 358 GError **error); 359 360 GVfsAfpReply* g_vfs_afp_connection_send_command_finish (GVfsAfpConnection *afp_connnection, 361 GAsyncResult *res, 362 GError **error); 363 364 void g_vfs_afp_connection_send_command (GVfsAfpConnection *afp_connection, 365 GVfsAfpCommand *command, 366 char *reply_buf, 367 GAsyncReadyCallback callback, 368 GCancellable *cancellable, 369 gpointer user_data); 370 371 372 guint32 g_vfs_afp_connection_get_max_request_size (GVfsAfpConnection *afp_connection); 373 374 G_END_DECLS 375 376 #endif /* _GVFSAFPCONNECTION_H_ */ 377