diff --git a/tpm.c b/tpm.c index a133682..14a0715 100644 --- a/tpm.c +++ b/tpm.c @@ -13,6 +13,7 @@ #include const int kDefaultLengthSecs = 25 * 60; +const char* kDefaultDoneMessage = ""; char* MakeSocketName() { char* username = getenv("USER"); @@ -23,6 +24,34 @@ char* MakeSocketName() { return socket_name; } +int ClientMain(char* done_message) { + int sock_fd; + struct sockaddr_un remote; + if ((sock_fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { + perror("socket"); + exit(1); + } + remote.sun_family = AF_UNIX; + char * socket_name = MakeSocketName(); + strcpy(remote.sun_path, socket_name); + free(socket_name); + + int len = strlen(remote.sun_path) + sizeof(remote.sun_family); + if (connect(sock_fd, (struct sockaddr *)&remote, len) == -1) { + printf("%s\n", done_message); + return 0; + } + + int recv_length; + char buf[100]; + if ((recv_length = recv(sock_fd, buf, 100, 0)) > 0) { + buf[recv_length] = '\0'; + printf("%s\n", buf); + } + close(sock_fd); + return 0; +} + int DaemonMain(int countdown_time) { /* Our process ID and Session ID */ int ok; @@ -130,7 +159,8 @@ int DaemonMain(int countdown_time) { int main(int argc, char** argv) { int c; int countdown_time = kDefaultLengthSecs; - while ( (c = getopt(argc, argv, "bsm")) != -1) { + char* done_message = (char*) kDefaultDoneMessage; + while ( (c = getopt(argc, argv, "bs:m:d:")) != -1) { switch (c) { case 's': countdown_time = atoi(optarg); @@ -138,6 +168,9 @@ int main(int argc, char** argv) { case 'm': countdown_time = atoi(optarg) * 60; break; + case 'd': + done_message = optarg; + break; } } if (optind < argc) { @@ -146,7 +179,7 @@ int main(int argc, char** argv) { DaemonMain(countdown_time); } } else { - return DaemonMain(25); + return ClientMain(done_message); } exit (0); }