Add a simple afs._fs module that exposes a whichcell function, and an
[invirt/packages/python-afs.git] / afs / afs.pxd
index 5fb03e7..b5180f5 100644 (file)
+cdef extern from *:
+    ctypedef long size_t
+
+cdef extern from "errno.h":
+    int errno
+
+cdef extern from "string.h":
+    char * strerror(int errnum)
+    char * strncpy(char *s1, char *s2, size_t n)
+    void * memset(void *b, int c, size_t n)
+    void * memcpy(void *s1, void *s2, size_t n)
+    size_t strlen(char *s)
+
+cdef extern from "stdlib.h":
+     void * malloc(size_t size)
+     void free(void *)
+
+cdef extern from "netinet/in.h":
+    struct in_addr:
+        int s_addr
+    struct sockaddr_in:
+        short sin_family
+        unsigned short sin_port
+        in_addr sin_addr
+        char sin_zero[8]
+
 cdef extern from "afs/stds.h":
 cdef extern from "afs/stds.h":
+    ctypedef unsigned long afs_uint32
     ctypedef long afs_int32
 
     ctypedef long afs_int32
 
+cdef extern from "afs/dirpath.h":
+    char * AFSDIR_CLIENT_ETC_DIRPATH
+
+cdef extern from "afs/cellconfig.h":
+    enum:
+        MAXCELLCHARS
+        MAXHOSTSPERCELL
+        MAXHOSTCHARS
+
+    # We just pass afsconf_dir structs around to other AFS functions,
+    # so this can be treated as opaque
+    struct afsconf_dir:
+        pass
+
+    # For afsconf_cell, on the other hand, we care about everything
+    struct afsconf_cell:
+        char name[MAXCELLCHARS]
+        short numServers
+        short flags
+        sockaddr_in hostAddr[MAXHOSTSPERCELL]
+        char hostName[MAXHOSTSPERCELL][MAXHOSTCHARS]
+        char *linkedCell
+        int timeout
+
+    afsconf_dir *afsconf_Open(char *adir)
+    int afsconf_GetCellInfo(afsconf_dir *adir,
+                            char *acellName,
+                            char *aservice,
+                            afsconf_cell *acellInfo)
+
+cdef extern from "rx/rxkad.h":
+    ctypedef char rxkad_level
+
+    enum:
+        MAXKTCNAMELEN
+        MAXKTCREALMLEN
+
+    enum:
+        rxkad_clear
+        rxkad_crypt
+
+    struct ktc_encryptionKey:
+        pass
+
+    struct ktc_principal:
+        char name[MAXKTCNAMELEN]
+        char instance[MAXKTCNAMELEN]
+        char cell[MAXKTCREALMLEN]
+
+    struct rx_securityClass:
+        pass
+
+    rx_securityClass *rxkad_NewClientSecurityObject(rxkad_level level,
+                                                    ktc_encryptionKey *sessionKey,
+                                                    afs_int32 kvno,
+                                                    int ticketLen,
+                                                    char *ticket)
+    rx_securityClass *rxnull_NewClientSecurityObject()
+
+    int rxs_Release(rx_securityClass *aobj)
+
+cdef extern from "rx/rx.h":
+    int rx_Init(int port)
+    void rx_Finalize()
+
+    struct rx_connection:
+        pass
+
+    rx_connection *rx_NewConnection(afs_uint32 shost,
+                                    unsigned short sport,
+                                    unsigned short sservice,
+                                    rx_securityClass *securityObject,
+                                    int serviceSecurityIndex)
+
+cdef extern from "afs/auth.h":
+    enum:
+        MAXKTCTICKETLEN
+
+    struct ktc_token:
+        ktc_encryptionKey sessionKey
+        short kvno
+        int ticketLen
+        char ticket[MAXKTCTICKETLEN]
+
+    int ktc_GetToken(ktc_principal *server,
+                     ktc_token *token,
+                     int tokenLen,
+                     ktc_principal *client)
+
+cdef extern from "afs/prclient.h":
+    enum:
+        PRSRV
+
 cdef extern from "ubik.h":
     enum:
         MAXSERVERS
 cdef extern from "ubik.h":
     enum:
         MAXSERVERS
-    
+
+    # ubik_client is an opaque struct, so we don't care about its members
     struct ubik_client:
         pass
 
     struct ubik_client:
         pass
 
-cdef extern from "rx/rx.h":
-    int rx_Init(int port)
+    int ubik_ClientInit(rx_connection **serverconns,
+                        ubik_client **aclient)
+    afs_int32 ubik_ClientDestroy(ubik_client *aclient)
+
+cdef extern from "afs/com_err.h":
+    char * afs_error_message(int)
+
+# All AFS error tables
+cdef extern from "afs/auth.h":
+    void initialize_KTC_error_table()
+cdef extern from "afs/cellconfig.h":
+    void initialize_ACFG_error_table()
+cdef extern from "afs/pterror.h":
+    void initialize_PT_error_table()
+cdef extern from "rx/rxkad.h":
+    void initialize_RXK_error_table()
+cdef extern from "ubik.h":
+    void initialize_U_error_table()
+
+cdef extern from "afs/vice.h":
+    struct ViceIoctl:
+        void *cin "in"
+        void *out
+        unsigned short out_size
+        unsigned short in_size
+
+cdef import from "afs/venus.h":
+    enum:
+        # PIOCTLS to Venus that we use
+        VIOCGETAL, VIOC_GETVCXSTATUS2, VIOCSETAL, VIOC_FILE_CELL_NAME
+
+# pioctl doesn't actually have a header, so we have to define it here
+cdef extern int pioctl(char *, afs_int32, ViceIoctl *, afs_int32)
+cdef int pioctl_read(char *, afs_int32, void *, unsigned short, afs_int32) except -1
+cdef int pioctl_write(char *, afs_int32, char *, afs_int32) except -1
+