summaryrefslogtreecommitdiffstats
path: root/c/src/librdbg/src/servcon.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--c/src/librdbg/src/servcon.c219
1 files changed, 118 insertions, 101 deletions
diff --git a/c/src/librdbg/src/servcon.c b/c/src/librdbg/src/servcon.c
index 30570760db..4660453f94 100644
--- a/c/src/librdbg/src/servcon.c
+++ b/c/src/librdbg/src/servcon.c
@@ -11,10 +11,10 @@
**************************************************************************
*/
-#include <sys/errno.h>
-#include <rdbg/rdbg.h>
-#include <rdbg/servrpc.h>
-
+#include <sys/errno.h>
+#include <rdbg/rdbg.h>
+#include <rdbg/servrpc.h>
+
/*
* ConnCreate - create a new connection entry for a client.
*
@@ -25,66 +25,74 @@
* the caller.
*/
- int
-ConnCreate (struct svc_req* rqstp, open_in* in)
+ int
+ConnCreate (struct svc_req *rqstp, open_in * in)
{
- NET_OPAQUE sender;
- int idx;
- CONN_LIST* clst;
-
- setErrno (0);
-
- /* Convert to valid Net address */
- if (! TspTranslateRpcAddr (rqstp, &sender)) {
- DPRINTF (("ConnCreate: TspTranslateRpcAddr failed\n"));
- return -1;
- }
- if (! TspValidateAddr ((NET_OPAQUE*) in->back_port, &sender)) {
- DPRINTF (("ConnCreate: TspValidateAddr failed\n"));
- return -1; /* errno now setup with error */
+ NET_OPAQUE sender;
+ int idx;
+ CONN_LIST *clst;
+
+ setErrno (0);
+
+ /*
+ * Convert to valid Net address
+ */
+ if (!TspTranslateRpcAddr (rqstp, &sender)) {
+ DPRINTF (("ConnCreate: TspTranslateRpcAddr failed\n"));
+ return -1;
+ }
+ if (!TspValidateAddr ((NET_OPAQUE *) in->back_port, &sender)) {
+ DPRINTF (("ConnCreate: TspValidateAddr failed\n"));
+ return -1; /* errno now setup with error */
+ }
+
+ /*
+ * look for an empty connection entry
+ */
+ for (idx = 0; idx < conn_list_cnt; idx++) {
+ if (!conn_list[idx].in_use)
+ break; /* an empty one found */
+ }
+
+ if (idx >= conn_list_cnt) { /* no empties, create space */
+ CONN_LIST *tmp_conn_list = conn_list;
+
+ conn_list_cnt += CONN_LIST_INC;
+ if (conn_list) {
+ conn_list = (CONN_LIST *) Realloc (conn_list, /* extend */
+ conn_list_cnt * sizeof (CONN_LIST));
+ } else {
+ conn_list = (CONN_LIST *) Malloc (conn_list_cnt * sizeof (CONN_LIST));
}
- /* look for an empty connection entry */
- for (idx = 0; idx < conn_list_cnt; idx++) {
- if (!conn_list[idx].in_use)
- break; /* an empty one found */
+ if (!conn_list) { /* unable to get space */
+ if ((conn_list_cnt -= CONN_LIST_INC)) {
+ /*
+ * was realloc, restore space
+ */
+ conn_list = tmp_conn_list;
+ }
+ return -1; /* errno set by failed alloc */
}
-
- if (idx >= conn_list_cnt) { /* no empties, create space */
- CONN_LIST* tmp_conn_list = conn_list;
-
- conn_list_cnt += CONN_LIST_INC;
- if (conn_list) {
- conn_list = (CONN_LIST *) Realloc (conn_list, /* extend */
- conn_list_cnt * sizeof (CONN_LIST));
- } else {
- conn_list = (CONN_LIST *)Malloc(conn_list_cnt * sizeof(CONN_LIST));
- }
-
- if (!conn_list) { /* unable to get space */
- if ((conn_list_cnt -= CONN_LIST_INC)) {
- /* was realloc, restore space */
- conn_list = tmp_conn_list;
- }
- return -1; /* errno set by failed alloc */
- }
- /* clear newly created memory */
- memset (conn_list + idx, 0, CONN_LIST_INC * sizeof (CONN_LIST));
- } else { /* clear new entry */
- memset (conn_list + idx, 0, sizeof (CONN_LIST));
- }
- clst = conn_list + idx;
-
- clst->in_use = True; /* now in use */
- clst->sender = sender;
- memcpy (&clst->back_port, &in->back_port, sizeof (NET_OPAQUE));
- memcpy (&clst->route, &in->destination, sizeof (NET_OPAQUE));
- clst->debug_type = (UCHAR) in->debug_type;
- clst->flags = in->flags;
- strncpy (clst->user_name, in->user_name, NAMEMAX-1);
- clst->user_name [NAMEMAX-1] = 0;
-
- return idx;
+ /*
+ * clear newly created memory
+ */
+ memset (conn_list + idx, 0, CONN_LIST_INC * sizeof (CONN_LIST));
+ } else { /* clear new entry */
+ memset (conn_list + idx, 0, sizeof (CONN_LIST));
+ }
+ clst = conn_list + idx;
+
+ clst->in_use = True; /* now in use */
+ clst->sender = sender;
+ memcpy (&clst->back_port, &in->back_port, sizeof (NET_OPAQUE));
+ memcpy (&clst->route, &in->destination, sizeof (NET_OPAQUE));
+ clst->debug_type = (UCHAR) in->debug_type;
+ clst->flags = in->flags;
+ strncpy (clst->user_name, in->user_name, NAMEMAX - 1);
+ clst->user_name[NAMEMAX - 1] = 0;
+
+ return idx;
}
/*
@@ -92,47 +100,56 @@ ConnCreate (struct svc_req* rqstp, open_in* in)
*
*/
- void
-ConnDelete (int conn, struct svc_req* rqstp, close_control control)
+ void
+ConnDelete (int conn, struct svc_req *rqstp, close_control control)
{
- CONN_LIST* clst = conn_list + conn;
- int idx;
- Boolean prim;
-
- if (! clst->in_use) return; /* not active */
-
- for (idx = 0; idx < pid_list_cnt; idx++) {
- PID_LIST* plst = pid_list + idx;
-
- if (! PIDMAP_TEST (conn, idx)) continue;
-
- /* found a controlled pid */
- prim = (plst->primary_conn == conn) ? True : False;
- TgtDetachCon (conn, idx, True);
-
- /* if still running or alive, we use close control on it */
- if (! plst->pid)
- continue; /* entry gone */
-
- if (prim && control == CLOSE_KILL) {
- /* kill off process */
- TgtKillAndDelete (plst, rqstp, True);
- } else if (! plst->owners) {
- /* no owners left */
- if (control == CLOSE_DETACH) {
- TgtKillAndDelete (plst, rqstp, False);
- }
- if (control == CLOSE_DETACH || PROC_TERMINATED (plst)) {
- TgtDelete (plst, conn, (control==CLOSE_DETACH) ?
- BMSG_DETACH : 0);
- }
- }
- }
- if (clst->list) {
- Free (clst->list); /* free allocated memory */
- }
- DPRINTF (("ConnDelete: Connection closed for port %u\n",
- HL_W(*((UINT16*) &clst->back_port.c[2]))));
+ CONN_LIST *clst = conn_list + conn;
+ int idx;
+ Boolean prim;
+
+ if (!clst->in_use)
+ return; /* not active */
- clst->in_use = False; /* free it back */
+ for (idx = 0; idx < pid_list_cnt; idx++) {
+ PID_LIST *plst = pid_list + idx;
+
+ if (!PIDMAP_TEST (conn, idx))
+ continue;
+
+ /*
+ * found a controlled pid
+ */
+ prim = (plst->primary_conn == conn) ? True : False;
+ TgtDetachCon (conn, idx, True);
+
+ /*
+ * if still running or alive, we use close control on it
+ */
+ if (!plst->pid)
+ continue; /* entry gone */
+
+ if (prim && control == CLOSE_KILL) {
+ /*
+ * kill off process
+ */
+ TgtKillAndDelete (plst, rqstp, True);
+ } else if (!plst->owners) {
+ /*
+ * no owners left
+ */
+ if (control == CLOSE_DETACH) {
+ TgtKillAndDelete (plst, rqstp, False);
+ }
+ if (control == CLOSE_DETACH || PROC_TERMINATED (plst)) {
+ TgtDelete (plst, conn, (control == CLOSE_DETACH) ? BMSG_DETACH : 0);
+ }
+ }
+ }
+ if (clst->list) {
+ Free (clst->list); /* free allocated memory */
+ }
+ DPRINTF (("ConnDelete: Connection closed for port %u\n",
+ HL_W (*((UINT16 *) & clst->back_port.c[2]))));
+
+ clst->in_use = False; /* free it back */
}