1748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat/* 2748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat This file is part of libmicrospdy 3748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat Copyright Copyright (C) 2013 Andrey Uzunov 4748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 5748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat This program is free software: you can redistribute it and/or modify 6748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat it under the terms of the GNU General Public License as published by 7748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat the Free Software Foundation, either version 3 of the License, or 8748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat (at your option) any later version. 9748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 10748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat This program is distributed in the hope that it will be useful, 11748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat but WITHOUT ANY WARRANTY; without even the implied warranty of 12748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat GNU General Public License for more details. 14748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 15748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat You should have received a copy of the GNU General Public License 16748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat along with this program. If not, see <http://www.gnu.org/licenses/>. 17748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat*/ 18748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 19748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat/** 20748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @file common.c 21748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @brief Common functions used by the tests. 22748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @author Andrey Uzunov 23748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat */ 24748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 25748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 26748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#include "common.h" 27748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#include <sys/time.h> 28748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 29748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#ifdef __GNUC__ 30748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#define FUNC_CONSTRUCTOR(f) static void __attribute__ ((constructor)) f 31748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#define FUNC_DESTRUCTOR(f) static void __attribute__ ((destructor)) f 32748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#else // !__GNUC__ 33748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#define FUNC_CONSTRUCTOR(f) _MHD_EXTERN void f 34748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#define FUNC_DESTRUCTOR(f) _MHD_EXTERN void f 35748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#endif // __GNUC__ 36748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 37748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel EratFUNC_CONSTRUCTOR (constructor)() 38748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat{ 39748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat printf("\nTEST START -------------------------------------------------------\n"); 40748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat} 41748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 42748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel EratFUNC_DESTRUCTOR (destructor)() 43748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat{ 44748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat printf("------------------------------------------------------- TEST END\n"); 45748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat} 46748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 47748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Eratuint16_t 48748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Eratget_port(uint16_t min) 49748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat{ 50748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat struct timeval tv; 51748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat gettimeofday(&tv, NULL); 52748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat if(2 > min) min=2; 53748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat uint16_t port = min + (tv.tv_usec+10) % ((1 << 16) - min); 54748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 55748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat //port = 12345; 56748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat printf("Port used: %i\n", port); 57748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 58748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat return port; 59748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat} 60