Changeset 3eef14


Ignore:
Timestamp:
06/11/09 22:23:05 (3 years ago)
Author:
Erik Ekman <yarrick@…>
Branches:
master
Children:
950c08
Parents:
27fc03
git-author:
Erik Ekman <yarrick@…> (06/11/09 22:23:05)
git-committer:
Erik Ekman <erik@…> (02/04/12 20:34:02)
Message:

#36 fetch remote ip number after login

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/iodine.c

    r4bbf4e r3eef14  
    472472 
    473473        send_packet(fd, 'V', data, sizeof(data)); 
     474} 
     475 
     476static void 
     477send_ip_request(int fd, int userid) 
     478{ 
     479        char buf[512] = "I_."; 
     480        buf[1] = b32_5to8(userid); 
     481         
     482        strncat(buf, topdomain, 512 - strlen(buf)); 
     483        send_query(fd, buf); 
    474484} 
    475485 
     
    621631        warnx("couldn't login to server"); 
    622632        return 1; 
     633} 
     634 
     635static int 
     636handshake_raw_udp(int dns_fd) 
     637{ 
     638        struct timeval tv; 
     639        char in[4096]; 
     640        fd_set fds; 
     641        int i; 
     642        int r; 
     643        int read; 
     644        unsigned remoteaddr = 0; 
     645        struct in_addr server; 
     646 
     647        fprintf(stderr, "Testing raw UDP data to the server"); 
     648        fflush(stderr); 
     649        for (i=0; running && i<3 ;i++) { 
     650                tv.tv_sec = i + 1; 
     651                tv.tv_usec = 0; 
     652 
     653                send_ip_request(dns_fd, userid); 
     654                 
     655                FD_ZERO(&fds); 
     656                FD_SET(dns_fd, &fds); 
     657 
     658                r = select(dns_fd + 1, &fds, NULL, NULL, &tv); 
     659 
     660                if(r > 0) { 
     661                        read = read_dns(dns_fd, in, sizeof(in)); 
     662                        if (read == 5 && in[0] == 'I') { 
     663                                /* Received IP address */ 
     664                                remoteaddr = (in[1] & 0xff); 
     665                                remoteaddr <<= 8; 
     666                                remoteaddr |= (in[2] & 0xff); 
     667                                remoteaddr <<= 8; 
     668                                remoteaddr |= (in[3] & 0xff); 
     669                                remoteaddr <<= 8; 
     670                                remoteaddr |= (in[4] & 0xff); 
     671                                server.s_addr = ntohl(remoteaddr); 
     672                                break; 
     673                        } 
     674                } else { 
     675                        fprintf(stderr, "."); 
     676                        fflush(stderr); 
     677                } 
     678        } 
     679         
     680        if (!remoteaddr) { 
     681                fprintf(stderr, " failed to get IP.\n"); 
     682                return 1; 
     683        } 
     684        fprintf(stderr, " at %s", inet_ntoa(server)); 
     685        fflush(stderr); 
     686 
     687        /* TODO do login against port 53 on remote server  
     688         *      based on the old seed. If reply received, 
     689         *      switch to raw udp mode */ 
     690        fprintf(stderr, ": not implemented\n"); 
     691        return 1; 
     692        /* TODO and then return 0 on success */ 
    623693} 
    624694 
     
    871941                return r; 
    872942        } 
     943 
     944        handshake_raw_udp(dns_fd); 
    873945 
    874946        handshake_case_check(dns_fd); 
Note: See TracChangeset for help on using the changeset viewer.