Changeset 11748b
- Timestamp:
- 07/12/07 00:39:56 (6 years ago)
- Branches:
- iodine-0.5, iodine-0.6
- Children:
- 4e582e
- Parents:
- 5f6b71
- git-author:
- Erik Ekman <yarrick@…> (07/12/07 00:39:56)
- git-committer:
- Erik Ekman <yarrick@…> (07/12/07 00:39:56)
- Location:
- src
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/common.h
r82ac77 r11748b 31 31 struct packet 32 32 { 33 int len; 34 int offset; 35 char data[64*1024]; 33 int len; /* Total packet length */ 34 int sentlen; /* Length of chunk currently transmitted */ 35 int offset; /* Current offset */ 36 char data[64*1024]; /* The data */ 36 37 }; 37 38 -
src/iodine.c
rbb7419 r11748b 59 59 60 60 /* Current IP packet */ 61 static char activepacket[4096];61 static struct packet packet; 62 62 static char userid; 63 static int lastlen;64 static int packetpos;65 static int packetlen;66 63 static uint16_t chunkid; 67 64 … … 132 129 is_sending() 133 130 { 134 return (packet len != 0);131 return (packet.len != 0); 135 132 } 136 133 … … 139 136 { 140 137 struct sockaddr_in from; 141 char packet[64*1024];138 char data[64*1024]; 142 139 socklen_t addrlen; 143 140 struct query q; … … 146 143 147 144 addrlen = sizeof(struct sockaddr); 148 if ((r = recvfrom(fd, packet, sizeof(packet), 0,149 (struct sockaddr*)&from, &addrlen)) == -1) {145 if ((r = recvfrom(fd, data, sizeof(data), 0, 146 (struct sockaddr*)&from, &addrlen)) == -1) { 150 147 warn("recvfrom"); 151 148 return 0; 152 149 } 153 150 154 rv = dns_decode(buf, buflen, &q, QR_ANSWER, packet, r);151 rv = dns_decode(buf, buflen, &q, QR_ANSWER, data, r); 155 152 156 153 if (is_sending() && chunkid == q.id) { 157 154 /* Got ACK on sent packet */ 158 packet pos += lastlen;159 if (packet pos == packetlen) {155 packet.offset += packet.sentlen; 156 if (packet.offset == packet.len) { 160 157 /* Packet completed */ 161 packet pos= 0;162 packet len = 0;163 lastlen = 0;158 packet.offset = 0; 159 packet.len = 0; 160 packet.sentlen = 0; 164 161 } else { 165 162 /* More to send */ … … 187 184 compress2((uint8_t*)out, &outlen, (uint8_t*)in, inlen, 9); 188 185 189 memcpy( activepacket, out, MIN(outlen, sizeof(activepacket)));190 lastlen = 0;191 packet pos= 0;192 packet len = outlen;186 memcpy(packet.data, out, MIN(outlen, sizeof(packet.data))); 187 packet.sentlen = 0; 188 packet.offset = 0; 189 packet.len = outlen; 193 190 194 191 send_chunk(dns_fd); … … 269 266 { 270 267 char hex[] = "0123456789ABCDEF"; 271 char packet[4096];268 char data[4096]; 272 269 struct query q; 273 270 char buf[4096]; … … 280 277 q.type = T_NULL; 281 278 282 p = activepacket;283 p += packet pos;284 avail = packet len - packetpos;285 286 lastlen = build_hostname(buf + 1, sizeof(buf) - 1, p, avail, topdomain, dataenc);287 288 if ( lastlen == avail)279 p = packet.data; 280 p += packet.offset; 281 avail = packet.len - packet.offset; 282 283 packet.sentlen = build_hostname(buf + 1, sizeof(buf) - 1, p, avail, topdomain, dataenc); 284 285 if (packet.sentlen == avail) 289 286 code = 1; 290 287 else … … 293 290 code |= (userid << 1); 294 291 buf[0] = hex[code]; 295 len = dns_encode( packet, sizeof(packet), &q, QR_QUERY, buf, strlen(buf));296 297 sendto(fd, packet, len, 0, (struct sockaddr*)&peer, sizeof(peer));292 len = dns_encode(data, sizeof(data), &q, QR_QUERY, buf, strlen(buf)); 293 294 sendto(fd, data, len, 0, (struct sockaddr*)&peer, sizeof(peer)); 298 295 } 299 296 … … 321 318 322 319 if (is_sending()) { 323 lastlen = 0;324 packet pos= 0;325 packet len = 0;320 packet.sentlen = 0; 321 packet.offset = 0; 322 packet.len = 0; 326 323 } 327 324
Note: See TracChangeset
for help on using the changeset viewer.
