2 * Original author : tridge@samba.org, January 2002
4 * Copyright (c) 2005 Christophe Varoqui
5 * Copyright (c) 2005 Benjamin Marzinski, Redhat
12 #include <sys/ioctl.h>
13 #include <sys/types.h>
14 #include <sys/socket.h>
17 #include <readline/readline.h>
18 #include <readline/history.h>
27 static void print_reply(char *s)
33 /* strip ANSI color markers */
35 if ((*s == 0x1b) && (*(s+1) == '['))
36 while ((*s++ != 'm') && (*s != '\0')) {};
41 static int need_quit(char *str, size_t len)
44 size_t trimed_len = len;
46 for (ptr = str; trimed_len && isspace(*ptr);
52 for (ptr = str + len - 1; trimed_len && isspace(*ptr);
56 if ((trimed_len == 4 && !strncmp(start, "exit", 4)) ||
57 (trimed_len == 4 && !strncmp(start, "quit", 4)))
66 static void process(int fd)
72 rl_readline_name = "multipathd";
73 rl_completion_entry_function = key_generator;
74 while ((line = readline("multipathd> "))) {
76 size_t llen = strlen(line);
83 if (need_quit(line, llen))
86 if (send_packet(fd, line, llen + 1) != 0) break;
87 if (recv_packet(fd, &reply, &len) != 0) break;
99 static void process_req(int fd, char * inbuf)
104 if (send_packet(fd, inbuf, strlen(inbuf) + 1) != 0) {
105 printf("cannot send packet\n");
108 if (recv_packet(fd, &reply, &len) != 0)
109 printf("error receiving packet\n");
119 int uxclnt(char * inbuf)
123 fd = ux_socket_connect(DEFAULT_SOCKET);
128 process_req(fd, inbuf);