import struct, os LU_MAXDATA = 4096 MAX_DATA = LU_MAXDATA*2 PVERSION = 0x02 MESSAGES = ["OK", "MOUNT", "READ", "WRITE", "READDIR", "STAT", "UMOUNT", "SETATTR", "MKDIR", "RMDIR", "CREATE", "UNLINK", "RENAME", "OPEN", "RELEASE", "READLINK", "LINK", "SYMLINK"] ERROR = 0x100 HDR_LEN = struct.calcsize("HHHH") PID = os.getpid() for _name, _i in zip(MESSAGES, range(len(MESSAGES))): globals()[_name] = _i del _name, _i # ____________________________________________________________ def recvall(s, size): data = '' while len(data) < size: t = s.recv(size - len(data)) if not t: raise EOFError data += t return data def recvmsg(s): hdr = struct.unpack("HHHH", recvall(s, HDR_LEN)) version, typ, datalen, pid = hdr if datalen: if datalen > MAX_DATA: raise ValueError, "message too long: %d bytes" % datalen data = recvall(s, datalen) else: data = '' return (typ, data) def sendmsg(s, typ, data): msg = struct.pack("HHHH", PVERSION, typ, len(data), PID) s.sendall(msg) if data: s.sendall(data)