Skip to content

Commit 8cca561

Browse files
authored
Added tile_dir support to httpd.conf directive AddTileConfig (#370)
_Also_: - Changed `AddTileConfig` parsing directive - From `AP_INIT_RAW_ARGS` to `AP_INIT_TAKE_ARGV` - Makes code a bit cleaner, e.g.: - Checking for first two "arguments" - Iterating "arguments" - Applied Artistic Style Formatting - After merging #346 - Added deprecation notice when using `AddTileMimeConfig` - Enabled commented `AddTileConfig`/`AddTileMimeConfig` tests
1 parent d761f96 commit 8cca561

2 files changed

Lines changed: 97 additions & 95 deletions

File tree

src/mod_tile.c

Lines changed: 46 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -2092,60 +2092,63 @@ static const char *_add_tile_config(cmd_parms *cmd, void *mconfig,
20922092

20932093
static const char *add_tile_mime_config(cmd_parms *cmd, void *mconfig, const char *baseuri, const char *name, const char * fileExtension)
20942094
{
2095-
// this configuration option should be deprecated and be replaced by
2096-
// a version of AddTileConfig with "extension=xxx"
2097-
// how to log a warning here?
2098-
if (strcmp(fileExtension, "png") == 0) {
2099-
return _add_tile_config(cmd, mconfig, baseuri, name, 0, MAX_ZOOM, 1, 1, fileExtension, "image/png", NULL, NULL, 0, NULL, NULL, NULL, 0);
2100-
}
2095+
char *cors = NULL;
2096+
char *mimeType = "image/png";
21012097

21022098
if (strcmp(fileExtension, "js") == 0) {
2103-
return _add_tile_config(cmd, mconfig, baseuri, name, 0, MAX_ZOOM, 1, 1, fileExtension, "text/javascript", NULL, NULL, 0, NULL, "*", NULL, 0);
2099+
cors = "*";
2100+
mimeType = "text/javascript";
21042101
}
21052102

2106-
return _add_tile_config(cmd, mconfig, baseuri, name, 0, MAX_ZOOM, 1, 1, fileExtension, "image/png", NULL, NULL, 0, NULL, NULL, NULL, 0);
2103+
ap_log_error(APLOG_MARK, APLOG_NOTICE, APR_SUCCESS, cmd->server,
2104+
"AddTileMimeConfig will be deprecated in a future release, please use the following instead: AddTileConfig %s %s mimetype=%s extension=%s",
2105+
baseuri, name, mimeType, fileExtension);
2106+
return _add_tile_config(cmd, mconfig, baseuri, name, 0, MAX_ZOOM, 1, 1, fileExtension, mimeType, NULL, NULL, 0, NULL, cors, NULL, 0);
21072107
}
21082108

2109-
static const char *add_tile_config(cmd_parms *cmd, void *mconfig, const char *args)
2109+
static const char *add_tile_config(cmd_parms *cmd, void *mconfig, int argc, char *const argv[])
21102110
{
2111-
const char *baseuri = ap_getword_conf(cmd->pool, &args);
2112-
if (!baseuri) return("AddTileConfig error");
2113-
const char *name = ap_getword_conf(cmd->pool, &args);
2114-
if (!name) return("AddTileConfig error");
2111+
if (argc < 1) {
2112+
return ("AddTileConfig error, URL path not defined");
2113+
}
2114+
2115+
if (argc < 2) {
2116+
return ("AddTileConfig error, name of renderd config not defined");
2117+
}
2118+
21152119
int maxzoom = MAX_ZOOM;
21162120
int minzoom = 0;
2117-
const char *extension = "png";
2118-
const char *mimeType = "image/png";
2119-
char *token = ap_getword_conf(cmd->pool, &args);
2120-
while(token)
2121-
{
2122-
char *eq = strchr(token, '=');
2123-
if (eq)
2124-
{
2125-
*eq++=0;
2126-
if (!strcmp(token, "maxzoom"))
2127-
{
2128-
maxzoom = atoi(eq);
2129-
}
2130-
else if (!strcmp(token, "minzoom"))
2131-
{
2132-
minzoom = atoi(eq);
2133-
}
2134-
else if (!strcmp(token, "extension"))
2135-
{
2136-
extension = eq;
2137-
}
2138-
else if (!strcmp(token, "mimetype"))
2139-
{
2140-
mimeType = eq;
2121+
char *baseuri = argv[0];
2122+
char *name = argv[1];
2123+
char *fileExtension = "png";
2124+
char *mimeType = "image/png";
2125+
char *tile_dir = RENDERD_TILE_DIR;
2126+
2127+
int i;
2128+
2129+
for (i = 2; i < argc; i++) {
2130+
char *value = strchr(argv[i], '=');
2131+
2132+
if (value) {
2133+
*value++ = 0;
2134+
2135+
if (!strcmp(argv[i], "maxzoom")) {
2136+
maxzoom = strtol(value, NULL, 10);
2137+
} else if (!strcmp(argv[i], "minzoom")) {
2138+
minzoom = strtol(value, NULL, 10);
2139+
} else if (!strcmp(argv[i], "extension")) {
2140+
fileExtension = value;
2141+
} else if (!strcmp(argv[i], "mimetype")) {
2142+
mimeType = value;
2143+
} else if (!strcmp(argv[i], "tile_dir")) {
2144+
tile_dir = value;
21412145
}
21422146
}
2143-
if (!*args) break;
2144-
token = ap_getword_conf(cmd->pool, &args);
21452147
}
21462148

2147-
return _add_tile_config(cmd, mconfig, baseuri, name, minzoom, maxzoom, 1, 1, extension, mimeType, NULL,NULL,0,NULL,NULL,NULL,0);
2149+
return _add_tile_config(cmd, mconfig, baseuri, name, minzoom, maxzoom, 1, 1, fileExtension, mimeType, NULL, NULL, 0, NULL, NULL, tile_dir, 0);
21482150
}
2151+
21492152
static const char *load_tile_config(cmd_parms *cmd, void *mconfig, const char *conffile)
21502153
{
21512154
FILE * hini ;
@@ -2889,19 +2892,19 @@ static const command_rec tile_cmds[] = {
28892892
OR_OPTIONS, /* where available */
28902893
"load an entire renderd config file" /* directive description */
28912894
),
2892-
AP_INIT_RAW_ARGS(
2895+
AP_INIT_TAKE_ARGV(
28932896
"AddTileConfig", /* directive name */
28942897
add_tile_config, /* config action routine */
28952898
NULL, /* argument to include in call */
28962899
OR_OPTIONS, /* where available */
2897-
"path, name, and optional key-value pairs for renderd config to use" /* directive description */
2900+
"path, name of renderd config and optional key-value pairs to use" /* directive description */
28982901
),
28992902
AP_INIT_TAKE3(
29002903
"AddTileMimeConfig", /* directive name */
29012904
add_tile_mime_config, /* config action routine */
29022905
NULL, /* argument to include in call */
29032906
OR_OPTIONS, /* where available */
2904-
"path, name and file extension of renderd config to use" /* directive description */
2907+
"path, name of renderd config and file extension to use" /* directive description */
29052908
),
29062909
AP_INIT_TAKE1(
29072910
"ModTileRequestTimeout", /* directive name */

tests/CMakeLists.txt

Lines changed: 51 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -372,8 +372,7 @@ foreach(STORAGE_BACKEND_INDEX RANGE ${STORAGE_BACKENDS_LENGTH})
372372
\" at /\${CONFIG_NAME}/ \"
373373
\" extension .jpg \"
374374
\" mime type image/jpeg$\"
375-
# \" tile directory ${TILE_DIR} \"
376-
\" tile directory ${RENDERD_TILE_DIR} \"
375+
\" tile directory ${TILE_DIR} \"
377376
\" zooms 10 - 15 \"
378377
)
379378
echo \"Searching log line '\${SEARCH_LINE}'\"
@@ -404,17 +403,17 @@ foreach(STORAGE_BACKEND_INDEX RANGE ${STORAGE_BACKENDS_LENGTH})
404403
\" tile directory ${RENDERD_TILE_DIR} \"
405404
\" zooms 0 - 20 \"
406405
)
407-
# echo \"Searching log line '\${SEARCH_LINE}'\"
408-
# for SEARCH_STR in \"\${SEARCH_STRS[@]}\"; do
409-
# echo \"\tFor '\${SEARCH_STR}'\"
410-
# echo \"\${SEARCH_LINE}\" | ${GREP_EXECUTABLE} -q -e \"\${SEARCH_STR}\" || exit 1
411-
# done
412-
# SEARCH_LINE=\$(${GREP_EXECUTABLE} \"AddTileMimeConfig will be deprecated\" ${HTTPD_LOG} | \
413-
# ${GREP_EXECUTABLE} -m1 \"\${CONFIG_NAME}\")
414-
# echo \"Searching log line '\${SEARCH_LINE}'\"
415-
# SEARCH_STR=\"AddTileConfig /\${CONFIG_NAME}/ \${CONFIG_NAME} mimetype=\${MIME_TYPE} extension=\${SEARCH_CONFIG}\"
416-
# echo \"\tFor '\${SEARCH_STR}'\"
417-
# echo \"\${SEARCH_LINE}\" | ${GREP_EXECUTABLE} -q -e \"\${SEARCH_STR}\" || exit 1
406+
echo \"Searching log line '\${SEARCH_LINE}'\"
407+
for SEARCH_STR in \"\${SEARCH_STRS[@]}\"; do
408+
echo \"\tFor '\${SEARCH_STR}'\"
409+
echo \"\${SEARCH_LINE}\" | ${GREP_EXECUTABLE} -q -e \"\${SEARCH_STR}\" || exit 1
410+
done
411+
SEARCH_LINE=\$(${GREP_EXECUTABLE} \"AddTileMimeConfig will be deprecated\" ${HTTPD_LOG} | \
412+
${GREP_EXECUTABLE} -m1 \"\${CONFIG_NAME}\")
413+
echo \"Searching log line '\${SEARCH_LINE}'\"
414+
SEARCH_STR=\"AddTileConfig /\${CONFIG_NAME}/ \${CONFIG_NAME} mimetype=\${MIME_TYPE} extension=\${SEARCH_CONFIG}\"
415+
echo \"\tFor '\${SEARCH_STR}'\"
416+
echo \"\${SEARCH_LINE}\" | ${GREP_EXECUTABLE} -q -e \"\${SEARCH_STR}\" || exit 1
418417
done
419418
"
420419
WORKING_DIRECTORY tests
@@ -536,47 +535,47 @@ foreach(STORAGE_BACKEND_INDEX RANGE ${STORAGE_BACKENDS_LENGTH})
536535
)
537536
endforeach()
538537

539-
# set(TILE_URL_PATH "/download_add_tile_config/${TILE_ZXY}.png")
540-
# set(HTTPD0_URL "http://${HTTPD0_HOST}:${HTTPD0_PORT}${TILE_URL_PATH}")
541-
# set(HTTPD1_URL "http://${HTTPD1_HOST}:${HTTPD1_PORT}${TILE_URL_PATH}")
542-
# set(TILE_FILE_NAME "tile.add_tile_config.${STORAGE_BACKEND}")
543-
# add_test(
544-
# NAME download_tile_add_tile_config_${STORAGE_BACKEND}
545-
# COMMAND ${BASH} -c "
546-
# until $(${CURL_CMD} ${HTTPD0_URL} --output ${TILE_FILE_NAME}.0); do
547-
# echo 'Sleeping 1s (${TILE_FILE_NAME}.0)';
548-
# sleep 1;
549-
# done
550-
# until $(${CURL_CMD} ${HTTPD1_URL} --output ${TILE_FILE_NAME}.1); do
551-
# echo 'Sleeping 1s (${TILE_FILE_NAME}.1)';
552-
# sleep 1;
553-
# done
554-
# "
555-
# WORKING_DIRECTORY tests
556-
# )
557-
# set_tests_properties(download_tile_add_tile_config_${STORAGE_BACKEND} PROPERTIES
558-
# FIXTURES_REQUIRED services_started_${STORAGE_BACKEND}
559-
# FIXTURES_SETUP tiles_downloaded_${STORAGE_BACKEND}
560-
# TIMEOUT 10
561-
# )
562-
# add_test(
563-
# NAME remove_tile_add_tile_config_${STORAGE_BACKEND}
564-
# COMMAND ${RM} -v ${TILE_FILE_NAME}.0 ${TILE_FILE_NAME}.1
565-
# WORKING_DIRECTORY tests
566-
# )
567-
# set_tests_properties(remove_tile_add_tile_config_${STORAGE_BACKEND} PROPERTIES
568-
# DEPENDS_ON download_tile_add_tile_config_${STORAGE_BACKEND}
569-
# FIXTURES_CLEANUP tiles_downloaded_${STORAGE_BACKEND}
570-
# REQUIRED_FILES "${TILE_FILE_NAME}.0;${TILE_FILE_NAME}.1"
571-
# )
538+
set(TILE_URL_PATH "/download_add_tile_config/${TILE_ZXY}.png")
539+
set(HTTPD0_URL "http://${HTTPD0_HOST}:${HTTPD0_PORT}${TILE_URL_PATH}")
540+
set(HTTPD1_URL "http://${HTTPD1_HOST}:${HTTPD1_PORT}${TILE_URL_PATH}")
541+
set(TILE_FILE_NAME "tile.add_tile_config.${STORAGE_BACKEND}")
542+
add_test(
543+
NAME download_tile_add_tile_config_${STORAGE_BACKEND}
544+
COMMAND ${BASH} -c "
545+
until $(${CURL_CMD} ${HTTPD0_URL} --output ${TILE_FILE_NAME}.0); do
546+
echo 'Sleeping 1s (${TILE_FILE_NAME}.0)';
547+
sleep 1;
548+
done
549+
until $(${CURL_CMD} ${HTTPD1_URL} --output ${TILE_FILE_NAME}.1); do
550+
echo 'Sleeping 1s (${TILE_FILE_NAME}.1)';
551+
sleep 1;
552+
done
553+
"
554+
WORKING_DIRECTORY tests
555+
)
556+
set_tests_properties(download_tile_add_tile_config_${STORAGE_BACKEND} PROPERTIES
557+
FIXTURES_REQUIRED services_started_${STORAGE_BACKEND}
558+
FIXTURES_SETUP tiles_downloaded_${STORAGE_BACKEND}
559+
TIMEOUT 10
560+
)
561+
add_test(
562+
NAME remove_tile_add_tile_config_${STORAGE_BACKEND}
563+
COMMAND ${RM} -v ${TILE_FILE_NAME}.0 ${TILE_FILE_NAME}.1
564+
WORKING_DIRECTORY tests
565+
)
566+
set_tests_properties(remove_tile_add_tile_config_${STORAGE_BACKEND} PROPERTIES
567+
DEPENDS_ON download_tile_add_tile_config_${STORAGE_BACKEND}
568+
FIXTURES_CLEANUP tiles_downloaded_${STORAGE_BACKEND}
569+
REQUIRED_FILES "${TILE_FILE_NAME}.0;${TILE_FILE_NAME}.1"
570+
)
572571

573572
add_test(
574573
NAME check_tiles_${STORAGE_BACKEND}
575574
COMMAND ${BASH} -c "
576-
# (echo '${TILE_PNG256_SHA256SUM} tile.add_tile_config.${STORAGE_BACKEND}.0' | ${SHA256SUM_EXECUTABLE} -c) && \
577-
# (echo '${TILE_PNG256_SHA256SUM} tile.add_tile_config.${STORAGE_BACKEND}.1' | ${SHA256SUM_EXECUTABLE} -c) && \
578575
(echo '${TILE_JPG_SHA256SUM} tile.jpg.${STORAGE_BACKEND}.0' | ${SHA256SUM_EXECUTABLE} -c) && \
579576
(echo '${TILE_JPG_SHA256SUM} tile.jpg.${STORAGE_BACKEND}.1' | ${SHA256SUM_EXECUTABLE} -c) && \
577+
(echo '${TILE_PNG256_SHA256SUM} tile.add_tile_config.${STORAGE_BACKEND}.0' | ${SHA256SUM_EXECUTABLE} -c) && \
578+
(echo '${TILE_PNG256_SHA256SUM} tile.add_tile_config.${STORAGE_BACKEND}.1' | ${SHA256SUM_EXECUTABLE} -c) && \
580579
(echo '${TILE_PNG256_SHA256SUM} tile.png256.${STORAGE_BACKEND}.0' | ${SHA256SUM_EXECUTABLE} -c) && \
581580
(echo '${TILE_PNG256_SHA256SUM} tile.png256.${STORAGE_BACKEND}.1' | ${SHA256SUM_EXECUTABLE} -c) && \
582581
(echo '${TILE_PNG32_SHA256SUM} tile.png32.${STORAGE_BACKEND}.0' | ${SHA256SUM_EXECUTABLE} -c) && \
@@ -746,14 +745,14 @@ endforeach()
746745

747746
# Test mal-formed HTTPD configuration directives
748747
set(DIRECTIVES
749-
# "AddTileConfig"
750-
# "AddTileConfig /bad/"
748+
"AddTileConfig"
749+
"AddTileConfig /bad/"
751750
"LoadTileConfigFile"
752751
"LoadTileConfigFile /tmp/bad/file/name"
753752
)
754753
set(DIRECTIVE_ERRORS
755-
# "AddTileConfig error, URL path not defined"
756-
# "AddTileConfig error, name of renderd config not defined"
754+
"AddTileConfig error, URL path not defined"
755+
"AddTileConfig error, name of renderd config not defined"
757756
"LoadTileConfigFile takes one argument, load an entire renderd config file"
758757
"Unable to open config file"
759758
)

0 commit comments

Comments
 (0)