Example #1
0
 def from_bytes(cls: t.Type[T], data: bytes) -> T:
     if len(data) < cls.sizeof():
         raise Exception("data too small", data)
     struct = ffi.cast('struct sockaddr_in*', ffi.from_buffer(data))
     cls.check_family(AF(struct.sin_family))
     return cls(socket.ntohs(struct.sin_port),
                socket.ntohl(struct.sin_addr.s_addr))
Example #2
0
 def from_bytes(cls: t.Type[T], data: bytes) -> T:
     if len(data) < cls.sizeof():
         raise Exception("data too small", data)
     struct = ffi.cast('struct sockaddr_in6*', ffi.from_buffer(data))
     cls.check_family(AF(struct.sin6_family))
     return cls(socket.ntohs(struct.sin6_port), ipaddress.IPv6Address(bytes(struct.sin6_addr.s6_addr)),
                struct.sin6_flowinfo, struct.sin6_scope_id)
Example #3
0
File: un.py Project: gc-ss/rsyscall
 def from_bytes(cls: t.Type[T], data: bytes) -> T:
     header = ffi.sizeof('sa_family_t')
     if len(data) < header:
         raise Exception("data too smalllll", data)
     struct = ffi.cast('struct sockaddr_un*', ffi.from_buffer(data))
     cls.check_family(AF(struct.sun_family))
     if len(data) == header:
         # unnamed socket, name is empty
         length = 0
     elif struct.sun_path[0] == b'\0':
         # abstract socket, entire buffer is part of path
         length = len(data) - header
     else:
         # TODO handle the case where there's no null terminator
         # pathname socket, path is null-terminated
         length = lib.strlen(struct.sun_path)
     return cls(bytes(ffi.buffer(struct.sun_path, length)))
Example #4
0
 def from_bytes(cls: t.Type[T], data: bytes) -> T:
     if len(data) < cls.sizeof():
         raise Exception("data too small", data)
     struct = ffi.cast('struct sockaddr_nl*', ffi.from_buffer(data))
     cls.check_family(AF(struct.nl_family))
     return cls(struct.nl_pid, struct.nl_groups)