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, size_t len,
124  const char *input_charset,
125  const char *output_charset);
126 
127 
138 char *
139 GNUNET_STRINGS_to_utf8 (const char *input,
140  size_t len,
141  const char *charset);
142 
143 
155 char *
156 GNUNET_STRINGS_from_utf8 (const char *input,
157  size_t len,
158  const char *charset);
159 
160 
168 void
169 GNUNET_STRINGS_utf8_tolower (const char *input,
170  char *output);
171 
172 
180 void
181 GNUNET_STRINGS_utf8_toupper (const char *input,
182  char *output);
183 
184 
193 char *
194 GNUNET_STRINGS_filename_expand (const char *fil);
195 
196 
216 size_t
217 GNUNET_STRINGS_buffer_fill (char *buffer,
218  size_t size,
219  unsigned int count,
220  ...);
221 
222 
235 unsigned int
236 GNUNET_STRINGS_buffer_tokenize (const char *buffer,
237  size_t size,
238  unsigned int count, ...);
239 
240 
251 const char *
253 
254 
265 const char *
267  int do_round);
268 
269 
281 const char *
283 
284 
297 char *
299  size_t size,
300  char *out,
301  size_t out_size);
302 
303 
314 char *
316  size_t size);
317 
318 
329 int
331  size_t enclen,
332  void *out,
333  size_t out_size);
334 
335 
345 size_t
346 GNUNET_STRINGS_base64_encode (const void *in,
347  size_t len,
348  char **output);
349 
350 
360 size_t
362  size_t len,
363  void **output);
364 
365 
373 char *
374 GNUNET_STRINGS_pp2s (const struct GNUNET_PeerIdentity *pids,
375  unsigned int num_pids);
376 
377 
394 int
395 GNUNET_STRINGS_parse_uri (const char *path,
396  char **scheme_part,
397  const char **path_part);
398 
399 
414 int
416  int can_be_uri,
417  int *r_is_uri,
418  char **r_uri_scheme);
419 
420 
425 {
430 
435 
440 
445 };
446 
447 
457 int
459  enum GNUNET_STRINGS_FilenameCheck checks);
460 
461 
473 int
474 GNUNET_STRINGS_to_address_ipv6 (const char *zt_addr,
475  uint16_t addrlen,
476  struct sockaddr_in6 *r_buf);
477 
478 
489 int
490 GNUNET_STRINGS_to_address_ipv4 (const char *zt_addr,
491  uint16_t addrlen,
492  struct sockaddr_in *r_buf);
493 
494 
504 size_t
505 GNUNET_STRINGS_parse_socket_addr (const char *addr,
506  uint8_t *af,
507  struct sockaddr **sa);
508 
509 
521 int
522 GNUNET_STRINGS_to_address_ip (const char *addr,
523  uint16_t addrlen,
524  struct sockaddr_storage *r_buf);
525 
526 
539 int
541  char *const *argv,
542  int *u8argc,
543  char *const **u8argv);
544 
545 
561 size_t
562 GNUNET_strlcpy (char *dst, const char *src, size_t n);
563 
564 
565 /* ***************** IPv4/IPv6 parsing ****************** */
566 
568 {
572  uint16_t start_port;
573 
577  uint16_t end_port;
578 
584 };
585 
586 
591 {
595  struct in_addr network;
596 
600  struct in_addr netmask;
601 
606 };
607 
608 
613 {
617  struct in6_addr network;
618 
622  struct in6_addr netmask;
623 
628 };
629 
630 
643 GNUNET_STRINGS_parse_ipv4_policy (const char *routeListX);
644 
645 
658 GNUNET_STRINGS_parse_ipv6_policy (const char *routeListX);
659 
660 
661 #if 0 /* keep Emacsens' auto-indent happy */
662 {
663 #endif
664 #ifdef __cplusplus
665 }
666 #endif
667 
668 /* ifndef GNUNET_UTIL_STRING_H */
669 #endif
670  /* end of group */
672 
673 /* 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:1518
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:447
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:1032
char * GNUNET_STRINGS_byte_size_fancy(unsigned long long size)
Convert a given filesize into a fancy human-readable format.
Definition: strings.c:175
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:1710
int GNUNET_STRINGS_get_utf8_args(int argc, char *const *argv, int *u8argc, char *const **u8argv)
Returns utf-8 encoded arguments.
Definition: strings.c:1438
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:1108
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:351
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:402
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:319
static struct GNUNET_SCHEDULER_Task * t
Main task.
Check that it exists.
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:1277
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:135
void GNUNET_STRINGS_utf8_toupper(const char *input, char *output)
Convert the utf-8 input string to upper case.
Definition: strings.c:578
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:100
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:687
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:539
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:65
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:1350
size_t GNUNET_STRINGS_base64_decode(const char *data, size_t len, void **output)
Decode from Base64.
Definition: strings.c:1920
size_t GNUNET_STRINGS_base64_encode(const void *in, size_t len, char **output)
Encode into Base64.
Definition: strings.c:1855
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:775
static unsigned int size
Size of the "table".
Definition: peer.c:67
int GNUNET_STRINGS_check_filename(const char *filename, enum GNUNET_STRINGS_FilenameCheck checks)
Perform checks on filename.
Definition: strings.c:1158
char * GNUNET_STRINGS_filename_expand(const char *fil)
Complete filename (a la shell) from abbrevition.
Definition: strings.c:603
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:1203
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:521
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:920
const char * GNUNET_STRINGS_absolute_time_to_string(struct GNUNET_TIME_Absolute t)
Like asctime, except for GNUnet time.
Definition: strings.c:742
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:219
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:1326
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:952
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:856
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:553
uint16_t len
length of data (which is always a uint32_t, but presumably this can be used to specify that fewer byt...