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.26 by pcg, Thu Aug 7 19:07:03 2008 UTC vs.
Revision 1.27 by pcg, Sun Aug 10 01:34:36 2008 UTC

84 { 84 {
85 memset (v, -1, sizeof v); 85 memset (v, -1, sizeof v);
86 seq = seqno; 86 seq = seqno;
87 } 87 }
88 88
89 bool recv_ok (u32 seqno) 89 // 0 == ok, 1 == silently ignore, 2 == error, reset
90 int seqno_classify (u32 seqno)
90 { 91 {
91 if (seqno <= seq - WINDOWSIZE) 92 if (seqno <= seq - WINDOWSIZE)
92 slog (L_ERR, _("received duplicate or outdated packet (received %08lx, expected %08lx)\n" 93 return 1;
93 "possible replay attack, or just massive packet reordering"), seqno, seq + 1);
94 else if (seqno > seq + WINDOWSIZE * 4) 94 else if (seqno > seq + WINDOWSIZE * 16)
95 slog (L_ERR, _("received duplicate or out-of-sync packet (received %08lx, expected %08lx)\n" 95 return 2;
96 "possible replay attack, or just massive packet loss"), seqno, seq + 1);
97 else 96 else
98 { 97 {
99 while (seqno > seq) 98 while (seqno > seq)
100 { 99 {
101 seq++; 100 seq++;
110 u32 s = seqno % WINDOWSIZE; 109 u32 s = seqno % WINDOWSIZE;
111 u32 *cell = v + (s >> 5); 110 u32 *cell = v + (s >> 5);
112 u32 mask = 1 << (s & 31); 111 u32 mask = 1 << (s & 31);
113 112
114 if (*cell & mask) 113 if (*cell & mask)
115 slog (L_ERR, _("received duplicate packet (received %08lx, expected %08lx)\n" 114 return 1;
116 "possible replay attack, or just packet duplication"), seqno, seq + 1);
117 else 115 else
118 { 116 {
119 *cell |= mask; 117 *cell |= mask;
120 return true; 118 return 0;
121 } 119 }
122 } 120 }
123
124 return false;
125 } 121 }
126}; 122};
127 123
128typedef callback<const char * ()> run_script_cb; 124typedef callback<const char * ()> run_script_cb;
129 125

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines