Various minor text tweaks.
[yaz-moved-to-github.git] / src / zoom-event.c
1 /* This file is part of the YAZ toolkit.
2  * Copyright (C) Index Data
3  * See the file LICENSE for details.
4  */
5 /**
6  * \file zoom-event.c
7  * \brief Implements ZOOM Event stuff
8  */
9 #if HAVE_CONFIG_H
10 #include <config.h>
11 #endif
12
13 #include <assert.h>
14 #include <string.h>
15 #include <errno.h>
16 #include "zoom-p.h"
17
18 ZOOM_API(const char *) ZOOM_get_event_str(int event)
19 {
20     static const char *ar[] = {
21         "NONE",
22         "CONNECT",
23         "SEND_DATA",
24         "RECV_DATA",
25         "TIMEOUT",
26         "UNKNOWN",
27         "SEND_APDU",
28         "RECV_APDU",
29         "RECV_RECORD",
30         "RECV_SEARCH",
31         "END"
32     };
33     return ar[event];
34 }
35
36 struct ZOOM_Event_p {
37     int kind;
38     ZOOM_Event next;
39     ZOOM_Event prev;
40 };
41
42 ZOOM_Event ZOOM_Event_create(int kind)
43 {
44     ZOOM_Event event = (ZOOM_Event) xmalloc(sizeof(*event));
45     event->kind = kind;
46     event->next = 0;
47     event->prev = 0;
48     return event;
49 }
50
51
52 ZOOM_Event ZOOM_connection_get_event(ZOOM_connection c)
53 {
54     ZOOM_Event event = c->m_queue_front;
55     if (!event)
56     {
57         c->last_event = ZOOM_EVENT_NONE;
58         return 0;
59     }
60     assert(c->m_queue_back);
61     c->m_queue_front = event->prev;
62     if (c->m_queue_front)
63     {
64         assert(c->m_queue_back);
65         c->m_queue_front->next = 0;
66     }
67     else
68         c->m_queue_back = 0;
69     c->last_event = event->kind;
70     return event;
71 }
72
73 void ZOOM_connection_put_event(ZOOM_connection c, ZOOM_Event event)
74 {
75     if (c->m_queue_back)
76     {
77         c->m_queue_back->prev = event;
78         assert(c->m_queue_front);
79     }
80     else
81     {
82         assert(!c->m_queue_front);
83         c->m_queue_front = event;
84     }
85     event->next = c->m_queue_back;
86     event->prev = 0;
87     c->m_queue_back = event;
88 }
89
90 void ZOOM_Event_destroy(ZOOM_Event event)
91 {
92     xfree(event);
93 }
94
95 void ZOOM_connection_remove_events(ZOOM_connection c)
96 {
97     ZOOM_Event event;
98     while ((event = ZOOM_connection_get_event(c)))
99         ZOOM_Event_destroy(event);
100 }
101
102 ZOOM_API(int) ZOOM_connection_peek_event(ZOOM_connection c)
103 {
104     ZOOM_Event event = c->m_queue_front;
105
106     return event ? event->kind : ZOOM_EVENT_NONE;
107 }
108
109
110 /*
111  * Local variables:
112  * c-basic-offset: 4
113  * c-file-style: "Stroustrup"
114  * indent-tabs-mode: nil
115  * End:
116  * vim: shiftwidth=4 tabstop=8 expandtab
117  */
118