From 4186a3ad4321f1cc3994c788e5780105093a4cd5 Mon Sep 17 00:00:00 2001 From: ajuaristi Date: Sat, 12 Jul 2014 20:25:08 +0200 Subject: [PATCH] Removed repeated code. --- hydra-http-form.c | 63 ++++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 36 deletions(-) diff --git a/hydra-http-form.c b/hydra-http-form.c index eaa6136..9b10cce 100644 --- a/hydra-http-form.c +++ b/hydra-http-form.c @@ -127,57 +127,48 @@ int add_header(char *header, char *value, char type){ // get to the last header for(cur_ptr = ptr_head; cur_ptr && cur_ptr->next; cur_ptr = cur_ptr->next); - ptr_header_node new_ptr = (ptr_header_node) malloc(sizeof(t_header_node)); + ptr_header_node existing_hdr, + new_ptr = (ptr_header_node) malloc(sizeof(t_header_node)); + char * new_header = strdup(header); char * new_value = strdup(value); if(new_ptr && new_header && new_value){ - if(type == HEADER_TYPE_USERHEADER){ - // create a new item and append it to the list + if((type == HEADER_TYPE_USERHEADER) || + (type == HEADER_TYPE_DEFAULT && !header_exists(new_header, HEADER_TYPE_USERHEADER_REPL)) || + (type == HEADER_TYPE_USERHEADER_REPL && !header_exists(new_header, HEADER_TYPE_DEFAULT))){ + /* + * We are in one of the following scenarios: + * 1. A default header with no user-supplied headers that replace it. + * 2. A user-supplied header that must be appended (option 'h'). + * 3. A user-supplied header that must replace a default header (option 'h'), + * but no default headers exist with that name. + * + * In either case we just add the header to the list. + */ new_ptr->header = new_header; new_ptr->value = new_value; new_ptr->type = type; new_ptr->next = NULL; - hydra_report(stdout, "[DEBUG] Added header (HEADER_TYPE_USERHEADER) %s: %s\n", new_header, new_value); - }else if(type == HEADER_TYPE_DEFAULT && !header_exists(new_header, HEADER_TYPE_USERHEADER_REPL)){ - // It's a default header and there are no user headers that replace it, - // so we create a new item and append it to the list - new_ptr->header = new_header; - new_ptr->value = new_value; - new_ptr->type = type; - new_ptr->next = NULL; - hydra_report(stdout, "[DEBUG] Added header (HEADER_TYPE_DEFAULT) %s: %s\n", new_header, new_value); - }else if(type == HEADER_TYPE_USERHEADER_REPL){ + + if(cur_ptr) + cur_ptr->next = new_ptr; + else + // head is NULL, so the list is empty + ptr_head = new_ptr; + }else if(type == HEADER_TYPE_USERHEADER_REPL && (existing_hdr = header_exists(new_header, HEADER_TYPE_DEFAULT))){ // It's a user-supplied header that must replace a default one - ptr_header_node hdr_val = header_exists(new_header, HEADER_TYPE_DEFAULT); - if(!hdr_val){ - // There are no headers with the same name, so we act - // as if it was a normal header - new_ptr->header = new_header; - new_ptr->value = new_value; - new_ptr->type = type; - new_ptr->next = NULL; - hydra_report(stdout, "[DEBUG] Added header (HEADER_TYPE_USERHEADER_REPL) %s: %s\n", new_header, new_value); - }else{ - // Replace the default header's value with this new value - free(hdr_val->value); - hdr_val->value = new_value; - hdr_val->type = type; - hydra_report(stdout, "[DEBUG] Replaced header (HEADER_TYPE_USERHEADER_REPL) %s: %s\n", hdr_val->header, hdr_val->value); - return 1; - } + // Replace the default header's value with this new value + free(existing_hdr->value); + existing_hdr->value = new_value; + existing_hdr->type = type; + hydra_report(stdout, "[DEBUG] Replaced header (HEADER_TYPE_USERHEADER_REPL) %s: %s\n", existing_hdr->header, existing_hdr->value); } }else{ // we're out of memory, so forcefully end return 0; } - if(cur_ptr) - cur_ptr->next = new_ptr; - else - // head is NULL, so the list is empty - ptr_head = new_ptr; - return 1; }