/*
- * Copyright (C) 2019 - Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
+ * Copyright (C) 2019 Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
*
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License, version 2 only, as
- * published by the Free Software Foundation.
+ * SPDX-License-Identifier: GPL-2.0-only
*
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 51
- * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#include "common/time.h"
#include <assert.h>
#include <regex.h>
#include <stdio.h>
#include "backward-compatibility-group-by.h"
-#define DATETIME_STRING_SIZE 16
#define DATETIME_REGEX \
- ".*-[1-2][0-9][0-9][0-9][0-1][0-1][0-3][0-9]-[0-2][0-9][0-5][0-9][0-5][0-9]$"
+ ".*-[1-2][0-9][0-9][0-9][0-1][0-9][0-3][0-9]-[0-2][0-9][0-5][0-9][0-5][0-9]$"
/*
* Provide support for --group-output-by-session for producer >= 2.4 and < 2.11.
*
* Return the allocated string containing the new stream path or else NULL.
*/
-char *backward_compat_group_by_session(
- const char *path, const char *local_session_name)
+char *backward_compat_group_by_session(const char *path,
+ const char *local_session_name,
+ time_t relay_session_creation_time)
{
int ret;
size_t len;
/*
* The use of strtok with '/' as delimiter is valid since we refuse '/'
* in session name and '/' is not a valid hostname character based on
- * RFC-952 [1], RFC-921 [2] and refined in RFC-1123 [2].
+ * RFC-952 [1], RFC-921 [2] and refined in RFC-1123 [3].
* [1] https://tools.ietf.org/html/rfc952
* [2] https://tools.ietf.org/html/rfc921
* [3] https://tools.ietf.org/html/rfc1123#page-13
ret = regexec(®ex, local_session_name, 0, NULL, 0);
if (ret == 0) {
const ssize_t local_session_name_offset =
- strlen(local_session_name) - DATETIME_STRING_SIZE + 1;
+ strlen(local_session_name) - DATETIME_STR_LEN + 1;
assert(local_session_name_offset >= 0);
datetime = strdup(local_session_name +
PERROR("Failed to parse session path: couldn't copy datetime on regex match");
goto error_regex;
}
+ } else {
+ datetime = zmalloc(DATETIME_STR_LEN);
+ if (!datetime) {
+ PERROR("Failed to allocate DATETIME string");
+ goto error;
+ }
+
+ ret = time_to_datetime_str(relay_session_creation_time,
+ datetime, DATETIME_STR_LEN);
+ if (ret) {
+ /* time_to_datetime_str already logs errors. */
+ goto error;
+ }
}
- } else if (len == DATETIME_STRING_SIZE &&
+ } else if (len == DATETIME_STR_LEN &&
!regexec(®ex, leftover_second_token_ptr, 0, NULL,
0)) {
/*