private void InternalSend(TimeStampedMessage message) throws UnknownHostException
    {
        
        Configuration.Host dest = conf.hostMap.get(message.getDest());
        
        // check send rules
        if (conf.sendRules != null) {
            for (Configuration.Rule rule : conf.sendRules) {
                if (rule.match(message)) {
                    // perform action
                    if (rule.action.equals(Configuration.Action.DROP.getAction())) {
                        // ignore the message
                        return;
                    } else if (rule.action.equals(Configuration.Action.DUPLICATE.getAction())) {
                        // duplicate the message (send two identical message and set dupe for second message)
                    	// Utsav - We can do this by storing both messages in the sendBuffer 
                        InetAddress ip = InetAddress.getByName(dest.ip);
                        int port = dest.port;
                        comm.NetSend(new MultiCastMessage(message), ip, port);
                        
                        // send all delayed message in buffer
                        sendAllDelayedMsg();
                        
                        TimeStampedMessage dupMsg = new MultiCastMessage(message);
                        dupMsg.set_duplicate(new Boolean(true));
                        comm.NetSend(dupMsg, ip, port);
                        return;
                    } else if (rule.action.equals(Configuration.Action.DELAY.getAction())) {
                        // store it in delaysendBuffer
                    	// Utsav - After sending the normal messages, check if there is anything in the
                    	// delaysendBuffer. If yes, send that.
                    	delaySendBuffer.offer(new OutgoingMessage(new MultiCastMessage(message), InetAddress.getByName(dest.ip), dest.port));
                        return;
                    }
                }
            }
        }

        // no match for any send rules, send normal message
        //System.out.println(message.toString());
        comm.NetSend(message, InetAddress.getByName(dest.ip), dest.port);
        
        // send delayed message in buffer
        sendAllDelayedMsg();
        return;
    }