Ports can now be specified by number or by name.
[lcr.git] / lcradmin.c
index fbd0015..8cd40da 100644 (file)
@@ -23,6 +23,7 @@
 #include <errno.h>
 #include <curses.h>
 #include "macro.h"
+#include "options.h"
 #include "join.h"
 #include "joinpbx.h"
 #include "extension.h"
@@ -53,14 +54,14 @@ enum {
        MODE_TRACE,
 };
 
-char *text_interfaces[] = {
+const char *text_interfaces[] = {
        "off",
        "brief",
        "active channels",
        "all channels",
 };
 
-char *text_calls[] = {
+const char *text_calls[] = {
        "off",
        "brief",
        "structured",
@@ -449,7 +450,8 @@ int debug_join(struct admin_message *msg, struct admin_message *m, int line, int
 
        return(line);
 }
-char *admin_state(int sock, char *argv[])
+
+const char *admin_state(int sock, char *argv[])
 {
        struct admin_message    msg,
                                *m;
@@ -666,21 +668,24 @@ char *admin_state(int sock, char *argv[])
                        color(white);
                        if (m[i].u.i.block >= 2)
                        {
-                               SPRINT(buffer, "%s (%d)%s", m[i].u.i.interface_name, m[i].u.i.portnum, (m[i].u.i.extension)?" (extension)":"");
+                               SPRINT(buffer, "%s (port %d: %s)%s", m[i].u.i.interface_name, m[i].u.i.portnum, m[i].u.i.portname, (m[i].u.i.extension)?" extension":"");
                                addstr(buffer);
                                color(red);
                                addstr("  not loaded");
                        } else
                        {
-                               SPRINT(buffer, "%s (%d) %s %s%s use:%d", m[i].u.i.interface_name, m[i].u.i.portnum, (m[i].u.i.ntmode)?"NT-mode":"TE-mode", (m[i].u.i.ptp)?"ptp ":"ptmp", (m[i].u.i.extension)?" extension":"", m[i].u.i.use);
+                               SPRINT(buffer, "%s (port %d: %s) %s %s%s use:%d", m[i].u.i.interface_name, m[i].u.i.portnum, m[i].u.i.portname, (m[i].u.i.ntmode)?"NT-mode":"TE-mode", (m[i].u.i.ptp)?"ptp ":"ptmp", (m[i].u.i.extension)?" extension":"", m[i].u.i.use);
                                addstr(buffer);
                                if (m[i].u.i.ptp || !m[i].u.i.ntmode)
                                {
                                        color((m[i].u.i.l2link)?green:red);
                                        addstr((m[i].u.i.l2link)?"  L2 UP":"  L2 down");
                                }
-                               color((m[i].u.i.l1link)?green:blue);
-                               addstr((m[i].u.i.l1link)?"  L1 ACTIVE":"  L1 inactive");
+                               color((m[i].u.i.l1link > 0)?green:blue);
+                               if (m[i].u.i.l1link < 0)
+                                       addstr("  L1 unknown");
+                               else
+                                       addstr((m[i].u.i.l1link)?"  L1 ACTIVE":"  L1 inactive");
                                if (m[i].u.i.los)
                                {
                                        color(red);
@@ -736,6 +741,8 @@ char *admin_state(int sock, char *argv[])
                                                                SPRINT(buffer,"S%2d: ", j+1+(j>=15));
                                                        else
                                                                SPRINT(buffer,"B%2d: ", j+1);
+                                                       if (m[i].u.i.mode[j] == B_MODE_HDLC)
+                                                               SCAT(buffer,"HDLC ");
                                                        addstr(buffer);
                                                        switch(m[i].u.i.busy[j])
                                                        {
@@ -1251,7 +1258,7 @@ char *admin_state(int sock, char *argv[])
 /*
  * Send command and show error message.
  */
-char *admin_cmd(int sock, int mode, char *extension, char *number)
+const char *admin_cmd(int sock, int mode, char *extension, char *number)
 {
        static struct admin_message msg;
 
@@ -1339,7 +1346,7 @@ char *admin_cmd(int sock, int mode, char *extension, char *number)
        gettimeofday(&now_tv, &now_tz); \
        now_d = ((double)(now_tv.tv_usec))/1000000 + now_tv.tv_sec; \
        }
-char *admin_testcall(int sock, int argc, char *argv[])
+const char *admin_testcall(int sock, int argc, char *argv[])
 {
        static struct admin_message msg;
        int ar = 2;
@@ -1549,7 +1556,7 @@ next:
 /*
  * makes a trace
  */
-char *admin_trace(int sock, int argc, char *argv[])
+const char *admin_trace(int sock, int argc, char *argv[])
 {
        static struct admin_message msg;
        int i;
@@ -1625,10 +1632,9 @@ next:
 int main(int argc, char *argv[])
 {
        int mode;
-       char *socket_name = SOCKET_NAME;
        int sock, conn;
        struct sockaddr_un sock_address;
-       char *ret;
+       const char *ret;
 
 
        /* show options */
@@ -1712,6 +1718,10 @@ int main(int argc, char *argv[])
                goto usage;
        }
 
+       if (read_options() == 0) {
+               exit(EXIT_FAILURE);
+       }
+
 //pipeagain:
        /* open socket */
        if ((sock = socket(PF_UNIX, SOCK_STREAM, 0)) < 0)
@@ -1720,8 +1730,8 @@ int main(int argc, char *argv[])
                exit(EXIT_FAILURE);
        }
        memset(&sock_address, 0, sizeof(sock_address));
+       SPRINT(sock_address.sun_path, SOCKET_NAME, options.lock);
        sock_address.sun_family = PF_UNIX;
-       UCPY(sock_address.sun_path, socket_name);
        if ((conn = connect(sock, (struct sockaddr *)&sock_address, SUN_LEN(&sock_address))) < 0)
        {
                close(sock);