aboutsummaryrefslogtreecommitdiff
path: root/dpid/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'dpid/main.c')
-rw-r--r--dpid/main.c64
1 files changed, 34 insertions, 30 deletions
diff --git a/dpid/main.c b/dpid/main.c
index 7ecae76a..fcb11cef 100644
--- a/dpid/main.c
+++ b/dpid/main.c
@@ -15,11 +15,11 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <errno.h> /* for ckd_write */
-#include <unistd.h> /* for ckd_write */
-#include <stdlib.h> /* for exit */
-#include <assert.h> /* for assert */
-#include <sys/stat.h> /* for umask */
+#include <errno.h> /* for ckd_write */
+#include <unistd.h> /* for ckd_write */
+#include <stdlib.h> /* for exit */
+#include <assert.h> /* for assert */
+#include <sys/stat.h> /* for umask */
#include "dpid_common.h"
#include "dpid.h"
@@ -45,7 +45,7 @@ static int start_filter_plugin(struct dp dpi_attr)
csz = (socklen_t) sizeof(clnt_addr);
- newsock = accept(dpi_attr.socket, (struct sockaddr *) &clnt_addr, &csz);
+ newsock = accept(dpi_attr.sock_fd, (struct sockaddr *) &clnt_addr, &csz);
if (newsock == -1)
ERRMSG("start_plugin", "accept", errno);
@@ -90,12 +90,12 @@ static int start_filter_plugin(struct dp dpi_attr)
static void start_server_plugin(struct dp dpi_attr)
{
- if (dup2(dpi_attr.socket, STDIN_FILENO) == -1) {
+ if (dup2(dpi_attr.sock_fd, STDIN_FILENO) == -1) {
ERRMSG("start_plugin", "dup2", errno);
MSG_ERR("ERROR in child proc for %s\n", dpi_attr.path);
exit(1);
}
- if (a_Misc_close_fd(dpi_attr.socket) == -1) {
+ if (a_Misc_close_fd(dpi_attr.sock_fd) == -1) {
ERRMSG("start_plugin", "close", errno);
MSG_ERR("ERROR in child proc for %s\n", dpi_attr.path);
exit(1);
@@ -220,7 +220,6 @@ static int get_open_max(void)
int main(void)
{
int i, n = 0, open_max;
- char *dirname = NULL, *sockdir = NULL;
int dpid_idle_timeout = 60 * 60; /* default, in seconds */
struct timeval select_timeout;
sigset_t mask_none;
@@ -250,6 +249,7 @@ int main(void)
/* Get list of available dpis */
numdpis = register_all(&dpi_attr_list);
+#if 0
/* Get name of socket directory */
dirname = a_Dpi_sockdir_file();
if ((sockdir = init_sockdir(dirname)) == NULL) {
@@ -257,14 +257,16 @@ int main(void)
MSG_ERR("Failed to create socket directory\n");
exit(1);
}
+#endif
/* Init and get services list */
fill_services_list(dpi_attr_list, numdpis, &services_list);
/* Remove any sockets that may have been leftover from a crash */
- cleanup(sockdir);
+ //cleanup();
+
/* Initialise sockets */
- if ((numsocks = init_srs_socket(sockdir)) == -1) {
+ if ((numsocks = init_ids_srs_socket()) == -1) {
switch (dpi_errno) {
case dpid_srs_addrinuse:
MSG_ERR("dpid refuses to start, possibly because:\n");
@@ -272,11 +274,12 @@ int main(void)
MSG_ERR("\t2) A previous dpid didn't clean up on exit.\n");
exit(1);
default:
- ERRMSG("main", "init_srs_sockets failed", 0);
+ //ERRMSG("main", "init_srs_socket failed", 0);
+ ERRMSG("main", "init_ids_srs_socket failed", 0);
exit(1);
}
}
- numsocks = init_all_dpi_sockets(dpi_attr_list, sockdir);
+ numsocks = init_all_dpi_sockets(dpi_attr_list);
//est_terminator(); /* Do we still want to clean up on an abnormal exit? */
est_dpi_sigchld();
@@ -308,7 +311,7 @@ int main(void)
continue;
stop_active_dpis(dpi_attr_list, numdpis);
- cleanup(sockdir);
+ //cleanup();
exit(0);
}
} while (n == -1 && errno == EINTR);
@@ -318,42 +321,42 @@ int main(void)
exit(1);
}
/* If the service req socket is selected then service the req. */
- if (FD_ISSET(srs, &selected_set)) {
- int sock;
- socklen_t csz;
- struct sockaddr_un clnt_addr;
+ if (FD_ISSET(srs_fd, &selected_set)) {
+ int sock_fd;
+ socklen_t sin_sz;
+ struct sockaddr_in sin;
char *req = NULL;
--n;
assert(n >= 0);
- csz = (socklen_t) sizeof(clnt_addr);
- sock = accept(srs, (struct sockaddr *) &clnt_addr, &csz);
- if (sock == -1) {
+ sin_sz = (socklen_t) sizeof(sin);
+ sock_fd = accept(srs_fd, (struct sockaddr *)&sin, &sin_sz);
+ if (sock_fd == -1) {
ERRMSG("main", "accept", errno);
MSG_ERR("accept on srs socket failed\n");
MSG_ERR("service pending connections, and continue\n");
} else {
int command;
- req = get_request(sock);
- command = get_command(sock, req);
+ req = get_request(sock_fd);
+ command = get_command(sock_fd, req);
switch (command) {
case BYE_CMD:
stop_active_dpis(dpi_attr_list, numdpis);
- cleanup(sockdir);
+ //cleanup();
exit(0);
break;
case CHECK_SERVER_CMD:
- send_sockpath(sock, req, dpi_attr_list);
+ send_sockport(sock_fd, req, dpi_attr_list);
break;
case REGISTER_ALL_CMD:
- register_all_cmd(sockdir);
+ register_all_cmd();
break;
case UNKNOWN_CMD:
{
char *d_cmd = a_Dpip_build_cmd("cmd=%s msg=%s",
"DpiError", "Unknown command");
- (void) CKD_WRITE(sock, d_cmd);
+ (void) CKD_WRITE(sock_fd, d_cmd);
dFree(d_cmd);
ERRMSG("main", "Unknown command", 0);
MSG_ERR(" for request: %s\n", req);
@@ -365,14 +368,14 @@ int main(void)
}
if (req)
free(req);
- a_Misc_close_fd(sock);
+ a_Misc_close_fd(sock_fd);
}
}
/* While there's a request on one of the plugin sockets
* find the matching plugin and start it. */
for (i = 0; n > 0 && i < numdpis; i++) {
- if (FD_ISSET(dpi_attr_list[i].socket, &selected_set)) {
+ if (FD_ISSET(dpi_attr_list[i].sock_fd, &selected_set)) {
--n;
assert(n >= 0);
@@ -386,11 +389,12 @@ int main(void)
* on its socket */
numsocks--;
assert(numsocks >= 0);
- FD_CLR(dpi_attr_list[i].socket, &sock_set);
+ FD_CLR(dpi_attr_list[i].sock_fd, &sock_set);
if ((dpi_attr_list[i].pid = fork()) == -1) {
ERRMSG("main", "fork", errno);
/* exit(1); */
} else if (dpi_attr_list[i].pid == 0) {
+ /* child */
(void) sigprocmask(SIG_SETMASK, &mask_none, NULL);
start_server_plugin(dpi_attr_list[i]);
}