blob: a4c80b0c9345d670d1f4013820478c5420deb35c [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef APACHE_HTRACE_UTIL_STRING_H
#define APACHE_HTRACE_UTIL_STRING_H
/**
* @file string.h
*
* Functions for manipulating strings.
*
* This is an internal header, not intended for external use.
*/
struct htrace_log;
/**
* Print to a buffer and move the pointer forward by the number of bytes
* written.
*
* @param buf (inout) The buffer to write to. We will advance this
* buffer by the number of bytes written.
* If this buffer is NULL, nothing will be written.
* @param rem (inout) The maximum number of bytes to write to the
* buffer. If bytes are written to the buffer, this
* number will be decremented by that amount.
* @param fmt Printf-style format string.
*
* @return The number of bytes that would have been used if bytes
* had been written
*/
int fwdprintf(char **buf, int* rem, const char *fmt, ...)
__attribute__((format(printf, 3, 4)));
/**
* Validate that a string could appear in a JSON expression without causing
* problems. We don't accept control characters, double quotes, backslashes,
* tabs, newlines, or carriage returns.
*
* @param lg The log to print messages about invalid strings to.
* @param str The string.
*
* @return 0 if the string is problematic; 1 if it's safe.
*/
int validate_json_string(struct htrace_log *lg, const char *str);
/**
* Parse an endpoint string.
*
* We support a few different formats:
* Hostname/port:
* my.hostname:9075
* ipv4/port:
* 127.0.0.1:9075
* ipv6/port:
* [2001:db8:85a3:8d3:1319:8a2e:370:7348]:9075
*
* @param lg The htrace log object.
* @param endpoint The endpoint string.
* @param default_port The default port to use if no port is given.
* @param remote (out param) The remote name. Malloced.
* @param port (out param) The port.
*
* @return 0 on failure; 1 on success.
*/
int parse_endpoint(struct htrace_log *lg, const char *endpoint,
int default_port, char **remote, int *port);
#endif
// vim: ts=4:sw=4:et