def extendProtocol(lFactory, sFactory):
	global dtnMonitors, BundleWriter

	try:
		if ExtensionLoader().isActive("Groups") is False:
			raise KeyError, "Group extension not active"

		if ExtensionLoader().isActive("HTTP-DTN") is False:
			raise KeyError, "HTTP-DTN extension not active"

		if ExtensionLoader().isActive("DTNHealingDataModel") is False:
			raise KeyError, "DTNHealingDataModel was not loaded"

		dtnMonitors = (ExtensionLoader().
						getExtension("Groups").
							getGroup("DTN-Healers"))

		dtnExtension = ExtensionLoader().getExtension("HTTP-DTN")

		BundleWriter = dtnExtension.BundleWriter

	except KeyError as e:
		return False

	dtnExtension.addToken('dtnhealing', DTNHealingParser)

	return True
def extendProtocol(lexicalFactory, syntaxFactory):
	# j == join
	# p == part
	# l == lookup
	# a == lookup answer
	regex = "group:(({0})|({1})|({2})|({3}))".format(
			"(j|l|p):{0}".format(GroupNameRegex),
			"a:{0}(:{1}(,[1-9][0-9]?)+)+".format(GroupNameRegex, IPHostRegex),
			"msg:{0}:[0-9]+:(s|a):.+".format(GroupNameRegex),
			"e:.*"
	)

	if ExtensionLoader().isActive("BasicOverlay"):
		BProtocol = ExtensionLoader().getExtension("BasicOverlay")
		BProtocol.addBootstrapFunction(joinGroups)

		establishedState = lexicalFactory.getState('established')
		establishedState.addTransition('established', regex,
										lambda t: t.split(':'))

		startState = lexicalFactory.getState('start')
		startState.addTransition('start', regex, lambda t: t.split(':'))

		syntaxFactory.addToken('group', groupTokenParser)
		overlayAHF(removeFromGroups, True)

		for g in CommandLineParser().getArguments().groupsToJoin:
			groups[g] = Group(g, True, None,
								CommandLineParser().getArguments().PeerName)

		return True

	return False
def execute(host, port, df):
	global mainDefer

	mainDefer = df
	sshRPC = ExtensionLoader().getExtension("sshRPC").sshRPC
	sshRPCGroup = ExtensionLoader().getExtension("Groups").getGroup("sshRPC")

	runners = sshRPCGroup.getSubgroup(len(sshRPCGroup)-1)
	nRunners = len(sshRPCGroup)-1
	i = 0

	for sensor,port,passwd in sensorsList + [ (host, port, '192168061') ]:
		hostDefer = defer.Deferred()

		hostDefer.addErrback(df.errback)
		hostDefer.addCallback(confirmationReply)

		print "Asking to", runners[i % nRunners].nick, "to run the command"
		sshRPC(runners[i % nRunners], hostDefer,
				sensor, port, 'root', passwd, command)
		i += 1