Mercurial > dovecot > core-2.2
annotate src/lib/iostream.c @ 22664:fea53c2725c0
director: Fix director_max_parallel_moves/kicks type
Should be uint, not time.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Thu, 09 Nov 2017 12:24:16 +0200 |
parents | e154812ec781 |
children | cb108f786fb4 |
rev | line source |
---|---|
21390
2e2563132d5f
Updated copyright notices to include the year 2017.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents:
19552
diff
changeset
|
1 /* Copyright (c) 2002-2017 Dovecot authors, see the included COPYING file */ |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "lib.h" |
16236
81d87e43e167
istream API change: Added support for multiple destroy callbacks.
Timo Sirainen <tss@iki.fi>
parents:
16020
diff
changeset
|
4 #include "array.h" |
18989
ca2f5d3575b3
lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents:
18164
diff
changeset
|
5 #include "istream.h" |
ca2f5d3575b3
lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents:
18164
diff
changeset
|
6 #include "ostream.h" |
13529
cf77e448295c
Renamed lib/*-internal.h files to lib/*-private.h for consistency.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
7 #include "iostream-private.h" |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
8 |
6419
3a960ffa5de8
If iostream.close/destroy isn't set by the stream implementation, use a
Timo Sirainen <tss@iki.fi>
parents:
6415
diff
changeset
|
9 static void |
16020
6cabb95d32ec
iostreams: Added close_parent flag to close() handler and clarified close/destroy APIs.
Timo Sirainen <tss@iki.fi>
parents:
15715
diff
changeset
|
10 io_stream_default_close(struct iostream_private *stream ATTR_UNUSED, |
6cabb95d32ec
iostreams: Added close_parent flag to close() handler and clarified close/destroy APIs.
Timo Sirainen <tss@iki.fi>
parents:
15715
diff
changeset
|
11 bool close_parent ATTR_UNUSED) |
6cabb95d32ec
iostreams: Added close_parent flag to close() handler and clarified close/destroy APIs.
Timo Sirainen <tss@iki.fi>
parents:
15715
diff
changeset
|
12 { |
6cabb95d32ec
iostreams: Added close_parent flag to close() handler and clarified close/destroy APIs.
Timo Sirainen <tss@iki.fi>
parents:
15715
diff
changeset
|
13 } |
6cabb95d32ec
iostreams: Added close_parent flag to close() handler and clarified close/destroy APIs.
Timo Sirainen <tss@iki.fi>
parents:
15715
diff
changeset
|
14 |
6cabb95d32ec
iostreams: Added close_parent flag to close() handler and clarified close/destroy APIs.
Timo Sirainen <tss@iki.fi>
parents:
15715
diff
changeset
|
15 static void |
6cabb95d32ec
iostreams: Added close_parent flag to close() handler and clarified close/destroy APIs.
Timo Sirainen <tss@iki.fi>
parents:
15715
diff
changeset
|
16 io_stream_default_destroy(struct iostream_private *stream ATTR_UNUSED) |
6419
3a960ffa5de8
If iostream.close/destroy isn't set by the stream implementation, use a
Timo Sirainen <tss@iki.fi>
parents:
6415
diff
changeset
|
17 { |
3a960ffa5de8
If iostream.close/destroy isn't set by the stream implementation, use a
Timo Sirainen <tss@iki.fi>
parents:
6415
diff
changeset
|
18 } |
3a960ffa5de8
If iostream.close/destroy isn't set by the stream implementation, use a
Timo Sirainen <tss@iki.fi>
parents:
6415
diff
changeset
|
19 |
6415
b0096861c390
Renamed struct _[io]stream to struct [io]stream_private. Also removed _
Timo Sirainen <tss@iki.fi>
parents:
6142
diff
changeset
|
20 void io_stream_init(struct iostream_private *stream) |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
21 { |
6419
3a960ffa5de8
If iostream.close/destroy isn't set by the stream implementation, use a
Timo Sirainen <tss@iki.fi>
parents:
6415
diff
changeset
|
22 if (stream->close == NULL) |
16020
6cabb95d32ec
iostreams: Added close_parent flag to close() handler and clarified close/destroy APIs.
Timo Sirainen <tss@iki.fi>
parents:
15715
diff
changeset
|
23 stream->close = io_stream_default_close; |
6419
3a960ffa5de8
If iostream.close/destroy isn't set by the stream implementation, use a
Timo Sirainen <tss@iki.fi>
parents:
6415
diff
changeset
|
24 if (stream->destroy == NULL) |
16020
6cabb95d32ec
iostreams: Added close_parent flag to close() handler and clarified close/destroy APIs.
Timo Sirainen <tss@iki.fi>
parents:
15715
diff
changeset
|
25 stream->destroy = io_stream_default_destroy; |
6419
3a960ffa5de8
If iostream.close/destroy isn't set by the stream implementation, use a
Timo Sirainen <tss@iki.fi>
parents:
6415
diff
changeset
|
26 |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
27 stream->refcount = 1; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
28 } |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
29 |
6415
b0096861c390
Renamed struct _[io]stream to struct [io]stream_private. Also removed _
Timo Sirainen <tss@iki.fi>
parents:
6142
diff
changeset
|
30 void io_stream_ref(struct iostream_private *stream) |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
31 { |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
32 stream->refcount++; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
33 } |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
34 |
6415
b0096861c390
Renamed struct _[io]stream to struct [io]stream_private. Also removed _
Timo Sirainen <tss@iki.fi>
parents:
6142
diff
changeset
|
35 void io_stream_unref(struct iostream_private *stream) |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
36 { |
16236
81d87e43e167
istream API change: Added support for multiple destroy callbacks.
Timo Sirainen <tss@iki.fi>
parents:
16020
diff
changeset
|
37 const struct iostream_destroy_callback *dc; |
81d87e43e167
istream API change: Added support for multiple destroy callbacks.
Timo Sirainen <tss@iki.fi>
parents:
16020
diff
changeset
|
38 |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
39 i_assert(stream->refcount > 0); |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
40 if (--stream->refcount != 0) |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
41 return; |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
42 |
16020
6cabb95d32ec
iostreams: Added close_parent flag to close() handler and clarified close/destroy APIs.
Timo Sirainen <tss@iki.fi>
parents:
15715
diff
changeset
|
43 stream->close(stream, FALSE); |
12106
18ab89f4d6a1
iostream: Call destroy callback after the destroy() method is called.
Timo Sirainen <tss@iki.fi>
parents:
10847
diff
changeset
|
44 stream->destroy(stream); |
16236
81d87e43e167
istream API change: Added support for multiple destroy callbacks.
Timo Sirainen <tss@iki.fi>
parents:
16020
diff
changeset
|
45 if (array_is_created(&stream->destroy_callbacks)) { |
81d87e43e167
istream API change: Added support for multiple destroy callbacks.
Timo Sirainen <tss@iki.fi>
parents:
16020
diff
changeset
|
46 array_foreach(&stream->destroy_callbacks, dc) |
81d87e43e167
istream API change: Added support for multiple destroy callbacks.
Timo Sirainen <tss@iki.fi>
parents:
16020
diff
changeset
|
47 dc->callback(dc->context); |
81d87e43e167
istream API change: Added support for multiple destroy callbacks.
Timo Sirainen <tss@iki.fi>
parents:
16020
diff
changeset
|
48 array_free(&stream->destroy_callbacks); |
81d87e43e167
istream API change: Added support for multiple destroy callbacks.
Timo Sirainen <tss@iki.fi>
parents:
16020
diff
changeset
|
49 } |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
50 |
16772
e35be66003e2
iostream: Added ability to set/get error strings for streams.
Timo Sirainen <tss@iki.fi>
parents:
16236
diff
changeset
|
51 i_free(stream->error); |
10847
5f16e488e7f6
i/ostreams can now have a name (e.g. file path).
Timo Sirainen <tss@iki.fi>
parents:
10582
diff
changeset
|
52 i_free(stream->name); |
6142
6c0bfc35af03
Removed memory pool parameter from iostreams. Default pool was almost always
Timo Sirainen <tss@iki.fi>
parents:
2421
diff
changeset
|
53 i_free(stream); |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
54 } |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
55 |
16020
6cabb95d32ec
iostreams: Added close_parent flag to close() handler and clarified close/destroy APIs.
Timo Sirainen <tss@iki.fi>
parents:
15715
diff
changeset
|
56 void io_stream_close(struct iostream_private *stream, bool close_parent) |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
57 { |
16020
6cabb95d32ec
iostreams: Added close_parent flag to close() handler and clarified close/destroy APIs.
Timo Sirainen <tss@iki.fi>
parents:
15715
diff
changeset
|
58 stream->close(stream, close_parent); |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
59 } |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
60 |
6415
b0096861c390
Renamed struct _[io]stream to struct [io]stream_private. Also removed _
Timo Sirainen <tss@iki.fi>
parents:
6142
diff
changeset
|
61 void io_stream_set_max_buffer_size(struct iostream_private *stream, |
b0096861c390
Renamed struct _[io]stream to struct [io]stream_private. Also removed _
Timo Sirainen <tss@iki.fi>
parents:
6142
diff
changeset
|
62 size_t max_size) |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
63 { |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
64 stream->set_max_buffer_size(stream, max_size); |
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
65 } |
16772
e35be66003e2
iostream: Added ability to set/get error strings for streams.
Timo Sirainen <tss@iki.fi>
parents:
16236
diff
changeset
|
66 |
18164
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
67 void io_stream_add_destroy_callback(struct iostream_private *stream, |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
68 void (*callback)(void *), void *context) |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
69 { |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
70 struct iostream_destroy_callback *dc; |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
71 |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
72 if (!array_is_created(&stream->destroy_callbacks)) |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
73 i_array_init(&stream->destroy_callbacks, 2); |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
74 dc = array_append_space(&stream->destroy_callbacks); |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
75 dc->callback = callback; |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
76 dc->context = context; |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
77 } |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
78 |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
79 void io_stream_remove_destroy_callback(struct iostream_private *stream, |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
80 void (*callback)(void *)) |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
81 { |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
82 const struct iostream_destroy_callback *dcs; |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
83 unsigned int i, count; |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
84 |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
85 dcs = array_get(&stream->destroy_callbacks, &count); |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
86 for (i = 0; i < count; i++) { |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
87 if (dcs[i].callback == callback) { |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
88 array_delete(&stream->destroy_callbacks, i, 1); |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
89 return; |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
90 } |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
91 } |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
92 i_unreached(); |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
93 } |
4723cecff76c
lib: Added o_stream_add_destroy_callback()
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
94 |
16772
e35be66003e2
iostream: Added ability to set/get error strings for streams.
Timo Sirainen <tss@iki.fi>
parents:
16236
diff
changeset
|
95 void io_stream_set_error(struct iostream_private *stream, |
e35be66003e2
iostream: Added ability to set/get error strings for streams.
Timo Sirainen <tss@iki.fi>
parents:
16236
diff
changeset
|
96 const char *fmt, ...) |
e35be66003e2
iostream: Added ability to set/get error strings for streams.
Timo Sirainen <tss@iki.fi>
parents:
16236
diff
changeset
|
97 { |
e35be66003e2
iostream: Added ability to set/get error strings for streams.
Timo Sirainen <tss@iki.fi>
parents:
16236
diff
changeset
|
98 va_list args; |
e35be66003e2
iostream: Added ability to set/get error strings for streams.
Timo Sirainen <tss@iki.fi>
parents:
16236
diff
changeset
|
99 |
e35be66003e2
iostream: Added ability to set/get error strings for streams.
Timo Sirainen <tss@iki.fi>
parents:
16236
diff
changeset
|
100 va_start(args, fmt); |
16813
a919c43ab91b
lib: Added [io]_stream_create_error_str()
Timo Sirainen <tss@iki.fi>
parents:
16772
diff
changeset
|
101 io_stream_set_verror(stream, fmt, args); |
a919c43ab91b
lib: Added [io]_stream_create_error_str()
Timo Sirainen <tss@iki.fi>
parents:
16772
diff
changeset
|
102 va_end(args); |
a919c43ab91b
lib: Added [io]_stream_create_error_str()
Timo Sirainen <tss@iki.fi>
parents:
16772
diff
changeset
|
103 } |
a919c43ab91b
lib: Added [io]_stream_create_error_str()
Timo Sirainen <tss@iki.fi>
parents:
16772
diff
changeset
|
104 |
a919c43ab91b
lib: Added [io]_stream_create_error_str()
Timo Sirainen <tss@iki.fi>
parents:
16772
diff
changeset
|
105 void io_stream_set_verror(struct iostream_private *stream, |
a919c43ab91b
lib: Added [io]_stream_create_error_str()
Timo Sirainen <tss@iki.fi>
parents:
16772
diff
changeset
|
106 const char *fmt, va_list args) |
a919c43ab91b
lib: Added [io]_stream_create_error_str()
Timo Sirainen <tss@iki.fi>
parents:
16772
diff
changeset
|
107 { |
22606
e154812ec781
lib: io_stream_set_error() - Allow one of the parameters to be the old error
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
108 /* one of the parameters may be the old stream->error, so don't free |
e154812ec781
lib: io_stream_set_error() - Allow one of the parameters to be the old error
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
109 it before the new error is created. */ |
e154812ec781
lib: io_stream_set_error() - Allow one of the parameters to be the old error
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
110 char *error = i_strdup_vprintf(fmt, args); |
16772
e35be66003e2
iostream: Added ability to set/get error strings for streams.
Timo Sirainen <tss@iki.fi>
parents:
16236
diff
changeset
|
111 i_free(stream->error); |
22606
e154812ec781
lib: io_stream_set_error() - Allow one of the parameters to be the old error
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
112 stream->error = error; |
16772
e35be66003e2
iostream: Added ability to set/get error strings for streams.
Timo Sirainen <tss@iki.fi>
parents:
16236
diff
changeset
|
113 } |
18989
ca2f5d3575b3
lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents:
18164
diff
changeset
|
114 |
ca2f5d3575b3
lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents:
18164
diff
changeset
|
115 const char *io_stream_get_disconnect_reason(struct istream *input, |
ca2f5d3575b3
lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents:
18164
diff
changeset
|
116 struct ostream *output) |
ca2f5d3575b3
lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents:
18164
diff
changeset
|
117 { |
ca2f5d3575b3
lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents:
18164
diff
changeset
|
118 const char *errstr; |
ca2f5d3575b3
lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents:
18164
diff
changeset
|
119 |
ca2f5d3575b3
lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents:
18164
diff
changeset
|
120 if (input != NULL && input->stream_errno != 0) { |
ca2f5d3575b3
lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents:
18164
diff
changeset
|
121 errno = input->stream_errno; |
ca2f5d3575b3
lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents:
18164
diff
changeset
|
122 errstr = i_stream_get_error(input); |
ca2f5d3575b3
lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents:
18164
diff
changeset
|
123 } else if (output != NULL && output->stream_errno != 0) { |
ca2f5d3575b3
lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents:
18164
diff
changeset
|
124 errno = output->stream_errno; |
ca2f5d3575b3
lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents:
18164
diff
changeset
|
125 errstr = o_stream_get_error(output); |
ca2f5d3575b3
lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents:
18164
diff
changeset
|
126 } else { |
ca2f5d3575b3
lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents:
18164
diff
changeset
|
127 errno = 0; |
ca2f5d3575b3
lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents:
18164
diff
changeset
|
128 errstr = ""; |
ca2f5d3575b3
lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents:
18164
diff
changeset
|
129 } |
ca2f5d3575b3
lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents:
18164
diff
changeset
|
130 |
ca2f5d3575b3
lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents:
18164
diff
changeset
|
131 if (errno == 0 || errno == EPIPE) |
ca2f5d3575b3
lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents:
18164
diff
changeset
|
132 return "Connection closed"; |
ca2f5d3575b3
lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents:
18164
diff
changeset
|
133 else |
ca2f5d3575b3
lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents:
18164
diff
changeset
|
134 return t_strdup_printf("Connection closed: %s", errstr); |
ca2f5d3575b3
lib: Added io_stream_get_disconnect_reason() to iostream.h
Timo Sirainen <tss@iki.fi>
parents:
18164
diff
changeset
|
135 } |