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 
80 GNUNET_STRINGS_fancy_time_to_relative (const char *fancy_time,
81  struct GNUNET_TIME_Relative *rtime);
82 
83 
95 GNUNET_STRINGS_fancy_time_to_absolute (const char *fancy_time,
96  struct GNUNET_TIME_Absolute *atime);
97 
98 
110 GNUNET_STRINGS_fancy_time_to_timestamp (const char *fancy_time,
111  struct GNUNET_TIME_Timestamp *atime);
112 
113 
120 char *
121 GNUNET_STRINGS_byte_size_fancy (unsigned long long size);
122 
123 
137 char *
138 GNUNET_STRINGS_conv (const char *input,
139  size_t len,
140  const char *input_charset,
141  const char *output_charset);
142 
143 
154 char *
155 GNUNET_STRINGS_to_utf8 (const char *input,
156  size_t len,
157  const char *charset);
158 
159 
171 char *
172 GNUNET_STRINGS_from_utf8 (const char *input,
173  size_t len,
174  const char *charset);
175 
176 
184 void
185 GNUNET_STRINGS_utf8_tolower (const char *input,
186  char *output);
187 
188 
196 void
197 GNUNET_STRINGS_utf8_toupper (const char *input,
198  char *output);
199 
200 
209 char *
210 GNUNET_STRINGS_filename_expand (const char *fil);
211 
212 
232 size_t
233 GNUNET_STRINGS_buffer_fill (char *buffer,
234  size_t size,
235  unsigned int count,
236  ...);
237 
238 
251 unsigned int
252 GNUNET_STRINGS_buffer_tokenize (const char *buffer,
253  size_t size,
254  unsigned int count, ...);
255 
256 
267 const char *
269 
270 
281 const char *
283  int do_round);
284 
285 
297 const char *
299 
300 
313 char *
315  size_t size,
316  char *out,
317  size_t out_size);
318 
319 
330 char *
332  size_t size);
333 
334 
347  size_t enclen,
348  void *out,
349  size_t out_size);
350 
351 
365  size_t enclen,
366  void **out,
367  size_t *out_size);
368 
369 
379 size_t
380 GNUNET_STRINGS_base64_encode (const void *in,
381  size_t len,
382  char **output);
383 
384 
394 size_t
395 GNUNET_STRINGS_urlencode (const char *data,
396  size_t len,
397  char **out);
398 
399 
409 size_t
410 GNUNET_STRINGS_base64url_encode (const void *in,
411  size_t len,
412  char **output);
413 
414 
424 size_t
426  size_t len,
427  void **output);
428 
429 
439 size_t
441  size_t len,
442  void **out);
443 
453 size_t
454 GNUNET_STRINGS_urldecode (const char *data,
455  size_t len,
456  char **out);
457 
458 
476 GNUNET_STRINGS_parse_uri (const char *path,
477  char **scheme_part,
478  const char **path_part);
479 
480 
497  int can_be_uri,
498  int *r_is_uri,
499  char **r_uri_scheme);
500 
501 
506 {
511 
516 
521 
526 };
527 
528 
540  enum GNUNET_STRINGS_FilenameCheck checks);
541 
542 
555 GNUNET_STRINGS_to_address_ipv6 (const char *zt_addr,
556  uint16_t addrlen,
557  struct sockaddr_in6 *r_buf);
558 
559 
571 GNUNET_STRINGS_to_address_ipv4 (const char *zt_addr,
572  uint16_t addrlen,
573  struct sockaddr_in *r_buf);
574 
575 
585 size_t
586 GNUNET_STRINGS_parse_socket_addr (const char *addr,
587  uint8_t *af,
588  struct sockaddr **sa);
589 
590 
603 GNUNET_STRINGS_to_address_ip (const char *addr,
604  uint16_t addrlen,
605  struct sockaddr_storage *r_buf);
606 
607 
622  char *const *argv,
623  int *u8argc,
624  char *const **u8argv);
625 
626 
642 size_t
643 GNUNET_strlcpy (char *dst,
644  const char *src,
645  size_t n);
646 
647 
648 /* ***************** IPv4/IPv6 parsing ****************** */
649 
651 {
655  uint16_t start_port;
656 
660  uint16_t end_port;
661 
667 };
668 
669 
674 {
678  struct in_addr network;
679 
683  struct in_addr netmask;
684 
689 };
690 
691 
696 {
700  struct in6_addr network;
701 
705  struct in6_addr netmask;
706 
711 };
712 
713 
726 GNUNET_STRINGS_parse_ipv4_policy (const char *routeListX);
727 
728 
741 GNUNET_STRINGS_parse_ipv6_policy (const char *routeListX);
742 
743 
744 #if 0 /* keep Emacsens' auto-indent happy */
745 {
746 #endif
747 #ifdef __cplusplus
748 }
749 #endif
750 
751 /* ifndef GNUNET_UTIL_STRING_H */
752 #endif
753  /* end of group */
755 
756 /* end of gnunet_util_string.h */
static char * filename
static OpusEncoder * enc
OPUS encoder.
uint32_t data
The data value.
uint16_t len
length of data (which is always a uint32_t, but presumably this can be used to specify that fewer byt...
static void do_round(void *cls)
Send out PUSHes and PULLs, possibly update #view, samplers.
static char buf[2048]
static struct GNUNET_SCHEDULER_Task * t
Main task.
GNUNET_GenericReturnValue
Named constants for return values.
Definition: gnunet_common.h:92
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:828
size_t GNUNET_STRINGS_base64url_decode(const char *data, size_t len, void **out)
Decode from Base64url.
Definition: strings.c:1734
struct GNUNET_STRINGS_IPv6NetworkPolicy * GNUNET_STRINGS_parse_ipv6_policy(const char *routeListX)
Parse an IPv6 network policy.
Definition: strings.c:1445
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:1123
char * GNUNET_STRINGS_filename_expand(const char *fil)
Complete filename (a la shell) from abbrevition.
Definition: strings.c:468
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:682
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:344
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:1108
GNUNET_STRINGS_FilenameCheck
Flags for what we should check a file for.
enum GNUNET_GenericReturnValue 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:1070
size_t GNUNET_STRINGS_urldecode(const char *data, size_t len, char **out)
url/percent encode (RFC3986).
Definition: strings.c:1780
char * GNUNET_STRINGS_data_to_string_alloc(const void *buf, size_t size)
Return the base32crockford encoding of the given buffer.
Definition: strings.c:737
size_t GNUNET_STRINGS_urlencode(const char *data, size_t len, char **out)
url/percent encode (RFC3986).
Definition: strings.c:1817
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:762
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:73
char * GNUNET_STRINGS_byte_size_fancy(unsigned long long size)
Convert a given filesize into a fancy human-readable format.
Definition: strings.c:107
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:932
size_t GNUNET_STRINGS_base64url_encode(const void *in, size_t len, char **output)
Encode into Base64url.
Definition: strings.c:1630
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:870
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:45
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:261
void GNUNET_STRINGS_utf8_tolower(const char *input, char *output)
Convert the utf-8 input string to lower case.
Definition: strings.c:430
size_t GNUNET_STRINGS_base64_decode(const char *data, size_t len, void **output)
Decode from Base64.
Definition: strings.c:1669
enum GNUNET_GenericReturnValue GNUNET_STRINGS_get_utf8_args(int argc, char *const *argv, int *u8argc, char *const **u8argv)
Returns utf-8 encoded arguments.
Definition: strings.c:1196
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:237
enum GNUNET_GenericReturnValue 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:1007
size_t GNUNET_STRINGS_base64_encode(const void *in, size_t len, char **output)
Encode into Base64.
Definition: strings.c:1581
enum GNUNET_GenericReturnValue GNUNET_STRINGS_check_filename(const char *filename, enum GNUNET_STRINGS_FilenameCheck checks)
Perform checks on filename.
Definition: strings.c:974
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:613
struct GNUNET_STRINGS_IPv4NetworkPolicy * GNUNET_STRINGS_parse_ipv4_policy(const char *routeListX)
Parse an IPv4 network policy.
Definition: strings.c:1264
size_t GNUNET_strlcpy(char *dst, const char *src, size_t n)
Like strlcpy but portable.
Definition: strings.c:139
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:406
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:418
void GNUNET_STRINGS_utf8_toupper(const char *input, char *output)
Convert the utf-8 input string to upper case.
Definition: strings.c:449
@ 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_absolute_time_to_string(struct GNUNET_TIME_Absolute t)
Like asctime, except for GNUnet time.
Definition: strings.c:590
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:543
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:67
static struct GNUNET_TIME_Relative delta
Definition: speedup.c:35
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.
Rounded time for timestamps used by GNUnet, in seconds.