import isc.config.ccsession
from optparse import OptionParser, OptionValueError
import isc.util.process
+from isc.util.common_defs import *
import isc.log
from isc.log_messages.msgq_messages import *
self.sendmsg(sock, { "type" : "getlname" }, { "lname" : lname })
def process_command_send(self, sock, routing, data):
- group = routing["group"]
- instance = routing["instance"]
- to = routing["to"]
+ group = routing[CC_HEADER_GROUP]
+ instance = routing[CC_HEADER_INSTANCE]
+ to = routing[CC_HEADER_TO]
if group == None or instance == None:
# FIXME: Should we log them instead?
return # ignore invalid packets entirely
- if to == "*":
+ if to == CC_TO_WILDCARD:
sockets = self.subs.find(group, instance)
else:
if to in self.lnames:
if sockets:
for socket in sockets:
self.send_prepared_msg(socket, msg)
- elif routing.get("wants_reply") and "reply" not in routing:
+ elif routing.get(CC_HEADER_WANT_ANSWER) and \
+ CC_HEADER_REPLY not in routing:
# We have no recipients. But the sender insists on a reply
# (and the message isn't a reply itself). We need to send
# an error to satisfy the senders hurger for response, since
# want to mangle it for the caller, so we get a copy. A shallow
# one should be enough, we modify the dict only.
header = routing.copy()
- header["reply"] = routing["seq"]
- header["from"] = 'msgq' # Dummy lname not assigned to clients
- header["to"] = routing["from"]
+ header[CC_HEADER_REPLY] = routing[CC_HEADER_SEQ]
+ header[CC_HEADER_FROM] = "msgq" # Dummy lname not assigned to clients
+ header[CC_HEADER_TO] = routing[CC_HEADER_FROM]
# We keep the seq as it is. We don't need to track the message
# and provided the sender always uses a new one, it won't know
# we're cheating, since we won't send it two same either.
self.__msgq.process_command_send(sender, routing, data)
self.assertEqual([], sent_messages)
# It should act the same if we explicitly say we do not want replies.
- routing["wants_reply"] = False
+ routing["want_answer"] = False
self.__msgq.process_command_send(sender, routing, data)
self.assertEqual([], sent_messages)
# Ask for errors if it can't be delivered.
- routing["wants_reply"] = True
+ routing["want_answer"] = True
self.__msgq.process_command_send(sender, routing, data)
self.assertEqual(1, len(sent_messages))
self.assertEqual(1, sent_messages[0][0])
'seq': 42,
'from': 'msgq',
'to': 'sender',
- 'wants_reply': True
+ 'want_answer': True
}, {'result': [-1, "No such recipient"]}),
self.parse_msg(sent_messages[0][1]))
# the reply header too.
sent_messages = []
# If the message is a reply itself, we never generate the errors, even
# if they can't be delivered. This is partly because the answer reuses
- # the old header (which would then inherit the wants_reply flag) and
+ # the old header (which would then inherit the want_answer flag) and
# partly we want to avoid loops of errors that can't be delivered.
# If a reply can't be delivered, the sender can't do much anyway even
# if notified.
'seq': 42,
'from': 'msgq',
'to': 'sender',
- 'wants_reply': True
+ 'want_answer': True
}, {'result': [-1, "No such recipient"]}),
self.parse_msg(sent_messages[0][1]))
sent_messages = []
const char* CC_HEADER_INSTANCE = "instance";
const char* CC_HEADER_SEQ = "seq";
const char* CC_HEADER_WANT_ANSWER = "want_answer";
+const char* CC_HEADER_REPLY = "reply";
// The commands in the "type" header
const char* CC_COMMAND_SEND = "send";
+// The wildcards of some headers
+const char* CC_TO_WILDCARD = "*";
+const char* CC_INSTANCE_WILDCARD = "*";
}
}