code: def _read_mptcp_join(self, bits, size, kind):
          
          if self._syn and self._ack:     # MP_JOIN-SYN/ACK
              return self._read_join_synack(bits, size, kind)
          elif self._syn:                 # MP_JOIN-SYN
              return self._read_join_syn(bits, size, kind)
          elif self._ack:                 # MP_JOIN-ACK
              return self._read_join_ack(bits, size, kind)
          else:                           # illegal MP_JOIN occurred
              temp = self._read_fileng(size)
              data = dict(
                  kind=kind,
                  length=size + 1,
                  subtype='MP_JOIN-Unknown',
                  data=bytes(chr(int(bits[:4], base=2)), encoding='utf-8') + temp,
              )
              return data
docs: Read Join Connection option.
  
          Positional arguments:
              * bits - str, 4-bit data
              * size - int, length of option
              * kind - int, 30 (Multipath TCP)
  
          Returns:
              * dict -- extracted Join Connection (MP_JOIN) option
  
          Structure of MP_JOIN [RFC 6824]:
              Octets      Bits        Name                        Description
                0           0     tcp.mp.kind                 Kind (30)
                1           8     tcp.mp.length               Length
                2          16     tcp.mp.subtype              Subtype (1)
                2          20     tcp.mp.data                 Handshake-specific Data