/* -------------------------------- */
#ifndef AFPCMD_H
#define AFPCMD_H

#include <inttypes.h>

#include "afpclient.h"

extern unsigned int FPopenLogin(CONN *conn, char *vers, char *uam, char *usr,
                                char *pwd);
extern unsigned int FPopenLoginExt(CONN *conn, char *vers, char *uam, char *usr,
                                   char *pwd);
extern unsigned int FPzzz(CONN *conn, int);
extern unsigned int FPLogOut(CONN *conn);
extern unsigned int FPMapID(CONN *conn, char fn, int id);
extern unsigned int FPMapName(CONN *conn, char fn, char *name);
extern unsigned int FPGetSessionToken(CONN *conn, int type, uint32_t time,
                                      int len, char *token);
extern unsigned int FPDisconnectOldSession(CONN *conn, uint16_t type, int len,
        char *token);

extern unsigned int FPGetSrvrInfo(CONN *conn);
extern unsigned int FPGetSrvrParms(CONN *conn);
extern unsigned int FPGetSrvrMsg(CONN *conn, uint16_t type, uint16_t bitmap);

extern uint16_t    FPOpenVol(CONN *conn, char *vol);
extern uint16_t FPOpenVolFull(CONN *conn, char *vol, uint16_t  bitmap);
extern unsigned int FPCloseVol(CONN *conn, uint16_t vol);
extern uint16_t    FPOpenDT(CONN *conn, uint16_t vol);
extern unsigned int FPCloseDT(CONN *conn, uint16_t vol);
extern unsigned int FPCloseDir(CONN *conn, uint16_t vol, int did);

extern unsigned int FPByteLock(CONN *conn, uint16_t fork, int end, int mode,
                               int offset, int size);
extern unsigned int FPByteLock_ext(CONN *conn, uint16_t fork, int end, int mode,
                                   off_t offset, off_t size);

extern unsigned int FPCloseFork(CONN *conn, uint16_t vol);

extern unsigned int FPFlush(CONN *conn, uint16_t vol);
extern unsigned int FPFlushFork(CONN *conn, uint16_t vol);
extern unsigned int FPEnumerate(CONN *conn, uint16_t vol, int did, char *name,
                                uint16_t f_bitmap, uint16_t d_bitmap);
extern unsigned int FPEnumerateFull(CONN *conn, uint16_t vol, uint16_t sindex,
                                    uint16_t reqcnt, uint16_t size,
                                    int did, char *name, uint16_t f_bitmap, uint16_t d_bitmap);

extern unsigned int FPGetFileDirParams(CONN *conn, uint16_t vol, int did,
                                       char *name, uint16_t f_bitmap, uint16_t d_bitmap);
extern unsigned int FPEnumerate_ext(CONN *conn, uint16_t vol, int did,
                                    char *name, uint16_t f_bitmap, uint16_t d_bitmap);
extern unsigned int FPEnumerate_ext2(CONN *conn, uint16_t vol, int did,
                                     char *name, uint16_t f_bitmap, uint16_t d_bitmap);
extern unsigned int FPEnumerateExt2Full(CONN *conn, uint16_t vol, uint32_t did,
                                        char *name, uint16_t f_bitmap, uint16_t d_bitmap, uint32_t startindex,
                                        uint16_t reqcount);
extern unsigned int FPDelete(CONN *conn, uint16_t vol, int did, char *name);
extern unsigned int FPOpenDir(CONN *conn, uint16_t vol, int did, char *name);
extern unsigned int FPCreateDir(CONN *conn, uint16_t vol, int did, char *name);
extern uint16_t    FPOpenFork(CONN *conn, uint16_t vol, int type,
                              uint16_t bitmap, int did, char *name, int access);
extern unsigned int FPCreateFile(CONN *conn, uint16_t vol, char type, int did,
                                 char *name);
extern unsigned int FPGetForkParam(CONN *conn, uint16_t fork, uint16_t bitmap);
extern unsigned int FPCopyFile(CONN *conn, uint16_t svol, int sdid,
                               uint16_t dvol, int ddid, char *src, char *dstdir, char *dst);
extern unsigned int FPExchangeFile(CONN *conn, uint16_t vol, int sdid, int ddid,
                                   char *src, char *dst);

extern unsigned int FPMoveAndRename(CONN *conn, uint16_t svol, int sdid,
                                    int ddid, char *src, char *dst);
extern unsigned int FPRename(CONN *conn, uint16_t svol, int sdid, char *src,
                             char *dst);

extern unsigned int FPReadHeader(DSI *dsi, uint16_t fork, int offset, int size,
                                 char *data);
extern unsigned int FPReadFooter(DSI *dsi, uint16_t fork, int offset, int size,
                                 char *data);
extern unsigned int FPRead(CONN *conn, uint16_t fork, long long offset,
                           int size, char *data);

extern unsigned int FPRead_ext(CONN *conn, uint16_t fork, off_t offset,
                               off_t size, char *data);
extern unsigned int FPRead_ext_async(CONN *conn, uint16_t fork, off_t offset,
                                     off_t size, char *data);

extern unsigned int FPWriteHeader(DSI *dsi, uint16_t fork, int offset, int size,
                                  char *data, char whence);
extern unsigned int FPWriteFooter(DSI *dsi, uint16_t fork, int offset, int size,
                                  char *data, char whence);
extern unsigned int FPWrite(CONN *conn, uint16_t fork, long long offset,
                            int size, char *data, char whence);
extern unsigned int FPWrite_ext(CONN *conn, uint16_t fork, off_t  offset,
                                off_t size, char *data, char whence);
extern unsigned int FPWrite_ext_async(CONN *conn, uint16_t fork, off_t  offset,
                                      off_t size, char *data, char whence);

extern unsigned int FPSetForkParam(CONN *conn, uint16_t fork,  uint16_t bitmap,
                                   off_t size);

extern unsigned int FPGetComment(CONN *conn, uint16_t vol, int did, char *name);
extern unsigned int FPRemoveComment(CONN *conn, uint16_t vol, int did,
                                    char *name);
extern unsigned int FPAddComment(CONN *conn, uint16_t vol, int did, char *name,
                                 char *cmt);

extern unsigned int FPGetVolParam(CONN *conn, uint16_t vol, uint16_t bitmap);
extern unsigned int FPSetVolParam(CONN *conn, uint16_t vol, uint16_t bitmap,
                                  struct afp_volume_parms *parms);

extern unsigned int FPGetUserInfo(CONN *conn, char flag, int id,
                                  uint16_t bitmap);

extern unsigned int FPSetDirParms(CONN *conn, uint16_t vol, int did, char *name,
                                  uint16_t bitmap,
                                  struct afp_filedir_parms *dir);
extern unsigned int FPSetFilDirParam(CONN *conn, uint16_t vol, int did,
                                     char *name, uint16_t bitmap,
                                     struct afp_filedir_parms *fil);

extern unsigned int FPSetFileParams(CONN *, uint16_t vol, int did, char *name,
                                    uint16_t bitmap, struct afp_filedir_parms *);

extern unsigned int FPCreateID(CONN *conn, uint16_t vol, int did, char *name);
extern unsigned int FPDeleteID(CONN *conn, uint16_t vol, int did);
extern unsigned int FPResolveID(CONN *conn, uint16_t vol, int did,
                                uint16_t bitmap);

extern unsigned int FPAddIcon(CONN *conn, uint16_t dt, char *creator,
                              char *type, char itype, uint32_t tag,
                              uint16_t size, char *data);
extern unsigned int FPGetIcon(CONN *conn, uint16_t dt, char *creator,
                              char *type, char itype, uint16_t size);
extern unsigned int FPGetIconInfo(CONN *conn, uint16_t dt,
                                  unsigned char *creator, uint16_t itype);

extern unsigned int FPGetAppl(CONN *conn, uint16_t dt, char *name,
                              uint16_t index, uint16_t f_bitmap);
extern unsigned int FPAddAPPL(CONN *conn, uint16_t dt, int did, char *creator,
                              uint32_t tag, char *name);
extern unsigned int FPRemoveAPPL(CONN *conn, uint16_t dt, int did,
                                 char *creator, char *name);

extern unsigned int FPCatSearch(CONN *conn, uint16_t vol, uint32_t  nbe,
                                char *pos, uint16_t f_bitmap, uint16_t d_bitmap,
                                uint32_t rbitmap, struct afp_filedir_parms *filedir,
                                struct afp_filedir_parms *filedir2);

extern unsigned int FPCatSearchExt(CONN *conn, uint16_t vol, uint32_t  nbe,
                                   char *pos, uint16_t f_bitmap, uint16_t d_bitmap,
                                   uint32_t rbitmap, struct afp_filedir_parms *filedir,
                                   struct afp_filedir_parms *filedir2);

extern unsigned int FPBadPacket(CONN *conn, char fn, char *name);

extern unsigned int FPGetACL(CONN *conn, uint16_t svol, int did,
                             uint16_t bitmap, char *name);
extern unsigned int FPGetExtAttr(CONN *conn, uint16_t vol, int did,
                                 uint16_t bitmap, uint16_t maxsize, char *name, char *attr);
extern unsigned int FPListExtAttr(CONN *conn, uint16_t vol, int did,
                                  uint16_t bitmap, int maxsize, char *name);
extern unsigned int FPSetExtAttr(CONN *conn, uint16_t vol, int did,
                                 uint16_t bitmap, char *name, char *attr, char *data);
extern unsigned int FPRemoveExtAttr(CONN *conn, uint16_t vol, int did,
                                    uint16_t bitmap, char *name, char *attr);
extern unsigned int FPSyncDir(CONN *conn, uint16_t vol, int did);

char *afp_error(int error);

#endif
