summaryrefslogtreecommitdiff
path: root/manual/gnutls-guile/Enumerates-and-Constants.html
blob: b71a91c827f727a67f31714bb1e8ef382830c8ef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- This manual is last updated 19 January 2015 for version
3.4.9 of GnuTLS.

Copyright (C) 2001-2012, 2014 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.  A
copy of the license is included in the section entitled "GNU Free
Documentation License". -->
<!-- Created by GNU Texinfo 6.0, http://www.gnu.org/software/texinfo/ -->
<head>
<title>GnuTLS-Guile 3.4.9: Enumerates and Constants</title>

<meta name="description" content="GnuTLS-Guile 3.4.9: Enumerates and Constants">
<meta name="keywords" content="GnuTLS-Guile 3.4.9: Enumerates and Constants">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Procedure-Index.html#Procedure-Index" rel="index" title="Procedure Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Guile-API-Conventions.html#Guile-API-Conventions" rel="up" title="Guile API Conventions">
<link href="Procedure-Names.html#Procedure-Names" rel="next" title="Procedure Names">
<link href="Guile-API-Conventions.html#Guile-API-Conventions" rel="prev" title="Guile API Conventions">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.indentedblock {margin-right: 0em}
blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smalllisp {margin-left: 3.2em}
kbd {font-style: oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space: nowrap}
span.nolinebreak {white-space: nowrap}
span.roman {font-family: serif; font-weight: normal}
span.sansserif {font-family: sans-serif; font-weight: normal}
ul.no-bullet {list-style: none}
body { 
	margin: 2%;
	padding: 0 5%;
	background: #ffffff;
}
h1,h2,h3,h4,h5 {
    font-weight: bold;
    padding: 5px 5px 5px 5px;
    background-color: #c2e0ff;
    color: #336699;
}
h1 {
    padding: 2em 2em 2em 5%;
    color: white;
    background: #336699;
    text-align: center;
    letter-spacing: 3px;
}
h2 { text-decoration: underline; }
pre {
  margin: 0 5%;
  padding: 0.5em;
}
pre.example,pre.verbatim {
  padding-bottom: 1em;

  border: solid #c2e0ff;
  background: #f0faff;
  border-width: 1px 1px 1px 5px;
  margin: 1em auto;
  width: 90%;
}

div.node {
  margin: 0 -5% 0 -2%;
  padding: 0.5em 0.5em;
  margin-top: 0.5em;
  margin-bottom: 0.5em;
  font-weight: bold;
}
dd, li {
  padding-top: 0.1em;
  padding-bottom: 0.1em;
}
div.float {

  margin-bottom: 0.5em;
  text-align: center;
}

table {
  text-align: left;
  margin-left:auto;
  margin-right:auto;
  border-spacing: 7px;
  width: 50%;
}

th {
  padding: 0;
  color: #336699;
  background-color: #c2e0ff;
  border: solid #000000;
  border-width: 0px;
  margin: 1em auto;
  text-align: center;
  margin-left:auto;
  margin-right:auto;
}

td {
  padding: 0;
  border: solid #000000;
  background-color: #f0faff;
  border-width: 0px;
  margin: 1em auto;
  text-align: left;
  margin-left:auto;
  margin-right:auto;
  padding-left: 1em;
}

dl {
  text-align: left;
  margin-left:auto;
  margin-right:auto;
  width: 50%;

  padding-left: 1em;
  border: solid #c2e0ff;
  background: #f0faff;
  border-width: 5px 1px 1px 1px;
  margin: 1em auto;
}

-->
</style>


</head>

<body lang="en">
<a name="Enumerates-and-Constants"></a>
<div class="header">
<p>
Next: <a href="Procedure-Names.html#Procedure-Names" accesskey="n" rel="next">Procedure Names</a>, Up: <a href="Guile-API-Conventions.html#Guile-API-Conventions" accesskey="u" rel="up">Guile API Conventions</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Procedure-Index.html#Procedure-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Enumerates-and-Constants-1"></a>
<h3 class="section">3.1 Enumerates and Constants</h3>

<a name="index-enumerate"></a>
<a name="index-constant"></a>

<p>Lots of enumerates and constants are used in the GnuTLS C API.  For
each C enumerate type, a disjoint Scheme type is used&mdash;thus,
enumerate values and constants are not represented by Scheme symbols
nor by integers.  This makes it impossible to use an enumerate value
of the wrong type on the Scheme side: such errors are automatically
detected by type-checking.
</p>
<p>The enumerate values are bound to variables exported by the
<code>(gnutls)</code> module.  These variables
are named according to the following convention:
</p>
<ul>
<li> All variable names are lower-case; the underscore <code>_</code>
character used in the C API is replaced by hyphen <code>-</code>.
</li><li> All variable names are prepended by the name of the enumerate
type and the slash <code>/</code> character.
</li><li> In some cases, the variable name is made more explicit than the
one of the C API, e.g., by avoid abbreviations.
</li></ul>

<p>Consider for instance this C-side enumerate:
</p>
<div class="example">
<pre class="example">typedef enum
{
  GNUTLS_CRD_CERTIFICATE = 1,
  GNUTLS_CRD_ANON,
  GNUTLS_CRD_SRP,
  GNUTLS_CRD_PSK
} gnutls_credentials_type_t;
</pre></div>

<p>The corresponding Scheme values are bound to the following variables
exported by the <code>(gnutls)</code> module:
</p>
<div class="example">
<pre class="example">credentials/certificate
credentials/anonymous
credentials/srp
credentials/psk
</pre></div>

<p>Hopefully, most variable names can be deduced from this convention.
</p>
<p>Scheme-side &ldquo;enumerate&rdquo; values can be compared using <code>eq?</code>
(see <a href="http://www.gnu.org/software/guile/manual/html_node/Equality.html#Equality">equality predicates</a> in <cite>The GNU Guile Reference
Manual</cite>).  Consider the following example:
</p>
<a name="index-session_002dcipher"></a>

<div class="example">
<pre class="example">(let ((session (make-session connection-end/client)))

  ;;
  ;; ...
  ;;

  ;; Check the ciphering algorithm currently used by SESSION.
  (if (eq? cipher/arcfour (session-cipher session))
      (format #t &quot;We're using the ARCFOUR algorithm&quot;)))
</pre></div>

<p>In addition, all enumerate values can be converted to a human-readable
string, in a type-specific way.  For instance, <code>(cipher-&gt;string
cipher/arcfour)</code> yields <code>&quot;ARCFOUR 128&quot;</code>, while
<code>(key-usage-&gt;string key-usage/digital-signature)</code> yields
<code>&quot;digital-signature&quot;</code>.  Note that these strings may not be
sufficient for use in a user interface since they are fairly concise
and not internationalized.
</p>

<hr>
<div class="header">
<p>
Next: <a href="Procedure-Names.html#Procedure-Names" accesskey="n" rel="next">Procedure Names</a>, Up: <a href="Guile-API-Conventions.html#Guile-API-Conventions" accesskey="u" rel="up">Guile API Conventions</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Procedure-Index.html#Procedure-Index" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>