void receive_file(int sockfd) { char str[30]; const int on = 1; int flags = 0; int sequence_number = 0; size_t n = 1; // Send the initial window size to the server send_packet.window_size = cdata.sliding_window_size; Send(sockfd, &send_packet, sizeof(send_packet), 0); // Receive the packets in a loop and send ACK while(n > 0) { n = Recv(sockfd, &recv_packet, sizeof(recv_packet), 0); add_packet_to_buffer(&recv_packet); read_packet_from_buffer(); // Send ACK to the server send_packet.seq = sequence_number; send_packet.last_flag = recv_packet.last_flag; send_packet.window_size = current_window_size; send_packet.ack = recv_packet.seq + 1; Send(sockfd, &send_packet, sizeof(send_packet), flags); if(recv_packet.last_flag == 1) { printf("\n[INFO]Last flag set\n"); break; } } }
int ipc_evaluate_message(union olsr_message *olsr_in) { int ipc_pack = 0; olsr_u8_t type; int msgsize; char itoa_buf[10]; olsr_u8_t vtime; union olsr_ip_addr *originator; /* Find size, vtime, originator and type - same for IPv4 and 6 */ type = olsr_in->v4.olsr_msgtype; msgsize = ntohs(olsr_in->v4.olsr_msgsize); vtime = olsr_in->v4.olsr_vtime; originator = (union olsr_ip_addr *)&olsr_in->v4.originator; gui_itoa(msgsize, itoa_buf); switch (type) { case HELLO_MESSAGE: //printf("Received HELLO packet\n"); if (!freeze_packets) packet_list_add("HELLO", ip_to_string(originator), itoa_buf); if (ipversion == AF_INET) { process_hello(msgsize, vtime, originator, (union hello_message *)&olsr_in->v4.message.hello); } else { process_hello(msgsize, vtime, originator, (union hello_message *)&olsr_in->v6.message.hello); } break; case TC_MESSAGE: if (!freeze_packets) packet_list_add("TC", ip_to_string(originator), itoa_buf); if (ipversion == AF_INET) { process_tc(msgsize, vtime, originator, (union tc_message *)&olsr_in->v4.message.tc); //printf("Received TC packet from %s\n", ip_to_string(&m->olsr_tc->tc_origaddr)); } else { process_tc(msgsize, vtime, originator, (union tc_message *)&olsr_in->v6.message.tc); //printf("Received TC packet from %s\n", ip_to_string(&m->olsr_tc->tc_origaddr)); } break; case MID_MESSAGE: if (!freeze_packets) packet_list_add("MID", ip_to_string(originator), itoa_buf); if (ipversion == AF_INET) { process_mid(msgsize, vtime, originator, (union mid_message *)&olsr_in->v4.message.mid); //printf("Received MID packet from %s\n", ip_to_string(&m->olsr_mid->mid_origaddr)); } else { process_mid(msgsize, vtime, originator, (union mid_message *)&olsr_in->v6.message.mid); //printf("Received MID packet from %s\n", ip_to_string(&m->olsr_mid->mid_origaddr)); } break; case HNA_MESSAGE: if (!freeze_packets) packet_list_add("HNA", ip_to_string(originator), itoa_buf); if (ipversion == AF_INET) { process_hna(msgsize, vtime, originator, (union hna_message *)&olsr_in->v4.message.hna); //printf("Received HNA packet\n"); } else { process_hna(msgsize, vtime, originator, (union hna_message *)&olsr_in->v6.message.hna); //printf("Received HNA packet\n"); } break; case IPC_MESSAGE: //printf("Received IPC packet\n"); ipc_pack = 1; /* Don't add to buffer */ ipc_eval_route_packet((struct routemsg *)olsr_in); break; case IPC_NET: //printf("Received IPC packet\n"); ipc_pack = 1; /* Don't add to buffer */ ipc_eval_net_info((struct netmsg *)olsr_in); break; default: if (!freeze_packets) { char unk_label[8]; sprintf(unk_label, "%d", type); packet_list_add(unk_label, ip_to_string(originator), itoa_buf); } printf("Unknown packet type %d\n", type); break; } if (!freeze_packets && !ipc_pack) { add_packet_to_buffer(olsr_in, msgsize); } return 1; }