Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C getting a portion of string within a string

I'm trying to write code that parses a HTTP GET request and checks if the "Host" is www.bbc.co.uk.

This is my working code:

char data[] = "GET /news/ HTTP/1.1\nHost: www.bbc.co.uk\nConnection: keep-alive";
    unsigned int size = strlen(data);

    if (size>3 && data[0] == 'G' && data[1] == 'E' && data[2] == 'T'){ //If GET Request
        int host_index = -1;

        for (int i=4; i<size-4; i++){
            if (data[i] == 'H' && data[i+1] == 'o' && data[i+2] == 's' && data[i+3] == 't'
                    && data[i+4] == ':' && data[i+5] == ' '){
                host_index = i+6;
            }
        }

        if ( host_index != -1 && size > host_index+11 &&
                data[host_index] == 'w' && data[host_index+1] == 'w' && data[host_index+2] == 'w' &&
                data[host_index+3] == '.' && data[host_index+4] == 'b' && data[host_index+5] == 'b' &&
                data[host_index+6] == 'c' && data[host_index+7] == '.' && data[host_index+8] == 'c' &&
                data[host_index+9] == 'o' && data[host_index+10] == '.' && data[host_index+11] == 'u' &&
                data[host_index+12] == 'k')
        {
            printf("BBC WEBSITE!\n");
        }

    }

I think this is a lot of code for not a lot. How can I make this code more compact?

[Please keep it to plain C. No 3rd party libs]

MANY THANKS!

like image 913
Yahya Uddin Avatar asked Jan 09 '23 08:01

Yahya Uddin


1 Answers

Why don't you use strstr() ?

Split big string into chunks using strstr(), and then parse smaller chunks by separate routines

like image 55
Severin Pappadeux Avatar answered Jan 12 '23 03:01

Severin Pappadeux