1*76404edcSAsim Jamshed #ifndef __TCP_STREAM_QUEUE_
2*76404edcSAsim Jamshed #define __TCP_STREAM_QUEUE_
3*76404edcSAsim Jamshed 
4*76404edcSAsim Jamshed #include <stdint.h>
5*76404edcSAsim Jamshed 
6*76404edcSAsim Jamshed /* Lock definitions for stream queue */
7*76404edcSAsim Jamshed #if LOCK_STREAM_QUEUE
8*76404edcSAsim Jamshed 
9*76404edcSAsim Jamshed #if USE_SPIN_LOCK
10*76404edcSAsim Jamshed #define SQ_LOCK_INIT(lock, errmsg, action);		\
11*76404edcSAsim Jamshed 	if (pthread_spin_init(lock, PTHREAD_PROCESS_PRIVATE)) {		\
12*76404edcSAsim Jamshed 		perror("pthread_spin_init" errmsg);		\
13*76404edcSAsim Jamshed 		action;									\
14*76404edcSAsim Jamshed 	}
15*76404edcSAsim Jamshed #define SQ_LOCK_DESTROY(lock)	pthread_spin_destroy(lock)
16*76404edcSAsim Jamshed #define SQ_LOCK(lock)			pthread_spin_lock(lock)
17*76404edcSAsim Jamshed #define SQ_UNLOCK(lock)			pthread_spin_unlock(lock)
18*76404edcSAsim Jamshed #else
19*76404edcSAsim Jamshed #define SQ_LOCK_INIT(lock, errmsg, action);		\
20*76404edcSAsim Jamshed 	if (pthread_mutex_init(lock, NULL)) {		\
21*76404edcSAsim Jamshed 		perror("pthread_mutex_init" errmsg);	\
22*76404edcSAsim Jamshed 		action;									\
23*76404edcSAsim Jamshed 	}
24*76404edcSAsim Jamshed #define SQ_LOCK_DESTROY(lock)	pthread_mutex_destroy(lock)
25*76404edcSAsim Jamshed #define SQ_LOCK(lock)			pthread_mutex_lock(lock)
26*76404edcSAsim Jamshed #define SQ_UNLOCK(lock)			pthread_mutex_unlock(lock)
27*76404edcSAsim Jamshed #endif /* USE_SPIN_LOCK */
28*76404edcSAsim Jamshed 
29*76404edcSAsim Jamshed #else /* LOCK_STREAM_QUEUE */
30*76404edcSAsim Jamshed #define SQ_LOCK_INIT(lock, errmsg, action)	(void) 0
31*76404edcSAsim Jamshed #define SQ_LOCK_DESTROY(lock)	(void) 0
32*76404edcSAsim Jamshed #define SQ_LOCK(lock)			(void) 0
33*76404edcSAsim Jamshed #define SQ_UNLOCK(lock)			(void) 0
34*76404edcSAsim Jamshed #endif /* LOCK_STREAM_QUEUE */
35*76404edcSAsim Jamshed 
36*76404edcSAsim Jamshed /*---------------------------------------------------------------------------*/
37*76404edcSAsim Jamshed typedef struct stream_queue* stream_queue_t;
38*76404edcSAsim Jamshed /*---------------------------------------------------------------------------*/
39*76404edcSAsim Jamshed typedef struct stream_queue_int
40*76404edcSAsim Jamshed {
41*76404edcSAsim Jamshed 	struct tcp_stream **array;
42*76404edcSAsim Jamshed 	int size;
43*76404edcSAsim Jamshed 
44*76404edcSAsim Jamshed 	int first;
45*76404edcSAsim Jamshed 	int last;
46*76404edcSAsim Jamshed 	int count;
47*76404edcSAsim Jamshed 
48*76404edcSAsim Jamshed } stream_queue_int;
49*76404edcSAsim Jamshed /*---------------------------------------------------------------------------*/
50*76404edcSAsim Jamshed stream_queue_int *
51*76404edcSAsim Jamshed CreateInternalStreamQueue(int size);
52*76404edcSAsim Jamshed /*---------------------------------------------------------------------------*/
53*76404edcSAsim Jamshed void
54*76404edcSAsim Jamshed DestroyInternalStreamQueue(stream_queue_int *sq);
55*76404edcSAsim Jamshed /*---------------------------------------------------------------------------*/
56*76404edcSAsim Jamshed int
57*76404edcSAsim Jamshed StreamInternalEnqueue(stream_queue_int *sq, struct tcp_stream *stream);
58*76404edcSAsim Jamshed /*---------------------------------------------------------------------------*/
59*76404edcSAsim Jamshed struct tcp_stream *
60*76404edcSAsim Jamshed StreamInternalDequeue(stream_queue_int *sq);
61*76404edcSAsim Jamshed /*---------------------------------------------------------------------------*/
62*76404edcSAsim Jamshed stream_queue_t
63*76404edcSAsim Jamshed CreateStreamQueue(int size);
64*76404edcSAsim Jamshed /*---------------------------------------------------------------------------*/
65*76404edcSAsim Jamshed void
66*76404edcSAsim Jamshed DestroyStreamQueue(stream_queue_t sq);
67*76404edcSAsim Jamshed /*---------------------------------------------------------------------------*/
68*76404edcSAsim Jamshed int
69*76404edcSAsim Jamshed StreamEnqueue(stream_queue_t sq, struct tcp_stream *stream);
70*76404edcSAsim Jamshed /*---------------------------------------------------------------------------*/
71*76404edcSAsim Jamshed struct tcp_stream *
72*76404edcSAsim Jamshed StreamDequeue(stream_queue_t sq);
73*76404edcSAsim Jamshed /*---------------------------------------------------------------------------*/
74*76404edcSAsim Jamshed int
75*76404edcSAsim Jamshed StreamQueueIsEmpty(stream_queue_t sq);
76*76404edcSAsim Jamshed /*---------------------------------------------------------------------------*/
77*76404edcSAsim Jamshed 
78*76404edcSAsim Jamshed #endif /* __TCP_STREAM_QUEUE_ */
79