]> granicus.if.org Git - libevent/blob - make_epoll_table.py
Add minimal WebSocket server implementation for evhttp (#1322)
[libevent] / make_epoll_table.py
1 #!/usr/bin/python2
2
3 def get(old,wc,rc,cc):
4     if ('xxx' in (rc, wc, cc)):
5         return "0",255
6
7     if ('add' in (rc, wc, cc)):
8         events = []
9         if rc == 'add' or (rc != 'del' and 'r' in old):
10             events.append("EPOLLIN")
11         if wc == 'add' or (wc != 'del' and 'w' in old):
12             events.append("EPOLLOUT")
13         if cc == 'add' or (cc != 'del' and 'c' in old):
14             events.append("EPOLLRDHUP")
15
16         if old == "0":
17             op = "EPOLL_CTL_ADD"
18         else:
19             op = "EPOLL_CTL_MOD"
20         return "|".join(events), op
21
22     if ('del' in (rc, wc, cc)):
23         delevents = []
24         modevents = []
25         op = "EPOLL_CTL_DEL"
26
27         if 'r' in old:
28             modevents.append("EPOLLIN")
29         if 'w' in old:
30             modevents.append("EPOLLOUT")
31         if 'c' in old:
32             modevents.append("EPOLLRDHUP")
33
34         for item, event in [(rc,"EPOLLIN"),
35                             (wc,"EPOLLOUT"),
36                             (cc,"EPOLLRDHUP")]:
37             if item == 'del':
38                 delevents.append(event)
39                 if event in modevents:
40                     modevents.remove(event)
41
42         if modevents:
43             return "|".join(modevents), "EPOLL_CTL_MOD"
44         else:
45             return "|".join(delevents), "EPOLL_CTL_DEL"
46
47     return 0, 0
48
49
50 def fmt(op, ev, old, wc, rc, cc):
51     entry = "{ %s, %s },"%(op, ev)
52     print "\t/* old=%3s, write:%3s, read:%3s, close:%3s */\n\t%s" % (
53         old, wc, rc, cc, entry)
54     return len(entry)
55
56 for old in ('0','r','w','rw','c','cr','cw','crw'):
57     for wc in ('0', 'add', 'del', 'xxx'):
58         for rc in ('0', 'add', 'del', 'xxx'):
59             for cc in ('0', 'add', 'del', 'xxx'):
60
61                 op,ev = get(old,wc,rc,cc)
62
63                 fmt(op, ev, old, wc, rc, cc)