def sendToNet(self, packet): # split message so that it's not longer than ircmsglen oldencmsg = encmsg = base64.b64encode(packet).strip("\n") slices = [] encmsglen = self.ircmsglen-self.headerlen msgid = "%05d" % random.randint(0, 99999) while len(encmsg) > encmsglen: slices.append(encmsg[:encmsglen]) encmsg = encmsg[encmsglen:] slices.append(encmsg) # HUB or SWITCH? if self.mode == "SWITCH" and not isBroadcast(packet): target = "%s%s" % (self.nickPrefix, binToHexStr(getDstMacFromPkt(packet)),) else: target = self.broadcastchan self.irclog.info("Sending %d packet(s) (total len %d) to %s" % (len(slices), len(oldencmsg), target)) if len(slices) == 0: self.irclog.error("Got EMPTY packet from dev!") elif len(slices) == 1: # send in one line (o) self.server.privmsg(target, "o%s %s" % (msgid, slices[0])) else: # send fragmented (b, c, e) self.server.privmsg(target, "b%s %s" % (msgid, slices.pop(0))) while len(slices) > 1: self.server.privmsg(target, "c%s %s" % (msgid, slices.pop(0))) self.server.privmsg(target, "e%s %s" % (msgid, slices.pop(0)))
def packetAllowed(self, nick, target, packet): if not self.acceptNonMatchingMac and not binToHexStr(getDstMacFromPkt(packet)) == nick[-12:]: return False if self.mode != "HUB" and self.strictSwichedNetwork: if target.startswith("#"): # its a channel return False return True