16#include <sys/socket.h>
17#include <netinet/in.h>
25#define MSG_ERR(...) printf("** ERROR **: " __VA_ARGS__);
34 fprintf(stderr,
"Control program for the Dillo plugin daemon\n"
35 "Usage: %s {stop|register|chat}\n\n", prgname);
51 char *fname, *rcline = NULL, *tail;
55 if ((In = fopen(fname,
"r")) == NULL) {
57 }
else if ((rcline =
dGetline(In)) == NULL) {
58 MSG_ERR(
"[Dpi_read_comm_keys] empty file: %s\n", fname);
60 *port = strtol(rcline, &tail, 10);
61 for (i = 0; *tail &&
dIsxdigit(tail[i+1]); ++i)
72int main(
int argc,
char *argv[])
74 int sockfd, portno, n;
75 struct sockaddr_in serv_addr;
85 MSG_ERR(
"main: Can't read dpid's port number\n");
89 sockfd = socket(AF_INET, SOCK_STREAM, 0);
91 error(
"ERROR opening socket");
92 memset(&serv_addr, 0,
sizeof(serv_addr));
93 serv_addr.sin_family = AF_INET;
94 serv_addr.sin_addr.s_addr = inet_addr(
"127.0.0.1");
96 serv_addr.sin_port = htons(portno);
97 if (connect(sockfd, (
struct sockaddr *)&serv_addr,
sizeof(serv_addr)) < 0)
98 error(
"ERROR connecting");
100 snprintf(buffer,
sizeof(buffer),
"<cmd='auth' msg='%s' '>",
SharedKey);
101 n = write(sockfd, buffer, strlen(buffer));
103 error(
"ERROR writing to socket");
105 if (strcmp(argv[1],
"stop") == 0) {
107 }
else if (strcmp(argv[1],
"register") == 0) {
109 }
else if (strcmp(argv[1],
"chat") == 0) {
110 printf(
"Please enter the message: ");
111 memset(buffer,0,256);
112 if (fgets(buffer,255,stdin) == NULL)
113 MSG_ERR(
"dpidc: Can't read the message\n");
115 MSG_ERR(
"main: Unknown operation '%s'\n", argv[1]);
120 n = write(sockfd,buffer,strlen(buffer));
122 error(
"ERROR writing to socket");
char * dGetline(FILE *stream)
Get a line from a FILE stream.
char * dStrconcat(const char *s1,...)
Concatenate a NULL-terminated list of strings.
int dClose(int fd)
Close a FD handling EINTR.
char * dGethomedir(void)
Return the home directory in a static string (don't free)
static int dIsxdigit(unsigned char c)
static char SharedKey[32]
static int Dpi_read_comm_keys(int *port)
Read dpid's communication keys from its saved file.
static void print_usage(const char *prgname)
static void error(char *msg)