]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
updated OCSP status request.
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Fri, 28 Sep 2012 12:26:05 +0000 (14:26 +0200)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Fri, 28 Sep 2012 15:50:14 +0000 (17:50 +0200)
12 files changed:
lib/debug.c
lib/ext/status_request.c
lib/ext/status_request.h
lib/gnutls_buffers.c
lib/gnutls_handshake.c
lib/gnutls_int.h
lib/includes/gnutls/gnutls.h.in
lib/libgnutls.map
src/cli-args.c
src/cli-args.h
src/serv-args.c
src/serv-args.h

index 4a8a13d3cad9161664c76c459f8753882ebff078..86807c46faaf3b528ea841175d5992d201e6e5f5 100644 (file)
@@ -108,6 +108,9 @@ _gnutls_handshake2str (gnutls_handshake_description_t handshake)
     case GNUTLS_HANDSHAKE_SUPPLEMENTAL:
       return "SUPPLEMENTAL";
       break;
+    case GNUTLS_HANDSHAKE_CERTIFICATE_STATUS:
+      return "CERTIFICATE STATUS";
+      break;
     case GNUTLS_HANDSHAKE_NEW_SESSION_TICKET:
       return "NEW SESSION TICKET";
       break;
index 07d651643460f675ece2bcd0d4941580097cccb5..489d949a46e8a34d5dff658770aec948e782caa5 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Copyright (C) 2012 Free Software Foundation, Inc.
  *
- * Author: Simon Josefsson
+ * Author: Simon Josefsson, Nikos Mavrogiannopoulos
  *
  * This file is part of GnuTLS.
  *
 #include "gnutls_errors.h"
 #include <gnutls_extensions.h>
 #include <ext/status_request.h>
+#include <gnutls_mbuffers.h>
+#include <gnutls_handshake.h>
 
 typedef struct
 {
   gnutls_datum_t *responder_id;
   size_t responder_id_size;
   gnutls_datum_t request_extensions;
-  int dealloc;
+  gnutls_datum_t response;
 
   gnutls_status_request_ocsp_func ocsp_func;
   void *ocsp_func_ptr;
-
-  int expect_certificate_status;
+  char *response_file;
+  unsigned int expect_cstatus;
 } status_request_ext_st;
 
 /*
@@ -113,31 +115,33 @@ server_recv (gnutls_session_t session,
             size_t size)
 {
   size_t i;
-
-  _gnutls_handshake_log ("EXT[%p]: got ocsp\n", session);
+  ssize_t data_size = size;
 
   /* minimum message is type (1) + responder_id_list (2) +
      request_extension (2) = 5 */
-  if (size < 5)
+  if (data_size < 5)
     return gnutls_assert_val (GNUTLS_E_UNEXPECTED_PACKET_LENGTH);
 
   /* We ignore non-ocsp CertificateStatusType.  The spec is unclear
      what should be done. */
-  if (data[0] != '\x01')
+  if (data[0] != 0x01)
     {
       gnutls_assert ();
       _gnutls_handshake_log ("EXT[%p]: unknown status_type %d\n",
                             session, data[0]);
       return 0;
     }
-  size--, data++;
-
-  priv->dealloc = 1;
+  DECR_LEN(data_size, 1);
+  data++;
 
   priv->responder_id_size = _gnutls_read_uint16 (data);
-  size -= 2, data += 2;
+  
+  _gnutls_debug_log("Status Request: Responder ID size: %u\n", priv->responder_id_size);
+  
+  DECR_LEN(data_size, 2);
+  data += 2;
 
-  if (size <= priv->responder_id_size * 2)
+  if (data_size <= (ssize_t)(priv->responder_id_size * 2))
     return gnutls_assert_val (GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER);
 
   priv->responder_id = gnutls_malloc (priv->responder_id_size
@@ -149,14 +153,12 @@ server_recv (gnutls_session_t session,
     {
       size_t l;
 
-      if (size <= 2)
-       return gnutls_assert_val (GNUTLS_E_UNEXPECTED_PACKET_LENGTH);
+      DECR_LEN(data_size, 2);
 
       l = _gnutls_read_uint16 (data);
-      size -= 2, data += 2;
+      data += 2;
 
-      if (size <= l)
-       return gnutls_assert_val (GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER);
+      DECR_LEN(data_size, l);
 
       priv->responder_id[i].data = gnutls_malloc (l);
       if (priv->responder_id[i].data == NULL)
@@ -165,7 +167,7 @@ server_recv (gnutls_session_t session,
       memcpy (priv->responder_id[i].data, data, l);
       priv->responder_id[i].size = l;
 
-      size -= l, data += l;
+      data += l;
     }
 
   return 0;
@@ -191,19 +193,13 @@ server_send (gnutls_session_t session,
   if (priv->ocsp_func == NULL)
     return gnutls_assert_val (GNUTLS_E_SUCCESS);
 
-  ret = priv->ocsp_func (session, priv->ocsp_func_ptr, NULL);
+  ret = priv->ocsp_func (session, priv->ocsp_func_ptr, &priv->response);
   if (ret == GNUTLS_E_NO_CERTIFICATE_STATUS)
     return 0;
-  else if (ret != GNUTLS_E_SUCCESS)
-    return gnutls_assert_val (ret);
-
-  ret = _gnutls_buffer_append_data (extdata, "", 0);
-  if (ret < 0)
+  else if (ret < 0)
     return gnutls_assert_val (ret);
-
-  priv->expect_certificate_status = 1;
-
-  return 0;
+  
+  return GNUTLS_E_INT_RET_0;
 }
 
 static int
@@ -213,11 +209,12 @@ client_recv (gnutls_session_t session,
             size_t size)
 {
   if (size != 0)
-    return gnutls_assert_val (GNUTLS_E_UNEXPECTED_PACKET_LENGTH);
-
-  priv->expect_certificate_status = 1;
-
-  return 0;
+    return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH);
+  else
+    {
+      priv->expect_cstatus = 1;
+      return 0;
+    }
 }
 
 static int
@@ -231,7 +228,8 @@ _gnutls_status_request_send_params (gnutls_session_t session,
   ret = _gnutls_ext_get_session_data (session,
                                      GNUTLS_EXTENSION_STATUS_REQUEST,
                                      &epriv);
-  if (ret < 0)              /* it is ok not to have it */
+
+  if (ret < 0 || epriv.ptr == NULL) /* it is ok not to have it */
     return 0;
 
   priv = epriv.ptr;
@@ -253,7 +251,7 @@ _gnutls_status_request_recv_params (gnutls_session_t session,
   ret = _gnutls_ext_get_session_data (session,
                                      GNUTLS_EXTENSION_STATUS_REQUEST,
                                      &epriv);
-  if (ret < 0)              /* it is ok not to have it */
+  if (ret < 0 || epriv.ptr == NULL) /* it is ok not to have it */
     return 0;
 
   priv = epriv.ptr;
@@ -268,11 +266,12 @@ _gnutls_status_request_recv_params (gnutls_session_t session,
  * @session: is a #gnutls_session_t structure.
  * @responder_id: array with #gnutls_datum_t with DER data of responder id
  * @responder_id_size: number of members in @responder_id array
- * @request_extensions: a #gnutls_datum_t with DER encoded OCSP extensions
+ * @extensions: a #gnutls_datum_t with DER encoded OCSP extensions
  *
  * This function is to be used by clients to request OCSP response
  * from the server, using the "status_request" TLS extension.  Only
- * OCSP status type is supported.
+ * OCSP status type is supported. Typically @responder_id and @extensions
+ * should be null.
  *
  * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned,
  *   otherwise a negative error code is returned.
@@ -281,7 +280,7 @@ int
 gnutls_status_request_ocsp_client (gnutls_session_t session,
                                   gnutls_datum_t *responder_id,
                                   size_t responder_id_size,
-                                  gnutls_datum_t *request_extensions)
+                                  gnutls_datum_t *extensions)
 {
   status_request_ext_st *priv;
   extension_priv_data_t epriv;
@@ -295,10 +294,10 @@ gnutls_status_request_ocsp_client (gnutls_session_t session,
 
   priv->responder_id = responder_id;
   priv->responder_id_size = responder_id_size;
-  if (request_extensions)
+  if (extensions)
     {
-      priv->request_extensions.data = request_extensions->data;
-      priv->request_extensions.size = request_extensions->size;
+      priv->request_extensions.data = extensions->data;
+      priv->request_extensions.size = extensions->size;
     }
 
   _gnutls_ext_set_session_data (session,
@@ -308,6 +307,47 @@ gnutls_status_request_ocsp_client (gnutls_session_t session,
   return 0;
 }
 
+/**
+ * gnutls_status_request_get_ocsp:
+ * @session: is a #gnutls_session_t structure.
+ * @response: a #gnutls_datum_t with DER encoded OCSP response
+ *
+ * This function returns the OCSP status response received
+ * from the TLS server. The @response should be treated as
+ * constant. If no OCSP response is available then
+ * %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE is returned.
+ *
+ * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned,
+ *   otherwise a negative error code is returned.
+ **/
+int
+gnutls_status_request_get_ocsp (gnutls_session_t session,
+                               gnutls_datum_t *response)
+{
+  status_request_ext_st *priv;
+  extension_priv_data_t epriv;
+  int ret;
+
+  if (session->security_parameters.entity == GNUTLS_SERVER)
+    return gnutls_assert_val (GNUTLS_E_INVALID_REQUEST);
+
+  ret = _gnutls_ext_get_session_data (session,
+                                     GNUTLS_EXTENSION_STATUS_REQUEST,
+                                     &epriv);
+  if (ret < 0)
+    return gnutls_assert_val(ret);
+
+  priv = epriv.ptr;
+  
+  if (priv == NULL ||  priv->response.data == NULL)
+    return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE);
+  
+  response->data = priv->response.data;
+  response->size = priv->response.size;
+
+  return 0;
+}
+
 /**
  * gnutls_status_request_ocsp_server:
  * @session: is a #gnutls_session_t structure.
@@ -322,25 +362,13 @@ gnutls_status_request_ocsp_client (gnutls_session_t session,
  * typedef int (*gnutls_status_request_ocsp_func)
  *    (gnutls_session_t session, void *ptr, gnutls_datum_t *ocsp_response);
  *
- * The callback may be invoked up to two times for each handshake.  It
- * is called the first time when the client hello requested the status
- * request extension.  In this case, ocsp_response is NULL.  The
- * purpose of the first callback invocation is to determine whether
- * the server will acknowledge the client's request to use the
- * extension.  The callback may return
- * %GNUTLS_E_NO_CERTIFICATE_STATUS, in which case the server will not
- * enable the extension.  If the callback returns %GNUTLS_E_SUCCESS,
- * the server enable the extension.  If the callback returns another
- * error code, the handshake will terminate.
+ * The callback will be invoked if the client requests an OCSP certificate
+ * status.  The callback may return %GNUTLS_E_NO_CERTIFICATE_STATUS, if
+ * there is no recent OCSP response. If the callback returns %GNUTLS_E_SUCCESS,
+ * the server will provide the client with the ocsp_response.
  *
- * If the first call to the callback enabled the extension, there will
- * usually be a second phase, with a non-NULL ocsp_response.  Now the
- * server is ready to send the CertificateStatus, and it expects the
- * callback to provide the OCSP response data.  The callback can at
- * this point return %GNUTLS_E_NO_CERTIFICATE_STATUS to avoid sending
- * a CertificateStatus message.  If the callback returns
- * %GNUTLS_E_SUCCESS the ocsp_response will be sent off to the client.
- * If the callback returns an error, the handshake will terminate.
+ * The response must be a value allocated using gnutls_malloc(), and will be
+ * deinitialized when needed.
  *
  * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned,
  *   otherwise a negative error code is returned.
@@ -350,19 +378,21 @@ gnutls_status_request_ocsp_server (gnutls_session_t session,
                                   gnutls_status_request_ocsp_func ocsp_func,
                                   void *ptr)
 {
-  status_request_ext_st *priv;
   extension_priv_data_t epriv;
+  status_request_ext_st* priv;
 
   if (session->security_parameters.entity == GNUTLS_CLIENT)
-    return gnutls_assert_val (GNUTLS_E_INVALID_REQUEST);
+    return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST);
 
-  epriv.ptr = priv = gnutls_calloc (1, sizeof (*priv));
+  priv = gnutls_calloc(1, sizeof(*priv));
   if (priv == NULL)
-    return gnutls_assert_val (GNUTLS_E_MEMORY_ERROR);
+    return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR);
 
   priv->ocsp_func = ocsp_func;
   priv->ocsp_func_ptr = ptr;
 
+  epriv.ptr = priv;
+
   _gnutls_ext_set_session_data (session,
                                GNUTLS_EXTENSION_STATUS_REQUEST,
                                epriv);
@@ -370,20 +400,76 @@ gnutls_status_request_ocsp_server (gnutls_session_t session,
   return 0;
 }
 
+static int file_ocsp_func(gnutls_session_t session, void *ptr, gnutls_datum_t *ocsp_response)
+{
+int ret;
+status_request_ext_st* priv = ptr;
+
+  ret = gnutls_load_file(priv->response_file, ocsp_response);
+  if (ret < 0)
+    return gnutls_assert_val(GNUTLS_E_NO_CERTIFICATE_STATUS);
+  
+  return 0;
+}
+
+/**
+ * gnutls_status_request_ocsp_server_file:
+ * @session: is a #gnutls_session_t structure.
+ * @response_file: a filename of the OCSP response
+ * @flags: should be zero
+ *
+ * This function sets the filename of an OCSP response, that will be
+ * sent to the client if requests an OCSP certificate status.
+ *
+ * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned,
+ *   otherwise a negative error code is returned.
+ **/
+int
+gnutls_status_request_ocsp_server_file (gnutls_session_t session,
+                                  const char* response_file,
+                                  unsigned int flags)
+{
+  extension_priv_data_t epriv;
+  status_request_ext_st* priv;
+
+  if (session->security_parameters.entity == GNUTLS_CLIENT)
+    return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST);
+
+  priv = gnutls_calloc(1, sizeof(*priv));
+  if (priv == NULL)
+    return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR);
+
+  priv->response_file = gnutls_strdup(response_file);
+  if (priv->response_file == NULL)
+    return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR);
+
+  priv->ocsp_func = file_ocsp_func;
+  priv->ocsp_func_ptr = priv;
+  
+  epriv.ptr = priv;
+
+  _gnutls_ext_set_session_data (session,
+                               GNUTLS_EXTENSION_STATUS_REQUEST,
+                               epriv);
+  return 0;
+}
+
 static void
 _gnutls_status_request_deinit_data (extension_priv_data_t epriv)
 {
   status_request_ext_st *priv = epriv.ptr;
   size_t i;
 
-  if (priv->dealloc)
-    {
-      for (i = 0; i < priv->responder_id_size; i++)
-       gnutls_free (priv->responder_id[i].data);
-      gnutls_free (priv->responder_id);
-      gnutls_free (priv->request_extensions.data);
-    }
+  if (priv == NULL)
+    return;
+
+  for (i = 0; i < priv->responder_id_size; i++)
+    gnutls_free (priv->responder_id[i].data);
 
+  gnutls_free (priv->responder_id);
+  gnutls_free (priv->request_extensions.data);
+  gnutls_free (priv->response.data);
+  gnutls_free (priv->response_file);
   gnutls_free (priv);
 }
 
@@ -411,3 +497,109 @@ extension_entry_st ext_mod_status_request = {
   .unpack_func = _gnutls_status_request_unpack,
   .deinit_func = _gnutls_status_request_deinit_data
 };
+
+/* Functions to be called from handshake */
+
+int
+_gnutls_send_server_certificate_status (gnutls_session_t session, int again)
+{
+  mbuffer_st *bufel = NULL;
+  uint8_t * data;
+  int data_size = 0;
+  int ret;
+  status_request_ext_st *priv = NULL;
+  extension_priv_data_t epriv;
+  if (again == 0)
+    {
+      ret =
+        _gnutls_ext_get_session_data (session,
+                                      GNUTLS_EXTENSION_STATUS_REQUEST,
+                                      &epriv);
+      if (ret < 0)
+        return 0;
+      priv = epriv.ptr;
+
+      if (!priv->response.size)
+        return 0;
+
+      data_size = priv->response.size + 4;
+      bufel = _gnutls_handshake_alloc (session, data_size, data_size);
+      if (!bufel)
+        return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR);
+
+      data = _mbuffer_get_udata_ptr (bufel);
+      
+      data[0] = 0x01;
+      _gnutls_write_uint24(priv->response.size, &data[1]);
+      memcpy(&data[4], priv->response.data, priv->response.size);
+    }
+  return _gnutls_send_handshake (session, data_size ? bufel : NULL,
+                                 GNUTLS_HANDSHAKE_CERTIFICATE_STATUS);
+}
+
+int
+_gnutls_recv_server_certificate_status (gnutls_session_t session)
+{
+  uint8_t *data;
+  int data_size;
+  size_t r_size;
+  gnutls_buffer_st buf;
+  int ret;
+  status_request_ext_st *priv = NULL;
+  extension_priv_data_t epriv;
+  
+  ret =
+    _gnutls_ext_get_session_data (session, GNUTLS_EXTENSION_STATUS_REQUEST,
+                                  &epriv);
+  if (ret < 0)
+    {
+      gnutls_assert ();
+      return 0;
+    }
+  priv = epriv.ptr;
+
+  if (!priv->expect_cstatus)
+    return 0;
+
+  ret = _gnutls_recv_handshake (session, 
+                                GNUTLS_HANDSHAKE_CERTIFICATE_STATUS,
+                                0, &buf);
+  if (ret < 0)
+    return gnutls_assert_val_fatal(ret);
+
+  data = buf.data;
+  data_size = buf.length;
+
+  /* minimum message is type (1) + response (3) + data */
+  if (data_size == 0)
+    return 0;
+  else if (data_size < 4)
+    return gnutls_assert_val (GNUTLS_E_UNEXPECTED_PACKET_LENGTH);
+
+  if (data[0] != 0x01)
+    {
+      gnutls_assert ();
+      _gnutls_handshake_log ("EXT[%p]: unknown status_type %d\n",
+                            session, data[0]);
+      return 0;
+    }
+  DECR_LENGTH_COM (data_size, 1, ret = GNUTLS_E_UNEXPECTED_PACKET_LENGTH; goto error);
+  data++;
+
+  DECR_LENGTH_COM (data_size, 3, ret = GNUTLS_E_UNEXPECTED_PACKET_LENGTH; goto error);
+  r_size = _gnutls_read_uint24(data);
+  data += 3;
+
+  DECR_LENGTH_COM (data_size, r_size, ret = GNUTLS_E_UNEXPECTED_PACKET_LENGTH; goto error);
+
+  ret = _gnutls_set_datum(&priv->response, data, r_size);
+  if (ret < 0)
+    goto error;
+
+  ret = 0;
+
+error:
+  _gnutls_buffer_clear (&buf);
+  
+  return ret;
+}
index dc807f8259a12226fdb6a6ffd7300eb0951b856d..311fac06af5e0cee0ca923d22a588190170346d9 100644 (file)
@@ -27,4 +27,9 @@
 
 extern extension_entry_st ext_mod_status_request;
 
+int
+_gnutls_send_server_certificate_status (gnutls_session_t session, int again);
+int
+_gnutls_recv_server_certificate_status (gnutls_session_t session);
+
 #endif
index 3c5ba7057bbe1b2faa1b54623b086a8bf505f550..f73682ccb8eae62fd6e1aa875f9a82e10845322a 100644 (file)
@@ -851,8 +851,8 @@ parse_handshake_header (gnutls_session_t session, mbuffer_st* bufel,
   /* make the length offset */
   if (hsk->end_offset > 0) hsk->end_offset--;
 
-  _gnutls_handshake_log ("HSK[%p]: %s was received. Length %d[%d], frag offset %d, frag length: %d, sequence: %d\n",
-                         session, _gnutls_handshake2str (hsk->htype),
+  _gnutls_handshake_log ("HSK[%p]: %s (%u) was received. Length %d[%d], frag offset %d, frag length: %d, sequence: %d\n",
+                         session, _gnutls_handshake2str (hsk->htype), (unsigned)hsk->htype,
                          (int) hsk->length, (int)data_size, hsk->start_offset, hsk->end_offset-hsk->start_offset+1, (int)hsk->sequence);
 
   hsk->header_size = handshake_header_size;
index 10c6ecb10e2f87978e32d5c00a6acfc0d0feda5c..b6a5e62fa004c33fdecf4c339ef590be86fd59d2 100644 (file)
@@ -47,6 +47,7 @@
 #include <gnutls_state.h>
 #include <ext/srp.h>
 #include <ext/session_ticket.h>
+#include <ext/status_request.h>
 #include <ext/safe_renegotiation.h>
 #include <gnutls_rsa_export.h>  /* for gnutls_get_rsa_params() */
 #include <auth/anon.h>          /* for gnutls_anon_server_credentials_t */
@@ -1153,8 +1154,9 @@ _gnutls_send_handshake (gnutls_session_t session, mbuffer_st * bufel,
   switch (type)
     {
     case GNUTLS_HANDSHAKE_CERTIFICATE_PKT:     /* this one is followed by ServerHelloDone
-                                                 * or ClientKeyExchange always.
-                                                 */
+                                                * or ClientKeyExchange always.
+                                                */
+    case GNUTLS_HANDSHAKE_CERTIFICATE_STATUS:
     case GNUTLS_HANDSHAKE_SERVER_KEY_EXCHANGE: /* as above */
     case GNUTLS_HANDSHAKE_SERVER_HELLO:        /* as above */
     case GNUTLS_HANDSHAKE_CERTIFICATE_REQUEST: /* as above */
@@ -1341,6 +1343,7 @@ _gnutls_recv_handshake (gnutls_session_t session,
         }
       break;
     case GNUTLS_HANDSHAKE_CERTIFICATE_PKT:
+    case GNUTLS_HANDSHAKE_CERTIFICATE_STATUS:
     case GNUTLS_HANDSHAKE_FINISHED:
     case GNUTLS_HANDSHAKE_SERVER_KEY_EXCHANGE:
     case GNUTLS_HANDSHAKE_CLIENT_KEY_EXCHANGE:
@@ -2541,30 +2544,38 @@ _gnutls_handshake_client (gnutls_session_t session)
       IMED_RET ("recv server certificate", ret, 1);
 
     case STATE4:
+      /* RECV CERTIFICATE STATUS */
+      if (session->internals.resumed == RESUME_FALSE)   /* if we are not resuming */
+        ret = _gnutls_recv_server_certificate_status (session);
+      STATE = STATE4;
+      IMED_RET ("recv server certificate", ret, 1);
+
+    case STATE5:
       /* receive the server key exchange */
       if (session->internals.resumed == RESUME_FALSE)   /* if we are not resuming */
         ret = _gnutls_recv_server_kx_message (session);
-      STATE = STATE4;
+      STATE = STATE5;
       IMED_RET ("recv server kx message", ret, 1);
 
-    case STATE5:
+    case STATE6:
       /* receive the server certificate request - if any 
        */
 
       if (session->internals.resumed == RESUME_FALSE)   /* if we are not resuming */
         ret = _gnutls_recv_server_crt_request (session);
-      STATE = STATE5;
+      STATE = STATE6;
       IMED_RET ("recv server certificate request message", ret, 1);
 
-    case STATE6:
+    case STATE7:
       /* receive the server hello done */
       if (session->internals.resumed == RESUME_FALSE)   /* if we are not resuming */
         ret =
           _gnutls_recv_handshake (session,
                                   GNUTLS_HANDSHAKE_SERVER_HELLO_DONE,
                                   0, NULL);
-      STATE = STATE6;
+      STATE = STATE7;
       IMED_RET ("recv server hello done", ret, 1);
+
     case STATE71:
       if (session->security_parameters.do_send_supplemental)
         {
@@ -2573,26 +2584,26 @@ _gnutls_handshake_client (gnutls_session_t session)
           IMED_RET ("send supplemental", ret, 0);
         }
 
-    case STATE7:
+    case STATE8:
       /* send our certificate - if any and if requested
        */
       if (session->internals.resumed == RESUME_FALSE)   /* if we are not resuming */
-        ret = _gnutls_send_client_certificate (session, AGAIN (STATE7));
-      STATE = STATE7;
+        ret = _gnutls_send_client_certificate (session, AGAIN (STATE8));
+      STATE = STATE8;
       IMED_RET ("send client certificate", ret, 0);
 
-    case STATE8:
+    case STATE9:
       if (session->internals.resumed == RESUME_FALSE)   /* if we are not resuming */
-        ret = _gnutls_send_client_kx_message (session, AGAIN (STATE8));
-      STATE = STATE8;
+        ret = _gnutls_send_client_kx_message (session, AGAIN (STATE9));
+      STATE = STATE9;
       IMED_RET ("send client kx", ret, 0);
 
-    case STATE9:
+    case STATE10:
       /* send client certificate verify */
       if (session->internals.resumed == RESUME_FALSE)   /* if we are not resuming */
         ret =
-          _gnutls_send_client_certificate_verify (session, AGAIN (STATE9));
-      STATE = STATE9;
+          _gnutls_send_client_certificate_verify (session, AGAIN (STATE10));
+      STATE = STATE10;
       IMED_RET ("send client certificate verify", ret, 1);
 
       STATE = STATE0;
@@ -2849,28 +2860,34 @@ _gnutls_handshake_server (gnutls_session_t session)
       IMED_RET ("send server certificate", ret, 0);
 
     case STATE4:
-      /* send server key exchange (A) */
       if (session->internals.resumed == RESUME_FALSE)
-        ret = _gnutls_send_server_kx_message (session, AGAIN (STATE4));
+        ret = _gnutls_send_server_certificate_status (session, AGAIN (STATE4));
       STATE = STATE4;
-      IMED_RET ("send server kx", ret, 0);
+      IMED_RET ("send server certificate status", ret, 0);
 
     case STATE5:
+      /* send server key exchange (A) */
+      if (session->internals.resumed == RESUME_FALSE)
+        ret = _gnutls_send_server_kx_message (session, AGAIN (STATE5));
+      STATE = STATE5;
+      IMED_RET ("send server kx", ret, 0);
+
+    case STATE6:
       /* Send certificate request - if requested to */
       if (session->internals.resumed == RESUME_FALSE)
         ret =
-          _gnutls_send_server_crt_request (session, AGAIN (STATE5));
-      STATE = STATE5;
+          _gnutls_send_server_crt_request (session, AGAIN (STATE6));
+      STATE = STATE6;
       IMED_RET ("send server cert request", ret, 0);
 
-    case STATE6:
+    case STATE7:
       /* send the server hello done */
       if (session->internals.resumed == RESUME_FALSE)   /* if we are not resuming */
         ret =
           _gnutls_send_empty_handshake (session,
                                         GNUTLS_HANDSHAKE_SERVER_HELLO_DONE,
-                                        AGAIN (STATE6));
-      STATE = STATE6;
+                                        AGAIN (STATE7));
+      STATE = STATE7;
       IMED_RET ("send server hello done", ret, 1);
 
     case STATE71:
@@ -2882,25 +2899,25 @@ _gnutls_handshake_server (gnutls_session_t session)
         }
 
       /* RECV CERTIFICATE + KEYEXCHANGE + CERTIFICATE_VERIFY */
-    case STATE7:
+    case STATE8:
       /* receive the client certificate message */
       if (session->internals.resumed == RESUME_FALSE)   /* if we are not resuming */
         ret = _gnutls_recv_client_certificate (session);
-      STATE = STATE7;
+      STATE = STATE8;
       IMED_RET ("recv client certificate", ret, 1);
 
-    case STATE8:
+    case STATE9:
       /* receive the client key exchange message */
       if (session->internals.resumed == RESUME_FALSE)   /* if we are not resuming */
         ret = _gnutls_recv_client_kx_message (session);
-      STATE = STATE8;
+      STATE = STATE9;
       IMED_RET ("recv client kx", ret, 1);
 
-    case STATE9:
+    case STATE10:
       /* receive the client certificate verify message */
       if (session->internals.resumed == RESUME_FALSE)   /* if we are not resuming */
         ret = _gnutls_recv_client_certificate_verify_message (session);
-      STATE = STATE9;
+      STATE = STATE10;
       IMED_RET ("recv client certificate verify", ret, 1);
 
       STATE = STATE0;           /* finished thus clear session */
index 806f3e3d34624784ab4ced764a17efcbef6fc9c3..fed0eef8573c0017fd178e77530388944f65d772 100644 (file)
@@ -224,7 +224,7 @@ typedef struct
 typedef enum handshake_state_t
 { STATE0 = 0, STATE1, STATE2,
   STATE3, STATE4, STATE5,
-  STATE6, STATE7, STATE8, STATE9, STATE11 = 11,
+  STATE6, STATE7, STATE8, STATE9, STATE10, STATE11,
   STATE20 = 20, STATE21, STATE22,
   STATE30 = 30, STATE31, STATE40 = 40, STATE41, STATE50 = 50,
   STATE60 = 60, STATE61, STATE62, STATE70, STATE71
index 54fe31fe5ea05972f82b1279dd6cd7fc5d6af72c..7b1fae6ba67f3a7d0bf292ac5dcf6045a3e3e772 100644 (file)
@@ -418,6 +418,7 @@ extern "C"
     GNUTLS_HANDSHAKE_CERTIFICATE_VERIFY = 15,
     GNUTLS_HANDSHAKE_CLIENT_KEY_EXCHANGE = 16,
     GNUTLS_HANDSHAKE_FINISHED = 20,
+    GNUTLS_HANDSHAKE_CERTIFICATE_STATUS = 22,
     GNUTLS_HANDSHAKE_SUPPLEMENTAL = 23,
     GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC = 254,
     GNUTLS_HANDSHAKE_CLIENT_HELLO_V2 = 1024,
@@ -960,11 +961,18 @@ gnutls_ecc_curve_t gnutls_ecc_curve_get(gnutls_session_t session);
   int gnutls_status_request_ocsp_server (gnutls_session_t session,
                                 gnutls_status_request_ocsp_func ocsp_func,
                                         void *ptr);
+
+  int gnutls_status_request_ocsp_server_file (gnutls_session_t session,
+                                  const char* response_file,
+                                  unsigned int flags);
+
   int gnutls_status_request_ocsp_client (gnutls_session_t session,
                                         gnutls_datum_t *responder_id,
                                         size_t responder_id_size,
                                         gnutls_datum_t *request_extensions);
 
+  int gnutls_status_request_get_ocsp (gnutls_session_t session, gnutls_datum_t *response);
+
 /* if you just want some defaults, use the following.
  */
   int gnutls_priority_init (gnutls_priority_t * priority_cache,
index 8c404facce0cb5fad2b7a45e5dd31c73371c4358..ffcb597ef1d43d776e0733a1838d99f6171c5bef 100644 (file)
@@ -790,8 +790,6 @@ GNUTLS_3_0_0 {
        gnutls_pk_to_sign;
        gnutls_certificate_set_x509_system_trust;
        gnutls_session_set_premaster;
-       gnutls_status_request_ocsp_client;
-       gnutls_status_request_ocsp_server;
 } GNUTLS_2_12;
 
 GNUTLS_3_1_0 {
@@ -838,6 +836,10 @@ GNUTLS_3_1_0 {
         gnutls_heartbeat_allowed;
        gnutls_heartbeat_get_timeout;
        gnutls_heartbeat_set_timeouts;
+       gnutls_status_request_ocsp_client;
+       gnutls_status_request_get_ocsp;
+       gnutls_status_request_ocsp_server;
+       gnutls_status_request_ocsp_server_file;
 } GNUTLS_3_0_0;
 
 GNUTLS_PRIVATE {
index b4f05015da94ee2f7839d94cd5ebf71bc3d1cabd..703b13cc030a666bd1d8041878a38ae2ee3f5bd7 100644 (file)
@@ -2,11 +2,11 @@
  *  
  *  DO NOT EDIT THIS FILE   (cli-args.c)
  *  
- *  It has been AutoGen-ed  August 30, 2012 at 09:58:04 PM by AutoGen 5.16
+ *  It has been AutoGen-ed  September 28, 2012 at 01:15:40 PM by AutoGen 5.12
  *  From the definitions    cli-args.def
  *  and the template file   options
  *
- * Generated from AutoOpts 36:4:11 templates.
+ * Generated from AutoOpts 35:0:10 templates.
  *
  *  AutoOpts is a copyrighted work.  This source file is not encumbered
  *  by AutoOpts licensing, but is provided under the licensing terms chosen
  *  users discretion, the BSD license.  See the AutoOpts and/or libopts sources
  *  for details.
  *
- * The gnutls-cli program is copyrighted and licensed
- * under the following terms:
+ * This source file is copyrighted and licensed under the following terms:
  *
  *  Copyright (C) 2000-2012 Free Software Foundation, all rights reserved.
  *  This is free software. It is licensed for use, modification and
  *  redistribution under the terms of the
  *  GNU General Public License, version 3 or later
  *      <http://gnu.org/licenses/gpl.html>
- *
- *  gnutls-cli is free software: you can redistribute it and/or modify it
+ *  
+PFX>gnutls-cli 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 3 of the License, or
  *  (at your option) any later version.
  *  with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef __doxygen__
-#define OPTION_CODE_COMPILE 1
-#include "cli-args.h"
 #include <sys/types.h>
 
 #include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <errno.h>
+#define OPTION_CODE_COMPILE 1
+#include "cli-args.h"
 
 #ifdef  __cplusplus
 extern "C" {
@@ -56,534 +54,442 @@ extern FILE * option_usage_fp;
 
 /* TRANSLATORS: choose the translation for option names wisely because you
                 cannot ever change your mind. */
-#define zCopyright      (gnutls_cli_opt_strs+0)
-#define zLicenseDescrip (gnutls_cli_opt_strs+281)
-
+static char const zCopyright[281] =
+"gnutls-cli @VERSION@\n\
+Copyright (C) 2000-2012 Free Software Foundation, all rights reserved.\n\
+This is free software. It is licensed for use, modification and\n\
+redistribution under the terms of the\n\
+GNU General Public License, version 3 or later\n\
+    <http://gnu.org/licenses/gpl.html>\n";
+static char const zLicenseDescrip[609] =
+"gnutls-cli is free software: you can redistribute it and/or modify it\n\
+under the terms of the GNU General Public License as published by the\n\
+Free Software Foundation, either version 3 of the License, or (at your\n\
+option) any later version.\n\n\
+gnutls-cli is distributed in the hope that it will be useful, but WITHOUT\n\
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n\
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License\n\
+for more details.\n\n\
+You should have received a copy of the GNU General Public License along\n\
+with this program.  If not, see <http://www.gnu.org/licenses/>.\n";
+
+extern tUsageProc optionUsage;
 
 #ifndef NULL
 #  define NULL 0
 #endif
 
 /*
- *  gnutls-cli option static const strings
+ *  Debug option description:
  */
-static char const gnutls_cli_opt_strs[3538] =
-/*     0 */ "gnutls-cli @VERSION@\n"
-            "Copyright (C) 2000-2012 Free Software Foundation, all rights reserved.\n"
-            "This is free software. It is licensed for use, modification and\n"
-            "redistribution under the terms of the\n"
-            "GNU General Public License, version 3 or later\n"
-            "    <http://gnu.org/licenses/gpl.html>\n\0"
-/*   281 */ "gnutls-cli is free software: you can redistribute it and/or modify it under\n"
-            "the terms of the GNU General Public License as published by the Free\n"
-            "Software Foundation, either version 3 of the License, or (at your option)\n"
-            "any later version.\n\n"
-            "gnutls-cli is distributed in the hope that it will be useful, but WITHOUT\n"
-            "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n"
-            "FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\n"
-            "more details.\n\n"
-            "You should have received a copy of the GNU General Public License along\n"
-            "with this program.  If not, see <http://www.gnu.org/licenses/>.\n\0"
-/*   890 */ "Enable debugging.\0"
-/*   908 */ "DEBUG\0"
-/*   914 */ "debug\0"
-/*   920 */ "More verbose output\0"
-/*   940 */ "VERBOSE\0"
-/*   948 */ "verbose\0"
-/*   956 */ "Enable trust on first use authentication\0"
-/*   997 */ "TOFU\0"
-/*  1002 */ "no-tofu\0"
-/*  1010 */ "no\0"
-/*  1013 */ "Enable OCSP certificate verification\0"
-/*  1050 */ "OCSP\0"
-/*  1055 */ "no-ocsp\0"
-/*  1063 */ "Establish a session and resume\0"
-/*  1094 */ "RESUME\0"
-/*  1101 */ "resume\0"
-/*  1108 */ "Activate heartbeat support\0"
-/*  1135 */ "HEARTBEAT\0"
-/*  1145 */ "heartbeat\0"
-/*  1155 */ "Establish a session and rehandshake\0"
-/*  1191 */ "REHANDSHAKE\0"
-/*  1203 */ "rehandshake\0"
-/*  1215 */ "Don't accept session tickets\0"
-/*  1244 */ "NOTICKET\0"
-/*  1253 */ "noticket\0"
-/*  1262 */ "Connect, establish a plain session and start TLS.\0"
-/*  1312 */ "STARTTLS\0"
-/*  1321 */ "starttls\0"
-/*  1330 */ "Use DTLS (datagram TLS) over UDP\0"
-/*  1363 */ "UDP\0"
-/*  1367 */ "udp\0"
-/*  1371 */ "Set MTU for datagram TLS\0"
-/*  1396 */ "MTU\0"
-/*  1400 */ "mtu\0"
-/*  1404 */ "Send CR LF instead of LF\0"
-/*  1429 */ "CRLF\0"
-/*  1434 */ "crlf\0"
-/*  1439 */ "Use DER format for certificates to read from\0"
-/*  1484 */ "X509FMTDER\0"
-/*  1495 */ "x509fmtder\0"
-/*  1506 */ "Send the openpgp fingerprint, instead of the key\0"
-/*  1555 */ "FINGERPRINT\0"
-/*  1567 */ "fingerprint\0"
-/*  1579 */ "Disable all the TLS extensions\0"
-/*  1610 */ "DISABLE_EXTENSIONS\0"
-/*  1629 */ "disable-extensions\0"
-/*  1648 */ "Print peer's certificate in PEM format\0"
-/*  1687 */ "PRINT_CERT\0"
-/*  1698 */ "print-cert\0"
-/*  1709 */ "The maximum record size to advertize\0"
-/*  1746 */ "RECORDSIZE\0"
-/*  1757 */ "recordsize\0"
-/*  1768 */ "The minimum number of bits allowed for DH\0"
-/*  1810 */ "DH_BITS\0"
-/*  1818 */ "dh-bits\0"
-/*  1826 */ "Priorities string\0"
-/*  1844 */ "PRIORITY\0"
-/*  1853 */ "priority\0"
-/*  1862 */ "Certificate file or PKCS #11 URL to use\0"
-/*  1902 */ "X509CAFILE\0"
-/*  1913 */ "x509cafile\0"
-/*  1924 */ "CRL file to use\0"
-/*  1940 */ "X509CRLFILE\0"
-/*  1952 */ "x509crlfile\0"
-/*  1964 */ "PGP Key file to use\0"
-/*  1984 */ "PGPKEYFILE\0"
-/*  1995 */ "pgpkeyfile\0"
-/*  2006 */ "PGP Key ring file to use\0"
-/*  2031 */ "PGPKEYRING\0"
-/*  2042 */ "pgpkeyring\0"
-/*  2053 */ "PGP Public Key (certificate) file to use\0"
-/*  2094 */ "PGPCERTFILE\0"
-/*  2106 */ "pgpcertfile\0"
-/*  2118 */ "X.509 key file or PKCS #11 URL to use\0"
-/*  2156 */ "X509KEYFILE\0"
-/*  2168 */ "x509keyfile\0"
-/*  2180 */ "X.509 Certificate file or PKCS #11 URL to use\0"
-/*  2226 */ "X509CERTFILE\0"
-/*  2239 */ "x509certfile\0"
-/*  2252 */ "PGP subkey to use (hex or auto)\0"
-/*  2284 */ "PGPSUBKEY\0"
-/*  2294 */ "pgpsubkey\0"
-/*  2304 */ "SRP username to use\0"
-/*  2324 */ "SRPUSERNAME\0"
-/*  2336 */ "srpusername\0"
-/*  2348 */ "SRP password to use\0"
-/*  2368 */ "SRPPASSWD\0"
-/*  2378 */ "srppasswd\0"
-/*  2388 */ "PSK username to use\0"
-/*  2408 */ "PSKUSERNAME\0"
-/*  2420 */ "pskusername\0"
-/*  2432 */ "PSK key (in hex) to use\0"
-/*  2456 */ "PSKKEY\0"
-/*  2463 */ "pskkey\0"
-/*  2470 */ "The port or service to connect to\0"
-/*  2504 */ "PORT\0"
-/*  2509 */ "port\0"
-/*  2514 */ "Don't abort program if server certificate can't be validated\0"
-/*  2575 */ "INSECURE\0"
-/*  2584 */ "insecure\0"
-/*  2593 */ "Benchmark individual ciphers\0"
-/*  2622 */ "BENCHMARK_CIPHERS\0"
-/*  2640 */ "benchmark-ciphers\0"
-/*  2658 */ "Benchmark individual software ciphers (no hw acceleration)\0"
-/*  2717 */ "BENCHMARK_SOFT_CIPHERS\0"
-/*  2740 */ "benchmark-soft-ciphers\0"
-/*  2763 */ "Benchmark TLS key exchange methods\0"
-/*  2798 */ "BENCHMARK_TLS_KX\0"
-/*  2815 */ "benchmark-tls-kx\0"
-/*  2832 */ "Benchmark TLS ciphers\0"
-/*  2854 */ "BENCHMARK_TLS_CIPHERS\0"
-/*  2876 */ "benchmark-tls-ciphers\0"
-/*  2898 */ "Print a list of the supported algorithms and modes\0"
-/*  2949 */ "LIST\0"
-/*  2954 */ "list\0"
-/*  2959 */ "Display extended usage information and exit\0"
-/*  3003 */ "help\0"
-/*  3008 */ "Extended usage information passed thru pager\0"
-/*  3053 */ "more-help\0"
-/*  3063 */ "Output version information and exit\0"
-/*  3099 */ "version\0"
-/*  3107 */ "GNUTLS_CLI\0"
-/*  3118 */ "gnutls-cli - GnuTLS client - Ver. @VERSION@\n"
-            "USAGE:  %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [hostname]\n\0"
-/*  3231 */ "bug-gnutls@gnu.org\0"
-/*  3250 */ "\n\n\0"
-/*  3253 */ "\n"
-            "Simple client program to set up a TLS connection to some other computer.  It\n"
-            "sets up a TLS connection and forwards data from the standard input to the\n"
-            "secured socket and vice versa.\n\0"
-/*  3437 */ "gnutls-cli @VERSION@\0"
-/*  3458 */ "Usage: gnutls-cli [options] hostname\n"
-            "gnutls-cli --help for usage instructions.\n";
+static char const zDebugText[] =
+        "Enable debugging.";
+static char const zDebug_NAME[]              = "DEBUG";
+static char const zDebug_Name[]              = "debug";
+#define DEBUG_FLAGS       (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
 
 /*
- *  debug option description:
+ *  Verbose option description:
  */
-#define DEBUG_DESC      (gnutls_cli_opt_strs+890)
-#define DEBUG_NAME      (gnutls_cli_opt_strs+908)
-#define DEBUG_name      (gnutls_cli_opt_strs+914)
-#define DEBUG_FLAGS     (OPTST_DISABLED \
-        | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
+static char const zVerboseText[] =
+        "More verbose output";
+static char const zVerbose_NAME[]            = "VERBOSE";
+static char const zVerbose_Name[]            = "verbose";
+#define VERBOSE_FLAGS       (OPTST_DISABLED)
 
 /*
- *  verbose option description:
+ *  Tofu option description:
  */
-#define VERBOSE_DESC      (gnutls_cli_opt_strs+920)
-#define VERBOSE_NAME      (gnutls_cli_opt_strs+940)
-#define VERBOSE_name      (gnutls_cli_opt_strs+948)
-#define VERBOSE_FLAGS     (OPTST_DISABLED)
+static char const zTofuText[] =
+        "Enable trust on first use authentication";
+static char const zTofu_NAME[]               = "TOFU";
+static char const zNotTofu_Name[]            = "no-tofu";
+static char const zNotTofu_Pfx[]             = "no";
+#define zTofu_Name                   (zNotTofu_Name + 3)
+#define TOFU_FLAGS       (OPTST_DISABLED)
 
 /*
- *  tofu option description:
+ *  Ocsp option description:
  */
-#define TOFU_DESC      (gnutls_cli_opt_strs+956)
-#define TOFU_NAME      (gnutls_cli_opt_strs+997)
-#define NOT_TOFU_name  (gnutls_cli_opt_strs+1002)
-#define NOT_TOFU_PFX   (gnutls_cli_opt_strs+1010)
-#define TOFU_name      (NOT_TOFU_name + 3)
-#define TOFU_FLAGS     (OPTST_DISABLED)
+static char const zOcspText[] =
+        "Enable OCSP certificate verification";
+static char const zOcsp_NAME[]               = "OCSP";
+static char const zNotOcsp_Name[]            = "no-ocsp";
+static char const zNotOcsp_Pfx[]             = "no";
+#define zOcsp_Name                   (zNotOcsp_Name + 3)
+#define OCSP_FLAGS       (OPTST_DISABLED)
 
 /*
- *  ocsp option description:
+ *  Resume option description:
  */
-#define OCSP_DESC      (gnutls_cli_opt_strs+1013)
-#define OCSP_NAME      (gnutls_cli_opt_strs+1050)
-#define NOT_OCSP_name  (gnutls_cli_opt_strs+1055)
-#define NOT_OCSP_PFX   (gnutls_cli_opt_strs+1010)
-#define OCSP_name      (NOT_OCSP_name + 3)
-#define OCSP_FLAGS     (OPTST_DISABLED)
+static char const zResumeText[] =
+        "Establish a session and resume";
+static char const zResume_NAME[]             = "RESUME";
+static char const zResume_Name[]             = "resume";
+#define RESUME_FLAGS       (OPTST_DISABLED)
 
 /*
- *  resume option description:
+ *  Heartbeat option description:
  */
-#define RESUME_DESC      (gnutls_cli_opt_strs+1063)
-#define RESUME_NAME      (gnutls_cli_opt_strs+1094)
-#define RESUME_name      (gnutls_cli_opt_strs+1101)
-#define RESUME_FLAGS     (OPTST_DISABLED)
+static char const zHeartbeatText[] =
+        "Activate heartbeat support";
+static char const zHeartbeat_NAME[]          = "HEARTBEAT";
+static char const zHeartbeat_Name[]          = "heartbeat";
+#define HEARTBEAT_FLAGS       (OPTST_DISABLED)
 
 /*
- *  heartbeat option description:
+ *  Rehandshake option description:
  */
-#define HEARTBEAT_DESC      (gnutls_cli_opt_strs+1108)
-#define HEARTBEAT_NAME      (gnutls_cli_opt_strs+1135)
-#define HEARTBEAT_name      (gnutls_cli_opt_strs+1145)
-#define HEARTBEAT_FLAGS     (OPTST_DISABLED)
+static char const zRehandshakeText[] =
+        "Establish a session and rehandshake";
+static char const zRehandshake_NAME[]        = "REHANDSHAKE";
+static char const zRehandshake_Name[]        = "rehandshake";
+#define REHANDSHAKE_FLAGS       (OPTST_DISABLED)
 
 /*
- *  rehandshake option description:
+ *  Noticket option description:
  */
-#define REHANDSHAKE_DESC      (gnutls_cli_opt_strs+1155)
-#define REHANDSHAKE_NAME      (gnutls_cli_opt_strs+1191)
-#define REHANDSHAKE_name      (gnutls_cli_opt_strs+1203)
-#define REHANDSHAKE_FLAGS     (OPTST_DISABLED)
+static char const zNoticketText[] =
+        "Don't accept session tickets";
+static char const zNoticket_NAME[]           = "NOTICKET";
+static char const zNoticket_Name[]           = "noticket";
+#define NOTICKET_FLAGS       (OPTST_DISABLED)
 
 /*
- *  noticket option description:
+ *  Status_Request_Ocsp option description:
  */
-#define NOTICKET_DESC      (gnutls_cli_opt_strs+1215)
-#define NOTICKET_NAME      (gnutls_cli_opt_strs+1244)
-#define NOTICKET_name      (gnutls_cli_opt_strs+1253)
-#define NOTICKET_FLAGS     (OPTST_DISABLED)
+static char const zStatus_Request_OcspText[] =
+        "Request OCSP status request";
+static char const zStatus_Request_Ocsp_NAME[] = "STATUS_REQUEST_OCSP";
+static char const zStatus_Request_Ocsp_Name[]= "status-request-ocsp";
+#define STATUS_REQUEST_OCSP_FLAGS       (OPTST_DISABLED)
 
 /*
- *  starttls option description:
+ *  Starttls option description:
  */
-#define STARTTLS_DESC      (gnutls_cli_opt_strs+1262)
-#define STARTTLS_NAME      (gnutls_cli_opt_strs+1312)
-#define STARTTLS_name      (gnutls_cli_opt_strs+1321)
-#define STARTTLS_FLAGS     (OPTST_DISABLED)
+static char const zStarttlsText[] =
+        "Connect, establish a plain session and start TLS.";
+static char const zStarttls_NAME[]           = "STARTTLS";
+static char const zStarttls_Name[]           = "starttls";
+#define STARTTLS_FLAGS       (OPTST_DISABLED)
 
 /*
- *  udp option description:
+ *  Udp option description:
  */
-#define UDP_DESC      (gnutls_cli_opt_strs+1330)
-#define UDP_NAME      (gnutls_cli_opt_strs+1363)
-#define UDP_name      (gnutls_cli_opt_strs+1367)
-#define UDP_FLAGS     (OPTST_DISABLED)
+static char const zUdpText[] =
+        "Use DTLS (datagram TLS) over UDP";
+static char const zUdp_NAME[]                = "UDP";
+static char const zUdp_Name[]                = "udp";
+#define UDP_FLAGS       (OPTST_DISABLED)
 
 /*
- *  mtu option description:
+ *  Mtu option description:
  */
-#define MTU_DESC      (gnutls_cli_opt_strs+1371)
-#define MTU_NAME      (gnutls_cli_opt_strs+1396)
-#define MTU_name      (gnutls_cli_opt_strs+1400)
-#define MTU_FLAGS     (OPTST_DISABLED \
+static char const zMtuText[] =
+        "Set MTU for datagram TLS";
+static char const zMtu_NAME[]                = "MTU";
+static char const zMtu_Name[]                = "mtu";
+#define MTU_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
 
 /*
- *  crlf option description:
+ *  Crlf option description:
  */
-#define CRLF_DESC      (gnutls_cli_opt_strs+1404)
-#define CRLF_NAME      (gnutls_cli_opt_strs+1429)
-#define CRLF_name      (gnutls_cli_opt_strs+1434)
-#define CRLF_FLAGS     (OPTST_DISABLED)
+static char const zCrlfText[] =
+        "Send CR LF instead of LF";
+static char const zCrlf_NAME[]               = "CRLF";
+static char const zCrlf_Name[]               = "crlf";
+#define CRLF_FLAGS       (OPTST_DISABLED)
 
 /*
- *  x509fmtder option description:
+ *  X509fmtder option description:
  */
-#define X509FMTDER_DESC      (gnutls_cli_opt_strs+1439)
-#define X509FMTDER_NAME      (gnutls_cli_opt_strs+1484)
-#define X509FMTDER_name      (gnutls_cli_opt_strs+1495)
-#define X509FMTDER_FLAGS     (OPTST_DISABLED)
+static char const zX509fmtderText[] =
+        "Use DER format for certificates to read from";
+static char const zX509fmtder_NAME[]         = "X509FMTDER";
+static char const zX509fmtder_Name[]         = "x509fmtder";
+#define X509FMTDER_FLAGS       (OPTST_DISABLED)
 
 /*
- *  fingerprint option description:
+ *  Fingerprint option description:
  */
-#define FINGERPRINT_DESC      (gnutls_cli_opt_strs+1506)
-#define FINGERPRINT_NAME      (gnutls_cli_opt_strs+1555)
-#define FINGERPRINT_name      (gnutls_cli_opt_strs+1567)
-#define FINGERPRINT_FLAGS     (OPTST_DISABLED)
+static char const zFingerprintText[] =
+        "Send the openpgp fingerprint, instead of the key";
+static char const zFingerprint_NAME[]        = "FINGERPRINT";
+static char const zFingerprint_Name[]        = "fingerprint";
+#define FINGERPRINT_FLAGS       (OPTST_DISABLED)
 
 /*
- *  disable-extensions option description:
+ *  Disable_Extensions option description:
  */
-#define DISABLE_EXTENSIONS_DESC      (gnutls_cli_opt_strs+1579)
-#define DISABLE_EXTENSIONS_NAME      (gnutls_cli_opt_strs+1610)
-#define DISABLE_EXTENSIONS_name      (gnutls_cli_opt_strs+1629)
-#define DISABLE_EXTENSIONS_FLAGS     (OPTST_DISABLED)
+static char const zDisable_ExtensionsText[] =
+        "Disable all the TLS extensions";
+static char const zDisable_Extensions_NAME[] = "DISABLE_EXTENSIONS";
+static char const zDisable_Extensions_Name[] = "disable-extensions";
+#define DISABLE_EXTENSIONS_FLAGS       (OPTST_DISABLED)
 
 /*
- *  print-cert option description:
+ *  Print_Cert option description:
  */
-#define PRINT_CERT_DESC      (gnutls_cli_opt_strs+1648)
-#define PRINT_CERT_NAME      (gnutls_cli_opt_strs+1687)
-#define PRINT_CERT_name      (gnutls_cli_opt_strs+1698)
-#define PRINT_CERT_FLAGS     (OPTST_DISABLED)
+static char const zPrint_CertText[] =
+        "Print peer's certificate in PEM format";
+static char const zPrint_Cert_NAME[]         = "PRINT_CERT";
+static char const zPrint_Cert_Name[]         = "print-cert";
+#define PRINT_CERT_FLAGS       (OPTST_DISABLED)
 
 /*
- *  recordsize option description:
+ *  Recordsize option description:
  */
-#define RECORDSIZE_DESC      (gnutls_cli_opt_strs+1709)
-#define RECORDSIZE_NAME      (gnutls_cli_opt_strs+1746)
-#define RECORDSIZE_name      (gnutls_cli_opt_strs+1757)
-#define RECORDSIZE_FLAGS     (OPTST_DISABLED \
+static char const zRecordsizeText[] =
+        "The maximum record size to advertize";
+static char const zRecordsize_NAME[]         = "RECORDSIZE";
+static char const zRecordsize_Name[]         = "recordsize";
+#define RECORDSIZE_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
 
 /*
- *  dh-bits option description:
+ *  Dh_Bits option description:
  */
-#define DH_BITS_DESC      (gnutls_cli_opt_strs+1768)
-#define DH_BITS_NAME      (gnutls_cli_opt_strs+1810)
-#define DH_BITS_name      (gnutls_cli_opt_strs+1818)
-#define DH_BITS_FLAGS     (OPTST_DISABLED \
+static char const zDh_BitsText[] =
+        "The minimum number of bits allowed for DH";
+static char const zDh_Bits_NAME[]            = "DH_BITS";
+static char const zDh_Bits_Name[]            = "dh-bits";
+#define DH_BITS_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
 
 /*
- *  priority option description:
+ *  Priority option description:
  */
-#define PRIORITY_DESC      (gnutls_cli_opt_strs+1826)
-#define PRIORITY_NAME      (gnutls_cli_opt_strs+1844)
-#define PRIORITY_name      (gnutls_cli_opt_strs+1853)
-#define PRIORITY_FLAGS     (OPTST_DISABLED \
+static char const zPriorityText[] =
+        "Priorities string";
+static char const zPriority_NAME[]           = "PRIORITY";
+static char const zPriority_Name[]           = "priority";
+#define PRIORITY_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
 
 /*
- *  x509cafile option description:
+ *  X509cafile option description:
  */
-#define X509CAFILE_DESC      (gnutls_cli_opt_strs+1862)
-#define X509CAFILE_NAME      (gnutls_cli_opt_strs+1902)
-#define X509CAFILE_name      (gnutls_cli_opt_strs+1913)
-#define X509CAFILE_FLAGS     (OPTST_DISABLED \
+static char const zX509cafileText[] =
+        "Certificate file or PKCS #11 URL to use";
+static char const zX509cafile_NAME[]         = "X509CAFILE";
+static char const zX509cafile_Name[]         = "x509cafile";
+#define X509CAFILE_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
 
 /*
- *  x509crlfile option description:
+ *  X509crlfile option description:
  */
-#define X509CRLFILE_DESC      (gnutls_cli_opt_strs+1924)
-#define X509CRLFILE_NAME      (gnutls_cli_opt_strs+1940)
-#define X509CRLFILE_name      (gnutls_cli_opt_strs+1952)
-#define X509CRLFILE_FLAGS     (OPTST_DISABLED \
+static char const zX509crlfileText[] =
+        "CRL file to use";
+static char const zX509crlfile_NAME[]        = "X509CRLFILE";
+static char const zX509crlfile_Name[]        = "x509crlfile";
+#define X509CRLFILE_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
 
 /*
- *  pgpkeyfile option description:
+ *  Pgpkeyfile option description:
  */
-#define PGPKEYFILE_DESC      (gnutls_cli_opt_strs+1964)
-#define PGPKEYFILE_NAME      (gnutls_cli_opt_strs+1984)
-#define PGPKEYFILE_name      (gnutls_cli_opt_strs+1995)
-#define PGPKEYFILE_FLAGS     (OPTST_DISABLED \
+static char const zPgpkeyfileText[] =
+        "PGP Key file to use";
+static char const zPgpkeyfile_NAME[]         = "PGPKEYFILE";
+static char const zPgpkeyfile_Name[]         = "pgpkeyfile";
+#define PGPKEYFILE_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
 
 /*
- *  pgpkeyring option description:
+ *  Pgpkeyring option description:
  */
-#define PGPKEYRING_DESC      (gnutls_cli_opt_strs+2006)
-#define PGPKEYRING_NAME      (gnutls_cli_opt_strs+2031)
-#define PGPKEYRING_name      (gnutls_cli_opt_strs+2042)
-#define PGPKEYRING_FLAGS     (OPTST_DISABLED \
+static char const zPgpkeyringText[] =
+        "PGP Key ring file to use";
+static char const zPgpkeyring_NAME[]         = "PGPKEYRING";
+static char const zPgpkeyring_Name[]         = "pgpkeyring";
+#define PGPKEYRING_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
 
 /*
- *  pgpcertfile option description:
+ *  Pgpcertfile option description:
  */
-#define PGPCERTFILE_DESC      (gnutls_cli_opt_strs+2053)
-#define PGPCERTFILE_NAME      (gnutls_cli_opt_strs+2094)
-#define PGPCERTFILE_name      (gnutls_cli_opt_strs+2106)
-#define PGPCERTFILE_FLAGS     (OPTST_DISABLED \
+static char const zPgpcertfileText[] =
+        "PGP Public Key (certificate) file to use";
+static char const zPgpcertfile_NAME[]        = "PGPCERTFILE";
+static char const zPgpcertfile_Name[]        = "pgpcertfile";
+#define PGPCERTFILE_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
 
 /*
- *  x509keyfile option description:
+ *  X509keyfile option description:
  */
-#define X509KEYFILE_DESC      (gnutls_cli_opt_strs+2118)
-#define X509KEYFILE_NAME      (gnutls_cli_opt_strs+2156)
-#define X509KEYFILE_name      (gnutls_cli_opt_strs+2168)
-#define X509KEYFILE_FLAGS     (OPTST_DISABLED \
+static char const zX509keyfileText[] =
+        "X.509 key file or PKCS #11 URL to use";
+static char const zX509keyfile_NAME[]        = "X509KEYFILE";
+static char const zX509keyfile_Name[]        = "x509keyfile";
+#define X509KEYFILE_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
 
 /*
- *  x509certfile option description:
+ *  X509certfile option description:
  */
-#define X509CERTFILE_DESC      (gnutls_cli_opt_strs+2180)
-#define X509CERTFILE_NAME      (gnutls_cli_opt_strs+2226)
-#define X509CERTFILE_name      (gnutls_cli_opt_strs+2239)
-#define X509CERTFILE_FLAGS     (OPTST_DISABLED \
+static char const zX509certfileText[] =
+        "X.509 Certificate file or PKCS #11 URL to use";
+static char const zX509certfile_NAME[]       = "X509CERTFILE";
+static char const zX509certfile_Name[]       = "x509certfile";
+#define X509CERTFILE_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
 
 /*
- *  pgpsubkey option description:
+ *  Pgpsubkey option description:
  */
-#define PGPSUBKEY_DESC      (gnutls_cli_opt_strs+2252)
-#define PGPSUBKEY_NAME      (gnutls_cli_opt_strs+2284)
-#define PGPSUBKEY_name      (gnutls_cli_opt_strs+2294)
-#define PGPSUBKEY_FLAGS     (OPTST_DISABLED \
+static char const zPgpsubkeyText[] =
+        "PGP subkey to use (hex or auto)";
+static char const zPgpsubkey_NAME[]          = "PGPSUBKEY";
+static char const zPgpsubkey_Name[]          = "pgpsubkey";
+#define PGPSUBKEY_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
 
 /*
- *  srpusername option description:
+ *  Srpusername option description:
  */
-#define SRPUSERNAME_DESC      (gnutls_cli_opt_strs+2304)
-#define SRPUSERNAME_NAME      (gnutls_cli_opt_strs+2324)
-#define SRPUSERNAME_name      (gnutls_cli_opt_strs+2336)
-#define SRPUSERNAME_FLAGS     (OPTST_DISABLED \
+static char const zSrpusernameText[] =
+        "SRP username to use";
+static char const zSrpusername_NAME[]        = "SRPUSERNAME";
+static char const zSrpusername_Name[]        = "srpusername";
+#define SRPUSERNAME_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
 
 /*
- *  srppasswd option description:
+ *  Srppasswd option description:
  */
-#define SRPPASSWD_DESC      (gnutls_cli_opt_strs+2348)
-#define SRPPASSWD_NAME      (gnutls_cli_opt_strs+2368)
-#define SRPPASSWD_name      (gnutls_cli_opt_strs+2378)
-#define SRPPASSWD_FLAGS     (OPTST_DISABLED \
+static char const zSrppasswdText[] =
+        "SRP password to use";
+static char const zSrppasswd_NAME[]          = "SRPPASSWD";
+static char const zSrppasswd_Name[]          = "srppasswd";
+#define SRPPASSWD_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
 
 /*
- *  pskusername option description:
+ *  Pskusername option description:
  */
-#define PSKUSERNAME_DESC      (gnutls_cli_opt_strs+2388)
-#define PSKUSERNAME_NAME      (gnutls_cli_opt_strs+2408)
-#define PSKUSERNAME_name      (gnutls_cli_opt_strs+2420)
-#define PSKUSERNAME_FLAGS     (OPTST_DISABLED \
+static char const zPskusernameText[] =
+        "PSK username to use";
+static char const zPskusername_NAME[]        = "PSKUSERNAME";
+static char const zPskusername_Name[]        = "pskusername";
+#define PSKUSERNAME_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
 
 /*
- *  pskkey option description:
+ *  Pskkey option description:
  */
-#define PSKKEY_DESC      (gnutls_cli_opt_strs+2432)
-#define PSKKEY_NAME      (gnutls_cli_opt_strs+2456)
-#define PSKKEY_name      (gnutls_cli_opt_strs+2463)
-#define PSKKEY_FLAGS     (OPTST_DISABLED \
+static char const zPskkeyText[] =
+        "PSK key (in hex) to use";
+static char const zPskkey_NAME[]             = "PSKKEY";
+static char const zPskkey_Name[]             = "pskkey";
+#define PSKKEY_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
 
 /*
- *  port option description:
+ *  Port option description:
  */
-#define PORT_DESC      (gnutls_cli_opt_strs+2470)
-#define PORT_NAME      (gnutls_cli_opt_strs+2504)
-#define PORT_name      (gnutls_cli_opt_strs+2509)
-#define PORT_FLAGS     (OPTST_DISABLED \
+static char const zPortText[] =
+        "The port or service to connect to";
+static char const zPort_NAME[]               = "PORT";
+static char const zPort_Name[]               = "port";
+#define PORT_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
 
 /*
- *  insecure option description:
+ *  Insecure option description:
  */
-#define INSECURE_DESC      (gnutls_cli_opt_strs+2514)
-#define INSECURE_NAME      (gnutls_cli_opt_strs+2575)
-#define INSECURE_name      (gnutls_cli_opt_strs+2584)
-#define INSECURE_FLAGS     (OPTST_DISABLED)
+static char const zInsecureText[] =
+        "Don't abort program if server certificate can't be validated";
+static char const zInsecure_NAME[]           = "INSECURE";
+static char const zInsecure_Name[]           = "insecure";
+#define INSECURE_FLAGS       (OPTST_DISABLED)
 
 /*
- *  benchmark-ciphers option description:
+ *  Benchmark_Ciphers option description:
  */
-#define BENCHMARK_CIPHERS_DESC      (gnutls_cli_opt_strs+2593)
-#define BENCHMARK_CIPHERS_NAME      (gnutls_cli_opt_strs+2622)
-#define BENCHMARK_CIPHERS_name      (gnutls_cli_opt_strs+2640)
-#define BENCHMARK_CIPHERS_FLAGS     (OPTST_DISABLED)
+static char const zBenchmark_CiphersText[] =
+        "Benchmark individual ciphers";
+static char const zBenchmark_Ciphers_NAME[]  = "BENCHMARK_CIPHERS";
+static char const zBenchmark_Ciphers_Name[]  = "benchmark-ciphers";
+#define BENCHMARK_CIPHERS_FLAGS       (OPTST_DISABLED)
 
 /*
- *  benchmark-soft-ciphers option description:
+ *  Benchmark_Soft_Ciphers option description:
  */
-#define BENCHMARK_SOFT_CIPHERS_DESC      (gnutls_cli_opt_strs+2658)
-#define BENCHMARK_SOFT_CIPHERS_NAME      (gnutls_cli_opt_strs+2717)
-#define BENCHMARK_SOFT_CIPHERS_name      (gnutls_cli_opt_strs+2740)
-#define BENCHMARK_SOFT_CIPHERS_FLAGS     (OPTST_DISABLED)
+static char const zBenchmark_Soft_CiphersText[] =
+        "Benchmark individual software ciphers (no hw acceleration)";
+static char const zBenchmark_Soft_Ciphers_NAME[] = "BENCHMARK_SOFT_CIPHERS";
+static char const zBenchmark_Soft_Ciphers_Name[]= "benchmark-soft-ciphers";
+#define BENCHMARK_SOFT_CIPHERS_FLAGS       (OPTST_DISABLED)
 
 /*
- *  benchmark-tls-kx option description:
+ *  Benchmark_Tls_Kx option description:
  */
-#define BENCHMARK_TLS_KX_DESC      (gnutls_cli_opt_strs+2763)
-#define BENCHMARK_TLS_KX_NAME      (gnutls_cli_opt_strs+2798)
-#define BENCHMARK_TLS_KX_name      (gnutls_cli_opt_strs+2815)
-#define BENCHMARK_TLS_KX_FLAGS     (OPTST_DISABLED)
+static char const zBenchmark_Tls_KxText[] =
+        "Benchmark TLS key exchange methods";
+static char const zBenchmark_Tls_Kx_NAME[]   = "BENCHMARK_TLS_KX";
+static char const zBenchmark_Tls_Kx_Name[]   = "benchmark-tls-kx";
+#define BENCHMARK_TLS_KX_FLAGS       (OPTST_DISABLED)
 
 /*
- *  benchmark-tls-ciphers option description:
+ *  Benchmark_Tls_Ciphers option description:
  */
-#define BENCHMARK_TLS_CIPHERS_DESC      (gnutls_cli_opt_strs+2832)
-#define BENCHMARK_TLS_CIPHERS_NAME      (gnutls_cli_opt_strs+2854)
-#define BENCHMARK_TLS_CIPHERS_name      (gnutls_cli_opt_strs+2876)
-#define BENCHMARK_TLS_CIPHERS_FLAGS     (OPTST_DISABLED)
+static char const zBenchmark_Tls_CiphersText[] =
+        "Benchmark TLS ciphers";
+static char const zBenchmark_Tls_Ciphers_NAME[] = "BENCHMARK_TLS_CIPHERS";
+static char const zBenchmark_Tls_Ciphers_Name[]= "benchmark-tls-ciphers";
+#define BENCHMARK_TLS_CIPHERS_FLAGS       (OPTST_DISABLED)
 
 /*
- *  list option description:
+ *  List option description:
  */
-#define LIST_DESC      (gnutls_cli_opt_strs+2898)
-#define LIST_NAME      (gnutls_cli_opt_strs+2949)
-#define LIST_name      (gnutls_cli_opt_strs+2954)
-#define LIST_FLAGS     (OPTST_DISABLED)
+static char const zListText[] =
+        "Print a list of the supported algorithms and modes";
+static char const zList_NAME[]               = "LIST";
+static char const zList_Name[]               = "list";
+#define LIST_FLAGS       (OPTST_DISABLED)
 
 /*
  *  Help/More_Help/Version option descriptions:
  */
-#define HELP_DESC       (gnutls_cli_opt_strs+2959)
-#define HELP_name       (gnutls_cli_opt_strs+3003)
+static char const zHelpText[]          = "Display extended usage information and exit";
+static char const zHelp_Name[]         = "help";
 #ifdef HAVE_WORKING_FORK
-#define MORE_HELP_DESC  (gnutls_cli_opt_strs+3008)
-#define MORE_HELP_name  (gnutls_cli_opt_strs+3053)
-#define MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT)
+#define OPTST_MORE_HELP_FLAGS   (OPTST_IMM | OPTST_NO_INIT)
+static char const zMore_Help_Name[]    = "more-help";
+static char const zMore_HelpText[]     = "Extended usage information passed thru pager";
 #else
-#define MORE_HELP_DESC  NULL
-#define MORE_HELP_name  NULL
-#define MORE_HELP_FLAGS (OPTST_OMITTED | OPTST_NO_INIT)
+#define OPTST_MORE_HELP_FLAGS   (OPTST_OMITTED | OPTST_NO_INIT)
+#define zMore_Help_Name   NULL
+#define zMore_HelpText    NULL
 #endif
 #ifdef NO_OPTIONAL_OPT_ARGS
-#  define VER_FLAGS     (OPTST_IMM | OPTST_NO_INIT)
+#  define OPTST_VERSION_FLAGS   OPTST_IMM | OPTST_NO_INIT
 #else
-#  define VER_FLAGS     (OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \
-                         OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT)
+#  define OPTST_VERSION_FLAGS   OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \
+                                OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT
 #endif
-#define VER_DESC        (gnutls_cli_opt_strs+3063)
-#define VER_name        (gnutls_cli_opt_strs+3099)
+
+static char const zVersionText[]       = "Output version information and exit";
+static char const zVersion_Name[]      = "version";
 /*
  *  Declare option callback procedures
  */
 extern tOptProc
-    optionBooleanVal,   optionNestedVal,    optionNumericVal,
-    optionPagedUsage,   optionPrintVersion, optionResetOpt,
-    optionStackArg,     optionTimeDate,     optionTimeVal,
-    optionUnstackArg,   optionVendorOption;
+    optionBooleanVal,    optionNestedVal,     optionNumericVal,
+    optionPagedUsage,    optionPrintVersion,  optionResetOpt,
+    optionStackArg,      optionTimeDate,      optionTimeVal,
+    optionUnstackArg,    optionVersionStderr;
 static tOptProc
     doOptDebug,       doOptMtu,         doOptPgpcertfile, doOptPgpkeyfile,
     doOptPgpkeyring,  doOptRecordsize,  doOptX509crlfile, doUsageOpt;
-#define VER_PROC        optionPrintVersion
 
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-/**
- *  Define the gnutls-cli Option Descriptions.
- * This is an array of OPTION_CT entries, one for each
- * option that the gnutls-cli program responds to.
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ *  Define the Gnutls_Cli Option Descriptions.
  */
 static tOptDesc optDesc[OPTION_CT] = {
   {  /* entry idx, value */ 0, VALUE_OPT_DEBUG,
@@ -591,11 +497,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ DEBUG_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --debug */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ doOptDebug,
-     /* desc, NAME, name */ DEBUG_DESC, DEBUG_NAME, DEBUG_name,
+     /* desc, NAME, name */ zDebugText, zDebug_NAME, zDebug_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 1, VALUE_OPT_VERBOSE,
@@ -603,11 +509,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, NOLIMIT, 0,
      /* opt state flags  */ VERBOSE_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --verbose */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ VERBOSE_DESC, VERBOSE_NAME, VERBOSE_name,
+     /* desc, NAME, name */ zVerboseText, zVerbose_NAME, zVerbose_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 2, VALUE_OPT_TOFU,
@@ -615,35 +521,35 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ TOFU_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --tofu */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ TOFU_DESC, TOFU_NAME, TOFU_name,
-     /* disablement strs */ NOT_TOFU_name, NOT_TOFU_PFX },
+     /* desc, NAME, name */ zTofuText, zTofu_NAME, zTofu_Name,
+     /* disablement strs */ zNotTofu_Name, zNotTofu_Pfx },
 
   {  /* entry idx, value */ 3, VALUE_OPT_OCSP,
      /* equiv idx, value */ 3, VALUE_OPT_OCSP,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ OCSP_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --ocsp */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ OCSP_DESC, OCSP_NAME, OCSP_name,
-     /* disablement strs */ NOT_OCSP_name, NOT_OCSP_PFX },
+     /* desc, NAME, name */ zOcspText, zOcsp_NAME, zOcsp_Name,
+     /* disablement strs */ zNotOcsp_Name, zNotOcsp_Pfx },
 
   {  /* entry idx, value */ 4, VALUE_OPT_RESUME,
      /* equiv idx, value */ 4, VALUE_OPT_RESUME,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ RESUME_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --resume */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ RESUME_DESC, RESUME_NAME, RESUME_name,
+     /* desc, NAME, name */ zResumeText, zResume_NAME, zResume_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 5, VALUE_OPT_HEARTBEAT,
@@ -651,11 +557,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ HEARTBEAT_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --heartbeat */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ HEARTBEAT_DESC, HEARTBEAT_NAME, HEARTBEAT_name,
+     /* desc, NAME, name */ zHeartbeatText, zHeartbeat_NAME, zHeartbeat_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 6, VALUE_OPT_REHANDSHAKE,
@@ -663,11 +569,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ REHANDSHAKE_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --rehandshake */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ REHANDSHAKE_DESC, REHANDSHAKE_NAME, REHANDSHAKE_name,
+     /* desc, NAME, name */ zRehandshakeText, zRehandshake_NAME, zRehandshake_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 7, VALUE_OPT_NOTICKET,
@@ -675,389 +581,401 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ NOTICKET_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --noticket */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ NOTICKET_DESC, NOTICKET_NAME, NOTICKET_name,
+     /* desc, NAME, name */ zNoticketText, zNoticket_NAME, zNoticket_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 8, VALUE_OPT_STARTTLS,
-     /* equiv idx, value */ 8, VALUE_OPT_STARTTLS,
+  {  /* entry idx, value */ 8, VALUE_OPT_STATUS_REQUEST_OCSP,
+     /* equiv idx, value */ 8, VALUE_OPT_STATUS_REQUEST_OCSP,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ STATUS_REQUEST_OCSP_FLAGS, 0,
+     /* last opt argumnt */ { NULL },
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ zStatus_Request_OcspText, zStatus_Request_Ocsp_NAME, zStatus_Request_Ocsp_Name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 9, VALUE_OPT_STARTTLS,
+     /* equiv idx, value */ 9, VALUE_OPT_STARTTLS,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ STARTTLS_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --starttls */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ STARTTLS_DESC, STARTTLS_NAME, STARTTLS_name,
+     /* desc, NAME, name */ zStarttlsText, zStarttls_NAME, zStarttls_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 9, VALUE_OPT_UDP,
-     /* equiv idx, value */ 9, VALUE_OPT_UDP,
+  {  /* entry idx, value */ 10, VALUE_OPT_UDP,
+     /* equiv idx, value */ 10, VALUE_OPT_UDP,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ UDP_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --udp */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ UDP_DESC, UDP_NAME, UDP_name,
+     /* desc, NAME, name */ zUdpText, zUdp_NAME, zUdp_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 10, VALUE_OPT_MTU,
-     /* equiv idx, value */ 10, VALUE_OPT_MTU,
+  {  /* entry idx, value */ 11, VALUE_OPT_MTU,
+     /* equiv idx, value */ 11, VALUE_OPT_MTU,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ MTU_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --mtu */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ doOptMtu,
-     /* desc, NAME, name */ MTU_DESC, MTU_NAME, MTU_name,
+     /* desc, NAME, name */ zMtuText, zMtu_NAME, zMtu_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 11, VALUE_OPT_CRLF,
-     /* equiv idx, value */ 11, VALUE_OPT_CRLF,
+  {  /* entry idx, value */ 12, VALUE_OPT_CRLF,
+     /* equiv idx, value */ 12, VALUE_OPT_CRLF,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ CRLF_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --crlf */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ CRLF_DESC, CRLF_NAME, CRLF_name,
+     /* desc, NAME, name */ zCrlfText, zCrlf_NAME, zCrlf_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 12, VALUE_OPT_X509FMTDER,
-     /* equiv idx, value */ 12, VALUE_OPT_X509FMTDER,
+  {  /* entry idx, value */ 13, VALUE_OPT_X509FMTDER,
+     /* equiv idx, value */ 13, VALUE_OPT_X509FMTDER,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ X509FMTDER_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --x509fmtder */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ X509FMTDER_DESC, X509FMTDER_NAME, X509FMTDER_name,
+     /* desc, NAME, name */ zX509fmtderText, zX509fmtder_NAME, zX509fmtder_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 13, VALUE_OPT_FINGERPRINT,
-     /* equiv idx, value */ 13, VALUE_OPT_FINGERPRINT,
+  {  /* entry idx, value */ 14, VALUE_OPT_FINGERPRINT,
+     /* equiv idx, value */ 14, VALUE_OPT_FINGERPRINT,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ FINGERPRINT_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --fingerprint */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ FINGERPRINT_DESC, FINGERPRINT_NAME, FINGERPRINT_name,
+     /* desc, NAME, name */ zFingerprintText, zFingerprint_NAME, zFingerprint_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 14, VALUE_OPT_DISABLE_EXTENSIONS,
-     /* equiv idx, value */ 14, VALUE_OPT_DISABLE_EXTENSIONS,
+  {  /* entry idx, value */ 15, VALUE_OPT_DISABLE_EXTENSIONS,
+     /* equiv idx, value */ 15, VALUE_OPT_DISABLE_EXTENSIONS,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ DISABLE_EXTENSIONS_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --disable-extensions */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ DISABLE_EXTENSIONS_DESC, DISABLE_EXTENSIONS_NAME, DISABLE_EXTENSIONS_name,
+     /* desc, NAME, name */ zDisable_ExtensionsText, zDisable_Extensions_NAME, zDisable_Extensions_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 15, VALUE_OPT_PRINT_CERT,
-     /* equiv idx, value */ 15, VALUE_OPT_PRINT_CERT,
+  {  /* entry idx, value */ 16, VALUE_OPT_PRINT_CERT,
+     /* equiv idx, value */ 16, VALUE_OPT_PRINT_CERT,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ PRINT_CERT_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --print-cert */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ PRINT_CERT_DESC, PRINT_CERT_NAME, PRINT_CERT_name,
+     /* desc, NAME, name */ zPrint_CertText, zPrint_Cert_NAME, zPrint_Cert_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 16, VALUE_OPT_RECORDSIZE,
-     /* equiv idx, value */ 16, VALUE_OPT_RECORDSIZE,
+  {  /* entry idx, value */ 17, VALUE_OPT_RECORDSIZE,
+     /* equiv idx, value */ 17, VALUE_OPT_RECORDSIZE,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ RECORDSIZE_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --recordsize */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ doOptRecordsize,
-     /* desc, NAME, name */ RECORDSIZE_DESC, RECORDSIZE_NAME, RECORDSIZE_name,
+     /* desc, NAME, name */ zRecordsizeText, zRecordsize_NAME, zRecordsize_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 17, VALUE_OPT_DH_BITS,
-     /* equiv idx, value */ 17, VALUE_OPT_DH_BITS,
+  {  /* entry idx, value */ 18, VALUE_OPT_DH_BITS,
+     /* equiv idx, value */ 18, VALUE_OPT_DH_BITS,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ DH_BITS_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --dh-bits */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ optionNumericVal,
-     /* desc, NAME, name */ DH_BITS_DESC, DH_BITS_NAME, DH_BITS_name,
+     /* desc, NAME, name */ zDh_BitsText, zDh_Bits_NAME, zDh_Bits_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 18, VALUE_OPT_PRIORITY,
-     /* equiv idx, value */ 18, VALUE_OPT_PRIORITY,
+  {  /* entry idx, value */ 19, VALUE_OPT_PRIORITY,
+     /* equiv idx, value */ 19, VALUE_OPT_PRIORITY,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ PRIORITY_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --priority */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ PRIORITY_DESC, PRIORITY_NAME, PRIORITY_name,
+     /* desc, NAME, name */ zPriorityText, zPriority_NAME, zPriority_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 19, VALUE_OPT_X509CAFILE,
-     /* equiv idx, value */ 19, VALUE_OPT_X509CAFILE,
+  {  /* entry idx, value */ 20, VALUE_OPT_X509CAFILE,
+     /* equiv idx, value */ 20, VALUE_OPT_X509CAFILE,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ X509CAFILE_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --x509cafile */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ X509CAFILE_DESC, X509CAFILE_NAME, X509CAFILE_name,
+     /* desc, NAME, name */ zX509cafileText, zX509cafile_NAME, zX509cafile_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 20, VALUE_OPT_X509CRLFILE,
-     /* equiv idx, value */ 20, VALUE_OPT_X509CRLFILE,
+  {  /* entry idx, value */ 21, VALUE_OPT_X509CRLFILE,
+     /* equiv idx, value */ 21, VALUE_OPT_X509CRLFILE,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ X509CRLFILE_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --x509crlfile */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ doOptX509crlfile,
-     /* desc, NAME, name */ X509CRLFILE_DESC, X509CRLFILE_NAME, X509CRLFILE_name,
+     /* desc, NAME, name */ zX509crlfileText, zX509crlfile_NAME, zX509crlfile_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 21, VALUE_OPT_PGPKEYFILE,
-     /* equiv idx, value */ 21, VALUE_OPT_PGPKEYFILE,
+  {  /* entry idx, value */ 22, VALUE_OPT_PGPKEYFILE,
+     /* equiv idx, value */ 22, VALUE_OPT_PGPKEYFILE,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ PGPKEYFILE_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --pgpkeyfile */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ doOptPgpkeyfile,
-     /* desc, NAME, name */ PGPKEYFILE_DESC, PGPKEYFILE_NAME, PGPKEYFILE_name,
+     /* desc, NAME, name */ zPgpkeyfileText, zPgpkeyfile_NAME, zPgpkeyfile_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 22, VALUE_OPT_PGPKEYRING,
-     /* equiv idx, value */ 22, VALUE_OPT_PGPKEYRING,
+  {  /* entry idx, value */ 23, VALUE_OPT_PGPKEYRING,
+     /* equiv idx, value */ 23, VALUE_OPT_PGPKEYRING,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ PGPKEYRING_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --pgpkeyring */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ doOptPgpkeyring,
-     /* desc, NAME, name */ PGPKEYRING_DESC, PGPKEYRING_NAME, PGPKEYRING_name,
+     /* desc, NAME, name */ zPgpkeyringText, zPgpkeyring_NAME, zPgpkeyring_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 23, VALUE_OPT_PGPCERTFILE,
-     /* equiv idx, value */ 23, VALUE_OPT_PGPCERTFILE,
+  {  /* entry idx, value */ 24, VALUE_OPT_PGPCERTFILE,
+     /* equiv idx, value */ 24, VALUE_OPT_PGPCERTFILE,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ PGPCERTFILE_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --pgpcertfile */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ doOptPgpcertfile,
-     /* desc, NAME, name */ PGPCERTFILE_DESC, PGPCERTFILE_NAME, PGPCERTFILE_name,
+     /* desc, NAME, name */ zPgpcertfileText, zPgpcertfile_NAME, zPgpcertfile_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 24, VALUE_OPT_X509KEYFILE,
-     /* equiv idx, value */ 24, VALUE_OPT_X509KEYFILE,
+  {  /* entry idx, value */ 25, VALUE_OPT_X509KEYFILE,
+     /* equiv idx, value */ 25, VALUE_OPT_X509KEYFILE,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ X509KEYFILE_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --x509keyfile */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ X509KEYFILE_DESC, X509KEYFILE_NAME, X509KEYFILE_name,
+     /* desc, NAME, name */ zX509keyfileText, zX509keyfile_NAME, zX509keyfile_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 25, VALUE_OPT_X509CERTFILE,
-     /* equiv idx, value */ 25, VALUE_OPT_X509CERTFILE,
+  {  /* entry idx, value */ 26, VALUE_OPT_X509CERTFILE,
+     /* equiv idx, value */ 26, VALUE_OPT_X509CERTFILE,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ X509CERTFILE_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --x509certfile */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ X509CERTFILE_DESC, X509CERTFILE_NAME, X509CERTFILE_name,
+     /* desc, NAME, name */ zX509certfileText, zX509certfile_NAME, zX509certfile_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 26, VALUE_OPT_PGPSUBKEY,
-     /* equiv idx, value */ 26, VALUE_OPT_PGPSUBKEY,
+  {  /* entry idx, value */ 27, VALUE_OPT_PGPSUBKEY,
+     /* equiv idx, value */ 27, VALUE_OPT_PGPSUBKEY,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ PGPSUBKEY_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --pgpsubkey */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ PGPSUBKEY_DESC, PGPSUBKEY_NAME, PGPSUBKEY_name,
+     /* desc, NAME, name */ zPgpsubkeyText, zPgpsubkey_NAME, zPgpsubkey_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 27, VALUE_OPT_SRPUSERNAME,
-     /* equiv idx, value */ 27, VALUE_OPT_SRPUSERNAME,
+  {  /* entry idx, value */ 28, VALUE_OPT_SRPUSERNAME,
+     /* equiv idx, value */ 28, VALUE_OPT_SRPUSERNAME,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ SRPUSERNAME_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --srpusername */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ SRPUSERNAME_DESC, SRPUSERNAME_NAME, SRPUSERNAME_name,
+     /* desc, NAME, name */ zSrpusernameText, zSrpusername_NAME, zSrpusername_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 28, VALUE_OPT_SRPPASSWD,
-     /* equiv idx, value */ 28, VALUE_OPT_SRPPASSWD,
+  {  /* entry idx, value */ 29, VALUE_OPT_SRPPASSWD,
+     /* equiv idx, value */ 29, VALUE_OPT_SRPPASSWD,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ SRPPASSWD_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --srppasswd */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ SRPPASSWD_DESC, SRPPASSWD_NAME, SRPPASSWD_name,
+     /* desc, NAME, name */ zSrppasswdText, zSrppasswd_NAME, zSrppasswd_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 29, VALUE_OPT_PSKUSERNAME,
-     /* equiv idx, value */ 29, VALUE_OPT_PSKUSERNAME,
+  {  /* entry idx, value */ 30, VALUE_OPT_PSKUSERNAME,
+     /* equiv idx, value */ 30, VALUE_OPT_PSKUSERNAME,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ PSKUSERNAME_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --pskusername */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ PSKUSERNAME_DESC, PSKUSERNAME_NAME, PSKUSERNAME_name,
+     /* desc, NAME, name */ zPskusernameText, zPskusername_NAME, zPskusername_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 30, VALUE_OPT_PSKKEY,
-     /* equiv idx, value */ 30, VALUE_OPT_PSKKEY,
+  {  /* entry idx, value */ 31, VALUE_OPT_PSKKEY,
+     /* equiv idx, value */ 31, VALUE_OPT_PSKKEY,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ PSKKEY_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --pskkey */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ PSKKEY_DESC, PSKKEY_NAME, PSKKEY_name,
+     /* desc, NAME, name */ zPskkeyText, zPskkey_NAME, zPskkey_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 31, VALUE_OPT_PORT,
-     /* equiv idx, value */ 31, VALUE_OPT_PORT,
+  {  /* entry idx, value */ 32, VALUE_OPT_PORT,
+     /* equiv idx, value */ 32, VALUE_OPT_PORT,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ PORT_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --port */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ PORT_DESC, PORT_NAME, PORT_name,
+     /* desc, NAME, name */ zPortText, zPort_NAME, zPort_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 32, VALUE_OPT_INSECURE,
-     /* equiv idx, value */ 32, VALUE_OPT_INSECURE,
+  {  /* entry idx, value */ 33, VALUE_OPT_INSECURE,
+     /* equiv idx, value */ 33, VALUE_OPT_INSECURE,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ INSECURE_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --insecure */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ INSECURE_DESC, INSECURE_NAME, INSECURE_name,
+     /* desc, NAME, name */ zInsecureText, zInsecure_NAME, zInsecure_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 33, VALUE_OPT_BENCHMARK_CIPHERS,
-     /* equiv idx, value */ 33, VALUE_OPT_BENCHMARK_CIPHERS,
+  {  /* entry idx, value */ 34, VALUE_OPT_BENCHMARK_CIPHERS,
+     /* equiv idx, value */ 34, VALUE_OPT_BENCHMARK_CIPHERS,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ BENCHMARK_CIPHERS_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --benchmark-ciphers */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ BENCHMARK_CIPHERS_DESC, BENCHMARK_CIPHERS_NAME, BENCHMARK_CIPHERS_name,
+     /* desc, NAME, name */ zBenchmark_CiphersText, zBenchmark_Ciphers_NAME, zBenchmark_Ciphers_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 34, VALUE_OPT_BENCHMARK_SOFT_CIPHERS,
-     /* equiv idx, value */ 34, VALUE_OPT_BENCHMARK_SOFT_CIPHERS,
+  {  /* entry idx, value */ 35, VALUE_OPT_BENCHMARK_SOFT_CIPHERS,
+     /* equiv idx, value */ 35, VALUE_OPT_BENCHMARK_SOFT_CIPHERS,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ BENCHMARK_SOFT_CIPHERS_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --benchmark-soft-ciphers */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ BENCHMARK_SOFT_CIPHERS_DESC, BENCHMARK_SOFT_CIPHERS_NAME, BENCHMARK_SOFT_CIPHERS_name,
+     /* desc, NAME, name */ zBenchmark_Soft_CiphersText, zBenchmark_Soft_Ciphers_NAME, zBenchmark_Soft_Ciphers_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 35, VALUE_OPT_BENCHMARK_TLS_KX,
-     /* equiv idx, value */ 35, VALUE_OPT_BENCHMARK_TLS_KX,
+  {  /* entry idx, value */ 36, VALUE_OPT_BENCHMARK_TLS_KX,
+     /* equiv idx, value */ 36, VALUE_OPT_BENCHMARK_TLS_KX,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ BENCHMARK_TLS_KX_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --benchmark-tls-kx */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ BENCHMARK_TLS_KX_DESC, BENCHMARK_TLS_KX_NAME, BENCHMARK_TLS_KX_name,
+     /* desc, NAME, name */ zBenchmark_Tls_KxText, zBenchmark_Tls_Kx_NAME, zBenchmark_Tls_Kx_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 36, VALUE_OPT_BENCHMARK_TLS_CIPHERS,
-     /* equiv idx, value */ 36, VALUE_OPT_BENCHMARK_TLS_CIPHERS,
+  {  /* entry idx, value */ 37, VALUE_OPT_BENCHMARK_TLS_CIPHERS,
+     /* equiv idx, value */ 37, VALUE_OPT_BENCHMARK_TLS_CIPHERS,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ BENCHMARK_TLS_CIPHERS_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --benchmark-tls-ciphers */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ BENCHMARK_TLS_CIPHERS_DESC, BENCHMARK_TLS_CIPHERS_NAME, BENCHMARK_TLS_CIPHERS_name,
+     /* desc, NAME, name */ zBenchmark_Tls_CiphersText, zBenchmark_Tls_Ciphers_NAME, zBenchmark_Tls_Ciphers_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 37, VALUE_OPT_LIST,
-     /* equiv idx, value */ 37, VALUE_OPT_LIST,
+  {  /* entry idx, value */ 38, VALUE_OPT_LIST,
+     /* equiv idx, value */ 38, VALUE_OPT_LIST,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ LIST_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --list */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ LIST_DESC, LIST_NAME, LIST_name,
+     /* desc, NAME, name */ zListText, zList_NAME, zList_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ INDEX_OPT_VERSION, VALUE_OPT_VERSION,
-     /* equiv idx value  */ NO_EQUIVALENT, VALUE_OPT_VERSION,
+     /* equiv idx value  */ NO_EQUIVALENT, 0,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
-     /* opt state flags  */ VER_FLAGS, 0,
+     /* opt state flags  */ OPTST_VERSION_FLAGS, 0,
      /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
-     /* option proc      */ VER_PROC,
-     /* desc, NAME, name */ VER_DESC, NULL, VER_name,
+     /* option proc      */ optionPrintVersion,
+     /* desc, NAME, name */ zVersionText, NULL, zVersion_Name,
      /* disablement strs */ NULL, NULL },
 
 
 
   {  /* entry idx, value */ INDEX_OPT_HELP, VALUE_OPT_HELP,
-     /* equiv idx value  */ NO_EQUIVALENT, VALUE_OPT_HELP,
+     /* equiv idx value  */ NO_EQUIVALENT, 0,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ OPTST_IMM | OPTST_NO_INIT, 0,
@@ -1065,36 +983,41 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ doUsageOpt,
-     /* desc, NAME, name */ HELP_DESC, NULL, HELP_name,
+     /* desc, NAME, name */ zHelpText, NULL, zHelp_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ INDEX_OPT_MORE_HELP, VALUE_OPT_MORE_HELP,
-     /* equiv idx value  */ NO_EQUIVALENT, VALUE_OPT_MORE_HELP,
+     /* equiv idx value  */ NO_EQUIVALENT, 0,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
-     /* opt state flags  */ MORE_HELP_FLAGS, 0,
+     /* opt state flags  */ OPTST_MORE_HELP_FLAGS, 0,
      /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL,  NULL,
      /* option proc      */ optionPagedUsage,
-     /* desc, NAME, name */ MORE_HELP_DESC, NULL, MORE_HELP_name,
+     /* desc, NAME, name */ zMore_HelpText, NULL, zMore_Help_Name,
      /* disablement strs */ NULL, NULL }
 };
 
-
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
- *  Define the gnutls-cli Option Environment
+ *  Define the Gnutls_Cli Option Environment
  */
-#define zPROGNAME       (gnutls_cli_opt_strs+3107)
-#define zUsageTitle     (gnutls_cli_opt_strs+3118)
-#define zRcName         NULL
-#define apzHomeList     NULL
-#define zBugsAddr       (gnutls_cli_opt_strs+3231)
-#define zExplain        (gnutls_cli_opt_strs+3250)
-#define zDetail         (gnutls_cli_opt_strs+3253)
-#define zFullVersion    (gnutls_cli_opt_strs+3437)
-/* extracted from optcode.tlib near line 350 */
+static char const zPROGNAME[11] = "GNUTLS_CLI";
+static char const zUsageTitle[113] =
+"gnutls-cli - GnuTLS client - Ver. @VERSION@\n\
+USAGE:  %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [hostname]\n";
+#define zRcName     NULL
+#define apzHomeList NULL
+
+static char const zBugsAddr[19]    = "bug-gnutls@gnu.org";
+static char const zExplain[] = "\n\n";
+static char const zDetail[195] = "\n\
+Simple client program to set up a TLS connection to some other computer.\n\
+It sets up a TLS connection and forwards data from the standard input\n\
+to the secured socket and vice versa.\n";
+static char const zFullVersion[] = GNUTLS_CLI_FULL_VERSION;
+/* extracted from optcode.tlib near line 515 */
 
 #if defined(ENABLE_NLS)
 # define OPTPROC_BASE OPTPROC_TRANSLATE | OPTPROC_NXLAT_OPT
@@ -1105,42 +1028,84 @@ static tOptDesc optDesc[OPTION_CT] = {
 #endif /* ENABLE_NLS */
 
 
-#define gnutls_cli_full_usage (NULL)
+#define gnutls_cli_full_usage NULL
+static char const gnutls_cli_short_usage[] =
+       "Usage: gnutls-cli [options] hostname\n\
+gnutls-cli --help for usage instructions.\n";
+
+#ifndef  PKGDATADIR
+# define PKGDATADIR ""
+#endif
 
-#define gnutls_cli_short_usage (gnutls_cli_opt_strs+3458)
+#ifndef  WITH_PACKAGER
+# define gnutls_cli_packager_info NULL
+#else
+static char const gnutls_cli_packager_info[] =
+    "Packaged by " WITH_PACKAGER
 
-#endif /* not defined __doxygen__ */
+# ifdef WITH_PACKAGER_VERSION
+        " ("WITH_PACKAGER_VERSION")"
+# endif
+
+# ifdef WITH_PACKAGER_BUG_REPORTS
+    "\nReport gnutls_cli bugs to " WITH_PACKAGER_BUG_REPORTS
+# endif
+    "\n";
+#endif
+
+tOptions gnutls_cliOptions = {
+    OPTIONS_STRUCT_VERSION,
+    0, NULL,                    /* original argc + argv    */
+    ( OPTPROC_BASE
+    + OPTPROC_ERRSTOP
+    + OPTPROC_SHORTOPT
+    + OPTPROC_LONGOPT
+    + OPTPROC_NO_REQ_OPT
+    + OPTPROC_NEGATIONS
+    + OPTPROC_REORDER
+    + OPTPROC_GNUUSAGE
+    + OPTPROC_MISUSE ),
+    0, NULL,                    /* current option index, current option */
+    NULL,         NULL,         zPROGNAME,
+    zRcName,      zCopyright,   zLicenseDescrip,
+    zFullVersion, apzHomeList,  zUsageTitle,
+    zExplain,     zDetail,      optDesc,
+    zBugsAddr,                  /* address to send bugs to */
+    NULL, NULL,                 /* extensions/saved state  */
+    optionUsage, /* usage procedure */
+    translate_option_strings,   /* translation procedure */
+    /*
+     *  Indexes to special options
+     */
+    { INDEX_OPT_MORE_HELP, /* more-help option index */
+      NO_EQUIVALENT, /* save option index */
+      NO_EQUIVALENT, /* '-#' option index */
+      NO_EQUIVALENT /* index of default opt */
+    },
+    42 /* full option count */, 39 /* user option count */,
+    gnutls_cli_full_usage, gnutls_cli_short_usage,
+    NULL, NULL,
+    PKGDATADIR, gnutls_cli_packager_info
+};
 
 /*
  *  Create the static procedure(s) declared above.
  */
-/**
- * The callout function that invokes the optionUsage function.
- *
- * @param pOptions the AutoOpts option description structure
- * @param pOptDesc the descriptor for the "help" (usage) option.
- * @noreturn
- */
 static void
 doUsageOpt(tOptions * pOptions, tOptDesc * pOptDesc)
 {
-    optionUsage(&gnutls_cliOptions, GNUTLS_CLI_EXIT_SUCCESS);
-    /* NOTREACHED */
-    (void)pOptDesc;
     (void)pOptions;
+    USAGE(GNUTLS_CLI_EXIT_SUCCESS);
 }
 
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-/**
- * Code to handle the debug option.
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
- * @param pOptions the gnutls-cli options data structure
- * @param pOptDesc the option descriptor for this option.
+ *   For the debug option.
  */
 static void
 doOptDebug(tOptions* pOptions, tOptDesc* pOptDesc)
 {
-    static struct {long rmin, rmax;} const rng[1] = {
+    static const struct {long const rmin, rmax;} rng[1] = {
         { 0 ,  9999 } };
     int  ix;
 
@@ -1166,17 +1131,14 @@ emit_ranges:
     optionShowRange(pOptions, pOptDesc, (void *)rng, 1);
 }
 
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-/**
- * Code to handle the mtu option.
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
- * @param pOptions the gnutls-cli options data structure
- * @param pOptDesc the option descriptor for this option.
+ *   For the mtu option.
  */
 static void
 doOptMtu(tOptions* pOptions, tOptDesc* pOptDesc)
 {
-    static struct {long rmin, rmax;} const rng[1] = {
+    static const struct {long const rmin, rmax;} rng[1] = {
         { 0, 17000 } };
     int  ix;
 
@@ -1202,17 +1164,14 @@ emit_ranges:
     optionShowRange(pOptions, pOptDesc, (void *)rng, 1);
 }
 
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-/**
- * Code to handle the recordsize option.
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
- * @param pOptions the gnutls-cli options data structure
- * @param pOptDesc the option descriptor for this option.
+ *   For the recordsize option.
  */
 static void
 doOptRecordsize(tOptions* pOptions, tOptDesc* pOptDesc)
 {
-    static struct {long rmin, rmax;} const rng[1] = {
+    static const struct {long const rmin, rmax;} rng[1] = {
         { 0, 4096 } };
     int  ix;
 
@@ -1238,12 +1197,9 @@ emit_ranges:
     optionShowRange(pOptions, pOptDesc, (void *)rng, 1);
 }
 
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-/**
- * Code to handle the x509crlfile option.
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
- * @param pOptions the gnutls-cli options data structure
- * @param pOptDesc the option descriptor for this option.
+ *   For the x509crlfile option.
  */
 static void
 doOptX509crlfile(tOptions* pOptions, tOptDesc* pOptDesc)
@@ -1259,12 +1215,9 @@ doOptX509crlfile(tOptions* pOptions, tOptDesc* pOptDesc)
     optionFileCheck(pOptions, pOptDesc, type, mode);
 }
 
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-/**
- * Code to handle the pgpkeyfile option.
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
- * @param pOptions the gnutls-cli options data structure
- * @param pOptDesc the option descriptor for this option.
+ *   For the pgpkeyfile option.
  */
 static void
 doOptPgpkeyfile(tOptions* pOptions, tOptDesc* pOptDesc)
@@ -1280,12 +1233,9 @@ doOptPgpkeyfile(tOptions* pOptions, tOptDesc* pOptDesc)
     optionFileCheck(pOptions, pOptDesc, type, mode);
 }
 
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-/**
- * Code to handle the pgpkeyring option.
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
- * @param pOptions the gnutls-cli options data structure
- * @param pOptDesc the option descriptor for this option.
+ *   For the pgpkeyring option.
  */
 static void
 doOptPgpkeyring(tOptions* pOptions, tOptDesc* pOptDesc)
@@ -1301,12 +1251,9 @@ doOptPgpkeyring(tOptions* pOptions, tOptDesc* pOptDesc)
     optionFileCheck(pOptions, pOptDesc, type, mode);
 }
 
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-/**
- * Code to handle the pgpcertfile option.
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
- * @param pOptions the gnutls-cli options data structure
- * @param pOptDesc the option descriptor for this option.
+ *   For the pgpcertfile option.
  */
 static void
 doOptPgpcertfile(tOptions* pOptions, tOptDesc* pOptDesc)
@@ -1321,75 +1268,7 @@ doOptPgpcertfile(tOptions* pOptions, tOptDesc* pOptDesc)
 
     optionFileCheck(pOptions, pOptDesc, type, mode);
 }
-/* extracted from optmain.tlib near line 1113 */
-
-/**
- * The directory containing the data associated with gnutls-cli.
- */
-#ifndef  PKGDATADIR
-# define PKGDATADIR ""
-#endif
-
-/**
- * Information about the person or institution that packaged gnutls-cli
- * for the current distribution.
- */
-#ifndef  WITH_PACKAGER
-# define gnutls_cli_packager_info NULL
-#else
-static char const gnutls_cli_packager_info[] =
-    "Packaged by " WITH_PACKAGER
-
-# ifdef WITH_PACKAGER_VERSION
-        " ("WITH_PACKAGER_VERSION")"
-# endif
-
-# ifdef WITH_PACKAGER_BUG_REPORTS
-    "\nReport gnutls_cli bugs to " WITH_PACKAGER_BUG_REPORTS
-# endif
-    "\n";
-#endif
-#ifndef __doxygen__
-
-#endif /* __doxygen__ */
-/**
- * The option definitions for gnutls-cli.  The one structure that
- * binds them all.
- */
-tOptions gnutls_cliOptions = {
-    OPTIONS_STRUCT_VERSION,
-    0, NULL,                    /* original argc + argv    */
-    ( OPTPROC_BASE
-    + OPTPROC_ERRSTOP
-    + OPTPROC_SHORTOPT
-    + OPTPROC_LONGOPT
-    + OPTPROC_NO_REQ_OPT
-    + OPTPROC_NEGATIONS
-    + OPTPROC_REORDER
-    + OPTPROC_GNUUSAGE
-    + OPTPROC_MISUSE ),
-    0, NULL,                    /* current option index, current option */
-    NULL,         NULL,         zPROGNAME,
-    zRcName,      zCopyright,   zLicenseDescrip,
-    zFullVersion, apzHomeList,  zUsageTitle,
-    zExplain,     zDetail,      optDesc,
-    zBugsAddr,                  /* address to send bugs to */
-    NULL, NULL,                 /* extensions/saved state  */
-    optionUsage, /* usage procedure */
-    translate_option_strings,   /* translation procedure */
-    /*
-     *  Indexes to special options
-     */
-    { INDEX_OPT_MORE_HELP, /* more-help option index */
-      NO_EQUIVALENT, /* save option index */
-      NO_EQUIVALENT, /* '-#' option index */
-      NO_EQUIVALENT /* index of default opt */
-    },
-    41 /* full option count */, 38 /* user option count */,
-    gnutls_cli_full_usage, gnutls_cli_short_usage,
-    NULL, NULL,
-    PKGDATADIR, gnutls_cli_packager_info
-};
+/* extracted from optcode.tlib near line 666 */
 
 #if ENABLE_NLS
 #include <stdio.h>
@@ -1401,16 +1280,7 @@ tOptions gnutls_cliOptions = {
 static char* AO_gettext(char const* pz);
 static void  coerce_it(void** s);
 
-/**
- * AutoGen specific wrapper function for gettext.
- * It relies on the macro _() to convert from English to the target
- * language, then strdup-duplicates the result string.
- *
- * @param[in] pz the input text used as a lookup key.
- * @returns the translated text (if there is one),
- *   or the original text (if not).
- */
-static char *
+static char*
 AO_gettext(char const* pz)
 {
     char* pzRes;
@@ -1430,9 +1300,8 @@ AO_gettext(char const* pz)
 static void coerce_it(void** s) { *s = AO_gettext(*s);
 }
 
-/**
- * Translate all the translatable strings in the gnutls_cliOptions
- * structure defined above.  This is done only once.
+/*
+ *  This invokes the translation code (e.g. gettext(3)).
  */
 static void
 translate_option_strings(void)
index b738248b2f8cc9dc013b7cdbd9861914c7b78473..c31879adff83478836c294c07ede42982955c668 100644 (file)
@@ -2,11 +2,11 @@
  *  
  *  DO NOT EDIT THIS FILE   (cli-args.h)
  *  
- *  It has been AutoGen-ed  August 30, 2012 at 09:58:04 PM by AutoGen 5.16
+ *  It has been AutoGen-ed  September 28, 2012 at 01:15:40 PM by AutoGen 5.12
  *  From the definitions    cli-args.def
  *  and the template file   options
  *
- * Generated from AutoOpts 36:4:11 templates.
+ * Generated from AutoOpts 35:0:10 templates.
  *
  *  AutoOpts is a copyrighted work.  This header file is not encumbered
  *  by AutoOpts licensing, but is provided under the licensing terms chosen
  *  users discretion, the BSD license.  See the AutoOpts and/or libopts sources
  *  for details.
  *
- * The gnutls-cli program is copyrighted and licensed
- * under the following terms:
+ * This source file is copyrighted and licensed under the following terms:
  *
  *  Copyright (C) 2000-2012 Free Software Foundation, all rights reserved.
  *  This is free software. It is licensed for use, modification and
  *  redistribution under the terms of the
  *  GNU General Public License, version 3 or later
  *      <http://gnu.org/licenses/gpl.html>
- *
- *  gnutls-cli is free software: you can redistribute it and/or modify it
+ *  
+PFX>gnutls-cli 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 3 of the License, or
  *  (at your option) any later version.
@@ -56,7 +55,7 @@
  *  tolerable version is at least as old as what was current when the header
  *  template was released.
  */
-#define AO_TEMPLATE_VERSION 147460
+#define AO_TEMPLATE_VERSION 143360
 #if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \
  || (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION)
 # error option template version mismatches autoopts/options.h header
@@ -75,42 +74,43 @@ typedef enum {
     INDEX_OPT_HEARTBEAT               =  5,
     INDEX_OPT_REHANDSHAKE             =  6,
     INDEX_OPT_NOTICKET                =  7,
-    INDEX_OPT_STARTTLS                =  8,
-    INDEX_OPT_UDP                     =  9,
-    INDEX_OPT_MTU                     = 10,
-    INDEX_OPT_CRLF                    = 11,
-    INDEX_OPT_X509FMTDER              = 12,
-    INDEX_OPT_FINGERPRINT             = 13,
-    INDEX_OPT_DISABLE_EXTENSIONS      = 14,
-    INDEX_OPT_PRINT_CERT              = 15,
-    INDEX_OPT_RECORDSIZE              = 16,
-    INDEX_OPT_DH_BITS                 = 17,
-    INDEX_OPT_PRIORITY                = 18,
-    INDEX_OPT_X509CAFILE              = 19,
-    INDEX_OPT_X509CRLFILE             = 20,
-    INDEX_OPT_PGPKEYFILE              = 21,
-    INDEX_OPT_PGPKEYRING              = 22,
-    INDEX_OPT_PGPCERTFILE             = 23,
-    INDEX_OPT_X509KEYFILE             = 24,
-    INDEX_OPT_X509CERTFILE            = 25,
-    INDEX_OPT_PGPSUBKEY               = 26,
-    INDEX_OPT_SRPUSERNAME             = 27,
-    INDEX_OPT_SRPPASSWD               = 28,
-    INDEX_OPT_PSKUSERNAME             = 29,
-    INDEX_OPT_PSKKEY                  = 30,
-    INDEX_OPT_PORT                    = 31,
-    INDEX_OPT_INSECURE                = 32,
-    INDEX_OPT_BENCHMARK_CIPHERS       = 33,
-    INDEX_OPT_BENCHMARK_SOFT_CIPHERS  = 34,
-    INDEX_OPT_BENCHMARK_TLS_KX        = 35,
-    INDEX_OPT_BENCHMARK_TLS_CIPHERS   = 36,
-    INDEX_OPT_LIST                    = 37,
-    INDEX_OPT_VERSION                 = 38,
-    INDEX_OPT_HELP                    = 39,
-    INDEX_OPT_MORE_HELP               = 40
+    INDEX_OPT_STATUS_REQUEST_OCSP     =  8,
+    INDEX_OPT_STARTTLS                =  9,
+    INDEX_OPT_UDP                     = 10,
+    INDEX_OPT_MTU                     = 11,
+    INDEX_OPT_CRLF                    = 12,
+    INDEX_OPT_X509FMTDER              = 13,
+    INDEX_OPT_FINGERPRINT             = 14,
+    INDEX_OPT_DISABLE_EXTENSIONS      = 15,
+    INDEX_OPT_PRINT_CERT              = 16,
+    INDEX_OPT_RECORDSIZE              = 17,
+    INDEX_OPT_DH_BITS                 = 18,
+    INDEX_OPT_PRIORITY                = 19,
+    INDEX_OPT_X509CAFILE              = 20,
+    INDEX_OPT_X509CRLFILE             = 21,
+    INDEX_OPT_PGPKEYFILE              = 22,
+    INDEX_OPT_PGPKEYRING              = 23,
+    INDEX_OPT_PGPCERTFILE             = 24,
+    INDEX_OPT_X509KEYFILE             = 25,
+    INDEX_OPT_X509CERTFILE            = 26,
+    INDEX_OPT_PGPSUBKEY               = 27,
+    INDEX_OPT_SRPUSERNAME             = 28,
+    INDEX_OPT_SRPPASSWD               = 29,
+    INDEX_OPT_PSKUSERNAME             = 30,
+    INDEX_OPT_PSKKEY                  = 31,
+    INDEX_OPT_PORT                    = 32,
+    INDEX_OPT_INSECURE                = 33,
+    INDEX_OPT_BENCHMARK_CIPHERS       = 34,
+    INDEX_OPT_BENCHMARK_SOFT_CIPHERS  = 35,
+    INDEX_OPT_BENCHMARK_TLS_KX        = 36,
+    INDEX_OPT_BENCHMARK_TLS_CIPHERS   = 37,
+    INDEX_OPT_LIST                    = 38,
+    INDEX_OPT_VERSION                 = 39,
+    INDEX_OPT_HELP                    = 40,
+    INDEX_OPT_MORE_HELP               = 41
 } teOptIndex;
 
-#define OPTION_CT    41
+#define OPTION_CT    42
 #define GNUTLS_CLI_VERSION       "@VERSION@"
 #define GNUTLS_CLI_FULL_VERSION  "gnutls-cli @VERSION@"
 
@@ -141,8 +141,7 @@ typedef enum {
  */
 typedef enum {
     GNUTLS_CLI_EXIT_SUCCESS = 0,
-    GNUTLS_CLI_EXIT_FAILURE = 1,
-    GNUTLS_CLI_EXIT_LIBOPTS_FAILURE = 70
+    GNUTLS_CLI_EXIT_FAILURE = 1
 } gnutls_cli_exit_code_t;
 /* * * * * *
  *
@@ -158,41 +157,42 @@ typedef enum {
 #define VALUE_OPT_HEARTBEAT      'b'
 #define VALUE_OPT_REHANDSHAKE    'e'
 #define VALUE_OPT_NOTICKET       7
+#define VALUE_OPT_STATUS_REQUEST_OCSP 8
 #define VALUE_OPT_STARTTLS       's'
 #define VALUE_OPT_UDP            'u'
-#define VALUE_OPT_MTU            10
+#define VALUE_OPT_MTU            11
 
 #define OPT_VALUE_MTU            (DESC(MTU).optArg.argInt)
-#define VALUE_OPT_CRLF           11
-#define VALUE_OPT_X509FMTDER     12
+#define VALUE_OPT_CRLF           12
+#define VALUE_OPT_X509FMTDER     13
 #define VALUE_OPT_FINGERPRINT    'f'
-#define VALUE_OPT_DISABLE_EXTENSIONS 14
-#define VALUE_OPT_PRINT_CERT     15
-#define VALUE_OPT_RECORDSIZE     16
+#define VALUE_OPT_DISABLE_EXTENSIONS 15
+#define VALUE_OPT_PRINT_CERT     16
+#define VALUE_OPT_RECORDSIZE     17
 
 #define OPT_VALUE_RECORDSIZE     (DESC(RECORDSIZE).optArg.argInt)
-#define VALUE_OPT_DH_BITS        17
+#define VALUE_OPT_DH_BITS        18
 
 #define OPT_VALUE_DH_BITS        (DESC(DH_BITS).optArg.argInt)
-#define VALUE_OPT_PRIORITY       18
-#define VALUE_OPT_X509CAFILE     19
-#define VALUE_OPT_X509CRLFILE    20
-#define VALUE_OPT_PGPKEYFILE     21
-#define VALUE_OPT_PGPKEYRING     22
-#define VALUE_OPT_PGPCERTFILE    23
-#define VALUE_OPT_X509KEYFILE    24
-#define VALUE_OPT_X509CERTFILE   25
-#define VALUE_OPT_PGPSUBKEY      26
-#define VALUE_OPT_SRPUSERNAME    27
-#define VALUE_OPT_SRPPASSWD      28
-#define VALUE_OPT_PSKUSERNAME    29
-#define VALUE_OPT_PSKKEY         30
+#define VALUE_OPT_PRIORITY       19
+#define VALUE_OPT_X509CAFILE     20
+#define VALUE_OPT_X509CRLFILE    21
+#define VALUE_OPT_PGPKEYFILE     22
+#define VALUE_OPT_PGPKEYRING     23
+#define VALUE_OPT_PGPCERTFILE    24
+#define VALUE_OPT_X509KEYFILE    25
+#define VALUE_OPT_X509CERTFILE   26
+#define VALUE_OPT_PGPSUBKEY      27
+#define VALUE_OPT_SRPUSERNAME    28
+#define VALUE_OPT_SRPPASSWD      29
+#define VALUE_OPT_PSKUSERNAME    30
+#define VALUE_OPT_PSKKEY         31
 #define VALUE_OPT_PORT           'p'
-#define VALUE_OPT_INSECURE       32
-#define VALUE_OPT_BENCHMARK_CIPHERS 129
-#define VALUE_OPT_BENCHMARK_SOFT_CIPHERS 130
-#define VALUE_OPT_BENCHMARK_TLS_KX 131
-#define VALUE_OPT_BENCHMARK_TLS_CIPHERS 132
+#define VALUE_OPT_INSECURE       129
+#define VALUE_OPT_BENCHMARK_CIPHERS 130
+#define VALUE_OPT_BENCHMARK_SOFT_CIPHERS 131
+#define VALUE_OPT_BENCHMARK_TLS_KX 132
+#define VALUE_OPT_BENCHMARK_TLS_CIPHERS 133
 #define VALUE_OPT_LIST           'l'
 #define VALUE_OPT_HELP          'h'
 #define VALUE_OPT_MORE_HELP     '!'
@@ -207,17 +207,18 @@ typedef enum {
                 gnutls_cliOptions.pzCurOpt  = NULL)
 #define START_OPT       RESTART_OPT(1)
 #define USAGE(c)        (*gnutls_cliOptions.pUsageProc)(&gnutls_cliOptions, c)
-/* extracted from opthead.tlib near line 484 */
+/* extracted from opthead.tlib near line 451 */
 
 #ifdef  __cplusplus
 extern "C" {
 #endif
-/*
- *  global exported definitions
+
+/* * * * * *
+ *
+ *  Globals exported from the GnuTLS client option definitions
  */
 #include <gettext.h>
 
-
 /* * * * * *
  *
  *  Declare the gnutls-cli option descriptor.
index f27ed0893b412b11a8fb17d966b76c59fc23e2a2..1231aaa72754f9dc34b8bdfba1bb9f4a550c77df 100644 (file)
@@ -2,11 +2,11 @@
  *  
  *  DO NOT EDIT THIS FILE   (serv-args.c)
  *  
- *  It has been AutoGen-ed  August 30, 2012 at 09:58:05 PM by AutoGen 5.16
+ *  It has been AutoGen-ed  September 28, 2012 at 01:15:45 PM by AutoGen 5.12
  *  From the definitions    serv-args.def
  *  and the template file   options
  *
- * Generated from AutoOpts 36:4:11 templates.
+ * Generated from AutoOpts 35:0:10 templates.
  *
  *  AutoOpts is a copyrighted work.  This source file is not encumbered
  *  by AutoOpts licensing, but is provided under the licensing terms chosen
  *  users discretion, the BSD license.  See the AutoOpts and/or libopts sources
  *  for details.
  *
- * The gnutls-serv program is copyrighted and licensed
- * under the following terms:
+ * This source file is copyrighted and licensed under the following terms:
  *
  *  Copyright (C) 2000-2012 Free Software Foundation, all rights reserved.
  *  This is free software. It is licensed for use, modification and
  *  redistribution under the terms of the
  *  GNU General Public License, version 3 or later
  *      <http://gnu.org/licenses/gpl.html>
- *
- *  gnutls-serv is free software: you can redistribute it and/or modify it
+ *  
+PFX>gnutls-serv 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 3 of the License, or
  *  (at your option) any later version.
  *  with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef __doxygen__
-#define OPTION_CODE_COMPILE 1
-#include "serv-args.h"
 #include <sys/types.h>
 
 #include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <errno.h>
+#define OPTION_CODE_COMPILE 1
+#include "serv-args.h"
 
 #ifdef  __cplusplus
 extern "C" {
@@ -56,475 +54,401 @@ extern FILE * option_usage_fp;
 
 /* TRANSLATORS: choose the translation for option names wisely because you
                 cannot ever change your mind. */
-#define zCopyright      (gnutls_serv_opt_strs+0)
-#define zLicenseDescrip (gnutls_serv_opt_strs+282)
-
+static char const zCopyright[282] =
+"gnutls-serv @VERSION@\n\
+Copyright (C) 2000-2012 Free Software Foundation, all rights reserved.\n\
+This is free software. It is licensed for use, modification and\n\
+redistribution under the terms of the\n\
+GNU General Public License, version 3 or later\n\
+    <http://gnu.org/licenses/gpl.html>\n";
+static char const zLicenseDescrip[611] =
+"gnutls-serv is free software: you can redistribute it and/or modify it\n\
+under the terms of the GNU General Public License as published by the\n\
+Free Software Foundation, either version 3 of the License, or (at your\n\
+option) any later version.\n\n\
+gnutls-serv is distributed in the hope that it will be useful, but WITHOUT\n\
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n\
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License\n\
+for more details.\n\n\
+You should have received a copy of the GNU General Public License along\n\
+with this program.  If not, see <http://www.gnu.org/licenses/>.\n";
+
+extern tUsageProc optionUsage;
 
 #ifndef NULL
 #  define NULL 0
 #endif
 
 /*
- *  gnutls-serv option static const strings
- */
-static char const gnutls_serv_opt_strs[2994] =
-/*     0 */ "gnutls-serv @VERSION@\n"
-            "Copyright (C) 2000-2012 Free Software Foundation, all rights reserved.\n"
-            "This is free software. It is licensed for use, modification and\n"
-            "redistribution under the terms of the\n"
-            "GNU General Public License, version 3 or later\n"
-            "    <http://gnu.org/licenses/gpl.html>\n\0"
-/*   282 */ "gnutls-serv is free software: you can redistribute it and/or modify it\n"
-            "under the terms of the GNU General Public License as published by the Free\n"
-            "Software Foundation, either version 3 of the License, or (at your option)\n"
-            "any later version.\n\n"
-            "gnutls-serv is distributed in the hope that it will be useful, but WITHOUT\n"
-            "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n"
-            "FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\n"
-            "more details.\n\n"
-            "You should have received a copy of the GNU General Public License along\n"
-            "with this program.  If not, see <http://www.gnu.org/licenses/>.\n\0"
-/*   893 */ "Enable debugging.\0"
-/*   911 */ "DEBUG\0"
-/*   917 */ "debug\0"
-/*   923 */ "Don't accept session tickets\0"
-/*   952 */ "NOTICKET\0"
-/*   961 */ "noticket\0"
-/*   970 */ "Generate Diffie-Hellman and RSA-export parameters\0"
-/*  1020 */ "GENERATE\0"
-/*  1029 */ "generate\0"
-/*  1038 */ "Suppress some messages\0"
-/*  1061 */ "QUIET\0"
-/*  1067 */ "quiet\0"
-/*  1073 */ "Do not use a resumption database\0"
-/*  1106 */ "NODB\0"
-/*  1111 */ "nodb\0"
-/*  1116 */ "Act as an HTTP server\0"
-/*  1138 */ "HTTP\0"
-/*  1143 */ "http\0"
-/*  1148 */ "Act as an Echo server\0"
-/*  1170 */ "ECHO\0"
-/*  1175 */ "echo\0"
-/*  1180 */ "Use DTLS (datagram TLS) over UDP\0"
-/*  1213 */ "UDP\0"
-/*  1217 */ "udp\0"
-/*  1221 */ "Set MTU for datagram TLS\0"
-/*  1246 */ "MTU\0"
-/*  1250 */ "mtu\0"
-/*  1254 */ "Do not request a client certificate\0"
-/*  1290 */ "DISABLE_CLIENT_CERT\0"
-/*  1310 */ "disable-client-cert\0"
-/*  1330 */ "Require a client certificate\0"
-/*  1359 */ "REQUIRE_CLIENT_CERT\0"
-/*  1379 */ "require-client-cert\0"
-/*  1399 */ "Activate heartbeat support\0"
-/*  1426 */ "HEARTBEAT\0"
-/*  1436 */ "heartbeat\0"
-/*  1446 */ "Use DER format for certificates to read from\0"
-/*  1491 */ "X509FMTDER\0"
-/*  1502 */ "x509fmtder\0"
-/*  1513 */ "Priorities string\0"
-/*  1531 */ "PRIORITY\0"
-/*  1540 */ "priority\0"
-/*  1549 */ "DH params file to use\0"
-/*  1571 */ "DHPARAMS\0"
-/*  1580 */ "dhparams\0"
-/*  1589 */ "Certificate file or PKCS #11 URL to use\0"
-/*  1629 */ "X509CAFILE\0"
-/*  1640 */ "x509cafile\0"
-/*  1651 */ "CRL file to use\0"
-/*  1667 */ "X509CRLFILE\0"
-/*  1679 */ "x509crlfile\0"
-/*  1691 */ "PGP Key file to use\0"
-/*  1711 */ "PGPKEYFILE\0"
-/*  1722 */ "pgpkeyfile\0"
-/*  1733 */ "PGP Key ring file to use\0"
-/*  1758 */ "PGPKEYRING\0"
-/*  1769 */ "pgpkeyring\0"
-/*  1780 */ "PGP Public Key (certificate) file to use\0"
-/*  1821 */ "PGPCERTFILE\0"
-/*  1833 */ "pgpcertfile\0"
-/*  1845 */ "X.509 key file or PKCS #11 URL to use\0"
-/*  1883 */ "X509KEYFILE\0"
-/*  1895 */ "x509keyfile\0"
-/*  1907 */ "X.509 Certificate file or PKCS #11 URL to use\0"
-/*  1953 */ "X509CERTFILE\0"
-/*  1966 */ "x509certfile\0"
-/*  1979 */ "Alternative X.509 key file or PKCS #11 URL to use\0"
-/*  2029 */ "X509DSAKEYFILE\0"
-/*  2044 */ "x509dsakeyfile\0"
-/*  2059 */ "Alternative X.509 Certificate file or PKCS #11 URL to use\0"
-/*  2117 */ "X509DSACERTFILE\0"
-/*  2133 */ "x509dsacertfile\0"
-/*  2149 */ "X509ECCKEYFILE\0"
-/*  2164 */ "x509ecckeyfile\0"
-/*  2179 */ "X509ECCCERTFILE\0"
-/*  2195 */ "x509ecccertfile\0"
-/*  2211 */ "PGP subkey to use (hex or auto)\0"
-/*  2243 */ "PGPSUBKEY\0"
-/*  2253 */ "pgpsubkey\0"
-/*  2263 */ "SRP password file to use\0"
-/*  2288 */ "SRPPASSWD\0"
-/*  2298 */ "srppasswd\0"
-/*  2308 */ "SRP password configuration file to use\0"
-/*  2347 */ "SRPPASSWDCONF\0"
-/*  2361 */ "srppasswdconf\0"
-/*  2375 */ "PSK password file to use\0"
-/*  2400 */ "PSKPASSWD\0"
-/*  2410 */ "pskpasswd\0"
-/*  2420 */ "PSK identity hint to use\0"
-/*  2445 */ "PSKHINT\0"
-/*  2453 */ "pskhint\0"
-/*  2461 */ "The port to connect to\0"
-/*  2484 */ "PORT\0"
-/*  2489 */ "port\0"
-/*  2494 */ "Print a list of the supported algorithms and modes\0"
-/*  2545 */ "LIST\0"
-/*  2550 */ "list\0"
-/*  2555 */ "Display extended usage information and exit\0"
-/*  2599 */ "help\0"
-/*  2604 */ "Extended usage information passed thru pager\0"
-/*  2649 */ "more-help\0"
-/*  2659 */ "Output version information and exit\0"
-/*  2695 */ "version\0"
-/*  2703 */ "GNUTLS_SERV\0"
-/*  2715 */ "gnutls-serv - GnuTLS server - Ver. @VERSION@\n"
-            "USAGE:  %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n\0"
-/*  2818 */ "bug-gnutls@gnu.org\0"
-/*  2837 */ "\n\n\0"
-/*  2840 */ "\n"
-            "Server program that listens to incoming TLS connections.\n\0"
-/*  2899 */ "gnutls-serv @VERSION@\0"
-/*  2921 */ "Usage: gnutls-serv [options]\n"
-            "gnutls-serv --help for usage instructions.\n";
-
-/*
- *  debug option description:
+ *  Debug option description:
  */
-#define DEBUG_DESC      (gnutls_serv_opt_strs+893)
-#define DEBUG_NAME      (gnutls_serv_opt_strs+911)
-#define DEBUG_name      (gnutls_serv_opt_strs+917)
-#define DEBUG_FLAGS     (OPTST_DISABLED \
+static char const zDebugText[] =
+        "Enable debugging.";
+static char const zDebug_NAME[]              = "DEBUG";
+static char const zDebug_Name[]              = "debug";
+#define DEBUG_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
 
 /*
- *  noticket option description:
+ *  Noticket option description:
  */
-#define NOTICKET_DESC      (gnutls_serv_opt_strs+923)
-#define NOTICKET_NAME      (gnutls_serv_opt_strs+952)
-#define NOTICKET_name      (gnutls_serv_opt_strs+961)
-#define NOTICKET_FLAGS     (OPTST_DISABLED)
+static char const zNoticketText[] =
+        "Don't accept session tickets";
+static char const zNoticket_NAME[]           = "NOTICKET";
+static char const zNoticket_Name[]           = "noticket";
+#define NOTICKET_FLAGS       (OPTST_DISABLED)
 
 /*
- *  generate option description:
+ *  Generate option description:
  */
-#define GENERATE_DESC      (gnutls_serv_opt_strs+970)
-#define GENERATE_NAME      (gnutls_serv_opt_strs+1020)
-#define GENERATE_name      (gnutls_serv_opt_strs+1029)
-#define GENERATE_FLAGS     (OPTST_DISABLED)
+static char const zGenerateText[] =
+        "Generate Diffie-Hellman and RSA-export parameters";
+static char const zGenerate_NAME[]           = "GENERATE";
+static char const zGenerate_Name[]           = "generate";
+#define GENERATE_FLAGS       (OPTST_DISABLED)
 
 /*
- *  quiet option description:
+ *  Quiet option description:
  */
-#define QUIET_DESC      (gnutls_serv_opt_strs+1038)
-#define QUIET_NAME      (gnutls_serv_opt_strs+1061)
-#define QUIET_name      (gnutls_serv_opt_strs+1067)
-#define QUIET_FLAGS     (OPTST_DISABLED)
+static char const zQuietText[] =
+        "Suppress some messages";
+static char const zQuiet_NAME[]              = "QUIET";
+static char const zQuiet_Name[]              = "quiet";
+#define QUIET_FLAGS       (OPTST_DISABLED)
 
 /*
- *  nodb option description:
+ *  Nodb option description:
  */
-#define NODB_DESC      (gnutls_serv_opt_strs+1073)
-#define NODB_NAME      (gnutls_serv_opt_strs+1106)
-#define NODB_name      (gnutls_serv_opt_strs+1111)
-#define NODB_FLAGS     (OPTST_DISABLED)
+static char const zNodbText[] =
+        "Do not use a resumption database";
+static char const zNodb_NAME[]               = "NODB";
+static char const zNodb_Name[]               = "nodb";
+#define NODB_FLAGS       (OPTST_DISABLED)
 
 /*
- *  http option description:
+ *  Http option description:
  */
-#define HTTP_DESC      (gnutls_serv_opt_strs+1116)
-#define HTTP_NAME      (gnutls_serv_opt_strs+1138)
-#define HTTP_name      (gnutls_serv_opt_strs+1143)
-#define HTTP_FLAGS     (OPTST_DISABLED)
+static char const zHttpText[] =
+        "Act as an HTTP server";
+static char const zHttp_NAME[]               = "HTTP";
+static char const zHttp_Name[]               = "http";
+#define HTTP_FLAGS       (OPTST_DISABLED)
 
 /*
- *  echo option description:
+ *  Echo option description:
  */
-#define ECHO_DESC      (gnutls_serv_opt_strs+1148)
-#define ECHO_NAME      (gnutls_serv_opt_strs+1170)
-#define ECHO_name      (gnutls_serv_opt_strs+1175)
-#define ECHO_FLAGS     (OPTST_DISABLED)
+static char const zEchoText[] =
+        "Act as an Echo server";
+static char const zEcho_NAME[]               = "ECHO";
+static char const zEcho_Name[]               = "echo";
+#define ECHO_FLAGS       (OPTST_DISABLED)
 
 /*
- *  udp option description:
+ *  Udp option description:
  */
-#define UDP_DESC      (gnutls_serv_opt_strs+1180)
-#define UDP_NAME      (gnutls_serv_opt_strs+1213)
-#define UDP_name      (gnutls_serv_opt_strs+1217)
-#define UDP_FLAGS     (OPTST_DISABLED)
+static char const zUdpText[] =
+        "Use DTLS (datagram TLS) over UDP";
+static char const zUdp_NAME[]                = "UDP";
+static char const zUdp_Name[]                = "udp";
+#define UDP_FLAGS       (OPTST_DISABLED)
 
 /*
- *  mtu option description:
+ *  Mtu option description:
  */
-#define MTU_DESC      (gnutls_serv_opt_strs+1221)
-#define MTU_NAME      (gnutls_serv_opt_strs+1246)
-#define MTU_name      (gnutls_serv_opt_strs+1250)
-#define MTU_FLAGS     (OPTST_DISABLED \
+static char const zMtuText[] =
+        "Set MTU for datagram TLS";
+static char const zMtu_NAME[]                = "MTU";
+static char const zMtu_Name[]                = "mtu";
+#define MTU_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
 
 /*
- *  disable-client-cert option description:
+ *  Disable_Client_Cert option description:
  */
-#define DISABLE_CLIENT_CERT_DESC      (gnutls_serv_opt_strs+1254)
-#define DISABLE_CLIENT_CERT_NAME      (gnutls_serv_opt_strs+1290)
-#define DISABLE_CLIENT_CERT_name      (gnutls_serv_opt_strs+1310)
-#define DISABLE_CLIENT_CERT_FLAGS     (OPTST_DISABLED)
+static char const zDisable_Client_CertText[] =
+        "Do not request a client certificate";
+static char const zDisable_Client_Cert_NAME[] = "DISABLE_CLIENT_CERT";
+static char const zDisable_Client_Cert_Name[]= "disable-client-cert";
+#define DISABLE_CLIENT_CERT_FLAGS       (OPTST_DISABLED)
 
 /*
- *  require-client-cert option description:
+ *  Require_Client_Cert option description:
  */
-#define REQUIRE_CLIENT_CERT_DESC      (gnutls_serv_opt_strs+1330)
-#define REQUIRE_CLIENT_CERT_NAME      (gnutls_serv_opt_strs+1359)
-#define REQUIRE_CLIENT_CERT_name      (gnutls_serv_opt_strs+1379)
-#define REQUIRE_CLIENT_CERT_FLAGS     (OPTST_DISABLED)
+static char const zRequire_Client_CertText[] =
+        "Require a client certificate";
+static char const zRequire_Client_Cert_NAME[] = "REQUIRE_CLIENT_CERT";
+static char const zRequire_Client_Cert_Name[]= "require-client-cert";
+#define REQUIRE_CLIENT_CERT_FLAGS       (OPTST_DISABLED)
 
 /*
- *  heartbeat option description:
+ *  Heartbeat option description:
  */
-#define HEARTBEAT_DESC      (gnutls_serv_opt_strs+1399)
-#define HEARTBEAT_NAME      (gnutls_serv_opt_strs+1426)
-#define HEARTBEAT_name      (gnutls_serv_opt_strs+1436)
-#define HEARTBEAT_FLAGS     (OPTST_DISABLED)
+static char const zHeartbeatText[] =
+        "Activate heartbeat support";
+static char const zHeartbeat_NAME[]          = "HEARTBEAT";
+static char const zHeartbeat_Name[]          = "heartbeat";
+#define HEARTBEAT_FLAGS       (OPTST_DISABLED)
 
 /*
- *  x509fmtder option description:
+ *  X509fmtder option description:
  */
-#define X509FMTDER_DESC      (gnutls_serv_opt_strs+1446)
-#define X509FMTDER_NAME      (gnutls_serv_opt_strs+1491)
-#define X509FMTDER_name      (gnutls_serv_opt_strs+1502)
-#define X509FMTDER_FLAGS     (OPTST_DISABLED)
+static char const zX509fmtderText[] =
+        "Use DER format for certificates to read from";
+static char const zX509fmtder_NAME[]         = "X509FMTDER";
+static char const zX509fmtder_Name[]         = "x509fmtder";
+#define X509FMTDER_FLAGS       (OPTST_DISABLED)
 
 /*
- *  priority option description:
+ *  Priority option description:
  */
-#define PRIORITY_DESC      (gnutls_serv_opt_strs+1513)
-#define PRIORITY_NAME      (gnutls_serv_opt_strs+1531)
-#define PRIORITY_name      (gnutls_serv_opt_strs+1540)
-#define PRIORITY_FLAGS     (OPTST_DISABLED \
+static char const zPriorityText[] =
+        "Priorities string";
+static char const zPriority_NAME[]           = "PRIORITY";
+static char const zPriority_Name[]           = "priority";
+#define PRIORITY_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
 
 /*
- *  dhparams option description:
+ *  Dhparams option description:
  */
-#define DHPARAMS_DESC      (gnutls_serv_opt_strs+1549)
-#define DHPARAMS_NAME      (gnutls_serv_opt_strs+1571)
-#define DHPARAMS_name      (gnutls_serv_opt_strs+1580)
-#define DHPARAMS_FLAGS     (OPTST_DISABLED \
+static char const zDhparamsText[] =
+        "DH params file to use";
+static char const zDhparams_NAME[]           = "DHPARAMS";
+static char const zDhparams_Name[]           = "dhparams";
+#define DHPARAMS_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
 
 /*
- *  x509cafile option description:
+ *  X509cafile option description:
  */
-#define X509CAFILE_DESC      (gnutls_serv_opt_strs+1589)
-#define X509CAFILE_NAME      (gnutls_serv_opt_strs+1629)
-#define X509CAFILE_name      (gnutls_serv_opt_strs+1640)
-#define X509CAFILE_FLAGS     (OPTST_DISABLED \
+static char const zX509cafileText[] =
+        "Certificate file or PKCS #11 URL to use";
+static char const zX509cafile_NAME[]         = "X509CAFILE";
+static char const zX509cafile_Name[]         = "x509cafile";
+#define X509CAFILE_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
 
 /*
- *  x509crlfile option description:
+ *  X509crlfile option description:
  */
-#define X509CRLFILE_DESC      (gnutls_serv_opt_strs+1651)
-#define X509CRLFILE_NAME      (gnutls_serv_opt_strs+1667)
-#define X509CRLFILE_name      (gnutls_serv_opt_strs+1679)
-#define X509CRLFILE_FLAGS     (OPTST_DISABLED \
+static char const zX509crlfileText[] =
+        "CRL file to use";
+static char const zX509crlfile_NAME[]        = "X509CRLFILE";
+static char const zX509crlfile_Name[]        = "x509crlfile";
+#define X509CRLFILE_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
 
 /*
- *  pgpkeyfile option description:
+ *  Pgpkeyfile option description:
  */
-#define PGPKEYFILE_DESC      (gnutls_serv_opt_strs+1691)
-#define PGPKEYFILE_NAME      (gnutls_serv_opt_strs+1711)
-#define PGPKEYFILE_name      (gnutls_serv_opt_strs+1722)
-#define PGPKEYFILE_FLAGS     (OPTST_DISABLED \
+static char const zPgpkeyfileText[] =
+        "PGP Key file to use";
+static char const zPgpkeyfile_NAME[]         = "PGPKEYFILE";
+static char const zPgpkeyfile_Name[]         = "pgpkeyfile";
+#define PGPKEYFILE_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
 
 /*
- *  pgpkeyring option description:
+ *  Pgpkeyring option description:
  */
-#define PGPKEYRING_DESC      (gnutls_serv_opt_strs+1733)
-#define PGPKEYRING_NAME      (gnutls_serv_opt_strs+1758)
-#define PGPKEYRING_name      (gnutls_serv_opt_strs+1769)
-#define PGPKEYRING_FLAGS     (OPTST_DISABLED \
+static char const zPgpkeyringText[] =
+        "PGP Key ring file to use";
+static char const zPgpkeyring_NAME[]         = "PGPKEYRING";
+static char const zPgpkeyring_Name[]         = "pgpkeyring";
+#define PGPKEYRING_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
 
 /*
- *  pgpcertfile option description:
+ *  Pgpcertfile option description:
  */
-#define PGPCERTFILE_DESC      (gnutls_serv_opt_strs+1780)
-#define PGPCERTFILE_NAME      (gnutls_serv_opt_strs+1821)
-#define PGPCERTFILE_name      (gnutls_serv_opt_strs+1833)
-#define PGPCERTFILE_FLAGS     (OPTST_DISABLED \
+static char const zPgpcertfileText[] =
+        "PGP Public Key (certificate) file to use";
+static char const zPgpcertfile_NAME[]        = "PGPCERTFILE";
+static char const zPgpcertfile_Name[]        = "pgpcertfile";
+#define PGPCERTFILE_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
 
 /*
- *  x509keyfile option description:
+ *  X509keyfile option description:
  */
-#define X509KEYFILE_DESC      (gnutls_serv_opt_strs+1845)
-#define X509KEYFILE_NAME      (gnutls_serv_opt_strs+1883)
-#define X509KEYFILE_name      (gnutls_serv_opt_strs+1895)
-#define X509KEYFILE_FLAGS     (OPTST_DISABLED \
+static char const zX509keyfileText[] =
+        "X.509 key file or PKCS #11 URL to use";
+static char const zX509keyfile_NAME[]        = "X509KEYFILE";
+static char const zX509keyfile_Name[]        = "x509keyfile";
+#define X509KEYFILE_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
 
 /*
- *  x509certfile option description:
+ *  X509certfile option description:
  */
-#define X509CERTFILE_DESC      (gnutls_serv_opt_strs+1907)
-#define X509CERTFILE_NAME      (gnutls_serv_opt_strs+1953)
-#define X509CERTFILE_name      (gnutls_serv_opt_strs+1966)
-#define X509CERTFILE_FLAGS     (OPTST_DISABLED \
+static char const zX509certfileText[] =
+        "X.509 Certificate file or PKCS #11 URL to use";
+static char const zX509certfile_NAME[]       = "X509CERTFILE";
+static char const zX509certfile_Name[]       = "x509certfile";
+#define X509CERTFILE_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
 
 /*
- *  x509dsakeyfile option description:
+ *  X509dsakeyfile option description:
  */
-#define X509DSAKEYFILE_DESC      (gnutls_serv_opt_strs+1979)
-#define X509DSAKEYFILE_NAME      (gnutls_serv_opt_strs+2029)
-#define X509DSAKEYFILE_name      (gnutls_serv_opt_strs+2044)
-#define X509DSAKEYFILE_FLAGS     (OPTST_DISABLED \
+static char const zX509dsakeyfileText[] =
+        "Alternative X.509 key file or PKCS #11 URL to use";
+static char const zX509dsakeyfile_NAME[]     = "X509DSAKEYFILE";
+static char const zX509dsakeyfile_Name[]     = "x509dsakeyfile";
+#define X509DSAKEYFILE_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
 
 /*
- *  x509dsacertfile option description:
+ *  X509dsacertfile option description:
  */
-#define X509DSACERTFILE_DESC      (gnutls_serv_opt_strs+2059)
-#define X509DSACERTFILE_NAME      (gnutls_serv_opt_strs+2117)
-#define X509DSACERTFILE_name      (gnutls_serv_opt_strs+2133)
-#define X509DSACERTFILE_FLAGS     (OPTST_DISABLED \
+static char const zX509dsacertfileText[] =
+        "Alternative X.509 Certificate file or PKCS #11 URL to use";
+static char const zX509dsacertfile_NAME[]    = "X509DSACERTFILE";
+static char const zX509dsacertfile_Name[]    = "x509dsacertfile";
+#define X509DSACERTFILE_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
 
 /*
- *  x509ecckeyfile option description:
+ *  X509ecckeyfile option description:
  */
-#define X509ECCKEYFILE_DESC      (gnutls_serv_opt_strs+1979)
-#define X509ECCKEYFILE_NAME      (gnutls_serv_opt_strs+2149)
-#define X509ECCKEYFILE_name      (gnutls_serv_opt_strs+2164)
-#define X509ECCKEYFILE_FLAGS     (OPTST_DISABLED \
+static char const zX509ecckeyfileText[] =
+        "Alternative X.509 key file or PKCS #11 URL to use";
+static char const zX509ecckeyfile_NAME[]     = "X509ECCKEYFILE";
+static char const zX509ecckeyfile_Name[]     = "x509ecckeyfile";
+#define X509ECCKEYFILE_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
 
 /*
- *  x509ecccertfile option description:
+ *  X509ecccertfile option description:
  */
-#define X509ECCCERTFILE_DESC      (gnutls_serv_opt_strs+2059)
-#define X509ECCCERTFILE_NAME      (gnutls_serv_opt_strs+2179)
-#define X509ECCCERTFILE_name      (gnutls_serv_opt_strs+2195)
-#define X509ECCCERTFILE_FLAGS     (OPTST_DISABLED \
+static char const zX509ecccertfileText[] =
+        "Alternative X.509 Certificate file or PKCS #11 URL to use";
+static char const zX509ecccertfile_NAME[]    = "X509ECCCERTFILE";
+static char const zX509ecccertfile_Name[]    = "x509ecccertfile";
+#define X509ECCCERTFILE_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
 
 /*
- *  pgpsubkey option description:
+ *  Pgpsubkey option description:
  */
-#define PGPSUBKEY_DESC      (gnutls_serv_opt_strs+2211)
-#define PGPSUBKEY_NAME      (gnutls_serv_opt_strs+2243)
-#define PGPSUBKEY_name      (gnutls_serv_opt_strs+2253)
-#define PGPSUBKEY_FLAGS     (OPTST_DISABLED \
+static char const zPgpsubkeyText[] =
+        "PGP subkey to use (hex or auto)";
+static char const zPgpsubkey_NAME[]          = "PGPSUBKEY";
+static char const zPgpsubkey_Name[]          = "pgpsubkey";
+#define PGPSUBKEY_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
 
 /*
- *  srppasswd option description:
+ *  Srppasswd option description:
  */
-#define SRPPASSWD_DESC      (gnutls_serv_opt_strs+2263)
-#define SRPPASSWD_NAME      (gnutls_serv_opt_strs+2288)
-#define SRPPASSWD_name      (gnutls_serv_opt_strs+2298)
-#define SRPPASSWD_FLAGS     (OPTST_DISABLED \
+static char const zSrppasswdText[] =
+        "SRP password file to use";
+static char const zSrppasswd_NAME[]          = "SRPPASSWD";
+static char const zSrppasswd_Name[]          = "srppasswd";
+#define SRPPASSWD_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
 
 /*
- *  srppasswdconf option description:
+ *  Srppasswdconf option description:
  */
-#define SRPPASSWDCONF_DESC      (gnutls_serv_opt_strs+2308)
-#define SRPPASSWDCONF_NAME      (gnutls_serv_opt_strs+2347)
-#define SRPPASSWDCONF_name      (gnutls_serv_opt_strs+2361)
-#define SRPPASSWDCONF_FLAGS     (OPTST_DISABLED \
+static char const zSrppasswdconfText[] =
+        "SRP password configuration file to use";
+static char const zSrppasswdconf_NAME[]      = "SRPPASSWDCONF";
+static char const zSrppasswdconf_Name[]      = "srppasswdconf";
+#define SRPPASSWDCONF_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
 
 /*
- *  pskpasswd option description:
+ *  Pskpasswd option description:
  */
-#define PSKPASSWD_DESC      (gnutls_serv_opt_strs+2375)
-#define PSKPASSWD_NAME      (gnutls_serv_opt_strs+2400)
-#define PSKPASSWD_name      (gnutls_serv_opt_strs+2410)
-#define PSKPASSWD_FLAGS     (OPTST_DISABLED \
+static char const zPskpasswdText[] =
+        "PSK password file to use";
+static char const zPskpasswd_NAME[]          = "PSKPASSWD";
+static char const zPskpasswd_Name[]          = "pskpasswd";
+#define PSKPASSWD_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
 
 /*
- *  pskhint option description:
+ *  Pskhint option description:
  */
-#define PSKHINT_DESC      (gnutls_serv_opt_strs+2420)
-#define PSKHINT_NAME      (gnutls_serv_opt_strs+2445)
-#define PSKHINT_name      (gnutls_serv_opt_strs+2453)
-#define PSKHINT_FLAGS     (OPTST_DISABLED \
+static char const zPskhintText[] =
+        "PSK identity hint to use";
+static char const zPskhint_NAME[]            = "PSKHINT";
+static char const zPskhint_Name[]            = "pskhint";
+#define PSKHINT_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
 
 /*
- *  port option description:
+ *  Status_Response_Ocsp option description:
+ */
+static char const zStatus_Response_OcspText[] =
+        "OCSP response to send to client";
+static char const zStatus_Response_Ocsp_NAME[] = "STATUS_RESPONSE_OCSP";
+static char const zStatus_Response_Ocsp_Name[]= "status-response-ocsp";
+#define STATUS_RESPONSE_OCSP_FLAGS       (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  Port option description:
  */
-#define PORT_DESC      (gnutls_serv_opt_strs+2461)
-#define PORT_NAME      (gnutls_serv_opt_strs+2484)
-#define PORT_name      (gnutls_serv_opt_strs+2489)
-#define PORT_FLAGS     (OPTST_DISABLED \
+static char const zPortText[] =
+        "The port to connect to";
+static char const zPort_NAME[]               = "PORT";
+static char const zPort_Name[]               = "port";
+#define PORT_FLAGS       (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
 
 /*
- *  list option description:
+ *  List option description:
  */
-#define LIST_DESC      (gnutls_serv_opt_strs+2494)
-#define LIST_NAME      (gnutls_serv_opt_strs+2545)
-#define LIST_name      (gnutls_serv_opt_strs+2550)
-#define LIST_FLAGS     (OPTST_DISABLED)
+static char const zListText[] =
+        "Print a list of the supported algorithms and modes";
+static char const zList_NAME[]               = "LIST";
+static char const zList_Name[]               = "list";
+#define LIST_FLAGS       (OPTST_DISABLED)
 
 /*
  *  Help/More_Help/Version option descriptions:
  */
-#define HELP_DESC       (gnutls_serv_opt_strs+2555)
-#define HELP_name       (gnutls_serv_opt_strs+2599)
+static char const zHelpText[]          = "Display extended usage information and exit";
+static char const zHelp_Name[]         = "help";
 #ifdef HAVE_WORKING_FORK
-#define MORE_HELP_DESC  (gnutls_serv_opt_strs+2604)
-#define MORE_HELP_name  (gnutls_serv_opt_strs+2649)
-#define MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT)
+#define OPTST_MORE_HELP_FLAGS   (OPTST_IMM | OPTST_NO_INIT)
+static char const zMore_Help_Name[]    = "more-help";
+static char const zMore_HelpText[]     = "Extended usage information passed thru pager";
 #else
-#define MORE_HELP_DESC  NULL
-#define MORE_HELP_name  NULL
-#define MORE_HELP_FLAGS (OPTST_OMITTED | OPTST_NO_INIT)
+#define OPTST_MORE_HELP_FLAGS   (OPTST_OMITTED | OPTST_NO_INIT)
+#define zMore_Help_Name   NULL
+#define zMore_HelpText    NULL
 #endif
 #ifdef NO_OPTIONAL_OPT_ARGS
-#  define VER_FLAGS     (OPTST_IMM | OPTST_NO_INIT)
+#  define OPTST_VERSION_FLAGS   OPTST_IMM | OPTST_NO_INIT
 #else
-#  define VER_FLAGS     (OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \
-                         OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT)
+#  define OPTST_VERSION_FLAGS   OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \
+                                OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT
 #endif
-#define VER_DESC        (gnutls_serv_opt_strs+2659)
-#define VER_name        (gnutls_serv_opt_strs+2695)
+
+static char const zVersionText[]       = "Output version information and exit";
+static char const zVersion_Name[]      = "version";
 /*
  *  Declare option callback procedures
  */
 extern tOptProc
-    optionBooleanVal,   optionNestedVal,    optionNumericVal,
-    optionPagedUsage,   optionPrintVersion, optionResetOpt,
-    optionStackArg,     optionTimeDate,     optionTimeVal,
-    optionUnstackArg,   optionVendorOption;
+    optionBooleanVal,    optionNestedVal,     optionNumericVal,
+    optionPagedUsage,    optionPrintVersion,  optionResetOpt,
+    optionStackArg,      optionTimeDate,      optionTimeVal,
+    optionUnstackArg,    optionVersionStderr;
 static tOptProc
-    doOptDebug,         doOptDhparams,      doOptMtu,
-    doOptPgpcertfile,   doOptPgpkeyfile,    doOptPgpkeyring,
-    doOptPskpasswd,     doOptSrppasswd,     doOptSrppasswdconf,
-    doOptX509crlfile,   doUsageOpt;
-#define VER_PROC        optionPrintVersion
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-/**
- *  Define the gnutls-serv Option Descriptions.
- * This is an array of OPTION_CT entries, one for each
- * option that the gnutls-serv program responds to.
+    doOptDebug,                doOptDhparams,
+    doOptMtu,                  doOptPgpcertfile,
+    doOptPgpkeyfile,           doOptPgpkeyring,
+    doOptPskpasswd,            doOptSrppasswd,
+    doOptSrppasswdconf,        doOptStatus_Response_Ocsp,
+    doOptX509crlfile,          doUsageOpt;
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ *  Define the Gnutls_Serv Option Descriptions.
  */
 static tOptDesc optDesc[OPTION_CT] = {
   {  /* entry idx, value */ 0, VALUE_OPT_DEBUG,
@@ -532,11 +456,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ DEBUG_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --debug */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ doOptDebug,
-     /* desc, NAME, name */ DEBUG_DESC, DEBUG_NAME, DEBUG_name,
+     /* desc, NAME, name */ zDebugText, zDebug_NAME, zDebug_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 1, VALUE_OPT_NOTICKET,
@@ -544,11 +468,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ NOTICKET_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --noticket */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ NOTICKET_DESC, NOTICKET_NAME, NOTICKET_name,
+     /* desc, NAME, name */ zNoticketText, zNoticket_NAME, zNoticket_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 2, VALUE_OPT_GENERATE,
@@ -556,11 +480,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ GENERATE_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --generate */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ GENERATE_DESC, GENERATE_NAME, GENERATE_name,
+     /* desc, NAME, name */ zGenerateText, zGenerate_NAME, zGenerate_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 3, VALUE_OPT_QUIET,
@@ -568,11 +492,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ QUIET_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --quiet */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ QUIET_DESC, QUIET_NAME, QUIET_name,
+     /* desc, NAME, name */ zQuietText, zQuiet_NAME, zQuiet_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 4, VALUE_OPT_NODB,
@@ -580,11 +504,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ NODB_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --nodb */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ NODB_DESC, NODB_NAME, NODB_name,
+     /* desc, NAME, name */ zNodbText, zNodb_NAME, zNodb_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 5, VALUE_OPT_HTTP,
@@ -592,11 +516,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ HTTP_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --http */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ HTTP_DESC, HTTP_NAME, HTTP_name,
+     /* desc, NAME, name */ zHttpText, zHttp_NAME, zHttp_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 6, VALUE_OPT_ECHO,
@@ -604,11 +528,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ ECHO_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --echo */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ ECHO_DESC, ECHO_NAME, ECHO_name,
+     /* desc, NAME, name */ zEchoText, zEcho_NAME, zEcho_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 7, VALUE_OPT_UDP,
@@ -616,11 +540,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ UDP_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --udp */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ UDP_DESC, UDP_NAME, UDP_name,
+     /* desc, NAME, name */ zUdpText, zUdp_NAME, zUdp_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 8, VALUE_OPT_MTU,
@@ -628,11 +552,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ MTU_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --mtu */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ doOptMtu,
-     /* desc, NAME, name */ MTU_DESC, MTU_NAME, MTU_name,
+     /* desc, NAME, name */ zMtuText, zMtu_NAME, zMtu_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 9, VALUE_OPT_DISABLE_CLIENT_CERT,
@@ -640,11 +564,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ DISABLE_CLIENT_CERT_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --disable-client-cert */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ DISABLE_CLIENT_CERT_DESC, DISABLE_CLIENT_CERT_NAME, DISABLE_CLIENT_CERT_name,
+     /* desc, NAME, name */ zDisable_Client_CertText, zDisable_Client_Cert_NAME, zDisable_Client_Cert_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 10, VALUE_OPT_REQUIRE_CLIENT_CERT,
@@ -652,11 +576,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ REQUIRE_CLIENT_CERT_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --require-client-cert */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ REQUIRE_CLIENT_CERT_DESC, REQUIRE_CLIENT_CERT_NAME, REQUIRE_CLIENT_CERT_name,
+     /* desc, NAME, name */ zRequire_Client_CertText, zRequire_Client_Cert_NAME, zRequire_Client_Cert_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 11, VALUE_OPT_HEARTBEAT,
@@ -664,11 +588,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ HEARTBEAT_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --heartbeat */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ HEARTBEAT_DESC, HEARTBEAT_NAME, HEARTBEAT_name,
+     /* desc, NAME, name */ zHeartbeatText, zHeartbeat_NAME, zHeartbeat_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 12, VALUE_OPT_X509FMTDER,
@@ -676,11 +600,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ X509FMTDER_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --x509fmtder */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ X509FMTDER_DESC, X509FMTDER_NAME, X509FMTDER_name,
+     /* desc, NAME, name */ zX509fmtderText, zX509fmtder_NAME, zX509fmtder_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 13, VALUE_OPT_PRIORITY,
@@ -688,11 +612,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ PRIORITY_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --priority */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ PRIORITY_DESC, PRIORITY_NAME, PRIORITY_name,
+     /* desc, NAME, name */ zPriorityText, zPriority_NAME, zPriority_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 14, VALUE_OPT_DHPARAMS,
@@ -700,11 +624,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ DHPARAMS_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --dhparams */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ doOptDhparams,
-     /* desc, NAME, name */ DHPARAMS_DESC, DHPARAMS_NAME, DHPARAMS_name,
+     /* desc, NAME, name */ zDhparamsText, zDhparams_NAME, zDhparams_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 15, VALUE_OPT_X509CAFILE,
@@ -712,11 +636,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ X509CAFILE_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --x509cafile */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ X509CAFILE_DESC, X509CAFILE_NAME, X509CAFILE_name,
+     /* desc, NAME, name */ zX509cafileText, zX509cafile_NAME, zX509cafile_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 16, VALUE_OPT_X509CRLFILE,
@@ -724,11 +648,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ X509CRLFILE_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --x509crlfile */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ doOptX509crlfile,
-     /* desc, NAME, name */ X509CRLFILE_DESC, X509CRLFILE_NAME, X509CRLFILE_name,
+     /* desc, NAME, name */ zX509crlfileText, zX509crlfile_NAME, zX509crlfile_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 17, VALUE_OPT_PGPKEYFILE,
@@ -736,11 +660,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ PGPKEYFILE_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --pgpkeyfile */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ doOptPgpkeyfile,
-     /* desc, NAME, name */ PGPKEYFILE_DESC, PGPKEYFILE_NAME, PGPKEYFILE_name,
+     /* desc, NAME, name */ zPgpkeyfileText, zPgpkeyfile_NAME, zPgpkeyfile_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 18, VALUE_OPT_PGPKEYRING,
@@ -748,11 +672,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ PGPKEYRING_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --pgpkeyring */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ doOptPgpkeyring,
-     /* desc, NAME, name */ PGPKEYRING_DESC, PGPKEYRING_NAME, PGPKEYRING_name,
+     /* desc, NAME, name */ zPgpkeyringText, zPgpkeyring_NAME, zPgpkeyring_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 19, VALUE_OPT_PGPCERTFILE,
@@ -760,11 +684,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ PGPCERTFILE_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --pgpcertfile */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ doOptPgpcertfile,
-     /* desc, NAME, name */ PGPCERTFILE_DESC, PGPCERTFILE_NAME, PGPCERTFILE_name,
+     /* desc, NAME, name */ zPgpcertfileText, zPgpcertfile_NAME, zPgpcertfile_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 20, VALUE_OPT_X509KEYFILE,
@@ -772,11 +696,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ X509KEYFILE_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --x509keyfile */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ X509KEYFILE_DESC, X509KEYFILE_NAME, X509KEYFILE_name,
+     /* desc, NAME, name */ zX509keyfileText, zX509keyfile_NAME, zX509keyfile_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 21, VALUE_OPT_X509CERTFILE,
@@ -784,11 +708,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ X509CERTFILE_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --x509certfile */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ X509CERTFILE_DESC, X509CERTFILE_NAME, X509CERTFILE_name,
+     /* desc, NAME, name */ zX509certfileText, zX509certfile_NAME, zX509certfile_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 22, VALUE_OPT_X509DSAKEYFILE,
@@ -796,11 +720,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ X509DSAKEYFILE_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --x509dsakeyfile */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ X509DSAKEYFILE_DESC, X509DSAKEYFILE_NAME, X509DSAKEYFILE_name,
+     /* desc, NAME, name */ zX509dsakeyfileText, zX509dsakeyfile_NAME, zX509dsakeyfile_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 23, VALUE_OPT_X509DSACERTFILE,
@@ -808,11 +732,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ X509DSACERTFILE_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --x509dsacertfile */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ X509DSACERTFILE_DESC, X509DSACERTFILE_NAME, X509DSACERTFILE_name,
+     /* desc, NAME, name */ zX509dsacertfileText, zX509dsacertfile_NAME, zX509dsacertfile_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 24, VALUE_OPT_X509ECCKEYFILE,
@@ -820,11 +744,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ X509ECCKEYFILE_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --x509ecckeyfile */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ X509ECCKEYFILE_DESC, X509ECCKEYFILE_NAME, X509ECCKEYFILE_name,
+     /* desc, NAME, name */ zX509ecckeyfileText, zX509ecckeyfile_NAME, zX509ecckeyfile_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 25, VALUE_OPT_X509ECCCERTFILE,
@@ -832,11 +756,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ X509ECCCERTFILE_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --x509ecccertfile */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ X509ECCCERTFILE_DESC, X509ECCCERTFILE_NAME, X509ECCCERTFILE_name,
+     /* desc, NAME, name */ zX509ecccertfileText, zX509ecccertfile_NAME, zX509ecccertfile_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 26, VALUE_OPT_PGPSUBKEY,
@@ -844,11 +768,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ PGPSUBKEY_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --pgpsubkey */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ PGPSUBKEY_DESC, PGPSUBKEY_NAME, PGPSUBKEY_name,
+     /* desc, NAME, name */ zPgpsubkeyText, zPgpsubkey_NAME, zPgpsubkey_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 27, VALUE_OPT_SRPPASSWD,
@@ -856,11 +780,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ SRPPASSWD_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --srppasswd */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ doOptSrppasswd,
-     /* desc, NAME, name */ SRPPASSWD_DESC, SRPPASSWD_NAME, SRPPASSWD_name,
+     /* desc, NAME, name */ zSrppasswdText, zSrppasswd_NAME, zSrppasswd_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 28, VALUE_OPT_SRPPASSWDCONF,
@@ -868,11 +792,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ SRPPASSWDCONF_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --srppasswdconf */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ doOptSrppasswdconf,
-     /* desc, NAME, name */ SRPPASSWDCONF_DESC, SRPPASSWDCONF_NAME, SRPPASSWDCONF_name,
+     /* desc, NAME, name */ zSrppasswdconfText, zSrppasswdconf_NAME, zSrppasswdconf_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 29, VALUE_OPT_PSKPASSWD,
@@ -880,11 +804,11 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ PSKPASSWD_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --pskpasswd */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ doOptPskpasswd,
-     /* desc, NAME, name */ PSKPASSWD_DESC, PSKPASSWD_NAME, PSKPASSWD_name,
+     /* desc, NAME, name */ zPskpasswdText, zPskpasswd_NAME, zPskpasswd_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ 30, VALUE_OPT_PSKHINT,
@@ -892,53 +816,65 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ PSKHINT_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --pskhint */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ PSKHINT_DESC, PSKHINT_NAME, PSKHINT_name,
+     /* desc, NAME, name */ zPskhintText, zPskhint_NAME, zPskhint_Name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 31, VALUE_OPT_STATUS_RESPONSE_OCSP,
+     /* equiv idx, value */ 31, VALUE_OPT_STATUS_RESPONSE_OCSP,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ STATUS_RESPONSE_OCSP_FLAGS, 0,
+     /* last opt argumnt */ { NULL },
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptStatus_Response_Ocsp,
+     /* desc, NAME, name */ zStatus_Response_OcspText, zStatus_Response_Ocsp_NAME, zStatus_Response_Ocsp_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 31, VALUE_OPT_PORT,
-     /* equiv idx, value */ 31, VALUE_OPT_PORT,
+  {  /* entry idx, value */ 32, VALUE_OPT_PORT,
+     /* equiv idx, value */ 32, VALUE_OPT_PORT,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ PORT_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --port */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ optionNumericVal,
-     /* desc, NAME, name */ PORT_DESC, PORT_NAME, PORT_name,
+     /* desc, NAME, name */ zPortText, zPort_NAME, zPort_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 32, VALUE_OPT_LIST,
-     /* equiv idx, value */ 32, VALUE_OPT_LIST,
+  {  /* entry idx, value */ 33, VALUE_OPT_LIST,
+     /* equiv idx, value */ 33, VALUE_OPT_LIST,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ LIST_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --list */
+     /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ LIST_DESC, LIST_NAME, LIST_name,
+     /* desc, NAME, name */ zListText, zList_NAME, zList_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ INDEX_OPT_VERSION, VALUE_OPT_VERSION,
-     /* equiv idx value  */ NO_EQUIVALENT, VALUE_OPT_VERSION,
+     /* equiv idx value  */ NO_EQUIVALENT, 0,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
-     /* opt state flags  */ VER_FLAGS, 0,
+     /* opt state flags  */ OPTST_VERSION_FLAGS, 0,
      /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
-     /* option proc      */ VER_PROC,
-     /* desc, NAME, name */ VER_DESC, NULL, VER_name,
+     /* option proc      */ optionPrintVersion,
+     /* desc, NAME, name */ zVersionText, NULL, zVersion_Name,
      /* disablement strs */ NULL, NULL },
 
 
 
   {  /* entry idx, value */ INDEX_OPT_HELP, VALUE_OPT_HELP,
-     /* equiv idx value  */ NO_EQUIVALENT, VALUE_OPT_HELP,
+     /* equiv idx value  */ NO_EQUIVALENT, 0,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ OPTST_IMM | OPTST_NO_INIT, 0,
@@ -946,36 +882,39 @@ static tOptDesc optDesc[OPTION_CT] = {
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ doUsageOpt,
-     /* desc, NAME, name */ HELP_DESC, NULL, HELP_name,
+     /* desc, NAME, name */ zHelpText, NULL, zHelp_Name,
      /* disablement strs */ NULL, NULL },
 
   {  /* entry idx, value */ INDEX_OPT_MORE_HELP, VALUE_OPT_MORE_HELP,
-     /* equiv idx value  */ NO_EQUIVALENT, VALUE_OPT_MORE_HELP,
+     /* equiv idx value  */ NO_EQUIVALENT, 0,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
-     /* opt state flags  */ MORE_HELP_FLAGS, 0,
+     /* opt state flags  */ OPTST_MORE_HELP_FLAGS, 0,
      /* last opt argumnt */ { NULL },
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL,  NULL,
      /* option proc      */ optionPagedUsage,
-     /* desc, NAME, name */ MORE_HELP_DESC, NULL, MORE_HELP_name,
+     /* desc, NAME, name */ zMore_HelpText, NULL, zMore_Help_Name,
      /* disablement strs */ NULL, NULL }
 };
 
-
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
- *  Define the gnutls-serv Option Environment
+ *  Define the Gnutls_Serv Option Environment
  */
-#define zPROGNAME       (gnutls_serv_opt_strs+2703)
-#define zUsageTitle     (gnutls_serv_opt_strs+2715)
-#define zRcName         NULL
-#define apzHomeList     NULL
-#define zBugsAddr       (gnutls_serv_opt_strs+2818)
-#define zExplain        (gnutls_serv_opt_strs+2837)
-#define zDetail         (gnutls_serv_opt_strs+2840)
-#define zFullVersion    (gnutls_serv_opt_strs+2899)
-/* extracted from optcode.tlib near line 350 */
+static char const zPROGNAME[12] = "GNUTLS_SERV";
+static char const zUsageTitle[103] =
+"gnutls-serv - GnuTLS server - Ver. @VERSION@\n\
+USAGE:  %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n";
+#define zRcName     NULL
+#define apzHomeList NULL
+
+static char const zBugsAddr[19]    = "bug-gnutls@gnu.org";
+static char const zExplain[] = "\n\n";
+static char const zDetail[65] = "\n\
+Server program that listens to incoming TLS connections.\n";
+static char const zFullVersion[] = GNUTLS_SERV_FULL_VERSION;
+/* extracted from optcode.tlib near line 515 */
 
 #if defined(ENABLE_NLS)
 # define OPTPROC_BASE OPTPROC_TRANSLATE | OPTPROC_NXLAT_OPT
@@ -986,42 +925,83 @@ static tOptDesc optDesc[OPTION_CT] = {
 #endif /* ENABLE_NLS */
 
 
-#define gnutls_serv_full_usage (NULL)
+#define gnutls_serv_full_usage NULL
+static char const gnutls_serv_short_usage[] =
+       "Usage: gnutls-serv [options]\n\
+gnutls-serv --help for usage instructions.\n";
+
+#ifndef  PKGDATADIR
+# define PKGDATADIR ""
+#endif
 
-#define gnutls_serv_short_usage (gnutls_serv_opt_strs+2921)
+#ifndef  WITH_PACKAGER
+# define gnutls_serv_packager_info NULL
+#else
+static char const gnutls_serv_packager_info[] =
+    "Packaged by " WITH_PACKAGER
 
-#endif /* not defined __doxygen__ */
+# ifdef WITH_PACKAGER_VERSION
+        " ("WITH_PACKAGER_VERSION")"
+# endif
+
+# ifdef WITH_PACKAGER_BUG_REPORTS
+    "\nReport gnutls_serv bugs to " WITH_PACKAGER_BUG_REPORTS
+# endif
+    "\n";
+#endif
+
+tOptions gnutls_servOptions = {
+    OPTIONS_STRUCT_VERSION,
+    0, NULL,                    /* original argc + argv    */
+    ( OPTPROC_BASE
+    + OPTPROC_ERRSTOP
+    + OPTPROC_SHORTOPT
+    + OPTPROC_LONGOPT
+    + OPTPROC_NO_REQ_OPT
+    + OPTPROC_NO_ARGS
+    + OPTPROC_GNUUSAGE
+    + OPTPROC_MISUSE ),
+    0, NULL,                    /* current option index, current option */
+    NULL,         NULL,         zPROGNAME,
+    zRcName,      zCopyright,   zLicenseDescrip,
+    zFullVersion, apzHomeList,  zUsageTitle,
+    zExplain,     zDetail,      optDesc,
+    zBugsAddr,                  /* address to send bugs to */
+    NULL, NULL,                 /* extensions/saved state  */
+    optionUsage, /* usage procedure */
+    translate_option_strings,   /* translation procedure */
+    /*
+     *  Indexes to special options
+     */
+    { INDEX_OPT_MORE_HELP, /* more-help option index */
+      NO_EQUIVALENT, /* save option index */
+      NO_EQUIVALENT, /* '-#' option index */
+      NO_EQUIVALENT /* index of default opt */
+    },
+    37 /* full option count */, 34 /* user option count */,
+    gnutls_serv_full_usage, gnutls_serv_short_usage,
+    NULL, NULL,
+    PKGDATADIR, gnutls_serv_packager_info
+};
 
 /*
  *  Create the static procedure(s) declared above.
  */
-/**
- * The callout function that invokes the optionUsage function.
- *
- * @param pOptions the AutoOpts option description structure
- * @param pOptDesc the descriptor for the "help" (usage) option.
- * @noreturn
- */
 static void
 doUsageOpt(tOptions * pOptions, tOptDesc * pOptDesc)
 {
-    optionUsage(&gnutls_servOptions, GNUTLS_SERV_EXIT_SUCCESS);
-    /* NOTREACHED */
-    (void)pOptDesc;
     (void)pOptions;
+    USAGE(GNUTLS_SERV_EXIT_SUCCESS);
 }
 
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-/**
- * Code to handle the debug option.
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
- * @param pOptions the gnutls-serv options data structure
- * @param pOptDesc the option descriptor for this option.
+ *   For the debug option.
  */
 static void
 doOptDebug(tOptions* pOptions, tOptDesc* pOptDesc)
 {
-    static struct {long rmin, rmax;} const rng[1] = {
+    static const struct {long const rmin, rmax;} rng[1] = {
         { 0 ,  9999 } };
     int  ix;
 
@@ -1047,17 +1027,14 @@ emit_ranges:
     optionShowRange(pOptions, pOptDesc, (void *)rng, 1);
 }
 
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-/**
- * Code to handle the mtu option.
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
- * @param pOptions the gnutls-serv options data structure
- * @param pOptDesc the option descriptor for this option.
+ *   For the mtu option.
  */
 static void
 doOptMtu(tOptions* pOptions, tOptDesc* pOptDesc)
 {
-    static struct {long rmin, rmax;} const rng[1] = {
+    static const struct {long const rmin, rmax;} rng[1] = {
         { 0, 17000 } };
     int  ix;
 
@@ -1083,12 +1060,9 @@ emit_ranges:
     optionShowRange(pOptions, pOptDesc, (void *)rng, 1);
 }
 
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-/**
- * Code to handle the dhparams option.
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
- * @param pOptions the gnutls-serv options data structure
- * @param pOptDesc the option descriptor for this option.
+ *   For the dhparams option.
  */
 static void
 doOptDhparams(tOptions* pOptions, tOptDesc* pOptDesc)
@@ -1104,12 +1078,9 @@ doOptDhparams(tOptions* pOptions, tOptDesc* pOptDesc)
     optionFileCheck(pOptions, pOptDesc, type, mode);
 }
 
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-/**
- * Code to handle the x509crlfile option.
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
- * @param pOptions the gnutls-serv options data structure
- * @param pOptDesc the option descriptor for this option.
+ *   For the x509crlfile option.
  */
 static void
 doOptX509crlfile(tOptions* pOptions, tOptDesc* pOptDesc)
@@ -1125,12 +1096,9 @@ doOptX509crlfile(tOptions* pOptions, tOptDesc* pOptDesc)
     optionFileCheck(pOptions, pOptDesc, type, mode);
 }
 
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-/**
- * Code to handle the pgpkeyfile option.
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
- * @param pOptions the gnutls-serv options data structure
- * @param pOptDesc the option descriptor for this option.
+ *   For the pgpkeyfile option.
  */
 static void
 doOptPgpkeyfile(tOptions* pOptions, tOptDesc* pOptDesc)
@@ -1146,12 +1114,9 @@ doOptPgpkeyfile(tOptions* pOptions, tOptDesc* pOptDesc)
     optionFileCheck(pOptions, pOptDesc, type, mode);
 }
 
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-/**
- * Code to handle the pgpkeyring option.
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
- * @param pOptions the gnutls-serv options data structure
- * @param pOptDesc the option descriptor for this option.
+ *   For the pgpkeyring option.
  */
 static void
 doOptPgpkeyring(tOptions* pOptions, tOptDesc* pOptDesc)
@@ -1167,12 +1132,9 @@ doOptPgpkeyring(tOptions* pOptions, tOptDesc* pOptDesc)
     optionFileCheck(pOptions, pOptDesc, type, mode);
 }
 
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-/**
- * Code to handle the pgpcertfile option.
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
- * @param pOptions the gnutls-serv options data structure
- * @param pOptDesc the option descriptor for this option.
+ *   For the pgpcertfile option.
  */
 static void
 doOptPgpcertfile(tOptions* pOptions, tOptDesc* pOptDesc)
@@ -1188,12 +1150,9 @@ doOptPgpcertfile(tOptions* pOptions, tOptDesc* pOptDesc)
     optionFileCheck(pOptions, pOptDesc, type, mode);
 }
 
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-/**
- * Code to handle the srppasswd option.
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
- * @param pOptions the gnutls-serv options data structure
- * @param pOptDesc the option descriptor for this option.
+ *   For the srppasswd option.
  */
 static void
 doOptSrppasswd(tOptions* pOptions, tOptDesc* pOptDesc)
@@ -1209,12 +1168,9 @@ doOptSrppasswd(tOptions* pOptions, tOptDesc* pOptDesc)
     optionFileCheck(pOptions, pOptDesc, type, mode);
 }
 
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-/**
- * Code to handle the srppasswdconf option.
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
- * @param pOptions the gnutls-serv options data structure
- * @param pOptDesc the option descriptor for this option.
+ *   For the srppasswdconf option.
  */
 static void
 doOptSrppasswdconf(tOptions* pOptions, tOptDesc* pOptDesc)
@@ -1230,12 +1186,9 @@ doOptSrppasswdconf(tOptions* pOptions, tOptDesc* pOptDesc)
     optionFileCheck(pOptions, pOptDesc, type, mode);
 }
 
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-/**
- * Code to handle the pskpasswd option.
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
- * @param pOptions the gnutls-serv options data structure
- * @param pOptDesc the option descriptor for this option.
+ *   For the pskpasswd option.
  */
 static void
 doOptPskpasswd(tOptions* pOptions, tOptDesc* pOptDesc)
@@ -1250,74 +1203,25 @@ doOptPskpasswd(tOptions* pOptions, tOptDesc* pOptDesc)
 
     optionFileCheck(pOptions, pOptDesc, type, mode);
 }
-/* extracted from optmain.tlib near line 1113 */
-
-/**
- * The directory containing the data associated with gnutls-serv.
- */
-#ifndef  PKGDATADIR
-# define PKGDATADIR ""
-#endif
 
-/**
- * Information about the person or institution that packaged gnutls-serv
- * for the current distribution.
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ *   For the status-response-ocsp option.
  */
-#ifndef  WITH_PACKAGER
-# define gnutls_serv_packager_info NULL
-#else
-static char const gnutls_serv_packager_info[] =
-    "Packaged by " WITH_PACKAGER
-
-# ifdef WITH_PACKAGER_VERSION
-        " ("WITH_PACKAGER_VERSION")"
-# endif
-
-# ifdef WITH_PACKAGER_BUG_REPORTS
-    "\nReport gnutls_serv bugs to " WITH_PACKAGER_BUG_REPORTS
-# endif
-    "\n";
+static void
+doOptStatus_Response_Ocsp(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
 #endif
-#ifndef __doxygen__
+    mode.file_flags = O_CLOEXEC;
 
-#endif /* __doxygen__ */
-/**
- * The option definitions for gnutls-serv.  The one structure that
- * binds them all.
- */
-tOptions gnutls_servOptions = {
-    OPTIONS_STRUCT_VERSION,
-    0, NULL,                    /* original argc + argv    */
-    ( OPTPROC_BASE
-    + OPTPROC_ERRSTOP
-    + OPTPROC_SHORTOPT
-    + OPTPROC_LONGOPT
-    + OPTPROC_NO_REQ_OPT
-    + OPTPROC_NO_ARGS
-    + OPTPROC_GNUUSAGE
-    + OPTPROC_MISUSE ),
-    0, NULL,                    /* current option index, current option */
-    NULL,         NULL,         zPROGNAME,
-    zRcName,      zCopyright,   zLicenseDescrip,
-    zFullVersion, apzHomeList,  zUsageTitle,
-    zExplain,     zDetail,      optDesc,
-    zBugsAddr,                  /* address to send bugs to */
-    NULL, NULL,                 /* extensions/saved state  */
-    optionUsage, /* usage procedure */
-    translate_option_strings,   /* translation procedure */
-    /*
-     *  Indexes to special options
-     */
-    { INDEX_OPT_MORE_HELP, /* more-help option index */
-      NO_EQUIVALENT, /* save option index */
-      NO_EQUIVALENT, /* '-#' option index */
-      NO_EQUIVALENT /* index of default opt */
-    },
-    36 /* full option count */, 33 /* user option count */,
-    gnutls_serv_full_usage, gnutls_serv_short_usage,
-    NULL, NULL,
-    PKGDATADIR, gnutls_serv_packager_info
-};
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+/* extracted from optcode.tlib near line 666 */
 
 #if ENABLE_NLS
 #include <stdio.h>
@@ -1329,16 +1233,7 @@ tOptions gnutls_servOptions = {
 static char* AO_gettext(char const* pz);
 static void  coerce_it(void** s);
 
-/**
- * AutoGen specific wrapper function for gettext.
- * It relies on the macro _() to convert from English to the target
- * language, then strdup-duplicates the result string.
- *
- * @param[in] pz the input text used as a lookup key.
- * @returns the translated text (if there is one),
- *   or the original text (if not).
- */
-static char *
+static char*
 AO_gettext(char const* pz)
 {
     char* pzRes;
@@ -1358,9 +1253,8 @@ AO_gettext(char const* pz)
 static void coerce_it(void** s) { *s = AO_gettext(*s);
 }
 
-/**
- * Translate all the translatable strings in the gnutls_servOptions
- * structure defined above.  This is done only once.
+/*
+ *  This invokes the translation code (e.g. gettext(3)).
  */
 static void
 translate_option_strings(void)
index 9c4c86e6c1a6351c421bf4bbf3d1714f4b22ddb0..0e825a639b9075e21151e733449842df5357322b 100644 (file)
@@ -2,11 +2,11 @@
  *  
  *  DO NOT EDIT THIS FILE   (serv-args.h)
  *  
- *  It has been AutoGen-ed  August 30, 2012 at 09:58:05 PM by AutoGen 5.16
+ *  It has been AutoGen-ed  September 28, 2012 at 01:15:45 PM by AutoGen 5.12
  *  From the definitions    serv-args.def
  *  and the template file   options
  *
- * Generated from AutoOpts 36:4:11 templates.
+ * Generated from AutoOpts 35:0:10 templates.
  *
  *  AutoOpts is a copyrighted work.  This header file is not encumbered
  *  by AutoOpts licensing, but is provided under the licensing terms chosen
  *  users discretion, the BSD license.  See the AutoOpts and/or libopts sources
  *  for details.
  *
- * The gnutls-serv program is copyrighted and licensed
- * under the following terms:
+ * This source file is copyrighted and licensed under the following terms:
  *
  *  Copyright (C) 2000-2012 Free Software Foundation, all rights reserved.
  *  This is free software. It is licensed for use, modification and
  *  redistribution under the terms of the
  *  GNU General Public License, version 3 or later
  *      <http://gnu.org/licenses/gpl.html>
- *
- *  gnutls-serv is free software: you can redistribute it and/or modify it
+ *  
+PFX>gnutls-serv 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 3 of the License, or
  *  (at your option) any later version.
@@ -56,7 +55,7 @@
  *  tolerable version is at least as old as what was current when the header
  *  template was released.
  */
-#define AO_TEMPLATE_VERSION 147460
+#define AO_TEMPLATE_VERSION 143360
 #if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \
  || (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION)
 # error option template version mismatches autoopts/options.h header
  *  Enumeration of each option:
  */
 typedef enum {
-    INDEX_OPT_DEBUG                =  0,
-    INDEX_OPT_NOTICKET             =  1,
-    INDEX_OPT_GENERATE             =  2,
-    INDEX_OPT_QUIET                =  3,
-    INDEX_OPT_NODB                 =  4,
-    INDEX_OPT_HTTP                 =  5,
-    INDEX_OPT_ECHO                 =  6,
-    INDEX_OPT_UDP                  =  7,
-    INDEX_OPT_MTU                  =  8,
-    INDEX_OPT_DISABLE_CLIENT_CERT  =  9,
-    INDEX_OPT_REQUIRE_CLIENT_CERT  = 10,
-    INDEX_OPT_HEARTBEAT            = 11,
-    INDEX_OPT_X509FMTDER           = 12,
-    INDEX_OPT_PRIORITY             = 13,
-    INDEX_OPT_DHPARAMS             = 14,
-    INDEX_OPT_X509CAFILE           = 15,
-    INDEX_OPT_X509CRLFILE          = 16,
-    INDEX_OPT_PGPKEYFILE           = 17,
-    INDEX_OPT_PGPKEYRING           = 18,
-    INDEX_OPT_PGPCERTFILE          = 19,
-    INDEX_OPT_X509KEYFILE          = 20,
-    INDEX_OPT_X509CERTFILE         = 21,
-    INDEX_OPT_X509DSAKEYFILE       = 22,
-    INDEX_OPT_X509DSACERTFILE      = 23,
-    INDEX_OPT_X509ECCKEYFILE       = 24,
-    INDEX_OPT_X509ECCCERTFILE      = 25,
-    INDEX_OPT_PGPSUBKEY            = 26,
-    INDEX_OPT_SRPPASSWD            = 27,
-    INDEX_OPT_SRPPASSWDCONF        = 28,
-    INDEX_OPT_PSKPASSWD            = 29,
-    INDEX_OPT_PSKHINT              = 30,
-    INDEX_OPT_PORT                 = 31,
-    INDEX_OPT_LIST                 = 32,
-    INDEX_OPT_VERSION              = 33,
-    INDEX_OPT_HELP                 = 34,
-    INDEX_OPT_MORE_HELP            = 35
+    INDEX_OPT_DEBUG                 =  0,
+    INDEX_OPT_NOTICKET              =  1,
+    INDEX_OPT_GENERATE              =  2,
+    INDEX_OPT_QUIET                 =  3,
+    INDEX_OPT_NODB                  =  4,
+    INDEX_OPT_HTTP                  =  5,
+    INDEX_OPT_ECHO                  =  6,
+    INDEX_OPT_UDP                   =  7,
+    INDEX_OPT_MTU                   =  8,
+    INDEX_OPT_DISABLE_CLIENT_CERT   =  9,
+    INDEX_OPT_REQUIRE_CLIENT_CERT   = 10,
+    INDEX_OPT_HEARTBEAT             = 11,
+    INDEX_OPT_X509FMTDER            = 12,
+    INDEX_OPT_PRIORITY              = 13,
+    INDEX_OPT_DHPARAMS              = 14,
+    INDEX_OPT_X509CAFILE            = 15,
+    INDEX_OPT_X509CRLFILE           = 16,
+    INDEX_OPT_PGPKEYFILE            = 17,
+    INDEX_OPT_PGPKEYRING            = 18,
+    INDEX_OPT_PGPCERTFILE           = 19,
+    INDEX_OPT_X509KEYFILE           = 20,
+    INDEX_OPT_X509CERTFILE          = 21,
+    INDEX_OPT_X509DSAKEYFILE        = 22,
+    INDEX_OPT_X509DSACERTFILE       = 23,
+    INDEX_OPT_X509ECCKEYFILE        = 24,
+    INDEX_OPT_X509ECCCERTFILE       = 25,
+    INDEX_OPT_PGPSUBKEY             = 26,
+    INDEX_OPT_SRPPASSWD             = 27,
+    INDEX_OPT_SRPPASSWDCONF         = 28,
+    INDEX_OPT_PSKPASSWD             = 29,
+    INDEX_OPT_PSKHINT               = 30,
+    INDEX_OPT_STATUS_RESPONSE_OCSP  = 31,
+    INDEX_OPT_PORT                  = 32,
+    INDEX_OPT_LIST                  = 33,
+    INDEX_OPT_VERSION               = 34,
+    INDEX_OPT_HELP                  = 35,
+    INDEX_OPT_MORE_HELP             = 36
 } teOptIndex;
 
-#define OPTION_CT    36
+#define OPTION_CT    37
 #define GNUTLS_SERV_VERSION       "@VERSION@"
 #define GNUTLS_SERV_FULL_VERSION  "gnutls-serv @VERSION@"
 
@@ -136,8 +136,7 @@ typedef enum {
  */
 typedef enum {
     GNUTLS_SERV_EXIT_SUCCESS = 0,
-    GNUTLS_SERV_EXIT_FAILURE = 1,
-    GNUTLS_SERV_EXIT_LIBOPTS_FAILURE = 70
+    GNUTLS_SERV_EXIT_FAILURE = 1
 } gnutls_serv_exit_code_t;
 /* * * * * *
  *
@@ -178,6 +177,7 @@ typedef enum {
 #define VALUE_OPT_SRPPASSWDCONF  28
 #define VALUE_OPT_PSKPASSWD      29
 #define VALUE_OPT_PSKHINT        30
+#define VALUE_OPT_STATUS_RESPONSE_OCSP 31
 #define VALUE_OPT_PORT           'p'
 
 #define OPT_VALUE_PORT           (DESC(PORT).optArg.argInt)
@@ -195,17 +195,18 @@ typedef enum {
                 gnutls_servOptions.pzCurOpt  = NULL)
 #define START_OPT       RESTART_OPT(1)
 #define USAGE(c)        (*gnutls_servOptions.pUsageProc)(&gnutls_servOptions, c)
-/* extracted from opthead.tlib near line 484 */
+/* extracted from opthead.tlib near line 451 */
 
 #ifdef  __cplusplus
 extern "C" {
 #endif
-/*
- *  global exported definitions
+
+/* * * * * *
+ *
+ *  Globals exported from the GnuTLS server option definitions
  */
 #include <gettext.h>
 
-
 /* * * * * *
  *
  *  Declare the gnutls-serv option descriptor.