Changeset 473bb9
- Timestamp:
- 08/15/09 14:43:02 (3 years ago)
- Branches:
- master
- Children:
- 0e81cd
- Parents:
- 7e4ee6
- git-author:
- Erik Ekman <yarrick@…> (08/15/09 14:43:02)
- git-committer:
- Erik Ekman <erik@…> (02/04/12 20:34:03)
- Location:
- src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
src/common.h
r58d961 r473bb9 24 24 #define RAW_HDR_CMD_LOGIN 0x10 25 25 #define RAW_HDR_CMD_DATA 0x20 26 #define RAW_HDR_CMD_PING 0x30 26 27 27 28 #define RAW_HDR_CMD_MASK 0xF0 -
src/iodine.c
r7e4ee6 r473bb9 59 59 #endif 60 60 61 #define PING_TIMEOUT(t) ((t) >= (conn == CONN_DNS_NULL ? 1 : 20)) 62 61 63 static void send_ping(int fd); 62 64 static void send_chunk(int fd); … … 133 135 134 136 memcpy(packet, raw_header, RAW_HDR_LEN); 135 memcpy(&packet[RAW_HDR_LEN], buf, len); 137 if (len) { 138 memcpy(&packet[RAW_HDR_LEN], buf, len); 139 } 136 140 137 141 len += RAW_HDR_LEN; … … 346 350 int rv; 347 351 int i; 352 int seconds; 348 353 349 354 rv = 0; 355 seconds = 0; 350 356 351 357 while (running) { … … 368 374 err(1, "select"); 369 375 370 if (i == 0 && conn == CONN_DNS_NULL)/* timeout */371 se nd_ping(dns_fd);372 else {376 if (i == 0) { /* timeout */ 377 seconds++; 378 } else { 373 379 if (FD_ISSET(tun_fd, &fds)) { 380 seconds = 0; 374 381 if (tunnel_tun(tun_fd, dns_fd) <= 0) 375 382 continue; … … 380 387 } 381 388 } 389 390 if (PING_TIMEOUT(seconds)) { 391 send_ping(dns_fd); 392 seconds = 0; 393 } 382 394 } 383 395 … … 446 458 send_ping(int fd) 447 459 { 448 char data[4]; 449 450 if (is_sending()) { 451 outpkt.sentlen = 0; 452 outpkt.offset = 0; 453 outpkt.len = 0; 454 } 455 456 data[0] = userid; 457 data[1] = ((downstream_seqno & 7) << 4) | (downstream_fragment & 15); 458 data[2] = (rand_seed >> 8) & 0xff; 459 data[3] = (rand_seed >> 0) & 0xff; 460 461 down_ack_seqno = downstream_seqno; 462 down_ack_fragment = downstream_fragment; 463 464 rand_seed++; 465 466 send_packet(fd, 'P', data, sizeof(data)); 460 if (conn == CONN_DNS_NULL) { 461 char data[4]; 462 463 if (is_sending()) { 464 outpkt.sentlen = 0; 465 outpkt.offset = 0; 466 outpkt.len = 0; 467 } 468 469 data[0] = userid; 470 data[1] = ((downstream_seqno & 7) << 4) | (downstream_fragment & 15); 471 data[2] = (rand_seed >> 8) & 0xff; 472 data[3] = (rand_seed >> 0) & 0xff; 473 474 down_ack_seqno = downstream_seqno; 475 down_ack_fragment = downstream_fragment; 476 477 rand_seed++; 478 479 send_packet(fd, 'P', data, sizeof(data)); 480 } else { 481 send_raw(fd, NULL, 0, userid, RAW_HDR_CMD_PING); 482 } 467 483 } 468 484 -
src/iodined.c
re5370a r473bb9 146 146 147 147 memcpy(packet, raw_header, RAW_HDR_LEN); 148 memcpy(&packet[RAW_HDR_LEN], buf, len); 148 if (len) { 149 memcpy(&packet[RAW_HDR_LEN], buf, len); 150 } 149 151 150 152 len += RAW_HDR_LEN; … … 930 932 } 931 933 934 static void 935 handle_raw_ping(struct query *q, int dns_fd, int userid) 936 { 937 if (check_user_and_ip(userid, q) != 0) { 938 return; 939 } 940 941 /* Update query and time info for user */ 942 users[userid].last_pkt = time(NULL); 943 memcpy(&(users[userid].q), q, sizeof(struct query)); 944 945 /* Send ping reply */ 946 send_raw(dns_fd, NULL, 0, userid, RAW_HDR_CMD_PING, q); 947 } 948 932 949 static int 933 950 raw_decode(char *packet, int len, struct query *q, int dns_fd, int tun_fd) … … 949 966 /* Data packet */ 950 967 handle_raw_data(&packet[RAW_HDR_LEN], len - RAW_HDR_LEN, q, dns_fd, tun_fd, raw_user); 968 break; 969 case RAW_HDR_CMD_PING: 970 /* Keepalive packet */ 971 handle_raw_ping(q, dns_fd, raw_user); 951 972 break; 952 973 default:
Note: See TracChangeset
for help on using the changeset viewer.
