Skip to content

Commit

Permalink
Merge pull request #131 from dariusstefan/master
Browse files Browse the repository at this point in the history
Add UDP connector for MI datagram
  • Loading branch information
razvancrainea authored Sep 6, 2024
2 parents 45bcccb + c7a9abc commit bfffb85
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 0 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,8 @@ is not found - this has been introduces for backwards compatibility when the def
fifo used for the reply from OpenSIPS (Default: `/tmp`)
* `url`: The default URL used when `http` `communication_type` is used
(Default: `http://127.0.0.1:8888/mi`).
* `datagram_ip`: The default IP used when `datagram` `communication_type` is used (Default: `127.0.0.1`)
* `datagram_port`: The default port used when `datagram` `communication_type` is used (Default: `8080`)

Each module can use each of the parameters above, but can also declare their
own. You can find in each module's documentation page the parameters that they
Expand Down Expand Up @@ -156,6 +158,7 @@ OpenSIPS CLI can communicate with an OpenSIPS instance through MI using
different transports. Supported transports at the moment are:
* `FIFO` - communicate over the `mi_fifo` module
* `HTTP` - use JSONRPC over HTTP through the `mi_http` module
* `DATAGRAM` - communicate over UDP using the `mi_datagram` module

## Installation

Expand Down
1 change: 1 addition & 0 deletions opensipscli/communication/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,4 @@

from opensipscli.communication import fifo
from opensipscli.communication import http
from opensipscli.communication import datagram
42 changes: 42 additions & 0 deletions opensipscli/communication/datagram.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#!/usr/bin/env python
##
## This file is part of OpenSIPS CLI
## (see https://github.com/OpenSIPS/opensips-cli).
##
## This program is free software: you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program. If not, see <http://www.gnu.org/licenses/>.
##

import urllib.request
from opensipscli.logger import logger
from opensipscli.config import cfg
from opensipscli.communication import jsonrpc_helper
import socket

def execute(method, params):
ip = cfg.get('datagram_ip')
port = int(cfg.get('datagram_port'))
jsoncmd = jsonrpc_helper.get_command(method, params)
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
udp_socket.sendto(jsoncmd.encode(), (ip, port))
udp_socket.settimeout(5.0)
replycmd = udp_socket.recv(1024)
except Exception as e:
raise jsonrpc_helper.JSONRPCException(e)
finally:
udp_socket.close()
return jsonrpc_helper.get_reply(replycmd)

def valid():
return (True, None)
2 changes: 2 additions & 0 deletions opensipscli/defaults.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@
"fifo_file": "/var/run/opensips/opensips_fifo",
"fifo_file_fallback": "/tmp/opensips_fifo",
"url": "http://127.0.0.1:8888/mi",
"datagram_ip": "127.0.0.1",
"datagram_port": "8080",

# database module
"database_url": "mysql://opensips:opensipsrw@localhost",
Expand Down

0 comments on commit bfffb85

Please sign in to comment.