Mercurial > dovecot > core-2.2
annotate src/plugins/zlib/doveadm-zlib.c @ 14682:d0d7b810646b
Make sure we check all the functions' return values. Minor API changes to simplify this.
Checked using a patched clang that adds attribute(warn_unused_result) to all
functions. This commit fixes several error handling mistakes.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 25 Jun 2012 01:14:03 +0300 |
parents | ca37d1577291 |
children | 7c058aa05b0a |
rev | line source |
---|---|
14133
ba770cba5598
Updated copyright notices to include year 2012.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
1 /* Copyright (c) 2010-2012 Dovecot authors, see the included COPYING file */ |
12378
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "lib.h" |
12708
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
4 #include "network.h" |
12378
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 #include "istream.h" |
12708
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
6 #include "ostream.h" |
12378
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 #include "istream-zlib.h" |
12708
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
8 #include "ostream-zlib.h" |
12378
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 #include "module-dir.h" |
12708
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
10 #include "master-service.h" |
12378
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 #include "doveadm-dump.h" |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
12 |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
13 #include <stdio.h> |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
14 #include <fcntl.h> |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 #include <unistd.h> |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
16 |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 const char *doveadm_zlib_plugin_version = DOVECOT_VERSION; |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
18 |
12708
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
19 extern struct doveadm_cmd doveadm_cmd_zlibconnect; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
20 |
12378
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
21 void doveadm_zlib_plugin_init(struct module *module); |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
22 void doveadm_zlib_plugin_deinit(void); |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
23 |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
24 static void cmd_dump_imapzlib(int argc ATTR_UNUSED, char *argv[]) |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
25 { |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
26 struct istream *input, *input2; |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
27 const unsigned char *data; |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
28 size_t size; |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
29 const char *line; |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
30 int fd; |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
31 |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
32 fd = open(argv[1], O_RDONLY); |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
33 if (fd < 0) |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
34 i_fatal("open(%s) failed: %m", argv[1]); |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
35 input = i_stream_create_fd(fd, 1024*32, TRUE); |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
36 while ((line = i_stream_read_next_line(input)) != NULL) { |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
37 /* skip tag */ |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
38 printf("%s\r\n", line); |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
39 while (*line != ' ' && *line != '\0') line++; |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
40 if (*line == '\0') |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
41 continue; |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
42 line++; |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
43 |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
44 if (strcmp(line, "OK Begin compression.") == 0 || |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
45 strcasecmp(line, "COMPRESS DEFLATE") == 0) |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
46 break; |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
47 } |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
48 |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
49 input2 = i_stream_create_deflate(input, TRUE); |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
50 i_stream_unref(&input); |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
51 |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
52 while (i_stream_read_data(input2, &data, &size, 0) != -1) { |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
53 fwrite(data, 1, size, stdout); |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
54 i_stream_skip(input2, size); |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
55 } |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
56 i_stream_unref(&input2); |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
57 fflush(stdout); |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
58 } |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
59 |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
60 static bool test_dump_imapzlib(const char *path) |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
61 { |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
62 const char *p; |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
63 char buf[4096]; |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
64 int fd, ret; |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
65 bool match = FALSE; |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
66 |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
67 p = strrchr(path, '.'); |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
68 if (p == NULL || (strcmp(p, ".in") != 0 && strcmp(p, ".out") != 0)) |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
69 return FALSE; |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
70 |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
71 fd = open(path, O_RDONLY); |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
72 if (fd == -1) |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
73 return FALSE; |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
74 |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
75 ret = read(fd, buf, sizeof(buf)-1); |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
76 if (ret > 0) { |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
77 buf[ret] = '\0'; |
14682
d0d7b810646b
Make sure we check all the functions' return values. Minor API changes to simplify this.
Timo Sirainen <tss@iki.fi>
parents:
14681
diff
changeset
|
78 (void)str_lcase(buf); |
12378
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
79 match = strstr(buf, " ok begin compression.") != NULL || |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
80 strstr(buf, " compress deflate") != NULL; |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
81 } |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
82 (void)close(fd); |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
83 return match; |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
84 } |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
85 |
12708
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
86 struct client { |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
87 int fd; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
88 struct io *io_client, *io_server; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
89 struct istream *input; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
90 struct ostream *output; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
91 bool compressed; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
92 }; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
93 |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
94 static void client_input(struct client *client) |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
95 { |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
96 struct istream *input; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
97 struct ostream *output; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
98 unsigned char buf[1024]; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
99 ssize_t ret; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
100 |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
101 ret = read(STDIN_FILENO, buf, sizeof(buf)); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
102 if (ret == 0) { |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
103 if (client->compressed) { |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
104 master_service_stop(master_service); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
105 return; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
106 } |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
107 /* start compression */ |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
108 i_info("<Compression started>"); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
109 input = i_stream_create_deflate(client->input, TRUE); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
110 output = o_stream_create_deflate(client->output, 6); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
111 i_stream_unref(&client->input); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
112 o_stream_unref(&client->output); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
113 client->input = input; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
114 client->output = output; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
115 client->compressed = TRUE; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
116 return; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
117 } |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
118 if (ret < 0) |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
119 i_fatal("read(stdin) failed: %m"); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
120 |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
121 o_stream_nsend(client->output, buf, ret); |
12708
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
122 } |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
123 |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
124 static void server_input(struct client *client) |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
125 { |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
126 const unsigned char *data; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
127 size_t size; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
128 |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
129 if (i_stream_read(client->input) == -1) { |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
130 if (client->input->stream_errno != 0) { |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
131 errno = client->input->stream_errno; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
132 i_fatal("read(server) failed: %m"); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
133 } |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
134 |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
135 i_info("Server disconnected"); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
136 master_service_stop(master_service); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
137 return; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
138 } |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
139 |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
140 data = i_stream_get_data(client->input, &size); |
12746 | 141 if (write(STDOUT_FILENO, data, size) < 0) |
142 i_fatal("write(stdout) failed: %m"); | |
12708
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
143 i_stream_skip(client->input, size); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
144 } |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
145 |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
146 static void cmd_zlibconnect(int argc ATTR_UNUSED, char *argv[]) |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
147 { |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
148 struct client client; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
149 struct ip_addr *ips; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
150 unsigned int ips_count, port; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
151 int fd, ret; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
152 |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
153 if (argv[1] == NULL || argv[2] == NULL || |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
154 str_to_uint(argv[2], &port) < 0) |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
155 help(&doveadm_cmd_zlibconnect); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
156 |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
157 ret = net_gethostbyname(argv[1], &ips, &ips_count); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
158 if (ret != 0) { |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
159 i_fatal("Host %s lookup failed: %s", argv[1], |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
160 net_gethosterror(ret)); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
161 } |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
162 |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
163 if ((fd = net_connect_ip(&ips[0], port, NULL)) == -1) |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
164 i_fatal("connect(%s, %u) failed: %m", argv[1], port); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
165 |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
166 i_info("Connected to %s port %u. Ctrl-D starts compression", |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
167 net_ip2addr(&ips[0]), port); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
168 |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
169 memset(&client, 0, sizeof(client)); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
170 client.fd = fd; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
171 client.input = i_stream_create_fd(fd, (size_t)-1, FALSE); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
172 client.output = o_stream_create_fd(fd, 0, FALSE); |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
173 o_stream_set_no_error_handling(client.output, TRUE); |
12708
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
174 client.io_client = io_add(STDIN_FILENO, IO_READ, client_input, &client); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
175 client.io_server = io_add(fd, IO_READ, server_input, &client); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
176 master_service_run(master_service, NULL); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
177 io_remove(&client.io_client); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
178 io_remove(&client.io_server); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
179 i_stream_unref(&client.input); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
180 o_stream_unref(&client.output); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
181 if (close(fd) < 0) |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
182 i_fatal("close() failed: %m"); |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
183 } |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
184 |
12378
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
185 struct doveadm_cmd_dump doveadm_cmd_dump_zlib = { |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
186 "imapzlib", |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
187 test_dump_imapzlib, |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
188 cmd_dump_imapzlib |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
189 }; |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
190 |
12708
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
191 struct doveadm_cmd doveadm_cmd_zlibconnect = { |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
192 cmd_zlibconnect, |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
193 "zlibconnect", |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
194 "<host> [<port>]" |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
195 }; |
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
196 |
12378
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
197 void doveadm_zlib_plugin_init(struct module *module ATTR_UNUSED) |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
198 { |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
199 doveadm_dump_register(&doveadm_cmd_dump_zlib); |
12708
108754651836
Added doveadm zlibconnect command for testing IMAP COMPRESS.
Timo Sirainen <tss@iki.fi>
parents:
12378
diff
changeset
|
200 doveadm_register_cmd(&doveadm_cmd_zlibconnect); |
12378
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
201 } |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
202 |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
203 void doveadm_zlib_plugin_deinit(void) |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
204 { |
e21d08bf5e9d
doveadm dump: Added imapzlib type to uncompress IMAP's COMPRESS DEFLATE I/O traffic.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
205 } |