#{

/* C declarations */

#include <config.h>
#include <common.h>

void cli_version(void);

#}

helpnode "GnuTLS test client\nUsage:  gnutls-cli [options] hostname\n\n"

#int debug;
option (d, debug) INT "integer" { $debug = $1 } "Enable debugging" 

#int resume;
option (r, resume) { $resume = 1 } "Connect, establish a session. Connect again and resume this session."

#int rehandshake;
option (e, rehandshake) { $rehandshake = 1 } "Connect, establish a session and rehandshake immediately."

#int noticket;
option (noticket) { $noticket = 1 } "Doen't accept session tickets."

#int starttls;
option (s, starttls) { $starttls = 1 } "Connect, establish a plain session and start TLS when EOF or a SIGALRM is received."

#int crlf;
option (crlf) { $crlf = 1 } "Send CR LF instead of LF."

#int fmtder;
option (x509fmtder) { $fmtder = 1 } "Use DER format for certificates to read from."

#int fingerprint;
option (f, fingerprint) { $fingerprint = 1 } "Send the openpgp fingerprint, instead of the key."

#int disable_extensions;
option ( disable-extensions) { $disable_extensions = 1 } "Disable all the TLS extensions."

#int print_cert;
option (print-cert) { $print_cert = 1 } "Print the certificate in PEM format."

#int record_size;
option (recordsize) INT "integer" { $record_size = $1 } "The maximum record size to advertize."

#int verbose;
option (V, verbose) { $verbose = 1 } "More verbose output."

#char *priorities;
option (priority) STR "PRIORITY STRING" { $priorities = $1 } "Priorities string."

#char *x509_cafile;
option (x509cafile) STR "FILE" { $x509_cafile = $1 } "Certificate file or PKCS #11 URL to use."

#char *x509_crlfile;
option (x509crlfile) STR "FILE" { $x509_crlfile = $1 } "CRL file to use."

#char *pgp_keyfile;
option (pgpkeyfile) STR "FILE" { $pgp_keyfile = $1 } "PGP Key file to use."

#char *pgp_keyring;
option (pgpkeyring) STR "FILE" { $pgp_keyring = $1 } "PGP Key ring file to use."

#char *pgp_certfile;
option (pgpcertfile) STR "FILE" { $pgp_certfile = $1 } "PGP Public Key (certificate) file to use."

#char *pgp_subkey;
option (pgpsubkey) STR "HEX|auto" { $pgp_subkey = $1 } "PGP subkey to use."

#char *x509_keyfile;
option (x509keyfile) STR "FILE" { $x509_keyfile = $1 } "X.509 key file or PKCS #11 URL to use."

#char *x509_certfile;
option (x509certfile) STR "FILE" { $x509_certfile = $1 } "X.509 Certificate file or PKCS #11 URL to use."

#char *srp_username;
option (srpusername) STR "NAME" { $srp_username = $1 } "SRP username to use."

#char *srp_passwd;
option (srppasswd) STR "PASSWD" { $srp_passwd = $1 } "SRP password to use."

#char *psk_username;
option (pskusername) STR "NAME" { $psk_username = $1 } "PSK username to use."

#char *psk_key;
option (pskkey) STR "KEY" { $psk_key = $1 } "PSK key (in hex) to use."

#char *opaque_prf_input;
option (opaque-prf-input) STR "DATA" { $opaque_prf_input = $1 } "Use Opaque PRF Input DATA."

#char *port;
option (p, port) STR "PORT" { $port = $1 } "The port to connect to."

#int insecure;
option (insecure) { $insecure = 1 } "Don't abort program if server certificate can't be validated."

option (l, list) { print_list($verbose); exit(0); } "Print a list of the supported algorithms and modes."
option (h, help) { gaa_help(); exit(0); } "prints this help"

option (v, version) { cli_version(); exit(0); } "prints the program's version number"

#char *rest_args;
rest STR "hostname" { $rest_args = $1; }

init { $resume=0; $noticket=0; $port="443"; $rest_args=NULL; 
	$record_size=0; 
	$fingerprint=0; $pgp_keyring=NULL; $x509_crlfile = NULL;
	$x509_cafile = NULL; $pgp_keyfile=NULL; $pgp_certfile=NULL; $disable_extensions = 0;
	$x509_keyfile=NULL; $x509_certfile=NULL; $crlf = 0; 
	$srp_username=NULL; $srp_passwd=NULL; $fmtder = 0; $starttls =0; 
	$debug = 0; $print_cert = 0; $verbose = 0; $psk_key = NULL; 
	$psk_username = NULL; $priorities = NULL;
	$opaque_prf_input = NULL; $pgp_subkey = NULL; $rehandshake = 0; }
