Keresés

Új hozzászólás Aktív témák

  • G.A.

    aktív tag

    válasz buherton #5850 üzenetére

    Köszönöm a gyors választ.

    dns_answer local_answer -> ez nincs használva.
    dns_response -> nincs deklarálva.
    local_dns_resp -> nincs deklarálva.
    ...
    dns_answer** answer -> ezt nem használod semmire.

    A problémás kódrészt próbáltam leegyszerűsítve a hozzászólásba beírni, közben sikerült nekem is belezavarodnom és elírnom.
    dns_answer local_answer = local_dns_resp
    dns_answer** answer = *dns_response

    u8b data[] -> ez nagyon csúnya.
    Mitől csúnya? Inkább u8b* data legyen? Még előnybe részesítem a tömböket a pointerekkel szemben, mivel azokat könnyebben kezelem. 8bites uC-n is könnyebben nyomon tudom követni, hogy mennyi RAM-ot is használok...

    A struct-hoz erősen javaslok egy packed attribute-omot.
    Hobbi programozóként nem tudom mit jelent... mire használható.

    Minek union?
    Megint uC-re hivatkozok. Anno #define-t használtam egy tömb változóinak az azonosításához. Ezt cseréltem le unionba ágyazott struktúrákkal. Így értem:
    typedef union udpv4_header
    {
    struct
    {
    my_16b src_port;
    my_16b dst_port;
    my_16b length;
    my_16b checksum;
    };
    u8b b[8];
    }udpv4_header;

    A struktúrát használom egy konkrét változó módosításához, majd ha másolom/küldöm az adatcsomagot akkor a b[]-t használom.

    miért is nem memcpy-k?
    Szintén egy hiányosságom. Még nem tanultam meg a használatát...

    Közben szerintem meglett a megoldás(működik). Ez lett a function() módosított kódja:

    void get_data_from_dns_reply(u8b* data, dns_header* dns_resp_header, dns_answer*& dns_response)
    {
    u8b i = 0;
    for (; i < 12; i++)
    {
    dns_resp_header->b[i] = data[i];
    }

    dns_response = (dns_answer*)malloc(htons(dns_resp_header->answer_rrs.i) * sizeof(dns_answer));

    for(; data[i] != 0; i++)
    {
    i += data[i];
    }
    i += 5;

    for(u16b j = 0; j < htons(dns_resp_header->answer_rrs.i); j++)
    {
    i += 12;
    for (u8b x = 0; x < 4; x++, i++)
    {
    dns_response[j].data.b[x] = data[i];
    }
    }
    }

Új hozzászólás Aktív témák

Hirdetés