|
17 | 17 | ## along with this program. If not, see <http://www.gnu.org/licenses/>. |
18 | 18 | ## |
19 | 19 |
|
20 | | -import argparse |
21 | | -from opensips.mi import OpenSIPSMI, OpenSIPSMIException |
22 | | -from opensips.event import OpenSIPSEvent, OpenSIPSEventException |
| 20 | +""" OpenSIPS Event script """ |
| 21 | + |
| 22 | +import sys |
23 | 23 | import json |
24 | 24 | import time |
25 | 25 | import signal |
| 26 | +import argparse |
| 27 | +from opensips.mi import OpenSIPSMI |
| 28 | +from opensips.event import OpenSIPSEvent, OpenSIPSEventException |
26 | 29 |
|
27 | 30 | parser = argparse.ArgumentParser() |
28 | 31 |
|
|
78 | 81 | help='OpenSIPS Event Expire Time', |
79 | 82 | default=None) |
80 | 83 |
|
81 | | -args = parser.parse_args() |
82 | | - |
83 | | -if args.type == 'fifo': |
84 | | - fifo_args = {} |
85 | | - if args.fifo_file: |
86 | | - fifo_args['fifo_file'] = args.fifo_file |
87 | | - if args.fifo_fallback: |
88 | | - fifo_args['fifo_file_fallback'] = args.fifo_fallback |
89 | | - if args.fifo_reply_dir: |
90 | | - fifo_args['fifo_reply_dir'] = args.fifo_reply_dir |
91 | | - mi = OpenSIPSMI('fifo', **fifo_args) |
92 | | -elif args.type == 'http': |
93 | | - mi = OpenSIPSMI('http', url=f'http://{args.ip}:{args.port}/mi') |
94 | | -elif args.type == 'datagram': |
95 | | - mi = OpenSIPSMI('datagram', datagram_ip=args.ip, datagram_port=args.port) |
96 | | -else: |
97 | | - print(f'Unknownt type: {args.type}') |
98 | | - sys.exit(1) |
99 | | - |
100 | | -event = OpenSIPSEvent(mi, args.transport, ip=args.listen_ip, port=args.listen_port) |
101 | | - |
102 | | -def event_handler(message): |
| 84 | +def main(): |
| 85 | + """ Main function of the opensips-event script """ |
| 86 | + |
| 87 | + args = parser.parse_args() |
| 88 | + |
| 89 | + if args.type == 'fifo': |
| 90 | + fifo_args = {} |
| 91 | + if args.fifo_file: |
| 92 | + fifo_args['fifo_file'] = args.fifo_file |
| 93 | + if args.fifo_fallback: |
| 94 | + fifo_args['fifo_file_fallback'] = args.fifo_fallback |
| 95 | + if args.fifo_reply_dir: |
| 96 | + fifo_args['fifo_reply_dir'] = args.fifo_reply_dir |
| 97 | + mi = OpenSIPSMI('fifo', **fifo_args) |
| 98 | + elif args.type == 'http': |
| 99 | + mi = OpenSIPSMI('http', url=f'http://{args.ip}:{args.port}/mi') |
| 100 | + elif args.type == 'datagram': |
| 101 | + mi = OpenSIPSMI('datagram', datagram_ip=args.ip, datagram_port=args.port) |
| 102 | + else: |
| 103 | + print(f'Unknownt type: {args.type}') |
| 104 | + sys.exit(1) |
| 105 | + |
| 106 | + ev = OpenSIPSEvent(mi, args.transport, ip=args.listen_ip, port=args.listen_port) |
| 107 | + |
| 108 | + def event_handler(message): |
| 109 | + """ Event handler callback """ |
| 110 | + try: |
| 111 | + message_json = json.loads(message.decode('utf-8')) |
| 112 | + print(json.dumps(message_json, indent=4)) |
| 113 | + except json.JSONDecodeError as e: |
| 114 | + print(f"Failed to decode JSON: {e}") |
| 115 | + |
| 116 | + def timer(*_): |
| 117 | + """ Timer to notify when the event expires """ |
| 118 | + ev.unsubscribe(args.event) |
| 119 | + sys.exit(0) # successful |
| 120 | + |
| 121 | + if args.expire: |
| 122 | + signal.signal(signal.SIGALRM, timer) |
| 123 | + signal.alarm(args.expire) |
| 124 | + |
| 125 | + signal.signal(signal.SIGINT, timer) |
| 126 | + signal.signal(signal.SIGTERM, timer) |
| 127 | + |
103 | 128 | try: |
104 | | - message_json = json.loads(message.decode('utf-8')) |
105 | | - print(json.dumps(message_json, indent=4)) |
106 | | - except json.JSONDecodeError as e: |
107 | | - print(f"Failed to decode JSON: {e}") |
108 | | - |
109 | | -def timer(*_): |
110 | | - """ Timer to notify when the event expires """ |
111 | | - event.unsubscribe(args.event) |
112 | | - sys.exit(0) # successful |
113 | | - |
114 | | -if args.expire: |
115 | | - signal.signal(signal.SIGALRM, timer) |
116 | | - signal.alarm(args.expire) |
117 | | - |
118 | | -signal.signal(signal.SIGINT, timer) |
119 | | -signal.signal(signal.SIGTERM, timer) |
120 | | - |
121 | | -try: |
122 | | - event.subscribe(args.event, event_handler, expire=args.expire) |
123 | | -except OpenSIPSEventException as e: |
124 | | - print(e) |
125 | | - sys.exit(1) |
126 | | - |
127 | | -while True: |
128 | | - time.sleep(1) |
| 129 | + ev.subscribe(args.event, event_handler, expire=args.expire) |
| 130 | + except OpenSIPSEventException as e: |
| 131 | + print(e) |
| 132 | + sys.exit(1) |
| 133 | + |
| 134 | + while True: |
| 135 | + time.sleep(1) |
| 136 | + |
| 137 | +if __name__ == "__main__": |
| 138 | + main() |
0 commit comments