Advertisement
Guest User

curakovina

a guest
Mar 1st, 2019
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.99 KB | None | 0 0
  1. /*
  2. * SSL server for project in PVOS.
  3. *
  4. * petr.olivka@vsb.cz, Oct. 27, 2018
  5. * Dept. of Computer Science, FEECS, VSB-TUO
  6. */
  7.  
  8.  
  9. /* serv.cpp - Minimal ssleay server for Unix
  10. 30.9.1996, Sampo Kellomaki <sampo@iki.fi> */
  11.  
  12.  
  13. /* mangled to work with SSLeay-0.9.0b and OpenSSL 0.9.2b
  14. Simplified to be even more minimal
  15. 12/98 - 4/99 Wade Scholine <wades@mail.cybg.com> */
  16.  
  17. #include "includes.h"
  18. #include <stdio.h>
  19. #include <unistd.h>
  20. #include <stdlib.h>
  21. #include <memory.h>
  22. #include <errno.h>
  23. #include <sys/types.h>
  24. #include <sys/socket.h>
  25. #include <netinet/in.h>
  26. #include <arpa/inet.h>
  27. #include <netdb.h>
  28. #include <unistd.h>
  29. #include <sys/uio.h>
  30. #include <cstdio>
  31. #include <cstdlib>
  32. #include <string>
  33. #include <vector>
  34. #include <wait.h>
  35. #include <semaphore.h>
  36.  
  37.  
  38. #define CHK_NULL(x) if ((x)==NULL) exit (1)
  39. #define CHK_ERR(err,s) if ((err)==-1) { perror(s); exit(1); }
  40. #define CHK_SSL(err) if ((err)==-1) { ERR_print_errors_fp(stderr); exit(2); }
  41.  
  42. int readline( int sd, char *buf, int length )
  43. {
  44. int num = 0;
  45. while ( num < length - 1 )
  46. {
  47. int err = read( sd, buf + num, 1 );
  48. if ( err <= 0 ) return err;
  49. if ( buf[ num++ ] == '\n' ) break;
  50. }
  51. buf[ num ] = 0;
  52. return num;
  53. }
  54. int socket_prelim(int *listen_sd,struct sockaddr_in sa_serv)
  55. {
  56. int err;
  57. *listen_sd = socket(AF_INET,SOCK_STREAM,0);
  58. CHK_ERR(*listen_sd,"socket");
  59. memset (&sa_serv, '\0', sizeof(sa_serv));
  60. sa_serv.sin_family = AF_INET;
  61. sa_serv.sin_addr.s_addr = INADDR_ANY;
  62. sa_serv.sin_port = htons (2223);
  63. err = bind(*listen_sd, (struct sockaddr*) &sa_serv,sizeof (sa_serv));
  64. CHK_ERR(err, "bind");
  65. err = listen(*listen_sd, 5);
  66. CHK_ERR(err, "listen");
  67. return 1;
  68. }
  69. int receive_connect(int *sd, int listen_sd,struct sockaddr_in sa_cli)
  70. {
  71. socklen_t client_len;
  72. client_len = sizeof(sa_cli);
  73. *sd = accept(listen_sd,(struct sockaddr*)&sa_cli,&client_len);
  74. CHK_ERR(*sd, "accept");
  75. printf ("Connection from %s, port %x\n",inet_ntoa( sa_cli.sin_addr ), sa_cli.sin_port);
  76. return 1;
  77. }
  78. int main ()
  79. {
  80. int max = 20;
  81. //Main variables
  82. int err;
  83. int listen_sd;
  84. int sd;
  85. struct sockaddr_in sa_serv;
  86. struct sockaddr_in sa_cli;
  87. fd_set set_fd;
  88. int client_no = 0;
  89. int maxfd;
  90. int fd[max];
  91. char buf[4096];
  92. //Socket creation
  93. err = socket_prelim(&listen_sd,sa_serv);
  94.  
  95.  
  96. while(1)
  97. {
  98. FD_ZERO(&set_fd);
  99. FD_SET(listen_sd,&set_fd);
  100. maxfd=listen_sd;
  101. for(int i = 0; i<client_no;i++)
  102. {
  103. FD_SET(fd[i],&set_fd);
  104. if(maxfd<fd[i])
  105. {
  106. maxfd=fd[i];
  107. }
  108. }
  109. err = select(maxfd+1,&set_fd,NULL,NULL,NULL);
  110. if( err < 0)
  111. printf("Select err\n");
  112. if(FD_ISSET(listen_sd,&set_fd))
  113. {
  114. err = receive_connect(&sd,listen_sd,sa_cli);
  115. fd[client_no]=sd;
  116. client_no++;
  117. }
  118.  
  119. for(int i = 0; i<client_no;i++)
  120. {
  121. if(FD_ISSET(fd[i],&set_fd))
  122. {
  123. char buf [4096];
  124. err = read(fd[i], buf, sizeof(buf));
  125. CHK_SSL(err);
  126. if ( err <= 0 ) break;
  127.  
  128. char tmp[4096];
  129. long sum = 0;
  130.  
  131. sscanf( buf, "%s", &tmp);
  132.  
  133. printf( "%s\n",tmp );
  134.  
  135.  
  136. char exec_result[4096];
  137. int result;
  138. int mypipe[2];
  139. pipe(mypipe);
  140. if (fork() == 0) // parent
  141. {
  142. close(mypipe[0]);
  143. dup2(mypipe[1], STDOUT_FILENO);
  144. close(mypipe[1]);
  145. char *argm[] = {tmp};
  146. execvp(argm[0], argm);
  147. }
  148. else // child
  149. {
  150. close(mypipe[1]);
  151. dup2(mypipe[0], STDIN_FILENO); // vysledek prikazu na stdin
  152. close(mypipe[0]);
  153. scanf("%d", &result); // scan vysledek prikazu
  154. err = read(mypipe[0],exec_result,sizeof(exec_result));
  155. if(err <=0)
  156. printf("error readin\n");
  157. }
  158. exec_result[err]='\0';
  159. printf("%s",exec_result);
  160. sprintf(buf,"%d",result);
  161. err = write( fd[i], buf, sizeof(buf));
  162. err = write(fd[i], exec_result,sizeof(exec_result));
  163. }
  164. }
  165.  
  166. }
  167. /*receive_connect(&sd,listen_sd,(struct sockaddr_in) sa_cli);
  168.  
  169.  
  170. send(sd , "hello", strlen("hello") , 0 );
  171. printf("Hello message sent\n"); CHK_SSL(err);
  172. buf[err] = '\0';
  173. err = write (sd, "I hear you.", strlen("I hear you.")); CHK_SSL(err);*/
  174.  
  175. close (sd);
  176.  
  177. }
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190. /*
  191. * SSL client for project in PVOS.
  192. *
  193. * petr.olivka@vsb.cz, Oct. 27, 2018
  194. * Dept. of Computer Science, FEECS, VSB-TUO
  195. */
  196.  
  197. /* cli.cpp - Minimal ssleay client for Unix
  198. 30.9.1996, Sampo Kellomaki <sampo@iki.fi> */
  199.  
  200. /* mangled to work with SSLeay-0.9.0b and OpenSSL 0.9.2b
  201. Simplified to be even more minimal
  202. 12/98 - 4/99 Wade Scholine <wades@mail.cybg.com> */
  203.  
  204. #include <stdio.h>
  205. #include <unistd.h>
  206. #include <memory.h>
  207. #include <string.h>
  208. #include <errno.h>
  209. #include <sys/param.h>
  210. #include <wait.h>
  211. #include <semaphore.h>
  212. #include <sys/types.h>
  213. #include <sys/socket.h>
  214. #include <netinet/in.h>
  215. #include <arpa/inet.h>
  216. #include <netdb.h>
  217.  
  218. #include <queue>
  219.  
  220.  
  221. #define CHK_NULL(x) if ((x)==NULL) exit (1)
  222. #define CHK_ERR(err,s) if ((err)==-1) { perror(s); exit(1); }
  223. #define CHK_SSL(err) if ((err)==-1) { ERR_print_errors_fp(stderr); exit(2); }
  224. #define eprintf( args... ) fprintf( stderr, ## args )
  225.  
  226.  
  227. #define DEFAULT_SERVER "localhost"
  228. #define DEFAULT_PORT "2223"
  229.  
  230. int main()
  231. {
  232. int err;
  233. int sd;
  234. struct sockaddr_in sa;
  235. char* str;
  236. char buf [4096];
  237. sd = socket (AF_INET, SOCK_STREAM, 0);
  238.  
  239. memset (&sa, '\0', sizeof(sa));
  240. sa.sin_family = AF_INET;
  241. sa.sin_addr.s_addr = inet_addr ("127.0.0.1"); /* Server IP */
  242. sa.sin_port = htons (2223); /* Server Port number */
  243.  
  244. err = connect(sd, (struct sockaddr*) &sa,sizeof(sa));
  245. err = write(sd, "Hello World!", strlen("Hello World!"));
  246.  
  247. send(sd , "ls" , strlen("ls") , 0 );
  248. printf("ls sent\n");
  249. err = read( sd , buf, sizeof(buf));
  250. printf("%s\n",buf );
  251.  
  252. close(sd);
  253. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement