X-Git-Url: https://git.strongswan.org/?p=strongswan.git;a=blobdiff_plain;f=src%2Flibstrongswan%2Flibrary.h;h=1439ab8504b656aec1c7556650505d2c021a4b26;hp=00472bde985cc1a1c8b86e53a67468dc3f86bd97;hb=7cbe4a33e9d8604999cd2ce8f45e633af703c014;hpb=b1e69188ce9d0e63f106eb6a1c5c2c2aa1f85f9c diff --git a/src/libstrongswan/library.h b/src/libstrongswan/library.h index 00472bd..1439ab8 100644 --- a/src/libstrongswan/library.h +++ b/src/libstrongswan/library.h @@ -1,14 +1,14 @@ /** * @file library.h - * - * @brief Global library header. - * + * + * @brief Helper functions and definitions. + * */ /* * Copyright (C) 2006 Martin Willi * Hochschule fuer Technik Rapperswil - * + * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your @@ -26,13 +26,14 @@ /** * @defgroup libstrongswan libstrongswan * - * libstrongswan: library with various crypto related things. + * libstrongswan: library with various cryptographic, X.509 trust chain and + * identity management functions. */ /** * @defgroup asn1 asn1 * - * ASN1 definitions, parser and generator functions. + * ASN.1 definitions, parser and generator functions. * * @ingroup libstrongswan */ @@ -40,7 +41,7 @@ /** * @defgroup crypto crypto * - * Crypto algorithms of different kind. + * Various cryptographic algorithms. * * @ingroup libstrongswan */ @@ -84,17 +85,227 @@ * * Symmetric signing algorithms, * used to ensure message integrity. - * + * * @ingroup crypto */ - + /** * @defgroup utils utils - * + * * Generic helper classes. - * + * * @ingroup libstrongswan */ +#include +#include +#include +#include +#include + +#include + +/** + * Number of bits in a byte + */ +#define BITS_PER_BYTE 8 + +/** + * Default length for various auxiliary text buffers + */ +#define BUF_LEN 512 + +/** + * Macro compares two strings for equality + */ +#define streq(x,y) (strcmp(x, y) == 0) + +/** + * Macro compares two binary blobs for equality + */ +#define memeq(x,y,len) (memcmp(x, y, len) == 0) + +/** + * Macro gives back larger of two values. + */ +#define max(x,y) ((x) > (y) ? (x):(y)) + +/** + * Macro gives back smaller of two values. + */ +#define min(x,y) ((x) < (y) ? (x):(y)) + +/** + * Call destructor of a object if object != NULL + */ +#define DESTROY_IF(obj) if (obj) obj->destroy(obj) + +/** + * Debug macro to follow control flow + */ +#define POS printf("%s, line %d\n", __FILE__, __LINE__) + +/** + * Macro to allocate a sized type. + */ +#define malloc_thing(thing) ((thing*)malloc(sizeof(thing))) + +/** + * Assign a function as a class method + */ +#define ASSIGN(method, function) (method = (typeof(method))function) + +/** + * time_t not defined + */ +#define UNDEFINED_TIME 0 + +/** + * General purpose boolean type. + */ +typedef int bool; +#define FALSE 0 +#define TRUE 1 + +typedef enum status_t status_t; + +/** + * Return values of function calls. + */ +enum status_t { + /** + * Call succeeded. + */ + SUCCESS, + + /** + * Call failed. + */ + FAILED, + + /** + * Out of resources. + */ + OUT_OF_RES, + + /** + * The suggested operation is already done + */ + ALREADY_DONE, + + /** + * Not supported. + */ + NOT_SUPPORTED, + + /** + * One of the arguments is invalid. + */ + INVALID_ARG, + + /** + * Something could not be found. + */ + NOT_FOUND, + + /** + * Error while parsing. + */ + PARSE_ERROR, + + /** + * Error while verifying. + */ + VERIFY_ERROR, + + /** + * Object in invalid state. + */ + INVALID_STATE, + + /** + * Destroy object which called method belongs to. + */ + DESTROY_ME, + + /** + * Another call to the method is required. + */ + NEED_MORE, +}; + +/** + * used by strict_crl_policy + */ +typedef enum { + STRICT_NO, + STRICT_YES, + STRICT_IFURI +} strict_t; + +/** + * enum_names for type status_t. + */ +extern enum_name_t *status_names; + +/** + * deprecated pluto style return value: + * error message, NULL for success + */ +typedef const char *err_t; + +/** + * Handle struct timeval like an own type. + */ +typedef struct timeval timeval_t; + +/** + * Handle struct timespec like an own type. + */ +typedef struct timespec timespec_t; + +/** + * Handle struct chunk_t like an own type. + */ +typedef struct sockaddr sockaddr_t; + +/** + * Clone a data to a newly allocated buffer + */ +void *clalloc(void *pointer, size_t size); + +/** + * Same as memcpy, but XORs src into dst instead of copy + */ +void memxor(u_int8_t dest[], u_int8_t src[], size_t n); + +/** + * Special type to count references + */ +typedef volatile u_int refcount_t; + +/** + * @brief Get a new reference. + * + * Increments the reference counter atomic. + * + * @param ref pointer to ref counter + */ +void ref_get(refcount_t *ref); + +/** + * @brief Put back a unused reference. + * + * Decrements the reference counter atomic and + * says if more references available. + * + * @param ref pointer to ref counter + * @return TRUE if no more references counted + */ +bool ref_put(refcount_t *ref); + + +#include +#include #endif /* LIBRARY_H_ */