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