Module: kamailio
Branch: 5.0
Commit: 64a2bec28f1182b30bd3404f6bba9b2f4e868258
URL: 
https://github.com/kamailio/kamailio/commit/64a2bec28f1182b30bd3404f6bba9b2f4e868258

Author: Daniel-Constantin Mierla <[email protected]>
Committer: Daniel-Constantin Mierla <[email protected]>
Date: 2017-10-23T10:18:15+02:00

jsonrpcs: use same socket for dgram transport

(cherry picked from commit 9c3883a7856d6fb12d103baf3f784107a7c3914c)

---

Modified: src/modules/jsonrpcs/jsonrpcs_sock.c

---

Diff:  
https://github.com/kamailio/kamailio/commit/64a2bec28f1182b30bd3404f6bba9b2f4e868258.diff
Patch: 
https://github.com/kamailio/kamailio/commit/64a2bec28f1182b30bd3404f6bba9b2f4e868258.patch

---

diff --git a/src/modules/jsonrpcs/jsonrpcs_sock.c 
b/src/modules/jsonrpcs/jsonrpcs_sock.c
index b17feb2b86..4dc4740e90 100644
--- a/src/modules/jsonrpcs/jsonrpcs_sock.c
+++ b/src/modules/jsonrpcs/jsonrpcs_sock.c
@@ -63,7 +63,7 @@ typedef struct{
 } jsonrpc_dgram_address_t;
 
 typedef struct jsonrpc_dgram_rx_tx {
-       int rx_sock, tx_sock;
+       int rx_sock;
 } jsonrpc_dgram_rx_tx_t;
 
 /* dgram variables */
@@ -71,7 +71,7 @@ static int jsonrpc_dgram_socket_domain =  AF_LOCAL;
 static jsonrpc_dgram_sockaddr_t jsonrpc_dgram_addr;
 
 /* dgram socket definition parameter */
-static jsonrpc_dgram_rx_tx_t jsonrpc_dgram_sockets;
+static jsonrpc_dgram_rx_tx_t jsonrpc_dgram_sockets = { -1 };
 
 /* dgram unixsock specific parameters */
 char *jsonrpc_dgram_socket = NAME "_rpc.sock";
@@ -89,7 +89,7 @@ int jsonrpc_dgram_child_init(int rank);
 int jsonrpc_dgram_destroy(void);
 
 
-void jsonrpc_dgram_server(int rx_sock, int tx_sock);
+void jsonrpc_dgram_server(int rx_sock);
 static int jsonrpc_dgram_init_socks(void);
 static int jsonrpc_dgram_post_process(void);
 
@@ -363,7 +363,7 @@ int jsonrpc_dgram_init_server(jsonrpc_dgram_sockaddr_t 
*addr,
 
        case AF_INET:
                        if (bind(socks->rx_sock, &addr->udp_addr.s,
-                       sockaddru_len(addr->udp_addr))< 0) {
+                                               sockaddru_len(addr->udp_addr))< 
0) {
                                LM_ERR("bind: %s\n", strerror(errno));
                                goto err_rx;
                        }
@@ -377,13 +377,12 @@ int jsonrpc_dgram_init_server(jsonrpc_dgram_sockaddr_t 
*addr,
                        break;
        default:
                        LM_ERR("domain not supported\n");
-                       goto err_both;
+                       goto err_rx;
 
        }
-       jsonrpc_dgram_create_reply_socket(socks->tx_sock, socket_domain, 
err_both);
 
        optval = 64 * 1024;
-       if (setsockopt(socks->tx_sock, SOL_SOCKET, SO_SNDBUF,
+       if (setsockopt(socks->rx_sock, SOL_SOCKET, SO_SNDBUF,
                                        (void*)&optval, sizeof(optval)) ==-1){
                LM_ERR("failed to increse send buffer size via setsockopt "
                                " SO_SNDBUF (%d) - %d: %s\n", optval,
@@ -391,9 +390,18 @@ int jsonrpc_dgram_init_server(jsonrpc_dgram_sockaddr_t 
*addr,
                /* continue, non-critical */
        }
 
+       /* Turn non-blocking mode on for tx*/
+       flags = fcntl(socks->rx_sock, F_GETFL);
+       if (flags == -1){
+               LM_ERR("fcntl failed: %s\n", strerror(errno));
+               goto err_rx;
+       }
+       if (fcntl(socks->rx_sock, F_SETFL, flags | O_NONBLOCK) == -1) {
+               LM_ERR("fcntl: set non-blocking failed: %s\n", strerror(errno));
+               goto err_rx;
+       }
        return 0;
-err_both:
-       if(socks->tx_sock>=0) close(socks->tx_sock);
+
 err_rx:
        if(socks->rx_sock>=0) close(socks->rx_sock);
        return -1;
@@ -440,8 +448,7 @@ static void jsonrpc_dgram_process(int rank)
 
        jsonrpc_dgram_write_buffer_len = JSONRPC_DGRAM_BUF_SIZE ;
 
-       jsonrpc_dgram_server(jsonrpc_dgram_sockets.rx_sock,
-                       jsonrpc_dgram_sockets.tx_sock);
+       jsonrpc_dgram_server(jsonrpc_dgram_sockets.rx_sock);
 
        exit(-1);
 }
@@ -480,8 +487,7 @@ int jsonrpc_dgram_child_init(int rank)
 static int jsonrpc_dgram_post_process(void)
 {
        /* close the sockets */
-       close(jsonrpc_dgram_sockets.rx_sock);
-       close(jsonrpc_dgram_sockets.tx_sock);
+       if(jsonrpc_dgram_sockets.rx_sock>=0) 
close(jsonrpc_dgram_sockets.rx_sock);
        return 0;
 }
 
@@ -549,7 +555,7 @@ static int jsonrpc_dgram_send_data(int fd, char* buf, 
unsigned int len,
        return n;
 }
 
-void jsonrpc_dgram_server(int rx_sock, int tx_sock)
+void jsonrpc_dgram_server(int rx_sock)
 {
        int ret;
        str scmd;
@@ -608,7 +614,7 @@ void jsonrpc_dgram_server(int rx_sock, int tx_sock)
                                jr->rcode, jr->rbody.s,
                                jr->rbody.len, jr->rbody.s);
 
-               jsonrpc_dgram_send_data(tx_sock, jr->rbody.s, jr->rbody.len,
+               jsonrpc_dgram_send_data(rx_sock, jr->rbody.s, jr->rbody.len,
                                                  (struct 
sockaddr*)&jsonrpc_dgram_reply_addr,
                                                  jsonrpc_dgram_reply_addr_len,
                                                  jsonrpc_dgram_timeout);


_______________________________________________
Kamailio (SER) - Development Mailing List
[email protected]
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to