GNUnet  0.11.x
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 
36 #ifndef GNUNET_STRINGS_LIB_H
37 #define GNUNET_STRINGS_LIB_H
38 
39 /* we need size_t, and since it can be both unsigned int
40  or unsigned long long, this IS platform dependent;
41  but "stdlib.h" should be portable 'enough' to be
42  unconditionally available... */
43 #include <stdlib.h>
44 #include <sys/socket.h>
45 #include <netinet/in.h>
46 #include <netinet/ip.h>
47 
48 #ifdef __cplusplus
49 extern "C"
50 {
51 #if 0 /* keep Emacsens' auto-indent happy */
52 }
53 #endif
54 #endif
55 
56 #include "gnunet_time_lib.h"
57 
58 
66 int
67 GNUNET_STRINGS_fancy_size_to_bytes (const char *fancy_size,
68  unsigned long long *size);
69 
70 
79 int
80 GNUNET_STRINGS_fancy_time_to_relative (const char *fancy_time,
81  struct GNUNET_TIME_Relative *rtime);
82 
83 
94 int
95 GNUNET_STRINGS_fancy_time_to_absolute (const char *fancy_time,
96  struct GNUNET_TIME_Absolute *atime);
97 
98 
105 char *
106 GNUNET_STRINGS_byte_size_fancy (unsigned long long size);
107 
108 
122 char *
123 GNUNET_STRINGS_conv (const char *input,
124  size_t len,
125  const char *input_charset,
126  const char *output_charset);
127 
128 
139 char *
140 GNUNET_STRINGS_to_utf8 (const char *input,
141  size_t len,
142  const char *charset);
143 
144 
156 char *
157 GNUNET_STRINGS_from_utf8 (const char *input,
158  size_t len,
159  const char *charset);
160 
161 
169 void
170 GNUNET_STRINGS_utf8_tolower (const char *input,
171  char *output);
172 
173 
181 void
182 GNUNET_STRINGS_utf8_toupper (const char *input,
183  char *output);
184 
185 
194 char *
195 GNUNET_STRINGS_filename_expand (const char *fil);
196 
197 
217 size_t
218 GNUNET_STRINGS_buffer_fill (char *buffer,
219  size_t size,
220  unsigned int count,
221  ...);
222 
223 
236 unsigned int
237 GNUNET_STRINGS_buffer_tokenize (const char *buffer,
238  size_t size,
239  unsigned int count, ...);
240 
241 
252 const char *
254 
255 
266 const char *
268  int do_round);
269 
270 
282 const char *
284 
285 
298 char *
300  size_t size,
301  char *out,
302  size_t out_size);
303 
304 
315 char *
317  size_t size);
318 
319 
330 int
332  size_t enclen,
333  void *out,
334  size_t out_size);
335 
336 
346 size_t
347 GNUNET_STRINGS_base64_encode (const void *in,
348  size_t len,
349  char **output);
350 
351 
361 size_t
362 GNUNET_STRINGS_urlencode (const char *data, size_t len, char **out);
363 
373 size_t
374 GNUNET_STRINGS_base64url_encode (const void *in, size_t len, char **output);
375 
376 
386 size_t
388  size_t len,
389  void **output);
390 
391 
401 size_t
402 GNUNET_STRINGS_base64url_decode (const char *data, size_t len, void **out);
403 
413 size_t
414 GNUNET_STRINGS_urldecode (const char *data, size_t len, char **out);
415 
416 
424 char *
425 GNUNET_STRINGS_pp2s (const struct GNUNET_PeerIdentity *pids,
426  unsigned int num_pids);
427 
428 
445 int
446 GNUNET_STRINGS_parse_uri (const char *path,
447  char **scheme_part,
448  const char **path_part);
449 
450 
465 int
467  int can_be_uri,
468  int *r_is_uri,
469  char **r_uri_scheme);
470 
471 
476 {
481 
486 
491 
496 };
497 
498 
508 int
510  enum GNUNET_STRINGS_FilenameCheck checks);
511 
512 
524 int
525 GNUNET_STRINGS_to_address_ipv6 (const char *zt_addr,
526  uint16_t addrlen,
527  struct sockaddr_in6 *r_buf);
528 
529 
540 int
541 GNUNET_STRINGS_to_address_ipv4 (const char *zt_addr,
542  uint16_t addrlen,
543  struct sockaddr_in *r_buf);
544 
545 
555 size_t
556 GNUNET_STRINGS_parse_socket_addr (const char *addr,
557  uint8_t *af,
558  struct sockaddr **sa);
559 
560 
572 int
573 GNUNET_STRINGS_to_address_ip (const char *addr,
574  uint16_t addrlen,
575  struct sockaddr_storage *r_buf);
576 
577 
590 int
592  char *const *argv,
593  int *u8argc,
594  char *const **u8argv);
595 
596 
612 size_t
613 GNUNET_strlcpy (char *dst, const char *src, size_t n);
614 
615 
616 /* ***************** IPv4/IPv6 parsing ****************** */
617 
619 {
623  uint16_t start_port;
624 
628  uint16_t end_port;
629 
635 };
636 
637 
642 {
646  struct in_addr network;
647 
651  struct in_addr netmask;
652 
657 };
658 
659 
664 {
668  struct in6_addr network;
669 
673  struct in6_addr netmask;
674 
679 };
680 
681 
694 GNUNET_STRINGS_parse_ipv4_policy (const char *routeListX);
695 
696 
709 GNUNET_STRINGS_parse_ipv6_policy (const char *routeListX);
710 
711 
712 #if 0 /* keep Emacsens' auto-indent happy */
713 {
714 #endif
715 #ifdef __cplusplus
716 }
717 #endif
718 
719 /* ifndef GNUNET_UTIL_STRING_H */
720 #endif
721  /* end of group */
723 
724 /* end of gnunet_util_string.h */
static void do_round(void *cls)
Send out PUSHes and PULLs, possibly update #view, samplers.
struct GNUNET_STRINGS_IPv4NetworkPolicy * GNUNET_STRINGS_parse_ipv4_policy(const char *routeListX)
Parse an IPv4 network policy.
Definition: strings.c:1538
size_t GNUNET_STRINGS_urldecode(const char *data, size_t len, char **out)
url/percent encode (RFC3986).
Definition: strings.c:2102
static struct GNUNET_TIME_Relative delta
Definition: speedup.c:35
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:452
int 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:1053
char * GNUNET_STRINGS_byte_size_fancy(unsigned long long size)
Convert a given filesize into a fancy human-readable format.
Definition: strings.c:177
uint16_t start_port
Starting port range (0 if none given).
struct GNUNET_STRINGS_IPv6NetworkPolicy * GNUNET_STRINGS_parse_ipv6_policy(const char *routeListX)
Parse an IPv6 network policy.
Definition: strings.c:1730
int GNUNET_STRINGS_get_utf8_args(int argc, char *const *argv, int *u8argc, char *const **u8argv)
Returns utf-8 encoded arguments.
Definition: strings.c:1458
int 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&#39;s an URI.
Definition: strings.c:1129
int 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:356
Check that the path is an absolute path.
network in CIDR notation for IPV6.
int negate_portrange
GNUNET_YES if the port range should be negated ("!" in policy).
int 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:407
int 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:324
static struct GNUNET_SCHEDULER_Task * t
Main task.
Check that it exists.
size_t GNUNET_STRINGS_base64url_encode(const void *in, size_t len, char **output)
Encode into Base64url.
Definition: strings.c:1931
int GNUNET_STRINGS_to_address_ipv4(const char *zt_addr, uint16_t addrlen, struct sockaddr_in *r_buf)
Tries to convert zt_addr string to an IPv4 address.
Definition: strings.c:1298
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:137
void GNUNET_STRINGS_utf8_toupper(const char *input, char *output)
Convert the utf-8 input string to upper case.
Definition: strings.c:593
char * GNUNET_STRINGS_pp2s(const struct GNUNET_PeerIdentity *pids, unsigned int num_pids)
Convert a peer path to a human-readable string.
Definition: strings.c:101
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:702
IPV4 network in CIDR notation.
static char buf[2048]
static char * filename
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:549
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:66
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:1371
size_t GNUNET_STRINGS_base64_decode(const char *data, size_t len, void **output)
Decode from Base64.
Definition: strings.c:1977
size_t GNUNET_STRINGS_base64_encode(const void *in, size_t len, char **output)
Encode into Base64.
Definition: strings.c:1875
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:790
static unsigned int size
Size of the "table".
Definition: peer.c:67
size_t GNUNET_STRINGS_urlencode(const char *data, size_t len, char **out)
url/percent encode (RFC3986).
Definition: strings.c:2146
int GNUNET_STRINGS_check_filename(const char *filename, enum GNUNET_STRINGS_FilenameCheck checks)
Perform checks on filename.
Definition: strings.c:1179
char * GNUNET_STRINGS_filename_expand(const char *fil)
Complete filename (a la shell) from abbrevition.
Definition: strings.c:618
The identity of the host (wraps the signing key of the peer).
uint16_t end_port
End of port range (0 if none given).
static OpusEncoder * enc
OPUS encoder.
int GNUNET_STRINGS_to_address_ipv6(const char *zt_addr, uint16_t addrlen, struct sockaddr_in6 *r_buf)
Tries to convert zt_addr string to an IPv6 address.
Definition: strings.c:1224
GNUNET_STRINGS_FilenameCheck
Flags for what we should check a file for.
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:526
Time for absolute times used by GNUnet, in microseconds.
Check that it is a link.
char * GNUNET_STRINGS_data_to_string_alloc(const void *buf, size_t size)
Return the base32crockford encoding of the given buffer.
Definition: strings.c:936
const char * GNUNET_STRINGS_absolute_time_to_string(struct GNUNET_TIME_Absolute t)
Like asctime, except for GNUnet time.
Definition: strings.c:757
uint32_t data
The data value.
size_t GNUNET_strlcpy(char *dst, const char *src, size_t n)
Like strlcpy but portable.
Definition: strings.c:221
int 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:1347
size_t GNUNET_STRINGS_base64url_decode(const char *data, size_t len, void **out)
Decode from Base64url.
Definition: strings.c:2049
int 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:971
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:871
Check that it is a directory.
Time for relative time used by GNUnet, in microseconds.
void GNUNET_STRINGS_utf8_tolower(const char *input, char *output)
Convert the utf-8 input string to lower case.
Definition: strings.c:568
uint16_t len
length of data (which is always a uint32_t, but presumably this can be used to specify that fewer byt...