void environment::spawn_player(point2 location) { // player props auto weapon = std::make_shared<body_component::item_type>(); weapon->add({ rl::effect::weapon_damage, 0x00, 50 }); weapon->add({ rl::effect::equipment, static_cast<unsigned int>(rl::equipment_slot::hand_main) }); weapon->set_name("Copper Sword"); weapon->set_tag("copper_sword"); // make player auto task = m_factory->produce(); auto img = task->add_appearance('@', { 1, 1, 1 }); auto pawn = task->add_location(location); auto body = task->add_body(100, 100); auto character = task->add_character(); // setup body->set_name("You"); body->set_tag("player"); body->join_faction(1); body->add(weapon); body->equip(weapon); character->add_skill("sk_bash"); character->add_skill("sk_panacea"); character->add_skill("sk_teleport"); character->add_skill("sk_fireball"); character->add_skill("sk_indigo"); m_terrain.add(task->assemble(persistency::permanent)); impersonate(pawn); }
// Sends the HMDP request 'List' // @param sockfd the socket descriptor of the server // @param token the token used for verification // @param list the list of files found in the clients hooli directory void request_list(int sockfd, char *token, csv_record *list) { char *request; // The 'List' message char *list_size; // The size of the list of files and checksums int length; // The length of the 'List' message asprintf(&list_size, "%d", get_list_size(list)); add_command(&request, COMMAND_LIST); // |-----------------| add_key(&request, KEY_TOKEN); // |List\n | add_value(&request, token); // |-----------------| add_key(&request, KEY_LENGTH); // |Token:value\n | add_value(&request, list_size); // |-----------------| delimit_header(&request); // |Length:value\n\n | add_body(&request, list); // |-----------------| // |Body: | // |-----------------| length = strlen(request); // Check to see if the message sent successfully if (send_all(sockfd, request, &length) == -1) { syslog(LOG_ERR, "Only sent %d bytes\n", length); } //end if free(list_size); free(request); list_size = NULL; request = NULL; } //end request_list
// Sends the HMDP response '302' // @param connectionfd the socket descriptor of the client // @param response_list the list of files for the client to upload void response_302(int connectionfd, csv_record *response_list) { char *response; // The '302' message char *list_size; // The size of the body of the message int length; // The length of the message asprintf(&list_size, "%d", get_list_size(response_list)); add_status(&response, STATUS_302); // |----------------------| add_message(&response, MESSAGE_302); // |302 Files requested\n | add_key(&response, KEY_LENGTH); // |----------------------| add_value(&response, list_size); // |Length:value\n\n | delimit_header(&response); // |----------------------| add_body(&response, response_list); // |Body: | // |----------------------| length = strlen(response); // Check to see if the message sent successfully if (send_all(connectionfd, response, &length) == -1) { syslog(LOG_ERR, "Only sent %d bytes\n", length); } //end if free(list_size); free(response); list_size = NULL; response = NULL; } //end response_302
void environment::start() { end(); m_time = 0; m_running = true; m_world.resize(settings::world_width, settings::world_height); m_world.generate(m_settings.seed()); spawn_player(m_world.spawn() * point2(settings::cell_width, settings::cell_height)); // ui tie_map(); m_ui->deactivate("title"); m_ui->activate("ingame"); // make chest auto chest = m_factory->produce(); chest->add_appearance('$', { 1, 1, 1 }); chest->add_location({ 2, 2 }); auto body = chest->add_body(250, 150); body->set_name("Iron chest"); chest->add_container(); m_terrain.add(*chest); auto ore = std::make_shared<body_component::item_type>(); ore->add({ rl::effect::ore_power, 0x00, 10 }); ore->add({ rl::effect::value, 0x00, 5 }); ore->add({ rl::effect::weight, 0x00, 1 }); ore->set_name("Copper ore"); ore->set_tag("ore_copper"); auto vein = m_factory->produce(); vein->add_appearance('0'); vein->add_location({ 3, 3 }); vein->add_body(); auto v = vein->add_resource(); v->deposit(ore); m_terrain.add(*vein); auto anvil = m_factory->produce(); anvil->add_appearance('t'); anvil->add_location({ 3, 0 }); anvil->add_body(); anvil->add_container(); m_terrain.add(*anvil); }
bool QuadTree::insert(Body* b){ // Ignore objects which do not belong in this quad tree if (!boundary.containsPoint(b->position)){ return false; } if (!has_children() && bodies->size() < QT_NODE_CAPACITY){ // std::cout << "adding " << b << std::endl; //node_b.position = b->position; bodies->push_back(b); return true; } if( northWest == nullptr ){ subdivide(); } bool inserted = false; for(QuadTree * child : children) { if(child->insert(b)) { inserted = true; break; } } add_body(b); while(!bodies->empty()){ b = bodies->back(); bodies->pop_back(); //node_mass+=b.mass; add_body(b); for(QuadTree * child : children) { if(child->insert(b)) { inserted = true; break; } } } if(inserted) return true; // Otherwise, the point cannot be inserted for some unknown reason (which should never happen) return false; }
void step_body(struct body **b, int x, int y) { struct body *temp = NULL; if (*b) { temp = (**b).rest; free(*b); *b = temp; add_body(b, x, y); } }
void add_body(struct body **b, int x, int y) { if (!(*b)) { *b = make_body(x, y); (**b).rest = NULL; } else { add_body(&((*b)->rest), x, y); } }
bool mime_builder::save_as(acl::ofstream& fp) { acl::string buf; if (attachs_.empty()) { //header_.set_type(MIME_CTYPE_TEXT, body_html_ ? // MIME_STYPE_HTML : MIME_STYPE_PLAIN); header_.set_type("text", body_html_ ? "html" : "plain"); header_.add_header("Content-Transfer-Encoding", "base64"); } else { //header_.set_type(MIME_CTYPE_MULTIPART, // MIME_STYPE_MIXED); header_.set_type("multipart", "mixed"); delimeter_.format("------=_Part_%d_%ld.%ld", getpid(), acl_pthread_self(), time(NULL)); header_.set_boundary(delimeter_.c_str()); } header_.build_head(buf, false); if (fp.write(buf) == -1) { logger_error("write head to file %s error %s", fp.file_path(), acl::last_serror()); return false; } if (!delimeter_.empty()) { if (add_boundary(fp) == false) return false; } if (add_body(fp) == false) return false; if (delimeter_.empty()) return true; std::vector<char*>::const_iterator cit = attachs_.begin(); for (; cit != attachs_.end(); ++cit) { if (add_boundary(fp) == false) return false; if (add_attach(fp, *cit) == false) return false; } // 添加最后一个分隔符 return add_boundary(fp, true); }
int main() { init(); set_window_title("Team27, inc - Innocent Snake"); srand((unsigned)time(NULL)); //kondisi map awal int map[SIZE_Y][SIZE_X] = {-1,-1,-1,-1,-1,-1,-1, 0, 0, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0,-1,-1,-1,-1, 0, 0, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, -1, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, -1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, -1, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, -1, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, -1, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1,-1,-1,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1,-1,-1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0,-1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0,-1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0,-1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1,-1,-1,-1,-1, 0, 0, 0,-1,-1,-1,-1,-1,-1, 0, 0,-1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0,-1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0,-1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0,-1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0,-1, -1, 0, 0, 0, 0, 0, 0,-1,-1,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, -1,-1,-1,-1,-1,-1,-1, 0, 0, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0,-1,-1,-1,-1, 0, 0, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1 }; int counter = 0; int posX, posY; int loaded = 0; int x_his, y_his; int i, j, moveX = 1, moveY = 0; BITMAP *buffer = create_bitmap(SCREEN_W, SCREEN_H); BITMAP *path = create_bitmap(OBJECT_SIZE, OBJECT_SIZE); BITMAP *wall = load_bitmap("wall.bmp", NULL); BITMAP *head = load_bitmap("head.bmp", NULL); BITMAP *snake_body = load_bitmap("body.bmp", NULL); BITMAP *eat = create_bitmap(OBJECT_SIZE, OBJECT_SIZE); BITMAP *bg_map = create_bitmap(SCREEN_W, SCREEN_H); SNAKE *snake = NULL; SNAKE *pointer = NULL; clear_to_color(path, makecol(255, 255, 255)); //jalan berwarna putih clear_to_color(eat, makecol(255, 255, 255)); //makanan backgroundnya putih circlefill(eat, OBJECT_SIZE/2, OBJECT_SIZE/2, OBJECT_SIZE/2 - 4, makecol(255, 0, 0)); //makanan berwarna merah //membuat map snake di bitmap for(i=0; i<SIZE_Y; i++) { for(j=0; j<SIZE_X; j++) { switch(map[i][j]) { case PATH : draw_sprite(bg_map, path, j*OBJECT_SIZE, i*OBJECT_SIZE); break; case WALL : draw_sprite(bg_map, wall, j*OBJECT_SIZE, i*OBJECT_SIZE); break; } } } //inisialisasi awal posisi snake add_body(&snake, 3, 1, map); map[snake->y][snake->x] = HEAD; add_body(&snake, 2, 1, map); add_body(&snake, 1, 1, map); set_keyboard_rate(10, 10); while (!key[KEY_ESC]) { //deteksi apakah sudah ada makanan di map if(loaded==0) { do { posX = rand()%(SIZE_X-1) + 1; posY = rand()%(SIZE_Y-1) + 1; } while(map[posY][posX] != PATH); map[posY][posX] = EAT; loaded = 1; } //deteksi keyboard yang ditekan dan mengubah arah gerak snake if(counter==5) { if(key[KEY_UP] && moveY==0) { moveX=0; moveY=-1; clear_keybuf(); } else if(key[KEY_DOWN] && moveY==0) { moveX=0; moveY=1; clear_keybuf(); } else if(key[KEY_LEFT] && moveX==0) { moveX=-1; moveY=0; clear_keybuf(); } else if(key[KEY_RIGHT] && moveX==0) { moveX=1; moveY=0; clear_keybuf(); } x_his = snake->x; y_his = snake->y; //kalau menabrak sesuatu maka keluar if(!move_snake(snake, moveX, moveY, map)) break; //jika bertemu makanan maka tambah badan if(map[posY][posX] != EAT) { add_body(&snake, x_his, y_his, map); loaded = 0; } counter=0; } counter++; //tempelkan semua obyek ke buffer draw_sprite(buffer, bg_map, 0, 0); draw_sprite(buffer, eat, posX*OBJECT_SIZE, posY*OBJECT_SIZE); for(pointer = snake; pointer != NULL; pointer = pointer->next) { switch(map[pointer->y][pointer->x]) { case BODY : draw_sprite(buffer, snake_body, pointer->x*OBJECT_SIZE, pointer->y*OBJECT_SIZE); break; case HEAD : draw_sprite(buffer, head, pointer->x*OBJECT_SIZE, pointer->y*OBJECT_SIZE); break; } } //tampilkan buffer ke screen draw_sprite(screen, buffer, 0, 0); clear_bitmap(buffer); rest(10); } //destroy semua bitmap destroy_bitmap(head); destroy_bitmap(buffer); destroy_bitmap(path); destroy_bitmap(wall); destroy_bitmap(snake_body); destroy_bitmap(eat); deinit(); return 0; }
int main(int argc, char *argv[]) { if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) != 0) { fprintf(stderr, "Unable to initialize SDL: %s\n", SDL_GetError()); SDL_Quit(); return -1; } SDL_Window *win = SDL_CreateWindow("snake", 50, 50, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_OPENGL); if (!win) { fprintf(stderr, "Unable to initialize window: %s\n", SDL_GetError()); SDL_Quit(); return -1; } SDL_GLContext gl_con = SDL_GL_CreateContext(win); struct square *head = make_square(0, 0, TILE, brown); struct square *fruit = make_square(0, 0, TILE, red); if (!head || !fruit) { fprintf(stderr, "Unable to allocate memory for square struct."); if (head) { free(head); } } struct body *snake_body = NULL; reposition_fruit(fruit); enum direction snake_d = LEFT; int previousx; int previousy; if (gl_con == NULL) { fprintf(stderr, "Unable to initialize gl context: %s\n", SDL_GetError()); SDL_DestroyWindow(win); SDL_Quit(); return -1; } SDL_Event event; while (1) { while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT) { goto end; } else if (event.type == SDL_KEYDOWN) { switch (event.key.keysym.sym) { case SDLK_ESCAPE: goto end; break; case SDLK_UP: snake_d = UP; break; case SDLK_DOWN: snake_d = DOWN; break; case SDLK_LEFT: snake_d = LEFT; break; case SDLK_RIGHT: snake_d = RIGHT; break; } } } previousx = head->x; previousy = head->y; switch (snake_d) { case UP: head->y += TILE; break; case DOWN: head->y -= TILE; break; case LEFT: head->x -= TILE; break; case RIGHT: head->x += TILE; break; } if (is_intersect_body(head, snake_body)) { goto end; } step_body(&snake_body, previousx, previousy); if (head->y > SCREEN_HEIGHT - TILE || head->y < -1 * SCREEN_HEIGHT || head->x > SCREEN_WIDTH - TILE || head->x < -1 * SCREEN_WIDTH) { goto end; } else if (is_intersect(head, fruit)) { add_body(&snake_body, previousx, previousy); do { reposition_fruit(fruit); } while (is_intersect(head, fruit) || is_intersect_body(fruit, snake_body)); } cap_game_fps(display, win, head, snake_body, fruit); } end: free(head); clean_body(snake_body); free(fruit); SDL_GL_DeleteContext(gl_con); SDL_Quit(); return 0; }
/** * @returns FUZZ_VALID if the result is a valid HTTP message, FUZZ_INVALID * if the result is an invalid HTTP message, FUZZ_END if the HTTP message * sequence is over. * * @move is how many gen_vector's elements should be changed each time a new * HTTP message is generated, should be >= 1. */ int fuzz_gen(TfwFuzzContext *ctx, char *str, char *end, field_t start, int move, int type) { int i, n, ret = FUZZ_VALID; unsigned int v = 0; ctx->hdr_flags = 0; memset(ctx->fld_flags, 0, sizeof(ctx->fld_flags)); if (str == NULL) return -EINVAL; if (type == FUZZ_REQ) { v |= add_field(ctx, type, &str, end, METHOD); addch(&str, end, ' '); v |= add_field(ctx, type, &str, end, URI_PATH_START); addch(&str, end, '/'); v |= add_field(ctx, type, &str, end, HOST); for (i = 0; i < ctx->i[URI_PATH_DEPTH] + 1; ++i) { addch(&str, end, '/'); v |= add_field(ctx, type, &str, end, URI_FILE); } addch(&str, end, ' '); } add_string(&str, end, "HTTP/"); v |= add_field(ctx, type, &str, end, HTTP_VER); if (type == FUZZ_RESP) { addch(&str, end, ' '); v |= add_field(ctx, type, &str, end, SPACES); v |= add_field(ctx, type, &str, end, RESP_CODE); } add_string(&str, end, "\r\n"); if (type == FUZZ_REQ) { v |= add_header(ctx, type, &str, end, HOST); v |= add_duplicates(ctx, type, &str, end, HOST); v |= add_header(ctx, type, &str, end, ACCEPT); v |= add_duplicates(ctx, type, &str, end, ACCEPT); v |= add_header(ctx, type, &str, end, ACCEPT_LANGUAGE); v |= add_duplicates(ctx, type, &str, end, ACCEPT_LANGUAGE); v |= add_header(ctx, type, &str, end, ACCEPT_ENCODING); v |= add_duplicates(ctx, type, &str, end, ACCEPT_ENCODING); v |= add_header(ctx, type, &str, end, COOKIE); v |= add_duplicates(ctx, type, &str, end, COOKIE); v |= add_header(ctx, type, &str, end, X_FORWARDED_FOR); v |= add_duplicates(ctx, type, &str, end, X_FORWARDED_FOR); v |= add_header(ctx, type, &str, end, USER_AGENT); v |= add_duplicates(ctx, type, &str, end, USER_AGENT); } else if (type == FUZZ_RESP) { v |= add_header(ctx, type, &str, end, ACCEPT_RANGES); v |= add_duplicates(ctx, type, &str, end, ACCEPT_RANGES); v |= add_header(ctx, type, &str, end, SET_COOKIE); v |= add_duplicates(ctx, type, &str, end, SET_COOKIE); v |= add_header(ctx, type, &str, end, ETAG); v |= add_duplicates(ctx, type, &str, end, ETAG); v |= add_header(ctx, type, &str, end, SERVER); v |= add_duplicates(ctx, type, &str, end, SERVER); v |= add_header(ctx, type, &str, end, EXPIRES); v |= add_duplicates(ctx, type, &str, end, EXPIRES); } n = ctx->i[TRANSFER_ENCODING_NUM]; v |= __add_header_rand(ctx, type, &str, end, TRANSFER_ENCODING, n); v |= __add_duplicates(ctx, type, &str, end, TRANSFER_ENCODING, n); v |= add_header(ctx, type, &str, end, CONNECTION); v |= add_duplicates(ctx, type, &str, end, CONNECTION); v |= add_header(ctx, type, &str, end, CONTENT_TYPE); v |= add_duplicates(ctx, type, &str, end, CONTENT_TYPE); v |= add_header(ctx, type, &str, end, CONTENT_LENGTH); v |= add_duplicates(ctx, type, &str, end, CONTENT_LENGTH); v |= add_header(ctx, type, &str, end, CACHE_CONTROL); v |= add_duplicates(ctx, type, &str, end, CACHE_CONTROL); add_string(&str, end, "\r\n"); /* * That's not too bad to add body to invalid message * supposed to have empty body. */ if (!(v & FUZZ_MSG_F_EMPTY_BODY) || (v & FUZZ_MSG_F_INVAL)) v |= add_body(ctx, &str, end, type); if (str < end) { *str = '\0'; } else { v |= FUZZ_INVALID; *(end - 1) = '\0'; } if (!(v & FUZZ_INVALID) && !fuzz_hdrs_compatible(ctx, type, v)) v |= FUZZ_INVALID; for (i = 0; i < move; i++) { ret = gen_vector_move(ctx, start); if (ret == FUZZ_END) break; } if (v & FUZZ_INVALID) return FUZZ_INVALID; return ret; }