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