Example #1
0
    def from_file(cls, fp):
        """
          read a websockets frame header
        """
        first_byte = utils.bytes_to_int(fp.safe_read(1))
        second_byte = utils.bytes_to_int(fp.safe_read(1))

        fin = utils.getbit(first_byte, 7)
        rsv1 = utils.getbit(first_byte, 6)
        rsv2 = utils.getbit(first_byte, 5)
        rsv3 = utils.getbit(first_byte, 4)
        # grab right-most 4 bits
        opcode = first_byte & 15
        mask_bit = utils.getbit(second_byte, 7)
        # grab the next 7 bits
        length_code = second_byte & 127

        # payload_lengthy > 125 indicates you need to read more bytes
        # to get the actual payload length
        if length_code <= 125:
            payload_length = length_code
        elif length_code == 126:
            payload_length = utils.bytes_to_int(fp.safe_read(2))
        elif length_code == 127:
            payload_length = utils.bytes_to_int(fp.safe_read(8))

        # masking key only present if mask bit set
        if mask_bit == 1:
            masking_key = fp.safe_read(4)
        else:
            masking_key = None

        return cls(
            fin=fin,
            rsv1=rsv1,
            rsv2=rsv2,
            rsv3=rsv3,
            opcode=opcode,
            mask=mask_bit,
            length_code=length_code,
            payload_length=payload_length,
            masking_key=masking_key,
        )
Example #2
0
 def __init__(self, key):
     self.key = key
     self.masks = [utils.bytes_to_int(byte) for byte in key]
     self.offset = 0
Example #3
0
 def __init__(self, key):
     self.key = key
     self.masks = [utils.bytes_to_int(byte) for byte in key]
     self.offset = 0