1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
/*
* Original author : tridge@samba.org, January 2002
*
* Copyright (c) 2005 Christophe Varoqui
* Copyright (c) 2005 Benjamin Marzinski, Redhat
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdarg.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <sys/poll.h>
#include <readline/readline.h>
#include <readline/history.h>
#include <uxsock.h>
#include <memory.h>
#include <defaults.h>
/*
* process the client
*/
static void process(int fd)
{
char *line;
char *reply;
while ((line = readline("multipathd> "))) {
size_t len;
size_t llen = strlen(line);
if (!llen) {
free(line);
continue;
}
if (send_packet(fd, line, llen + 1) != 0) break;
if (recv_packet(fd, &reply, &len) != 0) break;
printf("%s", reply);
if (line && *line)
add_history(line);
free(line);
FREE(reply);
}
}
static void process_req(int fd, char * inbuf)
{
char *reply;
size_t len;
send_packet(fd, inbuf, strlen(inbuf) + 1);
recv_packet(fd, &reply, &len);
printf("%s", reply);
FREE(reply);
}
/*
* entry point
*/
int uxclnt(char * inbuf)
{
int fd;
fd = ux_socket_connect(DEFAULT_SOCKET);
if (fd == -1) {
perror("ux_socket_connect");
exit(1);
}
if (inbuf)
process_req(fd, inbuf);
else
process(fd);
return 0;
}
|