# #
###############################################################################
+# Allow only one instance of this hook
+HOOK_UNIQUE="true"
+
hook_new() {
- cmd_not_implemented
+ local zone="${1}"
+ shift
+
+ # Check if we are allowed to have multiple configurations of $HOOK
+ if enabled HOOK_UNIQUE && zone_config_hook_is_configured "${zone}" "${HOOK}"; then
+ error "You can only have one configuration of type ${HOOK}"
+ return ${EXIT_CONF_ERROR}
+ fi
+
+ local id=$(zone_config_get_new_id ${zone})
+ log DEBUG "ID for the config is: ${id}"
+
+ # Import all default variables
+ hook_set_defaults
+
+ # Parse command line arguments
+ if ! hook_parse_cmdline "${id}" "$@"; then
+ # Return an error if the parsing of the cmd line fails
+ return ${EXIT_ERROR}
+ fi
+
+ # Write configuration to disk
+ if ! zone_config_settings_write "${zone}" "${HOOK}" "${id}"; then
+ return ${EXIT_ERROR}
+ fi
+
+ return ${EXIT_OK}
+}
+
+hook_edit() {
+ local zone=${1}
+ local config=${2}
+ shift 2
+
+ local hook=$(config_get_hook_from_config ${config})
+ local id=$(config_get_id_from_config ${config})
+
+ assert isset hook
+ assert isset id
+
+ if ! zone_exists ${zone}; then
+ error "Zone '${zone}' doesn't exist."
+ exit ${EXIT_ERROR}
+ fi
+
+ # Bring the config down
+ if device_exists ${zone}; then
+ if ! hook_config_cmd "down" "${zone}" "${hook}" "${hook}.${id}"; then
+ log ERROR "Could not bring config ${config} down for zone ${zone}"
+ return ${EXIT_ERROR}
+ fi
+ fi
+
+ local ${HOOK_SETTINGS}
+
+ # If reading the config fails we cannot go on
+ if ! zone_config_settings_read "${zone}" "${config}"; then
+ log ERROR "Could read the config ${config} for zone ${zone}"
+ return ${EXIT_ERROR}
+ fi
+
+ if ! hook_parse_cmdline "${id}" "$@"; then
+ # Return an error if the parsing of the cmd line fails
+ return ${EXIT_ERROR}
+ fi
+
+ # Write the settings to the config file
+ if ! zone_config_settings_write "${zone}" "${hook}" ${id}; then
+ log ERROR "Could not write config settings file ${config} for ${zone}"
+ return ${EXIT_ERROR}
+ fi
+
+ # Bring the config up
+ if device_exists ${zone}; then
+ if ! hook_config_cmd "up" "${zone}" "${hook}" "${hook}.${id}"; then
+ log ERROR "Could not bring config ${config} up for zone ${zone}"
+ return ${EXIT_ERROR}
+ fi
+ fi
+
+ exit ${EXIT_OK}
+}
+
+hook_destroy() {
+ return ${EXIT_OK}
+}
+
+
+# Returns the ID as a unique identifier
+# Should always be overwritten by a hook
+hook_hid() {
+ local zone=${1}
+ local config=${2}
+
+ config_get_id_from_config "${config}"
}