File: Nettelnet_client.telnet_session-c.html

package info (click to toggle)
ocamlnet 4.1.9-8
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 54,040 kB
  • sloc: ml: 151,939; ansic: 11,071; sh: 2,003; makefile: 1,310
file content (512 lines) | stat: -rw-r--r-- 32,990 bytes parent folder | download | duplicates (4)
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
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<link rel="stylesheet" href="style.css" type="text/css">
<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="Start" href="index.html">
<link rel="Up" href="Nettelnet_client.html">
<link title="Index of types" rel=Appendix href="index_types.html">
<link title="Index of extensions" rel=Appendix href="index_extensions.html">
<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
<link title="Index of values" rel=Appendix href="index_values.html">
<link title="Index of class attributes" rel=Appendix href="index_attributes.html">
<link title="Index of class methods" rel=Appendix href="index_methods.html">
<link title="Index of classes" rel=Appendix href="index_classes.html">
<link title="Index of class types" rel=Appendix href="index_class_types.html">
<link title="Index of modules" rel=Appendix href="index_modules.html">
<link title="Index of module types" rel=Appendix href="index_module_types.html">
<link title="Uq_gtk" rel="Chapter" href="Uq_gtk.html">
<link title="Uq_tcl" rel="Chapter" href="Uq_tcl.html">
<link title="Equeue" rel="Chapter" href="Equeue.html">
<link title="Unixqueue" rel="Chapter" href="Unixqueue.html">
<link title="Unixqueue_pollset" rel="Chapter" href="Unixqueue_pollset.html">
<link title="Unixqueue_select" rel="Chapter" href="Unixqueue_select.html">
<link title="Uq_resolver" rel="Chapter" href="Uq_resolver.html">
<link title="Uq_engines" rel="Chapter" href="Uq_engines.html">
<link title="Uq_multiplex" rel="Chapter" href="Uq_multiplex.html">
<link title="Uq_transfer" rel="Chapter" href="Uq_transfer.html">
<link title="Uq_socks5" rel="Chapter" href="Uq_socks5.html">
<link title="Uq_io" rel="Chapter" href="Uq_io.html">
<link title="Uq_lwt" rel="Chapter" href="Uq_lwt.html">
<link title="Uq_libevent" rel="Chapter" href="Uq_libevent.html">
<link title="Uq_mt" rel="Chapter" href="Uq_mt.html">
<link title="Uq_client" rel="Chapter" href="Uq_client.html">
<link title="Uq_server" rel="Chapter" href="Uq_server.html">
<link title="Uq_datagram" rel="Chapter" href="Uq_datagram.html">
<link title="Uq_engines_compat" rel="Chapter" href="Uq_engines_compat.html">
<link title="Equeue_intro" rel="Chapter" href="Equeue_intro.html">
<link title="Equeue_howto" rel="Chapter" href="Equeue_howto.html">
<link title="Netcamlbox" rel="Chapter" href="Netcamlbox.html">
<link title="Netcgi_apache" rel="Chapter" href="Netcgi_apache.html">
<link title="Netcgi_modtpl" rel="Chapter" href="Netcgi_modtpl.html">
<link title="Netcgi_plex" rel="Chapter" href="Netcgi_plex.html">
<link title="Netcgi_common" rel="Chapter" href="Netcgi_common.html">
<link title="Netcgi" rel="Chapter" href="Netcgi.html">
<link title="Netcgi_ajp" rel="Chapter" href="Netcgi_ajp.html">
<link title="Netcgi_scgi" rel="Chapter" href="Netcgi_scgi.html">
<link title="Netcgi_cgi" rel="Chapter" href="Netcgi_cgi.html">
<link title="Netcgi_fcgi" rel="Chapter" href="Netcgi_fcgi.html">
<link title="Netcgi_dbi" rel="Chapter" href="Netcgi_dbi.html">
<link title="Netcgi1_compat" rel="Chapter" href="Netcgi1_compat.html">
<link title="Netcgi_test" rel="Chapter" href="Netcgi_test.html">
<link title="Netcgi_porting" rel="Chapter" href="Netcgi_porting.html">
<link title="Nethttp_client_conncache" rel="Chapter" href="Nethttp_client_conncache.html">
<link title="Nethttp_client" rel="Chapter" href="Nethttp_client.html">
<link title="Nettelnet_client" rel="Chapter" href="Nettelnet_client.html">
<link title="Netftp_data_endpoint" rel="Chapter" href="Netftp_data_endpoint.html">
<link title="Netftp_client" rel="Chapter" href="Netftp_client.html">
<link title="Nethttp_fs" rel="Chapter" href="Nethttp_fs.html">
<link title="Netftp_fs" rel="Chapter" href="Netftp_fs.html">
<link title="Netsmtp" rel="Chapter" href="Netsmtp.html">
<link title="Netpop" rel="Chapter" href="Netpop.html">
<link title="Netldap" rel="Chapter" href="Netldap.html">
<link title="Netclient_tut" rel="Chapter" href="Netclient_tut.html">
<link title="Netgss_bindings" rel="Chapter" href="Netgss_bindings.html">
<link title="Netgss" rel="Chapter" href="Netgss.html">
<link title="Nethttpd_types" rel="Chapter" href="Nethttpd_types.html">
<link title="Nethttpd_kernel" rel="Chapter" href="Nethttpd_kernel.html">
<link title="Nethttpd_reactor" rel="Chapter" href="Nethttpd_reactor.html">
<link title="Nethttpd_engine" rel="Chapter" href="Nethttpd_engine.html">
<link title="Nethttpd_services" rel="Chapter" href="Nethttpd_services.html">
<link title="Nethttpd_plex" rel="Chapter" href="Nethttpd_plex.html">
<link title="Nethttpd_util" rel="Chapter" href="Nethttpd_util.html">
<link title="Nethttpd_intro" rel="Chapter" href="Nethttpd_intro.html">
<link title="Netmcore" rel="Chapter" href="Netmcore.html">
<link title="Netmcore_camlbox" rel="Chapter" href="Netmcore_camlbox.html">
<link title="Netmcore_mempool" rel="Chapter" href="Netmcore_mempool.html">
<link title="Netmcore_heap" rel="Chapter" href="Netmcore_heap.html">
<link title="Netmcore_ref" rel="Chapter" href="Netmcore_ref.html">
<link title="Netmcore_array" rel="Chapter" href="Netmcore_array.html">
<link title="Netmcore_sem" rel="Chapter" href="Netmcore_sem.html">
<link title="Netmcore_mutex" rel="Chapter" href="Netmcore_mutex.html">
<link title="Netmcore_condition" rel="Chapter" href="Netmcore_condition.html">
<link title="Netmcore_queue" rel="Chapter" href="Netmcore_queue.html">
<link title="Netmcore_buffer" rel="Chapter" href="Netmcore_buffer.html">
<link title="Netmcore_matrix" rel="Chapter" href="Netmcore_matrix.html">
<link title="Netmcore_hashtbl" rel="Chapter" href="Netmcore_hashtbl.html">
<link title="Netmcore_process" rel="Chapter" href="Netmcore_process.html">
<link title="Netmcore_tut" rel="Chapter" href="Netmcore_tut.html">
<link title="Netmcore_basics" rel="Chapter" href="Netmcore_basics.html">
<link title="Netplex_types" rel="Chapter" href="Netplex_types.html">
<link title="Netplex_mp" rel="Chapter" href="Netplex_mp.html">
<link title="Netplex_mt" rel="Chapter" href="Netplex_mt.html">
<link title="Netplex_log" rel="Chapter" href="Netplex_log.html">
<link title="Netplex_controller" rel="Chapter" href="Netplex_controller.html">
<link title="Netplex_container" rel="Chapter" href="Netplex_container.html">
<link title="Netplex_sockserv" rel="Chapter" href="Netplex_sockserv.html">
<link title="Netplex_workload" rel="Chapter" href="Netplex_workload.html">
<link title="Netplex_main" rel="Chapter" href="Netplex_main.html">
<link title="Netplex_config" rel="Chapter" href="Netplex_config.html">
<link title="Netplex_kit" rel="Chapter" href="Netplex_kit.html">
<link title="Rpc_netplex" rel="Chapter" href="Rpc_netplex.html">
<link title="Netplex_cenv" rel="Chapter" href="Netplex_cenv.html">
<link title="Netplex_semaphore" rel="Chapter" href="Netplex_semaphore.html">
<link title="Netplex_sharedvar" rel="Chapter" href="Netplex_sharedvar.html">
<link title="Netplex_mutex" rel="Chapter" href="Netplex_mutex.html">
<link title="Netplex_encap" rel="Chapter" href="Netplex_encap.html">
<link title="Netplex_mbox" rel="Chapter" href="Netplex_mbox.html">
<link title="Netplex_internal" rel="Chapter" href="Netplex_internal.html">
<link title="Netplex_intro" rel="Chapter" href="Netplex_intro.html">
<link title="Netplex_advanced" rel="Chapter" href="Netplex_advanced.html">
<link title="Netplex_admin" rel="Chapter" href="Netplex_admin.html">
<link title="Netshm" rel="Chapter" href="Netshm.html">
<link title="Netshm_data" rel="Chapter" href="Netshm_data.html">
<link title="Netshm_hashtbl" rel="Chapter" href="Netshm_hashtbl.html">
<link title="Netshm_array" rel="Chapter" href="Netshm_array.html">
<link title="Netshm_intro" rel="Chapter" href="Netshm_intro.html">
<link title="Netstring_pcre" rel="Chapter" href="Netstring_pcre.html">
<link title="Netconversion" rel="Chapter" href="Netconversion.html">
<link title="Netchannels" rel="Chapter" href="Netchannels.html">
<link title="Netstream" rel="Chapter" href="Netstream.html">
<link title="Netmime_string" rel="Chapter" href="Netmime_string.html">
<link title="Netmime" rel="Chapter" href="Netmime.html">
<link title="Netsendmail" rel="Chapter" href="Netsendmail.html">
<link title="Neturl" rel="Chapter" href="Neturl.html">
<link title="Netaddress" rel="Chapter" href="Netaddress.html">
<link title="Netbuffer" rel="Chapter" href="Netbuffer.html">
<link title="Netmime_header" rel="Chapter" href="Netmime_header.html">
<link title="Netmime_channels" rel="Chapter" href="Netmime_channels.html">
<link title="Neturl_ldap" rel="Chapter" href="Neturl_ldap.html">
<link title="Netdate" rel="Chapter" href="Netdate.html">
<link title="Netencoding" rel="Chapter" href="Netencoding.html">
<link title="Netulex" rel="Chapter" href="Netulex.html">
<link title="Netaccel" rel="Chapter" href="Netaccel.html">
<link title="Netaccel_link" rel="Chapter" href="Netaccel_link.html">
<link title="Nethtml" rel="Chapter" href="Nethtml.html">
<link title="Netstring_str" rel="Chapter" href="Netstring_str.html">
<link title="Netmappings" rel="Chapter" href="Netmappings.html">
<link title="Netaux" rel="Chapter" href="Netaux.html">
<link title="Nethttp" rel="Chapter" href="Nethttp.html">
<link title="Netpagebuffer" rel="Chapter" href="Netpagebuffer.html">
<link title="Netfs" rel="Chapter" href="Netfs.html">
<link title="Netglob" rel="Chapter" href="Netglob.html">
<link title="Netauth" rel="Chapter" href="Netauth.html">
<link title="Netsockaddr" rel="Chapter" href="Netsockaddr.html">
<link title="Netnumber" rel="Chapter" href="Netnumber.html">
<link title="Netxdr_mstring" rel="Chapter" href="Netxdr_mstring.html">
<link title="Netxdr" rel="Chapter" href="Netxdr.html">
<link title="Netcompression" rel="Chapter" href="Netcompression.html">
<link title="Netunichar" rel="Chapter" href="Netunichar.html">
<link title="Netasn1" rel="Chapter" href="Netasn1.html">
<link title="Netasn1_encode" rel="Chapter" href="Netasn1_encode.html">
<link title="Netoid" rel="Chapter" href="Netoid.html">
<link title="Netstring_tstring" rel="Chapter" href="Netstring_tstring.html">
<link title="Netdn" rel="Chapter" href="Netdn.html">
<link title="Netx509" rel="Chapter" href="Netx509.html">
<link title="Netascii_armor" rel="Chapter" href="Netascii_armor.html">
<link title="Nettls_support" rel="Chapter" href="Nettls_support.html">
<link title="Netmech_scram" rel="Chapter" href="Netmech_scram.html">
<link title="Netmech_scram_gssapi" rel="Chapter" href="Netmech_scram_gssapi.html">
<link title="Netmech_scram_sasl" rel="Chapter" href="Netmech_scram_sasl.html">
<link title="Netmech_scram_http" rel="Chapter" href="Netmech_scram_http.html">
<link title="Netgssapi_support" rel="Chapter" href="Netgssapi_support.html">
<link title="Netgssapi_auth" rel="Chapter" href="Netgssapi_auth.html">
<link title="Netchannels_crypto" rel="Chapter" href="Netchannels_crypto.html">
<link title="Netx509_pubkey" rel="Chapter" href="Netx509_pubkey.html">
<link title="Netx509_pubkey_crypto" rel="Chapter" href="Netx509_pubkey_crypto.html">
<link title="Netsaslprep" rel="Chapter" href="Netsaslprep.html">
<link title="Netmech_plain_sasl" rel="Chapter" href="Netmech_plain_sasl.html">
<link title="Netmech_crammd5_sasl" rel="Chapter" href="Netmech_crammd5_sasl.html">
<link title="Netmech_digest_sasl" rel="Chapter" href="Netmech_digest_sasl.html">
<link title="Netmech_digest_http" rel="Chapter" href="Netmech_digest_http.html">
<link title="Netmech_krb5_sasl" rel="Chapter" href="Netmech_krb5_sasl.html">
<link title="Netmech_gs2_sasl" rel="Chapter" href="Netmech_gs2_sasl.html">
<link title="Netmech_spnego_http" rel="Chapter" href="Netmech_spnego_http.html">
<link title="Netchannels_tut" rel="Chapter" href="Netchannels_tut.html">
<link title="Netmime_tut" rel="Chapter" href="Netmime_tut.html">
<link title="Netsendmail_tut" rel="Chapter" href="Netsendmail_tut.html">
<link title="Netulex_tut" rel="Chapter" href="Netulex_tut.html">
<link title="Neturl_tut" rel="Chapter" href="Neturl_tut.html">
<link title="Netsys" rel="Chapter" href="Netsys.html">
<link title="Netsys_posix" rel="Chapter" href="Netsys_posix.html">
<link title="Netsys_pollset" rel="Chapter" href="Netsys_pollset.html">
<link title="Netlog" rel="Chapter" href="Netlog.html">
<link title="Netexn" rel="Chapter" href="Netexn.html">
<link title="Netsys_win32" rel="Chapter" href="Netsys_win32.html">
<link title="Netsys_pollset_posix" rel="Chapter" href="Netsys_pollset_posix.html">
<link title="Netsys_pollset_win32" rel="Chapter" href="Netsys_pollset_win32.html">
<link title="Netsys_pollset_generic" rel="Chapter" href="Netsys_pollset_generic.html">
<link title="Netsys_signal" rel="Chapter" href="Netsys_signal.html">
<link title="Netsys_oothr" rel="Chapter" href="Netsys_oothr.html">
<link title="Netsys_xdr" rel="Chapter" href="Netsys_xdr.html">
<link title="Netsys_rng" rel="Chapter" href="Netsys_rng.html">
<link title="Netsys_crypto_types" rel="Chapter" href="Netsys_crypto_types.html">
<link title="Netsys_types" rel="Chapter" href="Netsys_types.html">
<link title="Netsys_mem" rel="Chapter" href="Netsys_mem.html">
<link title="Netsys_tmp" rel="Chapter" href="Netsys_tmp.html">
<link title="Netsys_sem" rel="Chapter" href="Netsys_sem.html">
<link title="Netsys_pmanage" rel="Chapter" href="Netsys_pmanage.html">
<link title="Netsys_crypto" rel="Chapter" href="Netsys_crypto.html">
<link title="Netsys_tls" rel="Chapter" href="Netsys_tls.html">
<link title="Netsys_ciphers" rel="Chapter" href="Netsys_ciphers.html">
<link title="Netsys_digests" rel="Chapter" href="Netsys_digests.html">
<link title="Netsys_crypto_modes" rel="Chapter" href="Netsys_crypto_modes.html">
<link title="Netsys_gssapi" rel="Chapter" href="Netsys_gssapi.html">
<link title="Netsys_sasl_types" rel="Chapter" href="Netsys_sasl_types.html">
<link title="Netsys_sasl" rel="Chapter" href="Netsys_sasl.html">
<link title="Netsys_polypipe" rel="Chapter" href="Netsys_polypipe.html">
<link title="Netsys_polysocket" rel="Chapter" href="Netsys_polysocket.html">
<link title="Netsys_global" rel="Chapter" href="Netsys_global.html">
<link title="Nettls_gnutls_bindings" rel="Chapter" href="Nettls_gnutls_bindings.html">
<link title="Nettls_nettle_bindings" rel="Chapter" href="Nettls_nettle_bindings.html">
<link title="Nettls_gnutls" rel="Chapter" href="Nettls_gnutls.html">
<link title="Netunidata" rel="Chapter" href="Netunidata.html">
<link title="Netgzip" rel="Chapter" href="Netgzip.html">
<link title="Rpc_auth_local" rel="Chapter" href="Rpc_auth_local.html">
<link title="Rpc_xti_client" rel="Chapter" href="Rpc_xti_client.html">
<link title="Rpc" rel="Chapter" href="Rpc.html">
<link title="Rpc_program" rel="Chapter" href="Rpc_program.html">
<link title="Rpc_util" rel="Chapter" href="Rpc_util.html">
<link title="Rpc_portmapper_aux" rel="Chapter" href="Rpc_portmapper_aux.html">
<link title="Rpc_packer" rel="Chapter" href="Rpc_packer.html">
<link title="Rpc_transport" rel="Chapter" href="Rpc_transport.html">
<link title="Rpc_client" rel="Chapter" href="Rpc_client.html">
<link title="Rpc_simple_client" rel="Chapter" href="Rpc_simple_client.html">
<link title="Rpc_portmapper_clnt" rel="Chapter" href="Rpc_portmapper_clnt.html">
<link title="Rpc_portmapper" rel="Chapter" href="Rpc_portmapper.html">
<link title="Rpc_server" rel="Chapter" href="Rpc_server.html">
<link title="Rpc_auth_sys" rel="Chapter" href="Rpc_auth_sys.html">
<link title="Rpc_auth_gssapi" rel="Chapter" href="Rpc_auth_gssapi.html">
<link title="Rpc_proxy" rel="Chapter" href="Rpc_proxy.html">
<link title="Rpc_intro" rel="Chapter" href="Rpc_intro.html">
<link title="Rpc_mapping_ref" rel="Chapter" href="Rpc_mapping_ref.html">
<link title="Rpc_intro_gss" rel="Chapter" href="Rpc_intro_gss.html">
<link title="Shell_sys" rel="Chapter" href="Shell_sys.html">
<link title="Shell" rel="Chapter" href="Shell.html">
<link title="Shell_uq" rel="Chapter" href="Shell_uq.html">
<link title="Shell_fs" rel="Chapter" href="Shell_fs.html">
<link title="Shell_intro" rel="Chapter" href="Shell_intro.html">
<link title="Intro" rel="Chapter" href="Intro.html">
<link title="Platform" rel="Chapter" href="Platform.html">
<link title="Foreword" rel="Chapter" href="Foreword.html">
<link title="Ipv6" rel="Chapter" href="Ipv6.html">
<link title="Regexp" rel="Chapter" href="Regexp.html">
<link title="Tls" rel="Chapter" href="Tls.html">
<link title="Crypto" rel="Chapter" href="Crypto.html">
<link title="Authentication" rel="Chapter" href="Authentication.html">
<link title="Credentials" rel="Chapter" href="Credentials.html">
<link title="Gssapi" rel="Chapter" href="Gssapi.html">
<link title="Ocamlnet4" rel="Chapter" href="Ocamlnet4.html">
<link title="Get" rel="Chapter" href="Get.html"><title>Ocamlnet 4 Reference Manual : Nettelnet_client.telnet_session</title>
</head>
<body>
<div class="navbar">&nbsp;<a class="up" href="Nettelnet_client.html" title="Nettelnet_client">Up</a>
&nbsp;</div>
<h1>Class <a href="type_Nettelnet_client.telnet_session.html">Nettelnet_client.telnet_session</a></h1>

<pre><span id="TYPEtelnet_session"><span class="keyword">class</span> telnet_session</span> : <code class="type"></code><code class="code">object</code> <a href="Nettelnet_client.telnet_session-c.html">..</a> <code class="code">end</code></pre><div class="info class top">
<div class="info-desc">
<p>A telnet session</p>
</div>
</div>
<hr width="100%">
<h2 id="1_Overwiew">Overwiew</h2>
<p>The <code class="code">telnet_session</code> object has two queues, one for arriving data,
 one for data to send.
 Once the session object is attached to an event system, it connects
 to the remote peer, and processes the queues. Input is appended to
 the input queue; output found on the output queue is sent to the
 other side.
 If input arrives, a callback function is invoked.
 You may close the output side of the socket by putting <code class="code">Telnet_eof</code>
 onto the output queue.
 Once the EOF marker has been received, a <code class="code">Telnet_eof</code> is appended to
 the input queue, and the connection is closed (completely). The
 session object detaches from the event system automatically in this
 case.</p>

<p><b>Hints</b></p>

<p>Set an input handler as callback function in the session object.
 The input handler is called when new input data have been arrived.
 It should inspect the input queue, process the queue as much as
 possible, and it should remove the processed items from the queue.
 While processing, it may add new items to the output queue.</p>

<p>If you are not within the callback function and add items to the
 output queue, the session object will not detect that there are
 new items to send - unless you invoke the <code class="code">update</code> method.</p>

<p>If you want option negotiation, it is the simplest way to use
 the special option negotiation methods. Configure the options
 as you want (invoking <code class="code">enable</code>, <code class="code">disable</code> etc), but do not forget
 to modify the way input is processed. Every <code class="code">Telnet_will</code>, <code class="code">_wont</code>,
 <code class="code">_do</code>, and <code class="code">_dont</code> command must be passed to <code class="code">process_option_command</code>.</p>

<pre><span id="METHODset_connection"><span class="keyword">method</span> set_connection</span> : <code class="type"><a href="Nettelnet_client.html#TYPEtelnet_connector">telnet_connector</a> -> unit</code></pre><div class="info ">
<div class="info-desc">
<p>Sets the host name and the port of the remote server to contact.</p>
</div>
</div>

<pre><span id="METHODset_event_system"><span class="keyword">method</span> set_event_system</span> : <code class="type"><a href="Unixqueue.event_system-c.html">Unixqueue.event_system</a> -> unit</code></pre><div class="info ">
<div class="info-desc">
<p>Sets the event system to use. By default, a private event system
 is used.</p>
</div>
</div>

<pre><span id="METHODset_callback"><span class="keyword">method</span> set_callback</span> : <code class="type">(bool -> unit) -> unit</code></pre><div class="info ">
<div class="info-desc">
<p>Sets the callback function. This function is called after new
 commands have been put onto the input queue. 
 The argument passed to the callback function indicates whether
 a 'Synch' sequence was received from the remote side or not.</p>

<p><b>Note Synch:</b> If the client sees a data mark command it will assume
 that it is actually a Synch sequence. The client automatically
 discards any <code class="code">Telnet_data</code> commands from the input queue (but not
 <code class="code">Telnet_data</code>s inside subnegotiations). The data mark command
 itself remains on the queue.</p>
</div>
</div>

<pre><span id="METHODset_exception_handler"><span class="keyword">method</span> set_exception_handler</span> : <code class="type">(exn -> unit) -> unit</code></pre><div class="info ">
<div class="info-desc">
<p>Sets the exception handler. Every known error condition is
 caught and passed to the exception handler.
 The exception handler can do whatever it wants to do. If it
 raises again an exception, the new exception is always propagated
 up to the caller (whoever this is). Often the caller is the
 event system scheduler (i.e. <code class="code">Unixqueue.run</code>); see the documention
 there.</p>

<p>If you do not set the exception handler, a default handler is
 active. It first resets the session (see method <code class="code">reset</code>), and
 then wraps the exception into the <code class="code">Telnet_protocol</code> exception,
 and raises this exception again.</p>
</div>
</div>

<pre><span id="METHODoutput_queue"><span class="keyword">method</span> output_queue</span> : <code class="type"><a href="Nettelnet_client.html#TYPEtelnet_command">telnet_command</a> Stdlib.Queue.t</code></pre><div class="info ">
<div class="info-desc">
<p>The queue of commands to send to the remote side. If you add new
 commands to this queue, do not forget to invoke the <code class="code">update</code>
 method which indicates to the event system that new data to
 send is available.
 After commands have been sent, they are removed from the queue.</p>
</div>
</div>

<pre><span id="METHODinput_queue"><span class="keyword">method</span> input_queue</span> : <code class="type"><a href="Nettelnet_client.html#TYPEtelnet_command">telnet_command</a> Stdlib.Queue.t</code></pre><div class="info ">
<div class="info-desc">
<p>The queue of commands received from the remote side. This class
 only adds commands to the queue (and invokes the callback 
 function). The user of this class is responsible for removing
 commands from the queue which have been processed.</p>
</div>
</div>

<pre><span id="METHODget_options"><span class="keyword">method</span> get_options</span> : <code class="type"><a href="Nettelnet_client.html#TYPEtelnet_options">telnet_options</a></code></pre><div class="info ">
<div class="info-desc">
<p>Get the configuration options.</p>
</div>
</div>

<pre><span id="METHODset_options"><span class="keyword">method</span> set_options</span> : <code class="type"><a href="Nettelnet_client.html#TYPEtelnet_options">telnet_options</a> -> unit</code></pre><div class="info ">
<div class="info-desc">
<p>Set the configuration options.</p>
</div>
</div>

<pre><span id="METHODreset"><span class="keyword">method</span> reset</span> : <code class="type">unit -> unit</code></pre><div class="info ">
<div class="info-desc">
<p>Closes the connection immediately and empties all queues.
 All negotiated options are reset, too.</p>
</div>
</div>
<h2 id="1_Telnetoptions">Telnet options</h2>
<p>The following methods deal with Telnet protocol options. These
 are negotiated between local and remote side by the Will, Won't,
 Do and Don't commands.</p>

<p>The "local" options describe the modification of the behaviour
 of the local side; the "remote" options describe the modifications
 of the remote side. Both set of options are independent.
 This object may track the set of accepted and rejected options
 if the following methods are used; but this works only if
 the <code class="code">Telnet_will</code>, <code class="code">_wont</code>, <code class="code">_do</code>, and <code class="code">_dont</code> commands received from
 the remote side are processed by <code class="code">process_option_command</code>. So
 you need to invoke this method for the mentioned commands in
 your command interpretation loop.</p>

<p>The idea is: If you <b>enable</b> an option, it is possible to
 switch it on. If the remote side requests the option to be enabled,
 the request will be acknowledged. If the remote side does not
 request the option, it remains off.</p>

<p>You can also actively demand an option (<code class="code">offer_local_option</code>,
 <code class="code">request_remote_option</code>); this is of course only possible if
 the option is already enabled. In this case the client tries
 actively to switch it on.</p>

<p>You can also <b>disable</b> an option. If the option is on, the
 client actively rejects the option; following the Telnet protocol
 this is always possible (rejections cannot be rejected).</p>

<p>The <code class="code">reset</code> methods are somewhat dangerous. They simply reset
 the internal state of the client, but do not negotiate. This
 possibility was added to allow the Timing Mark option to send
 again timing marks even if the previous timing marks have
 already been accepted. After <code class="code">reset</code>, the client thinks the
 option was never negotiated; but nothing is done to tell
 the remote side about this.</p>

<p><code class="code">option_negotiation_is_over</code>: true if no option negotiation is
 pending (i.e. nothing has still to be acknowledged).</p>

<pre><span id="METHODenable_local_option"><span class="keyword">method</span> enable_local_option</span> : <code class="type"><a href="Nettelnet_client.html#TYPEtelnet_negotiated_option">telnet_negotiated_option</a> -> unit</code></pre>
<pre><span id="METHODenable_remote_option"><span class="keyword">method</span> enable_remote_option</span> : <code class="type"><a href="Nettelnet_client.html#TYPEtelnet_negotiated_option">telnet_negotiated_option</a> -> unit</code></pre>
<pre><span id="METHODdisable_local_option"><span class="keyword">method</span> disable_local_option</span> : <code class="type"><a href="Nettelnet_client.html#TYPEtelnet_negotiated_option">telnet_negotiated_option</a> -> unit</code></pre>
<pre><span id="METHODdisable_remote_option"><span class="keyword">method</span> disable_remote_option</span> : <code class="type"><a href="Nettelnet_client.html#TYPEtelnet_negotiated_option">telnet_negotiated_option</a> -> unit</code></pre>
<pre><span id="METHODoffer_local_option"><span class="keyword">method</span> offer_local_option</span> : <code class="type"><a href="Nettelnet_client.html#TYPEtelnet_negotiated_option">telnet_negotiated_option</a> -> unit</code></pre>
<pre><span id="METHODrequest_remote_option"><span class="keyword">method</span> request_remote_option</span> : <code class="type"><a href="Nettelnet_client.html#TYPEtelnet_negotiated_option">telnet_negotiated_option</a> -> unit</code></pre>
<pre><span id="METHODreset_local_option"><span class="keyword">method</span> reset_local_option</span> : <code class="type"><a href="Nettelnet_client.html#TYPEtelnet_negotiated_option">telnet_negotiated_option</a> -> unit</code></pre>
<pre><span id="METHODreset_remote_option"><span class="keyword">method</span> reset_remote_option</span> : <code class="type"><a href="Nettelnet_client.html#TYPEtelnet_negotiated_option">telnet_negotiated_option</a> -> unit</code></pre>
<pre><span id="METHODget_local_option"><span class="keyword">method</span> get_local_option</span> : <code class="type"><a href="Nettelnet_client.html#TYPEtelnet_negotiated_option">telnet_negotiated_option</a> -><br>       <a href="Nettelnet_client.html#TYPEtelnet_option_state">telnet_option_state</a></code></pre>
<pre><span id="METHODget_remote_option"><span class="keyword">method</span> get_remote_option</span> : <code class="type"><a href="Nettelnet_client.html#TYPEtelnet_negotiated_option">telnet_negotiated_option</a> -><br>       <a href="Nettelnet_client.html#TYPEtelnet_option_state">telnet_option_state</a></code></pre>
<pre><span id="METHODoption_negotiation_is_over"><span class="keyword">method</span> option_negotiation_is_over</span> : <code class="type">bool</code></pre>
<pre><span id="METHODprocess_option_command"><span class="keyword">method</span> process_option_command</span> : <code class="type"><a href="Nettelnet_client.html#TYPEtelnet_command">telnet_command</a> -> unit</code></pre>
<pre><span id="METHODfetch_subnegotiation"><span class="keyword">method</span> fetch_subnegotiation</span> : <code class="type">string option</code></pre><div class="info ">
<div class="info-desc">
<p>This method should be called as follows:
 If you find a <code class="code">Telnet_sb</code> at the beginning of the input queue,
 remove this command <code class="code">Queue.take</code>, and invoke <code class="code">fetch_subnegotiation</code>.
 This method scans the queue and looks for the associated 
 <code class="code">Telnet_se</code> command. If it does not find it, <code class="code">None</code> is returned.
 If <code class="code">Telnet_se</code> is found, the parameter enclosed by the two commands
 is returned as <code class="code">Some s</code> where <code class="code">s</code> is the parameter string. Furthermore,
 in the latter case the data items and the closing <code class="code">Telnet_se</code> are
 removed from the queue.</p>
</div>
</div>
<h2 id="1_Runningthesession">Running the session</h2>
<pre><span id="METHODattach"><span class="keyword">method</span> attach</span> : <code class="type">unit -> unit</code></pre><div class="info ">
<div class="info-desc">
<p>Attach to the event system. After being attached, the client
 is ready to work.</p>
</div>
</div>

<pre><span id="METHODrun"><span class="keyword">method</span> run</span> : <code class="type">unit -> unit</code></pre><div class="info ">
<div class="info-desc">
<p>Run the event system</p>
</div>
</div>

<pre><span id="METHODupdate"><span class="keyword">method</span> update</span> : <code class="type">unit -> unit</code></pre><div class="info ">
<div class="info-desc">
<p>If there are commands in the output queue, the event system is
 signaled that this client wants to do network I/O.</p>
</div>
</div>

<pre><span id="METHODsend_synch"><span class="keyword">method</span> send_synch</span> : <code class="type"><a href="Nettelnet_client.html#TYPEtelnet_command">telnet_command</a> list -> unit</code></pre><div class="info ">
<div class="info-desc">
<p>At the next output oppurtunity, a Synch sequence is sent to
 the remote peer. This means that the passed commands, extended
 by an additional Data Mark command, are sent to the peer as
 urgent data.</p>

<p>Sending a Synch sequence has higher priority than the output
 queue; processing of the output queue is deferred until the
 Synch sequence has been completely sent.</p>
</div>
</div>

<pre><span id="METHODexpect_input"><span class="keyword">method</span> expect_input</span> : <code class="type">bool -> unit</code></pre><div class="info ">
<div class="info-desc">
<p>Set whether the timeout value is to be applied to the input side
	  of the connection. This is <code class="code">true</code> by default.</p>
</div>
</div>

<pre><span id="METHODstart_tls"><span class="keyword">method</span> start_tls</span> : <code class="type">(module Netsys_crypto_types.TLS_CONFIG) -> peer_name:string option -> unit</code></pre><div class="info ">
<div class="info-desc">
<p>Switch to TLS. Note that this is not covered by the TELNET protocol
          standard. However, some applications of TELNET use this nevertheless
          (e.g. FTP control connections).</p>

<p>Switching to TLS can be done at any time, but should be done at a
          moment when the other side of the connection expects it. If
          <code class="code">start_tls</code> is invoked before <code class="code">attach</code>, TLS is enabled at the
          very beginning of the TELNET connection.</p>

<p>The arguments are the TLS configuration, and the peer name for
          validation (pass the host name here).</p>
</div>
</div>

<pre><span id="METHODtls_session_props"><span class="keyword">method</span> tls_session_props</span> : <code class="type"><a href="Nettls_support.tls_session_props-c.html">Nettls_support.tls_session_props</a> option</code></pre><div class="info ">
<div class="info-desc">
<p>TLS session properties (if on)</p>
</div>
</div>

<pre><span id="METHODtls_session_data"><span class="keyword">method</span> tls_session_data</span> : <code class="type">string option</code></pre><div class="info ">
<div class="info-desc">
<p>TLS session data (if on)</p>
</div>
</div>
</body></html>