Changeset 11748b


Ignore:
Timestamp:
07/12/07 00:39:56 (6 years ago)
Author:
Erik Ekman <yarrick@…>
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)
Message:

converted iodine.c to use packet struct

Location:
src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/common.h

    r82ac77 r11748b  
    3131struct packet  
    3232{ 
    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 */ 
    3637}; 
    3738 
  • src/iodine.c

    rbb7419 r11748b  
    5959 
    6060/* Current IP packet */ 
    61 static char activepacket[4096]; 
     61static struct packet packet; 
    6262static char userid; 
    63 static int lastlen; 
    64 static int packetpos; 
    65 static int packetlen; 
    6663static uint16_t chunkid; 
    6764 
     
    132129is_sending() 
    133130{ 
    134         return (packetlen != 0); 
     131        return (packet.len != 0); 
    135132} 
    136133 
     
    139136{ 
    140137        struct sockaddr_in from; 
    141         char packet[64*1024]; 
     138        char data[64*1024]; 
    142139        socklen_t addrlen; 
    143140        struct query q; 
     
    146143 
    147144        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) { 
    150147                warn("recvfrom"); 
    151148                return 0; 
    152149        } 
    153150 
    154         rv = dns_decode(buf, buflen, &q, QR_ANSWER, packet, r); 
     151        rv = dns_decode(buf, buflen, &q, QR_ANSWER, data, r); 
    155152 
    156153        if (is_sending() && chunkid == q.id) { 
    157154                /* Got ACK on sent packet */ 
    158                 packetpos += lastlen; 
    159                 if (packetpos == packetlen) { 
     155                packet.offset += packet.sentlen; 
     156                if (packet.offset == packet.len) { 
    160157                        /* Packet completed */ 
    161                         packetpos = 0; 
    162                         packetlen = 0; 
    163                         lastlen = 0; 
     158                        packet.offset = 0; 
     159                        packet.len = 0; 
     160                        packet.sentlen = 0; 
    164161                } else { 
    165162                        /* More to send */ 
     
    187184        compress2((uint8_t*)out, &outlen, (uint8_t*)in, inlen, 9); 
    188185 
    189         memcpy(activepacket, out, MIN(outlen, sizeof(activepacket))); 
    190         lastlen = 0; 
    191         packetpos = 0; 
    192         packetlen = outlen; 
     186        memcpy(packet.data, out, MIN(outlen, sizeof(packet.data))); 
     187        packet.sentlen = 0; 
     188        packet.offset = 0; 
     189        packet.len = outlen; 
    193190 
    194191        send_chunk(dns_fd); 
     
    269266{ 
    270267        char hex[] = "0123456789ABCDEF"; 
    271         char packet[4096]; 
     268        char data[4096]; 
    272269        struct query q; 
    273270        char buf[4096]; 
     
    280277        q.type = T_NULL; 
    281278 
    282         p = activepacket; 
    283         p += packetpos; 
    284         avail = packetlen - 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) 
    289286                code = 1; 
    290287        else 
     
    293290        code |= (userid << 1); 
    294291        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)); 
    298295} 
    299296 
     
    321318         
    322319        if (is_sending()) { 
    323                 lastlen = 0; 
    324                 packetpos = 0; 
    325                 packetlen = 0; 
     320                packet.sentlen = 0; 
     321                packet.offset = 0; 
     322                packet.len = 0; 
    326323        } 
    327324 
Note: See TracChangeset for help on using the changeset viewer.