cdef class PTS:
cdef a.ubik_client * client
- def __cinit__(self):
+ def __cinit__(self, cell=None, sec=1):
cdef a.afs_int32 code
+ cdef a.afsconf_dir *cdir
+ cdef a.afsconf_cell info
+ cdef char * c_cell
+
+ if cell is None:
+ c_cell = NULL
+ else:
+ c_cell = cell
self.client = NULL
code = a.rx_Init(0)
if code != 0:
- raise Exception(str(code))
+ raise Exception(code, "Error initializing Rx")
+
+ cdir = a.afsconf_Open(a.AFSDIR_CLIENT_ETC_DIRPATH)
+ if cdir is NULL:
+ raise OSError(a.errno,
+ "Error opening configuration directory (%s): %s" % \
+ (a.AFSDIR_CLIENT_ETC_DIRPATH, a.strerror(a.errno)))
+ code = a.afsconf_GetCellInfo(cdir, c_cell, "afsprot", &info)
+ if code != 0:
+ raise Exception(code, "GetCellInfo: %s" % a.error_message(code))
def __dealloc__(self):
a.rx_Finalize()
+cdef extern from "errno.h":
+ int errno
+
+cdef extern from "string.h":
+ char * strerror(int errnum)
+
+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":
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 "ubik.h":
enum:
MAXSERVERS
cdef extern from "rx/rx.h":
int rx_Init(int port)
void rx_Finalize()
+
+cdef extern from "afs/com_err.h":
+ char * error_message(int)
library_dirs = ['%s/lib' % root,
'%s/lib/afs' % root]
libraries = ['bos', 'volser', 'vldb', 'afsrpc', 'afsauthent', 'cmd',
- 'usd', 'audit']
+ 'usd', 'audit', 'resolv', 'com_err']
setup(
name="PyAFS",