GNUnet 0.22.2
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
305const char *
307
308
319const char *
321 int do_round);
322
323
335const char *
337
338
351char *
353 size_t size,
354 char *out,
355 size_t out_size);
356
357
368char *
370 size_t size);
371
372
385 size_t enclen,
386 void *out,
387 size_t out_size);
388
389
403 size_t enclen,
404 void **out,
405 size_t *out_size);
406
407
417size_t
418GNUNET_STRINGS_base64_encode (const void *in,
419 size_t len,
420 char **output);
421
422
436size_t
437GNUNET_STRINGS_urlencode (size_t len,
438 const char data[static len],
439 char **out);
440
441
451size_t
452GNUNET_STRINGS_base64url_encode (const void *in,
453 size_t len,
454 char **output);
455
456
466size_t
468 size_t len,
469 void **output);
470
471
481size_t
483 size_t len,
484 void **out);
485
495size_t
496GNUNET_STRINGS_urldecode (const char *data,
497 size_t len,
498 char **out);
499
500
518GNUNET_STRINGS_parse_uri (const char *path,
519 char **scheme_part,
520 const char **path_part);
521
522
539 int can_be_uri,
540 int *r_is_uri,
541 char **r_uri_scheme);
542
543
548{
553
558
563
569
570
582 enum GNUNET_STRINGS_FilenameCheck checks);
583
584
597GNUNET_STRINGS_to_address_ipv6 (const char *zt_addr,
598 size_t addrlen,
599 struct sockaddr_in6 *r_buf);
600
601
613GNUNET_STRINGS_to_address_ipv4 (const char *zt_addr,
614 size_t addrlen,
615 struct sockaddr_in *r_buf);
616
617
627size_t
628GNUNET_STRINGS_parse_socket_addr (const char *addr,
629 uint8_t *af,
630 struct sockaddr **sa);
631
632
645GNUNET_STRINGS_to_address_ip (const char *addr,
646 uint16_t addrlen,
647 struct sockaddr_storage *r_buf);
648
649
665size_t
666GNUNET_strlcpy (char *dst,
667 const char *src,
668 size_t n);
669
670
684char *
686
687
688/* ***************** IPv4/IPv6 parsing ****************** */
689
691{
695 uint16_t start_port;
696
700 uint16_t end_port;
701
707};
708
709
714{
718 struct in_addr network;
719
723 struct in_addr netmask;
724
729};
730
731
736{
740 struct in6_addr network;
741
745 struct in6_addr netmask;
746
751};
752
753
766GNUNET_STRINGS_parse_ipv4_policy (const char *routeListX);
767
768
781GNUNET_STRINGS_parse_ipv6_policy (const char *routeListX);
782
783
784#if 0 /* keep Emacsens' auto-indent happy */
785{
786#endif
787#ifdef __cplusplus
788}
789#endif
790
791/* ifndef GNUNET_UTIL_STRING_H */
792#endif
793 /* end of group */
795 /* end of group addition */
797
798/* 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:878
size_t GNUNET_STRINGS_urlencode(size_t len, const char data[static len], char **out)
url/percent encode (RFC3986).
Definition: strings.c:1863
size_t GNUNET_STRINGS_base64url_decode(const char *data, size_t len, void **out)
Decode from Base64url.
Definition: strings.c:1759
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:1179
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:732
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:414
char * GNUNET_STRINGS_data_to_string_alloc(const void *buf, size_t size)
Return the base32crockford encoding of the given buffer.
Definition: strings.c:787
struct GNUNET_STRINGS_IPv6NetworkPolicy * GNUNET_STRINGS_parse_ipv6_policy(const char *routeListX)
Parse an IPv6 network policy.
Definition: strings.c:1450
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:352
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:1164
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:504
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:1056
enum GNUNET_GenericReturnValue GNUNET_STRINGS_utf8_toupper(const char *input, char *output)
Convert the utf-8 input string to upper case.
Definition: strings.c:481
size_t GNUNET_STRINGS_urldecode(const char *data, size_t len, char **out)
url/percent encode (RFC3986).
Definition: strings.c:1808
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:812
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:981
size_t GNUNET_STRINGS_base64url_encode(const void *in, size_t len, char **output)
Encode into Base64url.
Definition: strings.c:1648
struct GNUNET_STRINGS_IPv4NetworkPolicy * GNUNET_STRINGS_parse_ipv4_policy(const char *routeListX)
Parse an IPv4 network policy.
Definition: strings.c:1275
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:920
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:1701
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:1126
size_t GNUNET_STRINGS_base64_encode(const void *in, size_t len, char **output)
Encode into Base64.
Definition: strings.c:1599
enum GNUNET_GenericReturnValue GNUNET_STRINGS_utf8_tolower(const char *input, char *output)
Convert the utf-8 input string to lower case.
Definition: strings.c:459
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:426
enum GNUNET_GenericReturnValue GNUNET_STRINGS_check_filename(const char *filename, enum GNUNET_STRINGS_FilenameCheck checks)
Perform checks on filename.
Definition: strings.c:1023
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:2037
char * GNUNET_STRINGS_utf8_normalize(const char *input)
Normalize the utf-8 input string to NFC.
Definition: strings.c:438
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:663
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:333
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:579
const char * GNUNET_STRINGS_absolute_time_to_string(struct GNUNET_TIME_Absolute t)
Like asctime, except for GNUnet time.
Definition: strings.c:640
const char * GNUNET_STRINGS_timestamp_to_string(struct GNUNET_TIME_Timestamp t)
Like asctime, except for GNUnet time.
Definition: strings.c:626
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:301
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.