Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * SSL server for project in PVOS.
- *
- * petr.olivka@vsb.cz, Oct. 27, 2018
- * Dept. of Computer Science, FEECS, VSB-TUO
- */
- /* serv.cpp - Minimal ssleay server for Unix
- 30.9.1996, Sampo Kellomaki <sampo@iki.fi> */
- /* mangled to work with SSLeay-0.9.0b and OpenSSL 0.9.2b
- Simplified to be even more minimal
- 12/98 - 4/99 Wade Scholine <wades@mail.cybg.com> */
- #include "includes.h"
- #include <stdio.h>
- #include <unistd.h>
- #include <stdlib.h>
- #include <memory.h>
- #include <errno.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <netdb.h>
- #include <unistd.h>
- #include <sys/uio.h>
- #include <cstdio>
- #include <cstdlib>
- #include <string>
- #include <vector>
- #include <wait.h>
- #include <semaphore.h>
- #define CHK_NULL(x) if ((x)==NULL) exit (1)
- #define CHK_ERR(err,s) if ((err)==-1) { perror(s); exit(1); }
- #define CHK_SSL(err) if ((err)==-1) { ERR_print_errors_fp(stderr); exit(2); }
- int readline( int sd, char *buf, int length )
- {
- int num = 0;
- while ( num < length - 1 )
- {
- int err = read( sd, buf + num, 1 );
- if ( err <= 0 ) return err;
- if ( buf[ num++ ] == '\n' ) break;
- }
- buf[ num ] = 0;
- return num;
- }
- int socket_prelim(int *listen_sd,struct sockaddr_in sa_serv)
- {
- int err;
- *listen_sd = socket(AF_INET,SOCK_STREAM,0);
- CHK_ERR(*listen_sd,"socket");
- memset (&sa_serv, '\0', sizeof(sa_serv));
- sa_serv.sin_family = AF_INET;
- sa_serv.sin_addr.s_addr = INADDR_ANY;
- sa_serv.sin_port = htons (2223);
- err = bind(*listen_sd, (struct sockaddr*) &sa_serv,sizeof (sa_serv));
- CHK_ERR(err, "bind");
- err = listen(*listen_sd, 5);
- CHK_ERR(err, "listen");
- return 1;
- }
- int receive_connect(int *sd, int listen_sd,struct sockaddr_in sa_cli)
- {
- socklen_t client_len;
- client_len = sizeof(sa_cli);
- *sd = accept(listen_sd,(struct sockaddr*)&sa_cli,&client_len);
- CHK_ERR(*sd, "accept");
- printf ("Connection from %s, port %x\n",inet_ntoa( sa_cli.sin_addr ), sa_cli.sin_port);
- return 1;
- }
- int main ()
- {
- int max = 20;
- //Main variables
- int err;
- int listen_sd;
- int sd;
- struct sockaddr_in sa_serv;
- struct sockaddr_in sa_cli;
- fd_set set_fd;
- int client_no = 0;
- int maxfd;
- int fd[max];
- char buf[4096];
- //Socket creation
- err = socket_prelim(&listen_sd,sa_serv);
- while(1)
- {
- FD_ZERO(&set_fd);
- FD_SET(listen_sd,&set_fd);
- maxfd=listen_sd;
- for(int i = 0; i<client_no;i++)
- {
- FD_SET(fd[i],&set_fd);
- if(maxfd<fd[i])
- {
- maxfd=fd[i];
- }
- }
- err = select(maxfd+1,&set_fd,NULL,NULL,NULL);
- if( err < 0)
- printf("Select err\n");
- if(FD_ISSET(listen_sd,&set_fd))
- {
- err = receive_connect(&sd,listen_sd,sa_cli);
- fd[client_no]=sd;
- client_no++;
- }
- for(int i = 0; i<client_no;i++)
- {
- if(FD_ISSET(fd[i],&set_fd))
- {
- char buf [4096];
- err = read(fd[i], buf, sizeof(buf));
- CHK_SSL(err);
- if ( err <= 0 ) break;
- char tmp[4096];
- long sum = 0;
- sscanf( buf, "%s", &tmp);
- printf( "%s\n",tmp );
- char exec_result[4096];
- int result;
- int mypipe[2];
- pipe(mypipe);
- if (fork() == 0) // parent
- {
- close(mypipe[0]);
- dup2(mypipe[1], STDOUT_FILENO);
- close(mypipe[1]);
- char *argm[] = {tmp};
- execvp(argm[0], argm);
- }
- else // child
- {
- close(mypipe[1]);
- dup2(mypipe[0], STDIN_FILENO); // vysledek prikazu na stdin
- close(mypipe[0]);
- scanf("%d", &result); // scan vysledek prikazu
- err = read(mypipe[0],exec_result,sizeof(exec_result));
- if(err <=0)
- printf("error readin\n");
- }
- exec_result[err]='\0';
- printf("%s",exec_result);
- sprintf(buf,"%d",result);
- err = write( fd[i], buf, sizeof(buf));
- err = write(fd[i], exec_result,sizeof(exec_result));
- }
- }
- }
- /*receive_connect(&sd,listen_sd,(struct sockaddr_in) sa_cli);
- send(sd , "hello", strlen("hello") , 0 );
- printf("Hello message sent\n"); CHK_SSL(err);
- buf[err] = '\0';
- err = write (sd, "I hear you.", strlen("I hear you.")); CHK_SSL(err);*/
- close (sd);
- }
- /*
- * SSL client for project in PVOS.
- *
- * petr.olivka@vsb.cz, Oct. 27, 2018
- * Dept. of Computer Science, FEECS, VSB-TUO
- */
- /* cli.cpp - Minimal ssleay client for Unix
- 30.9.1996, Sampo Kellomaki <sampo@iki.fi> */
- /* mangled to work with SSLeay-0.9.0b and OpenSSL 0.9.2b
- Simplified to be even more minimal
- 12/98 - 4/99 Wade Scholine <wades@mail.cybg.com> */
- #include <stdio.h>
- #include <unistd.h>
- #include <memory.h>
- #include <string.h>
- #include <errno.h>
- #include <sys/param.h>
- #include <wait.h>
- #include <semaphore.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <netdb.h>
- #include <queue>
- #define CHK_NULL(x) if ((x)==NULL) exit (1)
- #define CHK_ERR(err,s) if ((err)==-1) { perror(s); exit(1); }
- #define CHK_SSL(err) if ((err)==-1) { ERR_print_errors_fp(stderr); exit(2); }
- #define eprintf( args... ) fprintf( stderr, ## args )
- #define DEFAULT_SERVER "localhost"
- #define DEFAULT_PORT "2223"
- int main()
- {
- int err;
- int sd;
- struct sockaddr_in sa;
- char* str;
- char buf [4096];
- sd = socket (AF_INET, SOCK_STREAM, 0);
- memset (&sa, '\0', sizeof(sa));
- sa.sin_family = AF_INET;
- sa.sin_addr.s_addr = inet_addr ("127.0.0.1"); /* Server IP */
- sa.sin_port = htons (2223); /* Server Port number */
- err = connect(sd, (struct sockaddr*) &sa,sizeof(sa));
- err = write(sd, "Hello World!", strlen("Hello World!"));
- send(sd , "ls" , strlen("ls") , 0 );
- printf("ls sent\n");
- err = read( sd , buf, sizeof(buf));
- printf("%s\n",buf );
- close(sd);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement