use -Wl on -no-undefined as it is a linker option:
[oweals/gnunet.git] / src / include / gnunet_strings_lib.h
index e0a299ac330b7973c4d9acf09a0bd8ea1a30c193..eb16a339d7fa53a754e34456d504b7f9a0d233bd 100644 (file)
@@ -153,27 +153,27 @@ GNUNET_STRINGS_from_utf8 (const char *input,
 
 
 /**
- * Convert the utf-8 input string to lowercase
- * Output needs to be allocated appropriately
+ * Convert the utf-8 input string to lower case.
+ * Output needs to be allocated appropriately.
  *
  * @param input input string
  * @param output output buffer
  */
 void
-GNUNET_STRINGS_utf8_tolower (const charinput,
-                            char** output);
+GNUNET_STRINGS_utf8_tolower (const char *input,
+                            char *output);
 
 
 /**
- * Convert the utf-8 input string to lowercase
- * Output needs to be allocated appropriately
+ * Convert the utf-8 input string to upper case.
+ * Output needs to be allocated appropriately.
  *
  * @param input input string
  * @param output output buffer
  */
 void
-GNUNET_STRINGS_utf8_toupper (const charinput,
-                            char** output);
+GNUNET_STRINGS_utf8_toupper (const char *input,
+                            char *output);
 
 
 /**
@@ -316,6 +316,32 @@ GNUNET_STRINGS_string_to_data (const char *enc,
                               size_t out_size);
 
 
+/**
+ * Encode into Base64.
+ *
+ * @param data the data to encode
+ * @param len the length of the input
+ * @param output where to write the output (*output should be NULL,
+ *   is allocated)
+ * @return the size of the output
+ */
+size_t
+GNUNET_STRINGS_base64_encode (const char *data, size_t len, char **output);
+
+
+/**
+ * Decode from Base64.
+ *
+ * @param data the data to encode
+ * @param len the length of the input
+ * @param output where to write the output (*output should be NULL,
+ *   is allocated)
+ * @return the size of the output
+ */
+size_t
+GNUNET_STRINGS_base64_decode (const char *data, size_t len, char **output);
+
+
 /**
  * Parse a path that might be an URI.
  *
@@ -392,8 +418,8 @@ enum GNUNET_STRINGS_FilenameCheck
  *
  * @param filename file to check
  * @param checks checks to perform
- * @return GNUNET_YES if all checks pass, GNUNET_NO if at least one of them
- *         fails, GNUNET_SYSERR when a check can't be performed
+ * @return #GNUNET_YES if all checks pass, #GNUNET_NO if at least one of them
+ *         fails, #GNUNET_SYSERR when a check can't be performed
  */
 int
 GNUNET_STRINGS_check_filename (const char *filename,
@@ -471,6 +497,28 @@ GNUNET_STRINGS_get_utf8_args (int argc,
 
 /* ***************** IPv4/IPv6 parsing ****************** */
 
+struct GNUNET_STRINGS_PortPolicy
+{
+
+  /**
+   * Starting port range (0 if none given).
+   */
+  uint16_t start_port;
+
+  /**
+   * End of port range (0 if none given).
+   */
+  uint16_t end_port;
+
+  /**
+   * #GNUNET_YES if the port range should be negated
+   * ("!" in policy).
+   */
+  int negate_portrange;
+
+};
+
+
 /**
  * @brief IPV4 network in CIDR notation.
  */
@@ -485,10 +533,16 @@ struct GNUNET_STRINGS_IPv4NetworkPolicy
    * IPv4 netmask.
    */
   struct in_addr netmask;
+
+  /**
+   * Policy for port access.
+   */
+  struct GNUNET_STRINGS_PortPolicy pp;
+
 };
 
-/**
 
+/**
  * @brief network in CIDR notation for IPV6.
  */
 struct GNUNET_STRINGS_IPv6NetworkPolicy
@@ -502,30 +556,37 @@ struct GNUNET_STRINGS_IPv6NetworkPolicy
    * IPv6 netmask.
    */
   struct in6_addr netmask;
+
+  /**
+   * Policy for port access.
+   */
+  struct GNUNET_STRINGS_PortPolicy pp;
+
 };
 
 
 /**
  * Parse an IPv4 network policy. The argument specifies a list of
- * subnets. The format is <tt>[network/netmask;]*</tt> (no whitespace,
- * must be terminated with a semicolon). The network must be given in
- * dotted-decimal notation. The netmask can be given in CIDR notation
- * (/16) or in dotted-decimal (/255.255.0.0).
+ * subnets. The format is <tt>(network[/netmask][:[!]SPORT-DPORT];)*</tt>
+ * (no whitespace, must be terminated with a semicolon). The network
+ * must be given in dotted-decimal notation. The netmask can be given
+ * in CIDR notation (/16) or in dotted-decimal (/255.255.0.0).
  *
- * @param routeList a string specifying the IPv4 subnets
+ * @param routeListX a string specifying the IPv4 subnets
  * @return the converted list, terminated with all zeros;
  *         NULL if the synatx is flawed
  */
 struct GNUNET_STRINGS_IPv4NetworkPolicy *
-GNUNET_STRINGS_parse_ipv4_policy (const char *routeList);
+GNUNET_STRINGS_parse_ipv4_policy (const char *routeListX);
 
 
 /**
  * Parse an IPv6 network policy. The argument specifies a list of
- * subnets. The format is <tt>[network/netmask;]*</tt> (no whitespace,
- * must be terminated with a semicolon). The network must be given in
- * colon-hex notation.  The netmask must be given in CIDR notation
- * (/16) or can be omitted to specify a single host.
+ * subnets. The format is <tt>(network[/netmask[:[!]SPORT[-DPORT]]];)*</tt>
+ * (no whitespace, must be terminated with a semicolon). The network
+ * must be given in colon-hex notation.  The netmask must be given in
+ * CIDR notation (/16) or can be omitted to specify a single host.
+ * Note that the netmask is mandatory if ports are specified.
  *
  * @param routeListX a string specifying the policy
  * @return the converted list, 0-terminated, NULL if the synatx is flawed