Show contents of the CP payload in message_t stringification
authorMartin Willi <martin@revosec.ch>
Thu, 24 Jun 2010 13:45:38 +0000 (15:45 +0200)
committerMartin Willi <martin@revosec.ch>
Thu, 24 Jun 2010 13:46:28 +0000 (15:46 +0200)
src/libcharon/encoding/message.c
src/libhydra/attributes/attributes.c
src/libhydra/attributes/attributes.h

index acfc0fd..ee49a66 100644 (file)
@@ -31,6 +31,7 @@
 #include <encoding/payloads/payload.h>
 #include <encoding/payloads/encryption_payload.h>
 #include <encoding/payloads/unknown_payload.h>
+#include <encoding/payloads/cp_payload.h>
 
 /**
  * Max number of notify payloads per IKEv2 Message
@@ -975,6 +976,39 @@ static char* get_string(private_message_t *this, char *buf, int len)
                        pos += written;
                        len -= written;
                }
+               if (payload->get_type(payload) == CONFIGURATION)
+               {
+                       cp_payload_t *cp = (cp_payload_t*)payload;
+                       enumerator_t *attributes;
+                       configuration_attribute_t *attribute;
+                       bool first = TRUE;
+
+                       attributes = cp->create_attribute_enumerator(cp);
+                       while (attributes->enumerate(attributes, &attribute))
+                       {
+                               written = snprintf(pos, len, "%s%N", first ? "(" : " ",
+                                                                  configuration_attribute_type_short_names,
+                                                                  attribute->get_type(attribute));
+                               if (written >= len || written < 0)
+                               {
+                                       return buf;
+                               }
+                               pos += written;
+                               len -= written;
+                               first = FALSE;
+                       }
+                       attributes->destroy(attributes);
+                       if (!first)
+                       {
+                               written = snprintf(pos, len, ")");
+                               if (written >= len || written < 0)
+                               {
+                                       return buf;
+                               }
+                               pos += written;
+                               len -= written;
+                       }
+               }
        }
        enumerator->destroy(enumerator);
 
index 164fb16..ea87109 100644 (file)
@@ -64,3 +64,49 @@ ENUM_NEXT(configuration_attribute_type_names, UNITY_BANNER, UNITY_DDNS_HOSTNAME,
        "UNITY_DDNS_HOSTNAME");
 ENUM_END(configuration_attribute_type_names, UNITY_DDNS_HOSTNAME);
 
+ENUM_BEGIN(configuration_attribute_type_short_names, INTERNAL_IP4_ADDRESS, INTERNAL_IP6_PREFIX,
+       "ADDR",
+       "MASK",
+       "DNS",
+       "NBNS",
+       "EXP",
+       "DHCP",
+       "VER",
+       "ADDR6",
+       "MASK6",
+       "DNS6",
+       "NBNS6",
+       "DHCP6",
+       "SUBNET",
+       "SUPPORTED",
+       "SUBNET6",
+       "MIP6HPFX",
+       "LINK6",
+       "PFX6");
+ENUM_NEXT(configuration_attribute_type_short_names, XAUTH_TYPE, XAUTH_ANSWER, INTERNAL_IP6_PREFIX,
+       "XAUTH_TYPE",
+       "XAUTH_USER_NAME",
+       "XAUTH_USER_PASSWORD",
+       "XAUTH_PASSCODE",
+       "XAUTH_MESSAGE",
+       "XAUTH_CHALLENGE",
+       "XAUTH_DOMAIN",
+       "XAUTH_STATUS",
+       "XAUTH_NEXT_PIN",
+       "XAUTH_ANSWER");
+ENUM_NEXT(configuration_attribute_type_short_names, INTERNAL_IP4_SERVER, INTERNAL_IP6_SERVER, XAUTH_ANSWER,
+       "SRV",
+       "SRV6");
+ENUM_NEXT(configuration_attribute_type_short_names, UNITY_BANNER, UNITY_DDNS_HOSTNAME, INTERNAL_IP6_SERVER,
+       "UNITY_BANNER",
+       "UNITY_SAVE_PASSWD",
+       "UNITY_DEF_DOMAIN",
+       "UNITY_SPLITDNS_NAME",
+       "UNITY_SPLIT_INCLUDE",
+       "UNITY_NATT_PORT",
+       "UNITY_LOCAL_LAN",
+       "UNITY_PFS",
+       "UNITY_FW_TYPE",
+       "UNITY_BACKUP_SERVERS",
+       "UNITY_DDNS_HOSTNAME");
+ENUM_END(configuration_attribute_type_short_names, UNITY_DDNS_HOSTNAME);
index b469370..3a40ba3 100644 (file)
@@ -81,5 +81,10 @@ enum configuration_attribute_type_t {
  */
 extern enum_name_t *configuration_attribute_type_names;
 
+/**
+ * Short enum names for configuration_attribute_type_t.
+ */
+extern enum_name_t *configuration_attribute_type_short_names;
+
 
 #endif /** ATTRIBUTES_H_ @}*/