void receive_task(void* pvParameters) { struct NLS_HandleTypedef* hNLS = (struct NLS_HandleTypedef*)pvParameters; datagram_info* d_info; for( ; ; ) { xQueueReceive(hNLS->event_queue, &d_info, portMAX_DELAY); #ifndef ROOT if (d_info->retry != 0) { UTSwapMainLink(hNLS->uTable); if(UTGetMainLink(hNLS->uTable) == UPSTREAM_TABLE_IS_EMPTY) { free_datagram_info(d_info); } else { receive_datagram(hNLS, d_info->source_if, d_info->packet, d_info->packet_length); } } else { receive_datagram(hNLS, d_info->source_if, d_info->packet, d_info->packet_length); } #else if (d_info->retry != 0) { downStreamTablePenaliziesBestPath(hNLS->dTable , d_info->address); } receive_datagram(hNLS,d_info->source_if,d_info->packet,d_info->packet_length); #endif } }
int main(int argc, char *argv[]) { if (argc < 2) { fprintf(stderr, "usage: ./server port\n"); exit(0); } port = atoi(argv[1]); // receive_num_packets(argv); // receive_datagram(argv); return receive_num_packets(argv) + receive_datagram(argv); return 0; }
/**@brief Keeps receiving datagrams and prints them */ void run() { int retval; char buf[DATAGRAM_DATA_SIZE]; datagram_t datagram; while (1) { retval = receive_datagram(&datagram); if (retval < 0) { perror("receive failed"); continue; } bzero(buf, DATAGRAM_DATA_SIZE); strncpy(buf, datagram.data, datagram.size); printf("Received Datagram From %s:%d Data:%s\n", datagram.srcaddr, datagram.srcport, buf); } }