From 483d1b445f53223ab05865671784b49a75e998fc Mon Sep 17 00:00:00 2001 From: "Michael D. Lowis" Date: Thu, 10 Dec 2020 14:27:08 -0500 Subject: [PATCH] started implementing dial --- bin/dial.c | 19 +++++++++++++++++-- inc/libnet.h | 2 ++ lib/net/netdial.c | 48 ++++++++++++++++++++++++++++------------------- tools/build.c | 4 ++-- 4 files changed, 50 insertions(+), 23 deletions(-) diff --git a/bin/dial.c b/bin/dial.c index 678ec59..3429c39 100644 --- a/bin/dial.c +++ b/bin/dial.c @@ -3,7 +3,22 @@ int main(int argc, char** argv) { - (void)argc; - (void)argv; + if (argc < 2) + { + fprintf(stderr, "usage: dial DIALSTR [CMD [ARG...]]\n"); + return 1; + } + + int fd = netdial(argv[1]); + if (argc > 2) + { + /* execute command with socket as stdio */ + } + else + { + /* copy data to/from stdio */ + } + close(fd); + return 0; } \ No newline at end of file diff --git a/inc/libnet.h b/inc/libnet.h index d3e75a8..c46afca 100644 --- a/inc/libnet.h +++ b/inc/libnet.h @@ -15,3 +15,5 @@ struct in_addr netresolve(char *hostname); int netannounce(char* dialstr); int netlisten(int fd, int backlog); int netaccept(int fd); +int netdial(char* dialstr); +int enetdial(char* dialstr); diff --git a/lib/net/netdial.c b/lib/net/netdial.c index e9544e2..79a94fa 100644 --- a/lib/net/netdial.c +++ b/lib/net/netdial.c @@ -1,22 +1,32 @@ #include #include -//int netdial(char* dialstr) -//{ -// struct socket_t sock = { .fd = -1 }; -// if (netsocket(dialstr, &sock)) -// { -// int rv = -1; -// switch (sock.addr.in.sin_family) -// { -// case AF_INET: -// rv = bind(sock.fd, (struct sockaddr*)&sock.addr.in, sizeof(sock.addr.in)); -// break; -// -// case AF_UNIX: -// if (connect(sock.fd, (struct sockaddr*)&sock.addr.un, sizeof(sock.addr.un)) < 0) -// { -// unlink(sock.addr.un.sun_path); -// rv = bind(sock.fd, (struct sockaddr*)&sock.addr.un, sizeof(sock.addr.un)); -// } -// break; +int netdial(char* dialstr) +{ + int rv = -1; + struct socket_t sock = { .fd = -1 }; + if (netsocket(dialstr, &sock)) + { + switch (sock.addr.in.sin_family) + { + case AF_INET: + rv = connect(sock.fd, (struct sockaddr*)&sock.addr.in, sizeof(sock.addr.in)); + break; + + case AF_UNIX: + rv = connect(sock.fd, (struct sockaddr*)&sock.addr.un, sizeof(sock.addr.un)); + break; + } + } + return (rv == 0 ? sock.fd : rv); +} + +int enetdial(char* dialstr) +{ + int fd = -1; + if (netdial(dialstr) < 0) + { + fatal("netdial():"); + } + return fd; +} diff --git a/tools/build.c b/tools/build.c index 3113703..f163af6 100644 --- a/tools/build.c +++ b/tools/build.c @@ -18,7 +18,7 @@ typedef struct Target { void (*build)(struct Target*); } Target; -int MaxJobs = 12; +int MaxJobs = 1; char* CCCMD[] = { "cc", @@ -50,8 +50,8 @@ char* LDCMD[] = { }; char* LIBS[] = { - "-la", "-lnet", + "-la", "-lX11", "-lfontconfig", NULL -- 2.52.0