The introduced SHA1_NOFINAL hasher was not sufficient for EAP-AKA,
[strongswan.git] / src / libstrongswan / printf_hook.c
index 0407e8c..26c0cac 100644 (file)
@@ -1,12 +1,5 @@
-/**
- * @file printf_hook.c
- *
- * @brief Printf hook definitions and arginfo functions.
- *
- */
-
 /*
- * Copyright (C) 2006 Martin Willi
+ * Copyright (C) 2006-2008 Martin Willi
  * Hochschule fuer Technik Rapperswil
  *
  * This program is free software; you can redistribute it and/or modify it
  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  * for more details.
+ *
+ * $Id$
  */
 
 #include "printf_hook.h"
 
-/**
- * arginfo handler in printf() pointer
- */
-int arginfo_ptr(const struct printf_info *info, size_t n, int *argtypes)
-{
-       if (n > 0)
-       {
-               argtypes[0] = PA_POINTER;
-       }
-       return 1;
-}
+#include <utils.h>
 
-/**
- * arginfo handler for two prt arguments
- */
-int arginfo_ptr_ptr(const struct printf_info *info, size_t n, int *argtypes)
-{
-       if (n > 1)
-       {
-               argtypes[0] = PA_POINTER;
-               argtypes[1] = PA_POINTER;
-       }
-       return 2;
-}
+typedef struct private_printf_hook_t private_printf_hook_t;
 
 /**
- * arginfo handler for one ptr, one int
+ * private data of printf_hook
  */
-int arginfo_ptr_int(const struct printf_info *info, size_t n, int *argtypes)
-{
-       if (n > 1)
-       {
-               argtypes[0] = PA_POINTER;
-               argtypes[1] = PA_INT;
-       }
-       return 2;
-}
+struct private_printf_hook_t {
+
+       /**
+        * public functions
+        */
+       printf_hook_t public;
+};
 
 /**
- * arginfo handler for two int arguments
+ * Implementation of printf_hook_t.add_handler.
  */
-int arginfo_int_int(const struct printf_info *info, size_t n, int *argtypes)
+static void add_handler(private_printf_hook_t *this, char spec, 
+                                               printf_hook_functions_t hook)
 {
-       if (n > 1)
-       {
-               argtypes[0] = PA_INT;
-               argtypes[1] = PA_INT;
-       }
-       return 2;
+       register_printf_function(spec, hook.print, hook.arginfo);
 }
 
 /**
- * special arginfo handler respecting alt flag
+ * Implementation of printf_hook_t.destroy
  */
-int arginfo_int_alt_int_int(const struct printf_info *info, size_t n, int *argtypes)
+static void destroy(private_printf_hook_t *this)
 {
-       if (info->alt)
-       {
-               if (n > 1)
-               {
-                       argtypes[0] = PA_INT;
-                       argtypes[1] = PA_INT;
-               }
-               return 2;
-       }
-       
-       if (n > 0)
-       {
-               argtypes[0] = PA_INT;
-       }
-       return 1;
+       free(this);
 }
 
-/**
- * special arginfo handler respecting alt flag
+/*
+ * see header file
  */
-int arginfo_ptr_alt_ptr_int(const struct printf_info *info, size_t n, int *argtypes)
+printf_hook_t *printf_hook_create()
 {
-       if (info->alt)
-       {
-               if (n > 1)
-               {
-                       argtypes[0] = PA_POINTER;
-                       argtypes[1] = PA_INT;
-               }
-               return 2;
-       }
+       private_printf_hook_t *this = malloc_thing(private_printf_hook_t);
+       
+       this->public.add_handler = (void(*)(printf_hook_t*, char, printf_hook_functions_t))add_handler;
+       this->public.destroy = (void(*)(printf_hook_t*))destroy;
        
-       if (n > 0)
-       {
-               argtypes[0] = PA_POINTER;
-       }
-       return 1;
+       
+       return &this->public;
 }
+