diff options
author | Darren Tucker <dtucker@zip.com.au> | 2009-06-21 18:53:53 +1000 |
---|---|---|
committer | Darren Tucker <dtucker@zip.com.au> | 2009-06-21 18:53:53 +1000 |
commit | c5564e1c4c41ae9af96973e2996e2a4285acbae8 (patch) | |
tree | f9fae51c40975704cc73af6073914b00821e3009 /roaming_common.c | |
parent | 1cc55d7a607455d75db0204b5acebce47667b0f8 (diff) |
- andreas@cvs.openbsd.org 2009/05/28 16:50:16
[sshd.c packet.c serverloop.c monitor_wrap.c clientloop.c sshconnect.c
monitor.c Added roaming.h roaming_common.c roaming_dummy.c]
Keep track of number of bytes read and written. Needed for upcoming
changes. Most code from Martin Forssen, maf at appgate dot com.
ok markus@
Also, applied appropriate changes to Makefile.in
Diffstat (limited to 'roaming_common.c')
-rw-r--r-- | roaming_common.c | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/roaming_common.c b/roaming_common.c new file mode 100644 index 000000000..5a871b23e --- /dev/null +++ b/roaming_common.c | |||
@@ -0,0 +1,100 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2004-2009 AppGate Network Security AB | ||
3 | * | ||
4 | * Permission to use, copy, modify, and distribute this software for any | ||
5 | * purpose with or without fee is hereby granted, provided that the above | ||
6 | * copyright notice and this permission notice appear in all copies. | ||
7 | * | ||
8 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
9 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
10 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
11 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
12 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
13 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
14 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
15 | */ | ||
16 | |||
17 | #include <sys/types.h> | ||
18 | #include <sys/socket.h> | ||
19 | #include <sys/uio.h> | ||
20 | |||
21 | #include <errno.h> | ||
22 | #include <inttypes.h> | ||
23 | #include <stdarg.h> | ||
24 | #include <unistd.h> | ||
25 | |||
26 | #include "atomicio.h" | ||
27 | #include "log.h" | ||
28 | #include "packet.h" | ||
29 | #include "xmalloc.h" | ||
30 | #include "cipher.h" | ||
31 | #include "buffer.h" | ||
32 | #include "roaming.h" | ||
33 | |||
34 | static u_int64_t write_bytes = 0; | ||
35 | static u_int64_t read_bytes = 0; | ||
36 | |||
37 | int resume_in_progress = 0; | ||
38 | |||
39 | u_int64_t | ||
40 | get_recv_bytes(void) | ||
41 | { | ||
42 | return read_bytes; | ||
43 | } | ||
44 | |||
45 | void | ||
46 | add_recv_bytes(u_int64_t num) | ||
47 | { | ||
48 | read_bytes += num; | ||
49 | } | ||
50 | |||
51 | u_int64_t | ||
52 | get_sent_bytes(void) | ||
53 | { | ||
54 | return write_bytes; | ||
55 | } | ||
56 | |||
57 | void | ||
58 | roam_set_bytes(u_int64_t sent, u_int64_t recv) | ||
59 | { | ||
60 | read_bytes = recv; | ||
61 | write_bytes = sent; | ||
62 | } | ||
63 | |||
64 | ssize_t | ||
65 | roaming_write(int fd, const void *buf, size_t count, int *cont) | ||
66 | { | ||
67 | ssize_t ret; | ||
68 | |||
69 | ret = write(fd, buf, count); | ||
70 | if (ret > 0 && !resume_in_progress) { | ||
71 | write_bytes += ret; | ||
72 | } | ||
73 | debug("Wrote %d bytes for a total of %lld", ret, write_bytes); | ||
74 | return ret; | ||
75 | } | ||
76 | |||
77 | ssize_t | ||
78 | roaming_read(int fd, void *buf, size_t count, int *cont) | ||
79 | { | ||
80 | ssize_t ret = read(fd, buf, count); | ||
81 | if (ret > 0) { | ||
82 | if (!resume_in_progress) { | ||
83 | read_bytes += ret; | ||
84 | } | ||
85 | } | ||
86 | return ret; | ||
87 | } | ||
88 | |||
89 | ssize_t | ||
90 | roaming_atomicio(ssize_t(*f)(), int fd, void *buf, size_t count) | ||
91 | { | ||
92 | ssize_t ret = atomicio(f, fd, buf, count); | ||
93 | |||
94 | if ((f == write || f == vwrite) && ret > 0 && !resume_in_progress) { | ||
95 | write_bytes += ret; | ||
96 | } else if (f == read && ret > 0 && !resume_in_progress) { | ||
97 | read_bytes += ret; | ||
98 | } | ||
99 | return ret; | ||
100 | } | ||