/**************************************************************/ /* */ /* UNIX 1 / WS 92/93 Gruppe ux803 */ /* 8. Uebung - Aufgabe 4 - socket.c */ /* */ /* Vorname Name Matrikelnr. */ /* --------- ------- ------------- */ /* Roman Czyborra 127221 */ /* Torsten Buller 117894 */ /* Gerasimos Paliatsaras 140956 */ /* */ /**************************************************************/ #include "msh.h" #include /* u_short etc. */ #include /* PF_INET etc. */ #include /* struct sockaddr_in */ #include /* struct hostent */ static int sfd; /* socket file descriptor */ static struct sockaddr_in server; static char myself [18], response [18]; void do_connect() { if (!sfd) { struct hostent *kub; kub = gethostbyname ("kubus.cs.tu-berlin.de"); bcopy (kub->h_addr, &server.sin_addr, kub->h_length); server.sin_family = AF_INET; server.sin_port=htons(4711); } sfd = socket (PF_INET, SOCK_STREAM, 0); connect(sfd, &server, sizeof(server)) == -1 ? perror ("connect") : 0; } static void logme() { do_connect (); write (sfd, myself, 18); read (sfd, response, 18); printf ("%s\n", response); close (sfd); } void do_login() { myself [0] = '1'; strncpy (myself + 1, getlogin(), 8); strcat (myself, ":"); gethostname (myself + strlen (myself), 8); logme (); } void do_logout() { myself [0] = '3'; logme (); exit(0); } void do_mrwho () { do_connect (); write (sfd, "2", 1); while (read (sfd, response, 18)) printf ("%-9s%s\n", strtok (response,":"), strtok(0,"")); close (sfd); } void do_log (struct kommando *kp) { if (kp->num_tok1 < 2) return; do_connect (); if (kp->token_1[1][0] == '0') { write (sfd, "2",1); read (sfd, response+1, 17); close (sfd); response[0]='3'; do_connect(); write (sfd, response, 18); } else write (sfd, kp->token_1[1], 18); while (read (sfd, response, 18)) printf ("%s\n", response); close (sfd); }