18static int flagwasthere;
29 fdlock = open_write(
"lock/tcpto");
30 if (fdlock == -1)
return 0;
31 fd = open_read(
"lock/tcpto");
32 if (
fd == -1) { close(fdlock);
return 0; }
33 if (lock_ex(fdlock) == -1) { close(fdlock); close(
fd);
return 0; }
36 if (r < 0) { close(fdlock);
return 0; }
38 if (!r) close(fdlock);
45 struct ip6_address *ip = &ix->
addr.
ip6;
61 for (i = 0; i < n; ++i) {
62 if (af == record[0] && byte_equal(ip->d,af == AF_INET ? 4 : 16,record + 16)) {
65 when = (
unsigned long) (
unsigned char) record[11];
66 when = (when << 8) + (
unsigned long) (
unsigned char) record[10];
67 when = (when << 8) + (
unsigned long) (
unsigned char) record[9];
68 when = (when << 8) + (
unsigned long) (
unsigned char) record[8];
70 if (
now() - when < ((60 + (getpid() & 31)) << 6))
return 1;
85 struct ip6_address *ip = &ix->
addr.
ip6;
103 for (i = 0; i < n; ++i) {
104 if (af == record[0] && byte_equal(ip->d,af == AF_INET ? 4 : 16,record + 16)) {
108 lastwhen = (
unsigned long) (
unsigned char) record[11];
109 lastwhen = (lastwhen << 8) + (
unsigned long) (
unsigned char) record[10];
110 lastwhen = (lastwhen << 8) + (
unsigned long) (
unsigned char) record[9];
111 lastwhen = (lastwhen << 8) + (
unsigned long) (
unsigned char) record[8];
114 if (record[4] && (when < 120 + lastwhen)) { close(fdlock);
return; }
116 if (++record[4] > 10) record[4] = 10;
117 record[8] = when; when >>= 8;
118 record[9] = when; when >>= 8;
119 record[10] = when; when >>= 8;
122 if (seek_set(fdlock,i << 5) == 0)
123 if (
write(fdlock,record,32) < 32)
131 if (!flagerr) { close(fdlock);
return; }
135 for (i = 0; i < n; ++i) {
136 if (!record[4])
break;
144 for (i = 0; i < n; ++i) {
145 when = (
unsigned long) (
unsigned char) record[11];
146 when = (when << 8) + (
unsigned long) (
unsigned char) record[10];
147 when = (when << 8) + (
unsigned long) (
unsigned char) record[9];
148 when = (when << 8) + (
unsigned long) (
unsigned char) record[8];
149 when += (record[4] << 10);
150 if ((firstpos < 0) || (when < firstwhen)) {
163 byte_copy(record + 16,16,ip->d);
165 byte_copy(record + 16,4,ip->d);
166 byte_copy(record + 20,12,
"............");
169 record[8] = when; when >>= 8;
170 record[9] = when; when >>= 8;
171 record[10] = when; when >>= 8;
174 if (seek_set(fdlock,i << 5) == 0)
175 if (
write(fdlock,record,32) < 32)
void tcpto_err(struct ip_mx *ix, int flagerr)
char tcpto_buf[BUFSIZE_LINE]
int tcpto(struct ip_mx *ix)