#include <iostream>
#include <string.h>
int main()
{
char httpRequest[] = "iPAddressOctet1=192&iPAddressOctet2=168&iPAddressOctet3=0&iPAddressOctet4=220&"
"subnetMaskOctet1=255&subnetMaskOctet2=255&subnetMaskOctet3=255&subnetMaskOctet4=0&defaultGatewayOctet1=192&"
"defaultGatewayOctet2=168&defaultGatewayOctet3=0&defaultGatewayOctet4=1&hTTPPort=80";
struct address_t
{
const char * name;
uint8_t octets[4];
};
address_t addresses[] =
{
{ .name = "iPAddress", .octets = { 0, 0, 0, 0 } },
{ .name = "subnetMask", .octets = { 0, 0, 0, 0 } },
{ .name = "defaultGateway", .octets = { 0, 0, 0, 0 } }
};
uint16_t hTTPPort;
char * p = strtok( httpRequest, "&" );
while ( p != nullptr )
{
bool found = false;
for ( size_t i = 0; i < sizeof( addresses ) / sizeof( addresses[0] ); i++ )
{
address_t * a = &addresses[i];
size_t len = strlen( a->name );
if ( !strncmp( p, a->name, len ) && !strncmp( p + len, "Octet", 5 ) )
{
char * p2 = p + len + 5;
if ( *p2 >= '1' && *p2 <= '4' && *( p2 + 1 ) == '=' )
{
a->octets[ *p2 - '1' ] = atoi( p2 + 2 );
found = true;
break;
}
}
}
if ( !found )
{
size_t len = strlen( "hTTPPort" );
if ( !strncmp( p, "hTTPPort", len ) )
{
char * p2 = p + len;
if ( *p2 == '=' )
{
hTTPPort = atoi( p2 + 1 );
}
}
}
p = strtok( nullptr, "&" );
}
for ( size_t i = 0; i < sizeof( addresses ) / sizeof( addresses[0] ); i++ )
{
address_t * a = &addresses[i];
printf( "%s = { %hhu, %hhu, %hhu, %hhu }\n", a->name, a->octets[0], a->octets[1], a->octets[2], a->octets[3] );
}
printf( "hTTPPort = %hu\n", hTTPPort );
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nLmg+CgppbnQgbWFpbigpCnsKCWNoYXIgaHR0cFJlcXVlc3RbXSA9ICJpUEFkZHJlc3NPY3RldDE9MTkyJmlQQWRkcmVzc09jdGV0Mj0xNjgmaVBBZGRyZXNzT2N0ZXQzPTAmaVBBZGRyZXNzT2N0ZXQ0PTIyMCYiCgkJCQkJCSAic3VibmV0TWFza09jdGV0MT0yNTUmc3VibmV0TWFza09jdGV0Mj0yNTUmc3VibmV0TWFza09jdGV0Mz0yNTUmc3VibmV0TWFza09jdGV0ND0wJmRlZmF1bHRHYXRld2F5T2N0ZXQxPTE5MiYiCgkJCQkJCSAiZGVmYXVsdEdhdGV3YXlPY3RldDI9MTY4JmRlZmF1bHRHYXRld2F5T2N0ZXQzPTAmZGVmYXVsdEdhdGV3YXlPY3RldDQ9MSZoVFRQUG9ydD04MCI7CgoJc3RydWN0IGFkZHJlc3NfdAoJewoJCWNvbnN0IGNoYXIgKiBuYW1lOwoJCXVpbnQ4X3Qgb2N0ZXRzWzRdOwoJfTsKCQoJYWRkcmVzc190IGFkZHJlc3Nlc1tdID0KCXsKCQl7IC5uYW1lID0gImlQQWRkcmVzcyIsICAgICAgLm9jdGV0cyA9IHsgMCwgMCwgMCwgMCB9IH0sCgkJeyAubmFtZSA9ICJzdWJuZXRNYXNrIiwgICAgIC5vY3RldHMgPSB7IDAsIDAsIDAsIDAgfSB9LAoJCXsgLm5hbWUgPSAiZGVmYXVsdEdhdGV3YXkiLCAub2N0ZXRzID0geyAwLCAwLCAwLCAwIH0gfQoJfTsKCQoJdWludDE2X3QgaFRUUFBvcnQ7CgkKCWNoYXIgKiBwID0gc3RydG9rKCBodHRwUmVxdWVzdCwgIiYiICk7Cgl3aGlsZSAoIHAgIT0gbnVsbHB0ciApCgl7CgkJYm9vbCBmb3VuZCA9IGZhbHNlOwoJCQoJCWZvciAoIHNpemVfdCBpID0gMDsgaSA8IHNpemVvZiggYWRkcmVzc2VzICkgLyBzaXplb2YoIGFkZHJlc3Nlc1swXSApOyBpKysgKQoJCXsKCQkJYWRkcmVzc190ICogYSA9ICZhZGRyZXNzZXNbaV07CgkJCXNpemVfdCBsZW4gPSBzdHJsZW4oIGEtPm5hbWUgKTsKCQkJCgkJCWlmICggIXN0cm5jbXAoIHAsIGEtPm5hbWUsIGxlbiApICYmICFzdHJuY21wKCBwICsgbGVuLCAiT2N0ZXQiLCA1ICkgKQoJCQl7CgkJCQljaGFyICogcDIgPSBwICsgbGVuICsgNTsKCQkJCWlmICggKnAyID49ICcxJyAmJiAqcDIgPD0gJzQnICYmICooIHAyICsgMSApID09ICc9JyApCgkJCQl7CgkJCQkJYS0+b2N0ZXRzWyAqcDIgLSAnMScgXSA9IGF0b2koIHAyICsgMiApOwoJCQkJCWZvdW5kID0gdHJ1ZTsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCX0KCQkKCQlpZiAoICFmb3VuZCApCgkJewoJCQlzaXplX3QgbGVuID0gc3RybGVuKCAiaFRUUFBvcnQiICk7CgkJCQoJCQlpZiAoICFzdHJuY21wKCBwLCAiaFRUUFBvcnQiLCBsZW4gKSApCgkJCXsKCQkJCWNoYXIgKiBwMiA9IHAgKyBsZW47CgkJCQlpZiAoICpwMiA9PSAnPScgKQoJCQkJewoJCQkJCWhUVFBQb3J0ID0gYXRvaSggcDIgKyAxICk7CgkJCQl9CgkJCX0KCQl9CgkJCgkJcCA9IHN0cnRvayggbnVsbHB0ciwgIiYiICk7Cgl9CgkKCQoJCglmb3IgKCBzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoIGFkZHJlc3NlcyApIC8gc2l6ZW9mKCBhZGRyZXNzZXNbMF0gKTsgaSsrICkKCXsKCQlhZGRyZXNzX3QgKiBhID0gJmFkZHJlc3Nlc1tpXTsKCQlwcmludGYoICIlcyA9IHsgJWhodSwgJWhodSwgJWhodSwgJWhodSB9XG4iLCBhLT5uYW1lLCBhLT5vY3RldHNbMF0sIGEtPm9jdGV0c1sxXSwgYS0+b2N0ZXRzWzJdLCBhLT5vY3RldHNbM10gKTsKCX0KCQoJcHJpbnRmKCAiaFRUUFBvcnQgPSAlaHVcbiIsIGhUVFBQb3J0ICk7CgkKCQoJcmV0dXJuIDA7Cn0=