If the TLS class was called on raw SSLv2 data, we want to return an
        SSLv2 record instance. We acknowledge the risk of SSLv2 packets with a
        msglen of 0x1403, 0x1503, 0x1603 or 0x1703 which will never be casted
        as SSLv2 records but TLS ones instead, but hey, we can't be held
        responsible for low-minded extensibility choices.

def dispatch_hook(cls, _pkt=None, *args, **kargs):
        """
        If the TLS class was called on raw SSLv2 data, we want to return an
        SSLv2 record instance. We acknowledge the risk of SSLv2 packets with a
        msglen of 0x1403, 0x1503, 0x1603 or 0x1703 which will never be casted
        as SSLv2 records but TLS ones instead, but hey, we can't be held
        responsible for low-minded extensibility choices.
        """
        if _pkt and len(_pkt) >= 2:
            byte0 = orb(_pkt[0])
            byte1 = orb(_pkt[1])
            if (byte0 not in _tls_type) or (byte1 != 3):
                from scapy.layers.tls.record_sslv2 import SSLv2
                return SSLv2
            else:
                s = kargs.get("tls_session", None)
                if s and _tls_version_check(s.tls_version, 0x0304):
                    if s.rcs and not isinstance(s.rcs.cipher, Cipher_NULL):
                        from scapy.layers.tls.record_tls13 import TLS13
                        return TLS13
        if _pkt and len(_pkt) < 5:
            # Layer detected as TLS but too small to be a real packet (len<5).
            # Those packets are usually customly implemented
            # Scapy should not try to decode them
            return conf.raw_layer
        return TLS