コード例 #1
0
ファイル: ircvpn.py プロジェクト: WindyCitySDR/ether2any
	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)))
コード例 #2
0
ファイル: ircvpn.py プロジェクト: WindyCitySDR/ether2any
	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