ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/gvpe/src/util.h
(Generate patch)

Comparing gvpe/src/util.h (file contents):
Revision 1.25 by pcg, Thu Aug 7 17:54:27 2008 UTC vs.
Revision 1.27 by pcg, Sun Aug 10 01:34:36 2008 UTC

33 33
34#ifndef UTIL_H__ 34#ifndef UTIL_H__
35#define UTIL_H__ 35#define UTIL_H__
36 36
37#include <cstring> 37#include <cstring>
38#include <sys/types.h>
38 39
39#include <openssl/rsa.h> 40#include <openssl/rsa.h>
40 41
41#include "gettext.h" 42#include "gettext.h"
42 43
83 { 84 {
84 memset (v, -1, sizeof v); 85 memset (v, -1, sizeof v);
85 seq = seqno; 86 seq = seqno;
86 } 87 }
87 88
88 bool recv_ok (u32 seqno) 89 // 0 == ok, 1 == silently ignore, 2 == error, reset
90 int seqno_classify (u32 seqno)
89 { 91 {
90 if (seqno <= seq - WINDOWSIZE) 92 if (seqno <= seq - WINDOWSIZE)
91 slog (L_ERR, _("received duplicate or outdated packet (received %08lx, expected %08lx)\n" 93 return 1;
92 "possible replay attack, or just massive packet reordering"), seqno, seq + 1);
93 else if (seqno > seq + WINDOWSIZE * 4) 94 else if (seqno > seq + WINDOWSIZE * 16)
94 slog (L_ERR, _("received duplicate or out-of-sync packet (received %08lx, expected %08lx)\n" 95 return 2;
95 "possible replay attack, or just massive packet loss"), seqno, seq + 1);
96 else 96 else
97 { 97 {
98 while (seqno > seq) 98 while (seqno > seq)
99 { 99 {
100 seq++; 100 seq++;
109 u32 s = seqno % WINDOWSIZE; 109 u32 s = seqno % WINDOWSIZE;
110 u32 *cell = v + (s >> 5); 110 u32 *cell = v + (s >> 5);
111 u32 mask = 1 << (s & 31); 111 u32 mask = 1 << (s & 31);
112 112
113 if (*cell & mask) 113 if (*cell & mask)
114 slog (L_ERR, _("received duplicate packet (received %08lx, expected %08lx)\n" 114 return 1;
115 "possible replay attack, or just packet duplication"), seqno, seq + 1);
116 else 115 else
117 { 116 {
118 *cell |= mask; 117 *cell |= mask;
119 return true; 118 return 0;
120 } 119 }
121 } 120 }
122
123 return false;
124 } 121 }
125}; 122};
126 123
127typedef callback<const char * ()> run_script_cb; 124typedef callback<const char * ()> run_script_cb;
128 125
129// run a shell script (or actually an external program). 126// run a shell script (or actually an external program).
130bool run_script (const run_script_cb &cb, bool wait); 127pid_t run_script (const run_script_cb &cb, bool wait);
131 128
132#if ENABLE_HTTP_PROXY 129#if ENABLE_HTTP_PROXY
133u8 *base64_encode (const u8 *data, unsigned int len); 130u8 *base64_encode (const u8 *data, unsigned int len);
134#endif 131#endif
135 132

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines