--- include/afp.h.orig 2008-03-08 16:08:18.000000000 +0000 +++ include/afp.h 2012-10-14 13:11:34.000000000 +0000 @@ -1,533 +0,0 @@ - -#ifndef _AFP_H_ -#define _AFP_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#define AFPFS_VERSION "0.8.1" - -/* This is the maximum AFP version this library supports */ -#define AFP_MAX_SUPPORTED_VERSION 32 - -/* afp_url is used to pass locations around */ -struct afp_url { - enum {TCPIP,AT} protocol; - char username[AFP_MAX_USERNAME_LEN]; - char uamname[50]; - char password[AFP_MAX_PASSWORD_LEN]; - char servername[AFP_SERVER_NAME_UTF8_LEN]; - int port; - char volumename[AFP_VOLUME_NAME_UTF8_LEN]; - char path[AFP_MAX_PATH]; - - int requested_version; - char zone[AFP_ZONE_LEN]; /* Only used for Appletalk */ - char volpassword[9];; -}; - -struct afp_token { - unsigned int length; - char data[AFP_TOKEN_MAX_LEN]; -}; - -#define SERVER_MAX_VERSIONS 10 -#define SERVER_MAX_UAMS 10 - -struct afp_rx_buffer { - unsigned int size; - unsigned int maxsize; - char * data; - int errorcode; -}; - - -struct afp_file_info { - unsigned short attributes; - unsigned int did; - unsigned int creation_date; - unsigned int modification_date; - unsigned int backup_date; - unsigned int fileid; - unsigned short offspring; - char sync; - char finderinfo[32]; - char name[AFP_MAX_PATH]; - char basename[AFP_MAX_PATH]; - char translated_name[AFP_MAX_PATH]; - struct afp_unixprivs unixprivs; - unsigned int accessrights; - struct afp_file_info * next; - struct afp_file_info * largelist_next; - unsigned char isdir; - unsigned long long size; - unsigned short resourcesize; - unsigned int resource; - unsigned short forkid; - struct afp_icon * icon; - int eof; -}; - - -#define VOLUME_EXTRA_FLAGS_VOL_CHMOD_KNOWN 0x1 -#define VOLUME_EXTRA_FLAGS_VOL_CHMOD_BROKEN 0x2 -#define VOLUME_EXTRA_FLAGS_SHOW_APPLEDOUBLE 0x4 -#define VOLUME_EXTRA_FLAGS_VOL_SUPPORTS_UNIX 0x8 -#define VOLUME_EXTRA_FLAGS_NO_LOCKING 0x10 -#define VOLUME_EXTRA_FLAGS_IGNORE_UNIXPRIVS 0x20 -#define VOLUME_EXTRA_FLAGS_READONLY 0x40 - -#define AFP_VOLUME_UNMOUNTED 0 -#define AFP_VOLUME_MOUNTED 1 -#define AFP_VOLUME_UNMOUNTING 2 - -struct afp_volume { - unsigned short volid; - char flags; /* This is from afpGetSrvrParms */ - unsigned short attributes; /* This is from VolOpen */ - unsigned short signature; /* This is fixed or variable */ - unsigned int creation_date; - unsigned int modification_date; - unsigned int backup_date; - struct statvfs stat; - unsigned char mounted; - char mountpoint[255]; - struct afp_server * server; - char volume_name[AFP_VOLUME_NAME_LEN]; - char volume_name_printable[AFP_VOLUME_NAME_UTF8_LEN]; - unsigned short dtrefnum; - char volpassword[AFP_VOLPASS_LEN]; - unsigned int extra_flags; /* This is an afpfs-ng specific field */ - - /* Our directory ID cache */ - struct did_cache_entry * did_cache_base; - pthread_mutex_t did_cache_mutex; - - /* Our journal of open forks */ - struct afp_file_info * open_forks; - pthread_mutex_t open_forks_mutex; - - /* Used to trigger startup */ - pthread_cond_t startup_condition_cond; - - struct { - uint64_t hits; - uint64_t misses; - uint64_t expired; - uint64_t force_removed; - } did_cache_stats; - - void * priv; /* This is a private structure for fuse/cmdline, etc */ - pthread_t thread; /* This is the per-volume thread */ - - int mapping; - -}; - -#define SERVER_STATE_CONNECTED 1 -#define SERVER_STATE_DISCONNECTED 2 - -enum server_type{ - AFPFS_SERVER_TYPE_UNKNOWN, - AFPFS_SERVER_TYPE_NETATALK, - AFPFS_SERVER_TYPE_AIRPORT, - AFPFS_SERVER_TYPE_MACINTOSH, -}; - -#define is_netatalk(x) ( (x)->machine_type == AFPFS_SERVER_TYPE_NETATALK ) -#define is_airport(x) ( (x)->machine_type == AFPFS_SERVER_TYPE_AIRPORT ) -#define is_macintosh(x) ( (x)->machine_type == AFPFS_SERVER_TYPE_MACINTOSH ) - - - -struct afp_versions { - char *av_name; - int av_number; -}; -extern struct afp_versions afp_versions[]; - -struct afp_server { - - /* Our buffer sizes */ - unsigned int tx_quantum; - unsigned int rx_quantum; - - unsigned int tx_delay; - - /* Connection information */ - struct sockaddr_in address; - int fd; - - /* Some stats, for information only */ - struct { - uint64_t runt_packets; - uint64_t incoming_dsi; - uint64_t rx_bytes; - uint64_t tx_bytes; - uint64_t requests_pending; - } stats; - - /* General information */ - char server_name[AFP_SERVER_NAME_LEN]; - char server_name_utf8[AFP_SERVER_NAME_UTF8_LEN]; - char server_name_printable[AFP_SERVER_NAME_UTF8_LEN]; - - char machine_type[17]; - char icon[256]; - char signature[16]; - unsigned short flags; - int connect_state; - enum server_type server_type; - - /* This is the time we connected */ - time_t connect_time; - - /* UAMs */ - unsigned int supported_uams; - unsigned int using_uam; - - /* Authentication */ - char username[AFP_MAX_USERNAME_LEN]; - char password[AFP_MAX_PASSWORD_LEN]; - - /* Session */ - struct afp_token token; - char need_resume; - - /* Versions */ - unsigned char requested_version; - unsigned char versions[SERVER_MAX_VERSIONS]; - struct afp_versions *using_version; - - /* Volumes */ - unsigned char num_volumes; - struct afp_volume * volumes; - - void * dsi; - unsigned int exit_flag; - - /* Our DSI request queue */ - pthread_mutex_t requestid_mutex; - pthread_mutex_t request_queue_mutex; - unsigned short lastrequestid; - unsigned short expectedrequestid; - struct dsi_request * command_requests; - - - char loginmesg[200]; - char servermesg[200]; - char path_encoding; - - /* This is the data for the incoming buffer */ - char * incoming_buffer; - int data_read; - int bufsize; - - /* And this is for the outgoing queue */ - pthread_mutex_t send_mutex; - - /* This is for user mapping */ - struct passwd passwd; - unsigned int server_uid, server_gid; - int server_gid_valid; - - struct afp_server *next; - - /* These are for DSI attention packets */ - unsigned int attention_quantum; - unsigned int attention_len; - char * attention_buffer; - -}; - -struct afp_extattr_info { - unsigned int maxsize; - unsigned int size; - char data[1024]; -}; -struct afp_comment { - unsigned int maxsize; - unsigned int size; - char *data; -}; - -struct afp_icon { - unsigned int maxsize; - unsigned int size; - char *data; -}; - -#define AFP_DEFAULT_ATTENTION_QUANTUM 1024 - -void afp_unixpriv_to_stat(struct afp_file_info *fp, - struct stat *stat); - -int init_uams(void) ; - -unsigned int find_uam_by_name(const char * name); -char * uam_bitmap_to_string(unsigned int bitmap); - - -char * get_uam_names_list(void); - -unsigned int default_uams_mask(void); - -struct afp_volume * find_volume_by_name(struct afp_server * server, - const char * volname); - -struct afp_connection_request { - unsigned int uam_mask; - struct afp_url url; -}; - -void afp_default_url(struct afp_url *url); -int afp_parse_url(struct afp_url * url, const char * toparse, int verbose); -void afp_print_url(struct afp_url * url); -int afp_url_validate(char * url_string, struct afp_url * valid_url); - -int afp_list_volnames(struct afp_server * server, char * names, int max); - -/* User mapping */ -int afp_detect_mapping(struct afp_volume * volume); - -/* These are some functions that help with simple status text generation */ - -int afp_status_header(char * text, int * len); -int afp_status_server(struct afp_server * s,char * text, int * len); - - -struct afp_server * afp_server_full_connect(void * priv, struct afp_connection_request * req); - -void * just_end_it_now(void *other); -void add_fd_and_signal(int fd); -void loop_disconnect(struct afp_server *s); -void afp_wait_for_started_loop(void); - - -struct afp_versions * pick_version(unsigned char *versions, - unsigned char requested) ; -int pick_uam(unsigned int u1, unsigned int u2); - -int afp_server_login(struct afp_server *server, - char * mesg, unsigned int *l, unsigned int max); - - -int afp_dologin(struct afp_server *server, - unsigned int uam, char * username, char * passwd); - -void afp_free_server(struct afp_server **server); - -struct afp_server * afp_server_init(struct sockaddr_in * address); -int afp_get_address(void * priv, const char * hostname, unsigned int port, - struct sockaddr_in * address); - - -int afp_main_loop(int command_fd); -int afp_main_quick_startup(pthread_t * thread); - -int afp_server_destroy(struct afp_server *s) ; -int afp_server_reconnect(struct afp_server * s, char * mesg, - unsigned int *l, unsigned int max); -int afp_server_connect(struct afp_server *s, int full); - -struct afp_server * afp_server_complete_connection( - void * priv, - struct afp_server * server, - struct sockaddr_in * address, unsigned char * versions, - unsigned int uams, char * username, char * password, - unsigned int requested_version, unsigned int uam_mask); - -int afp_connect_volume(struct afp_volume * volume, struct afp_server * server, - char * mesg, unsigned int * l, unsigned int max); -int something_is_mounted(struct afp_server * server); - -int add_cache_entry(struct afp_file_info * file) ; -struct afp_file_info * get_cache_by_name(char * name); -struct afp_server * find_server_by_address(struct sockaddr_in * address); -struct afp_server * find_server_by_signature(char * signature); -struct afp_server * find_server_by_name(char * name); -int server_still_valid(struct afp_server * server); - - -struct afp_server * get_server_base(void); -int afp_server_remove(struct afp_server * server); - -int afp_unmount_volume(struct afp_volume * volume); -int afp_unmount_all_volumes(struct afp_server * server); - -#define volume_is_readonly(x) (((x)->attributes&kReadOnly) || \ - ((x)->extra_flags & VOLUME_EXTRA_FLAGS_READONLY)) - -int afp_opendt(struct afp_volume *volume, unsigned short * refnum); - -int afp_closedt(struct afp_server * server, unsigned short * refnum); - -int afp_getcomment(struct afp_volume *volume, unsigned int did, - const char * pathname, struct afp_comment * comment); - -int afp_addcomment(struct afp_volume *volume, unsigned int did, - const char * pathname, char * comment,uint64_t *size); - -int afp_geticon(struct afp_volume * volume, unsigned int filecreator, - unsigned int filetype, unsigned char icontype, - unsigned short length, struct afp_icon * icon); - -/* Things you want to do to a server */ - -int afp_getsrvrmsg(struct afp_server *server, unsigned short messagetype,unsigned char utf8, unsigned char block, char * mesg); - -int afp_login(struct afp_server *server, char * uaname, - char * userauthinfo, unsigned int userauthinfo_len, - struct afp_rx_buffer *rx); - -int afp_changepassword(struct afp_server *server, char * uaname, - char * userauthinfo, unsigned int userauthinfo_len, - struct afp_rx_buffer *rx); - -int afp_logincont(struct afp_server *server, unsigned short id, - char * userauthinfo, unsigned int userauthinfo_len, - struct afp_rx_buffer *rx); - -int afp_getsessiontoken(struct afp_server * server, int type, - unsigned int timestamp, struct afp_token *outgoing_token, - struct afp_token * incoming_token); - -int afp_getsrvrparms(struct afp_server *server); - -int afp_logout(struct afp_server *server,unsigned char wait); - -int afp_mapname(struct afp_server * server, unsigned char subfunction, - char * name, unsigned int * id); - -int afp_mapid(struct afp_server * server, unsigned char subfunction, - unsigned int id, char *name); - -int afp_getuserinfo(struct afp_server * server, int thisuser, - unsigned int userid, unsigned short bitmap, - unsigned int *newuid, unsigned int *newgid); - -int afp_zzzzz(struct afp_server *server); - -int afp_volopen(struct afp_volume * volume, - unsigned short bitmap, char * password); - -int afp_flush(struct afp_volume * volume); - -int afp_getfiledirparms(struct afp_volume *volume, unsigned int did, - unsigned int filebitmap, unsigned int dirbitmap, const char * pathname, - struct afp_file_info *fp); - -int afp_enumerate(struct afp_volume * volume, - unsigned int dirid, - unsigned int filebitmap, unsigned int dirbitmap, - unsigned short reqcount, - unsigned short startindex, - char * path, - struct afp_file_info ** file_p); - -int afp_enumerateext2(struct afp_volume * volume, - unsigned int dirid, - unsigned int filebitmap, unsigned int dirbitmap, - unsigned short reqcount, - unsigned long startindex, - char * path, - struct afp_file_info ** file_p); - -int afp_openfork(struct afp_volume * volume, - unsigned char forktype, - unsigned int dirid, - unsigned short accessmode, - char * filename, - struct afp_file_info *fp); - -int afp_read(struct afp_volume * volume, unsigned short forkid, - uint32_t offset, - uint32_t count, struct afp_rx_buffer * rx); - -int afp_readext(struct afp_volume * volume, unsigned short forkid, - uint64_t offset, - uint64_t count, struct afp_rx_buffer * rx); - -int afp_getvolparms(struct afp_volume * volume, unsigned short bitmap); - - -int afp_createdir(struct afp_volume * volume, unsigned int dirid, const char * pathname, unsigned int *did_p); - -int afp_delete(struct afp_volume * volume, - unsigned int dirid, char * pathname); - - -int afp_createfile(struct afp_volume * volume, unsigned char flag, - unsigned int did, char * pathname); - -int afp_write(struct afp_volume * volume, unsigned short forkid, - uint32_t offset, uint32_t reqcount, - char * data, uint32_t * written); - -int afp_writeext(struct afp_volume * volume, unsigned short forkid, - uint64_t offset, uint64_t reqcount, - char * data, uint64_t * written); - -int afp_flushfork(struct afp_volume * volume, unsigned short forkid); - -int afp_closefork(struct afp_volume * volume, unsigned short forkid); -int afp_setfileparms(struct afp_volume * volume, - unsigned int dirid, const char * pathname, unsigned short bitmap, - struct afp_file_info *fp); -int afp_setfiledirparms(struct afp_volume * volume, - unsigned int dirid, const char * pathname, unsigned short bitmap, - struct afp_file_info *fp); - -int afp_setdirparms(struct afp_volume * volume, - unsigned int dirid, const char * pathname, unsigned short bitmap, - struct afp_file_info *fp); - -int afp_volclose(struct afp_volume * volume); - - -int afp_setforkparms(struct afp_volume *volume, - unsigned short forkid, unsigned short bitmap, unsigned long len); - -int afp_byterangelock(struct afp_volume * volume, - unsigned char flag, - unsigned short forkid, - uint32_t offset, - uint32_t len, uint32_t *generated_offset); - -int afp_byterangelockext(struct afp_volume * volume, - unsigned char flag, - unsigned short forkid, - uint64_t offset, - uint64_t len, uint64_t *generated_offset); - -int afp_moveandrename(struct afp_volume *volume, - unsigned int src_did, - unsigned int dst_did, - char * src_path, char * dst_path, char *new_name); - -int afp_rename(struct afp_volume * volume, - unsigned int dirid, - char * path_from, char * path_to); - -int afp_listextattr(struct afp_volume * volume, - unsigned int dirid, unsigned short bitmap, - char * pathname, struct afp_extattr_info * info); - -/* This is a currently undocumented command */ -int afp_newcommand76(struct afp_volume * volume, unsigned int dlen, char * data); - -/* For debugging */ -char * afp_get_command_name(char code); - - -#endif diff -Naur afpfs-ng-0.8.1.orig/include/afp_protocol.h afpfs-ng-0.8.1/include/afp_protocol.h