15static int flagwasthere;
23 fdlock = open_write(
"queue/lock/tcpto");
24 if (fdlock == -1)
return 0;
25 fd = open_read(
"queue/lock/tcpto");
26 if (
fd == -1) { close(fdlock);
return 0; }
27 if (lock_ex(fdlock) == -1) { close(fdlock); close(
fd);
return 0; }
30 if (r < 0) { close(fdlock);
return 0; }
32 if (!r) close(fdlock);
39 struct ip_address *ip = &ix->
addr;
53 for (i = 0; i < n; ++i) {
54 if (af == record[0] && byte_equal(ip->d,af == AF_INET ? 4 : 16,record + 16)) {
57 when = (
unsigned long) (
unsigned char) record[11];
58 when = (when << 8) + (
unsigned long) (
unsigned char) record[10];
59 when = (when << 8) + (
unsigned long) (
unsigned char) record[9];
60 when = (when << 8) + (
unsigned long) (
unsigned char) record[8];
62 if (
now() - when < ((60 + (getpid() & 31)) << 6))
return 1;
74 struct ip_address *ip = &ix->
addr;
92 for (i = 0; i < n; ++i) {
93 if (af == record[0] && byte_equal(ip->d,af == AF_INET ? 4 : 16,record + 16)) {
97 lastwhen = (
unsigned long) (
unsigned char) record[11];
98 lastwhen = (lastwhen << 8) + (
unsigned long) (
unsigned char) record[10];
99 lastwhen = (lastwhen << 8) + (
unsigned long) (
unsigned char) record[9];
100 lastwhen = (lastwhen << 8) + (
unsigned long) (
unsigned char) record[8];
103 if (record[4] && (when < 120 + lastwhen)) { close(fdlock);
return; }
105 if (++record[4] > 10) record[4] = 10;
106 record[8] = when; when >>= 8;
107 record[9] = when; when >>= 8;
108 record[10] = when; when >>= 8;
111 if (seek_set(fdlock,i << 5) == 0)
112 if (
write(fdlock,record,32) < 32)
120 if (!flagerr) { close(fdlock);
return; }
124 for (i = 0; i < n; ++i) {
125 if (!record[4])
break;
133 for (i = 0; i < n; ++i) {
134 when = (
unsigned long) (
unsigned char) record[11];
135 when = (when << 8) + (
unsigned long) (
unsigned char) record[10];
136 when = (when << 8) + (
unsigned long) (
unsigned char) record[9];
137 when = (when << 8) + (
unsigned long) (
unsigned char) record[8];
138 when += (record[4] << 10);
139 if ((firstpos < 0) || (when < firstwhen)) {
152 byte_copy(record + 16,16,ip->d);
154 byte_copy(record + 16,4,ip->d);
155 byte_copy(record + 20,12,
"............");
158 record[8] = when; when >>= 8;
159 record[9] = when; when >>= 8;
160 record[10] = when; when >>= 8;
163 if (seek_set(fdlock,i << 5) == 0)
164 if (
write(fdlock,record,32) < 32)