public SearchFilter(ConnectionProcessor connectionProcessor, Properties config) {
        super(connectionProcessor, config);
        requireConfigKey(KEY_ACTION);
        action = config.getProperty(KEY_ACTION);
        if (!ACTIONS.contains(action)) {
            throw new Error("unrecognized action: '" + action + "' choose from (" + StringUtils.join(ACTIONS.iterator(), ", ") + ")");
        }
        requireConfigKey(KEY_SEARCH_TERM);
        search_term = config.getProperty(KEY_SEARCH_TERM);
        if (action.equals(ACTION_REPLACE)) {
            requireConfigKey(KEY_REPLACEMENT);
            replacement = config.getProperty(KEY_REPLACEMENT);
            if (replacement.length() != search_term.length()) {
                throw new Error("search term(" + search_term + ") must be longer than or same length as replacement(" + replacement + ")");
            }
        } else {
            replacement = null;
        }
        if (action.equals(ACTION_PAUSE) || action.equals(ACTION_PAUSE_INGRESS) || action.equals(ACTION_PAUSE_EGRESS)) {
            requireConfigKey(KEY_PAUSE_DURATION);
            pause_duration = Long.parseLong(config.getProperty(KEY_PAUSE_DURATION));
        } else {
            pause_duration = 0;
        }
    }