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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
cce208f9b393 Compiler warning fix.
Timo Sirainen <tss@iki.fi>
parents: 12708
diff changeset
141 if (write(STDOUT_FILENO, data, size) < 0)
cce208f9b393 Compiler warning fix.
Timo Sirainen <tss@iki.fi>
parents: 12708
diff changeset
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 }