rendered paste body#include <sys/types.h>#include <sys/time.h>#include <sys/socket.h>#include <sys/un.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <arpa/inet.h>#include <pthread.h>#include <ctype.h>#include <string.h>#include <netdb.h>#include "server.h"#include <signal.h>#define BUFFER_SIZE 1024 // buffergroesse/* defintion der zustande */#define Z_VERBUNDEN 1#define Z_HELO 2#define Z_MAIL 3#define Z_RECEIPT 4#define Z_DATA 5#define Z_QUIT 6#define Z_RSET 7/* anzahl der zustande */#define BEF_ANZ 7#define SERVER "localhost"#define MAX_THREADS 2 /*anzahl maximaler Nutzer */pthread_t threads[MAX_THREADS];int jthreads[MAX_THREADS];int sock;struct zustaende{ int zustand; char *kommando;};struct zustaende befehle[]={ {Z_VERBUNDEN, " "}, {Z_HELO, "HELO"}, {Z_MAIL, "MAIL"}, {Z_RECEIPT, "RCPT"}, {Z_DATA, "DATA"}, {Z_QUIT, "QUIT"}, {Z_RSET, "RSET"}};struct speicher{ char* mail_abs; char* mail_empf; char* mail_daten;};void beenden(){}void signalhandler(int sig){ if(sig == SIGINT) { close(sock); exit(1); quit(); }}int main(int argc, char *argv[]){ sock = (int) argv[2]; if (argc != 3) /* test ob anzahl der argumente korrekt ist */ { fprintf(stderr, "Usage: %s <Maschinen Name oder IP> <Server Port>\n", argv[0]); return -1; } struct sockaddr_in server; struct in_addr a; struct hostent * ziel = gethostbyname(argv[1]); unsigned int addr; char eing[BUFFER_SIZE]; signal(SIGINT,signalhandler); if(ziel == 0) return -1; if(ziel) { sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); if (sock < 0) perror("client: socket"); memset(&server,0,sizeof(server)); bcopy(*ziel->h_addr_list,(char*)&a,sizeof(a)); addr=inet_addr(inet_ntoa(a)); memcpy((char *)&server.sin_addr, &addr, sizeof(addr)); server.sin_family = AF_INET; server.sin_port = htons(atoi(argv[2])); if(connect(sock,(struct sockaddr*)&server,sizeof(server))<0) perror("client: connect"); switch(status){ case 0: if(daten_lesen(sock,eing,BUFFER_SIZE)<0) perror("ERROR: reading"); printf("%s",eing); gethostname(eing,sizeof(eing)); strcpy(cmd,"helo "); break; case 1: printf("Absenderadresse: "); strcpy(cmd,"mail from:"); break; case 2: printf("Empfägeradresse: "); strcpy(cmd,"rcpt to:"); break; case 3: printf("Betreff: "); strcpy(cmd,"data\015\012"); break; case 4: printf("Text: \n"); strcpy(cmd,""); break; case 5: strcpy(cmd,""); break; }// if(status!=0){// fgets(eing,128,stdin);// }// if(status==3){// send(sock, cmd, strlen(cmd), 0);// strcpy(subject,"Subject:");// strncat(subject,buf,strlen(buf)-1);// strcat(subject,"\015\012");// if(read(sock,buf2,127)<0) perror("ERROR: reading");// send(sock, subject, strlen(subject), 0);// }// else{// strcpy(text,cmd);// if(status==1||status==2) strcat(text,"<");// if(status==0) strcat(text,buf);// else strncat(text,buf,strlen(buf)-1);// if(status==1||status==2) strcat(text,">");// strcat(text,"\015\012");// send(sock, text, strlen(text), 0);// if(status<4||strncmp(text,".\015\012",3)==0){// bzero(buf2,128);// if(read(sock,buf2,127)<0) perror("ERROR: reading");// printf("%s",buf2);// }// }// if(status==2&&buf2[0]=='2'){// do{// printf("Weitere Empfänger? (j/n) ");// fgets(buf3,128,stdin);// for(i=0;i<strlen(buf3);i++) buf3[i]=tolower(buf3[i]);// }while(strncmp(buf3,"j\n",2)!=0&&strncmp(buf3,"n\n",2)!=0);// if(strncmp(buf3,"n\n",2)==0) status++;// }// else if(buf2[0]=='2'||buf2[0]=='3'||status==4) status++;// if(strncmp(text,".\015\012",3)==0) status=6;// }// quit(); } else perror("host unreacheble\n");return 0;}