def handlePacket_IR(self, ad, data):
        # Initialization Response
        (kind, src_ipp, myip, code, rest
         ) = self.decodePacket('!2s6s4sB+', data)

        src_ad = Ad().setRawIPPort(src_ipp)
        if ad.isPrivate():
            if not src_ad.auth('sx', self.main):
                raise BadPacketError("Invalid reported source IP")
        else:
            self.checkSource(src_ipp, ad, exempt_ip=True)

        # Node list, Peer Cache
        nd, rest = self.decodeNodeTimeList(rest)
        pc, rest = self.decodeNodeTimeList(rest)

        if rest:
            raise BadPacketError("Extra data")

        if code not in (CODE_IP_OK, CODE_IP_FOREIGN, CODE_IP_BANNED):
            raise BadPacketError("Bad Response Code")

        if not self.main.icm:
            raise BadTimingError("Not in initial connection mode")

        self.main.icm.receivedInitResponse(src_ipp, myip, code, pc, nd)