Extract query from request-target

How to write a C Program to Extract query from request-target in C Programming Language ?


Solution:

  1.            // TODO: extract query from request-target
  2.             char* beg_query = strchr(reqTarget, '=');
  3.             ssize_t start_q = (ssize_t)(beg_query - reqTarget);
  4.             char* end_query = strchr(reqTarget, '\0');
  5.             ssize_t last_q = (ssize_t)(end_query - reqTarget);
  6.             ssize_t length_q = last_q - start_q;
  7.             char query[length_q];
  8.             ssize_t n = 0;
  9.  
  10.             if (beg_query == NULL)
  11.             {
  12.                 query[0] = '\0';
  13.             }
  14.             else
  15.             {
  16.                 for(ssize_t i = start_q + 1; i < length_q; i++)
  17.                 {
  18.                     query[n] = i;
  19.                     n++;
  20.                 }
  21.             }
  22.             query[length_q + 1] = '\0';
  23.            
  24.             printf("%s\n", query);
  25.  
  26.             // TODO: concatenate root and absolute-path
  27.             ssize_t length_root = strlen(argv[optind]);
  28.            
  29.             char* start_resour = strchr(reqTarget, '/');
  30.             ssize_t start_resourLoc = (ssize_t)(start_resour - reqTarget);
  31.            
  32.             char* end_resour = strchr(reqTarget,'\0');
  33.             ssize_t end_resourLoc = (ssize_t)(end_resour - reqTarget);
  34.            
  35.             char* end_resour2 = strchr(reqTarget, '?');
  36.             ssize_t end_resourLoc2 = (ssize_t)(end_resour2 - reqTarget);
  37.            
  38.             ssize_t length_resour = 0;
  39.             ssize_t j;
  40.  
  41.             char new_resour[length_root + length_resour];
  42.            
  43.             if (end_resour2 != NULL)
  44.             {
  45.                 length_resour = end_resourLoc2 - start_resourLoc;
  46.             }
  47.             else if (end_resour2 == NULL)
  48.             {
  49.                 length_resour = end_resourLoc - start_resourLoc;
  50.             }
  51.            
  52.                        
  53.             for(ssize_t i = 0; i < length_resour; i++)
  54.             {
  55.                 new_resour[i] = reqTarget[i];
  56.             }
  57.            
  58.             char path[length_root + length_resour];
  59.            
  60.             for(= 0; j < length_root; j++)
  61.             {
  62.                 path[j] = argv[optind][j];    
  63.             }
  64.            
  65.             for(; j < length_root + length_resour; j++)
  66.             {
  67.                 path[j] = new_resour[- length_root];
  68.             }


Learn More :