GNUnet debian-0.24.3
gnunet_strings_lib.h
Go to the documentation of this file.
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2001-2013 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
21#if ! defined (__GNUNET_UTIL_LIB_H_INSIDE__)
22#error "Only <gnunet_util_lib.h> can be included directly."
23#endif
24
44#if ! defined (__GNUNET_UTIL_LIB_H_INSIDE__)
45#error "Only <gnunet_util_lib.h> can be included directly."
46#endif
47
48#ifndef GNUNET_STRINGS_LIB_H
49#define GNUNET_STRINGS_LIB_H
50
51/* we need size_t, and since it can be both unsigned int
52 or unsigned long long, this IS platform dependent;
53 but "stdlib.h" should be portable 'enough' to be
54 unconditionally available... */
55
56#include <stdlib.h>
57#include <sys/socket.h>
58#include <netinet/in.h>
59#include <netinet/ip.h>
60
61#ifdef __cplusplus
62extern "C"
63{
64#if 0 /* keep Emacsens' auto-indent happy */
65}
66#endif
67#endif
68
69#include "gnunet_time_lib.h"
70
71
80GNUNET_STRINGS_fancy_size_to_bytes (const char *fancy_size,
81 unsigned long long *size);
82
83
93GNUNET_STRINGS_fancy_time_to_relative (const char *fancy_time,
94 struct GNUNET_TIME_Relative *rtime);
95
96
108GNUNET_STRINGS_fancy_time_to_absolute (const char *fancy_time,
109 struct GNUNET_TIME_Absolute *atime);
110
111
123GNUNET_STRINGS_fancy_time_to_timestamp (const char *fancy_time,
124 struct GNUNET_TIME_Timestamp *atime);
125
126
133char *
134GNUNET_STRINGS_byte_size_fancy (unsigned long long size);
135
136
150char *
151GNUNET_STRINGS_conv (const char *input,
152 size_t len,
153 const char *input_charset,
154 const char *output_charset);
155
156
167char *
168GNUNET_STRINGS_to_utf8 (const char *input,
169 size_t len,
170 const char *charset);
171
172
179char*
180GNUNET_STRINGS_utf8_normalize (const char *input);
181
182
194char *
195GNUNET_STRINGS_from_utf8 (const char *input,
196 size_t len,
197 const char *charset);
198
199
209GNUNET_STRINGS_utf8_tolower (const char *input,
210 char *output);
211
212
222GNUNET_STRINGS_utf8_toupper (const char *input,
223 char *output);
224
225
234char *
235GNUNET_STRINGS_filename_expand (const char *fil);
236
237
257size_t
258GNUNET_STRINGS_buffer_fill (char *buffer,
259 size_t size,
260 unsigned int count,
261 ...);
262
263
276unsigned int
277GNUNET_STRINGS_buffer_tokenize (const char *buffer,
278 size_t size,
279 unsigned int count, ...);
280
281
292const char *
294
295
306const char *
308
309
320const char *
322 int do_round);
323
324
336const char *
338
339
352char *
354 size_t size,
355 char *out,
356 size_t out_size);
357
358
369char *
371 size_t size);
372
373
386 size_t enclen,
387 void *out,
388 size_t out_size);
389
390
404 size_t enclen,
405 void **out,
406 size_t *out_size);
407
408
418size_t
419GNUNET_STRINGS_base64_encode (const void *in,
420 size_t len,
421 char **output);
422
423
437size_t
438GNUNET_STRINGS_urlencode (size_t len,
439 const char data[static len],
440 char **out);
441
442
452size_t
453GNUNET_STRINGS_base64url_encode (const void *in,
454 size_t len,
455 char **output);
456
457
467size_t
469 size_t len,
470 void **output);
471
472
482size_t
484 size_t len,
485 void **out);
486
496size_t
497GNUNET_STRINGS_urldecode (const char *data,
498 size_t len,
499 char **out);
500
501
519GNUNET_STRINGS_parse_uri (const char *path,
520 char **scheme_part,
521 const char **path_part);
522
523
540 int can_be_uri,
541 int *r_is_uri,
542 char **r_uri_scheme);
543
544
549{
554
559
564
570
571
583 enum GNUNET_STRINGS_FilenameCheck checks);
584
585
598GNUNET_STRINGS_to_address_ipv6 (const char *zt_addr,
599 size_t addrlen,
600 struct sockaddr_in6 *r_buf);
601
602
614GNUNET_STRINGS_to_address_ipv4 (const char *zt_addr,
615 size_t addrlen,
616 struct sockaddr_in *r_buf);
617
618
628size_t
629GNUNET_STRINGS_parse_socket_addr (const char *addr,
630 uint8_t *af,
631 struct sockaddr **sa);
632
633
646GNUNET_STRINGS_to_address_ip (const char *addr,
647 uint16_t addrlen,
648 struct sockaddr_storage *r_buf);
649
650
666size_t
667GNUNET_strlcpy (char *dst,
668 const char *src,
669 size_t n);
670
671
685char *
687
688
689/* ***************** IPv4/IPv6 parsing ****************** */
690
692{
696 uint16_t start_port;
697
701 uint16_t end_port;
702
708};
709
710
715{
719 struct in_addr network;
720
724 struct in_addr netmask;
725
730};
731
732
737{
741 struct in6_addr network;
742
746 struct in6_addr netmask;
747
752};
753
754
767GNUNET_STRINGS_parse_ipv4_policy (const char *routeListX);
768
769
782GNUNET_STRINGS_parse_ipv6_policy (const char *routeListX);
783
784
785#if 0 /* keep Emacsens' auto-indent happy */
786{
787#endif
788#ifdef __cplusplus
789}
790#endif
791
792/* ifndef GNUNET_UTIL_STRING_H */
793#endif
794 /* end of group */
796 /* end of group addition */
798
799/* end of gnunet_util_string.h */
static char * data
The data to insert into the dht.
static char * filename
static OpusEncoder * enc
OPUS encoder.
static void do_round(void *cls)
Send out PUSHes and PULLs, possibly update #view, samplers.
static struct GNUNET_SCHEDULER_Task * t
Main task.
Functions related to time.
GNUNET_GenericReturnValue
Named constants for return values.
enum GNUNET_GenericReturnValue GNUNET_STRINGS_string_to_data_alloc(const char *enc, size_t enclen, void **out, size_t *out_size)
Convert CrockfordBase32 encoding back to data.
Definition: strings.c:884
size_t GNUNET_STRINGS_urlencode(size_t len, const char data[static len], char **out)
url/percent encode (RFC3986).
Definition: strings.c:1868
size_t GNUNET_STRINGS_base64url_decode(const char *data, size_t len, void **out)
Decode from Base64url.
Definition: strings.c:1764
size_t GNUNET_STRINGS_parse_socket_addr(const char *addr, uint8_t *af, struct sockaddr **sa)
Parse an address given as a string into a struct sockaddr.
Definition: strings.c:1185
char * GNUNET_STRINGS_data_to_string(const void *data, size_t size, char *out, size_t out_size)
Convert binary data to ASCII encoding using CrockfordBase32.
Definition: strings.c:738
char * GNUNET_STRINGS_to_utf8(const char *input, size_t len, const char *charset)
Convert the len characters long character sequence given in input that is in the given charset to UTF...
Definition: strings.c:416
char * GNUNET_STRINGS_data_to_string_alloc(const void *buf, size_t size)
Return the base32crockford encoding of the given buffer.
Definition: strings.c:793
struct GNUNET_STRINGS_IPv6NetworkPolicy * GNUNET_STRINGS_parse_ipv6_policy(const char *routeListX)
Parse an IPv6 network policy.
Definition: strings.c:1455
char * GNUNET_STRINGS_conv(const char *input, size_t len, const char *input_charset, const char *output_charset)
Convert the len characters long character sequence given in input that is in the given input charset ...
Definition: strings.c:354
enum GNUNET_GenericReturnValue GNUNET_STRINGS_to_address_ip(const char *addr, uint16_t addrlen, struct sockaddr_storage *r_buf)
Tries to convert addr string to an IP (v4 or v6) address.
Definition: strings.c:1170
char * GNUNET_STRINGS_byte_size_fancy(unsigned long long size)
Convert a given filesize into a fancy human-readable format.
Definition: strings.c:105
GNUNET_STRINGS_FilenameCheck
Flags for what we should check a file for.
char * GNUNET_STRINGS_filename_expand(const char *fil)
Complete filename (a la shell) from abbrevition.
Definition: strings.c:506
enum GNUNET_GenericReturnValue GNUNET_STRINGS_to_address_ipv6(const char *zt_addr, size_t addrlen, struct sockaddr_in6 *r_buf)
Tries to convert zt_addr string to an IPv6 address.
Definition: strings.c:1062
enum GNUNET_GenericReturnValue GNUNET_STRINGS_utf8_toupper(const char *input, char *output)
Convert the utf-8 input string to upper case.
Definition: strings.c:483
size_t GNUNET_STRINGS_urldecode(const char *data, size_t len, char **out)
url/percent encode (RFC3986).
Definition: strings.c:1813
enum GNUNET_GenericReturnValue GNUNET_STRINGS_string_to_data(const char *enc, size_t enclen, void *out, size_t out_size)
Convert CrockfordBase32 encoding back to data.
Definition: strings.c:818
unsigned int GNUNET_STRINGS_buffer_tokenize(const char *buffer, size_t size, unsigned int count,...)
Given a buffer of a given size, find "count" 0-terminated strings in the buffer and assign the count ...
Definition: strings.c:71
enum GNUNET_GenericReturnValue GNUNET_STRINGS_path_is_absolute(const char *filename, int can_be_uri, int *r_is_uri, char **r_uri_scheme)
Check whether filename is absolute or not, and if it's an URI.
Definition: strings.c:987
size_t GNUNET_STRINGS_base64url_encode(const void *in, size_t len, char **output)
Encode into Base64url.
Definition: strings.c:1653
struct GNUNET_STRINGS_IPv4NetworkPolicy * GNUNET_STRINGS_parse_ipv4_policy(const char *routeListX)
Parse an IPv4 network policy.
Definition: strings.c:1280
enum GNUNET_GenericReturnValue GNUNET_STRINGS_parse_uri(const char *path, char **scheme_part, const char **path_part)
Parse a path that might be an URI.
Definition: strings.c:926
size_t GNUNET_STRINGS_buffer_fill(char *buffer, size_t size, unsigned int count,...)
Fill a buffer of the given size with count 0-terminated strings (given as varargs).
Definition: strings.c:43
enum GNUNET_GenericReturnValue GNUNET_STRINGS_fancy_time_to_relative(const char *fancy_time, struct GNUNET_TIME_Relative *rtime)
Convert a given fancy human-readable time to our internal representation.
Definition: strings.c:259
size_t GNUNET_STRINGS_base64_decode(const char *data, size_t len, void **output)
Decode from Base64.
Definition: strings.c:1706
enum GNUNET_GenericReturnValue GNUNET_STRINGS_to_address_ipv4(const char *zt_addr, size_t addrlen, struct sockaddr_in *r_buf)
Tries to convert zt_addr string to an IPv4 address.
Definition: strings.c:1132
size_t GNUNET_STRINGS_base64_encode(const void *in, size_t len, char **output)
Encode into Base64.
Definition: strings.c:1604
enum GNUNET_GenericReturnValue GNUNET_STRINGS_utf8_tolower(const char *input, char *output)
Convert the utf-8 input string to lower case.
Definition: strings.c:461
char * GNUNET_STRINGS_from_utf8(const char *input, size_t len, const char *charset)
Convert the len bytes-long UTF-8 string given in input to the given charset.
Definition: strings.c:428
enum GNUNET_GenericReturnValue GNUNET_STRINGS_check_filename(const char *filename, enum GNUNET_STRINGS_FilenameCheck checks)
Perform checks on filename.
Definition: strings.c:1029
char * GNUNET_STRINGS_get_suffix_from_binary_name(const char *argv0)
Sometimes we use the binary name to determine which specific test to run.
Definition: strings.c:2042
char * GNUNET_STRINGS_utf8_normalize(const char *input)
Normalize the utf-8 input string to NFC.
Definition: strings.c:440
size_t GNUNET_strlcpy(char *dst, const char *src, size_t n)
Like strlcpy but portable.
Definition: strings.c:137
const char * GNUNET_STRINGS_get_short_name(const char *filename)
"man basename" Returns a pointer to a part of filename (allocates nothing)!
Definition: strings.c:669
enum GNUNET_GenericReturnValue GNUNET_STRINGS_fancy_size_to_bytes(const char *fancy_size, unsigned long long *size)
Convert a given fancy human-readable size to bytes.
Definition: strings.c:235
@ GNUNET_STRINGS_CHECK_IS_ABSOLUTE
Check that the path is an absolute path.
@ GNUNET_STRINGS_CHECK_IS_DIRECTORY
Check that it is a directory.
@ GNUNET_STRINGS_CHECK_EXISTS
Check that it exists.
@ GNUNET_STRINGS_CHECK_IS_LINK
Check that it is a link.
enum GNUNET_GenericReturnValue GNUNET_STRINGS_fancy_time_to_timestamp(const char *fancy_time, struct GNUNET_TIME_Timestamp *atime)
Convert a given fancy human-readable time to our internal representation.
Definition: strings.c:335
const char * GNUNET_STRINGS_relative_time_to_string(struct GNUNET_TIME_Relative delta, int do_round)
Give relative time in human-readable fancy format.
Definition: strings.c:585
const char * GNUNET_STRINGS_absolute_time_to_string(struct GNUNET_TIME_Absolute t)
Like asctime, except for GNUnet time.
Definition: strings.c:646
const char * GNUNET_STRINGS_timestamp_to_string(struct GNUNET_TIME_Timestamp t)
Like asctime, except for GNUnet time.
Definition: strings.c:632
enum GNUNET_GenericReturnValue GNUNET_STRINGS_fancy_time_to_absolute(const char *fancy_time, struct GNUNET_TIME_Absolute *atime)
Convert a given fancy human-readable time to our internal representation.
Definition: strings.c:303
static unsigned int size
Size of the "table".
Definition: peer.c:68
static struct GNUNET_TIME_Relative delta
Definition: speedup.c:36
IPV4 network in CIDR notation.
struct in_addr network
IPv4 address.
struct GNUNET_STRINGS_PortPolicy pp
Policy for port access.
struct in_addr netmask
IPv4 netmask.
network in CIDR notation for IPV6.
struct GNUNET_STRINGS_PortPolicy pp
Policy for port access.
struct in6_addr network
IPv6 address.
struct in6_addr netmask
IPv6 netmask.
uint16_t start_port
Starting port range (0 if none given).
int negate_portrange
GNUNET_YES if the port range should be negated ("!" in policy).
uint16_t end_port
End of port range (0 if none given).
Time for absolute times used by GNUnet, in microseconds.
Time for relative time used by GNUnet, in microseconds.
Time for timestamps used by GNUnet, in microseconds rounded to seconds.