Advertisement
Guest User

server

a guest
Dec 30th, 2024
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.85 KB | Source Code | 0 0
  1. // it is server side code:
  2.  
  3. #include <netinet/in.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <sys/socket.h>
  8. #include <unistd.h>
  9. #define PORT 2042
  10.  
  11. int server_fd, new_socket;
  12. ssize_t valread;
  13. struct sockaddr_in address;
  14. int opt = 1;
  15.  
  16. socklen_t addrlen = sizeof(address);
  17. char buffer[4096];
  18.  
  19. void req_init();
  20.  
  21. void hi_request();
  22. void logining_request();
  23. void resource_request();
  24. void variable_request();
  25.  
  26. int main(){
  27.  
  28.     printf("Cardinal v1.0A \n");
  29.  
  30.     // Starting server:
  31.     if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0){
  32.         perror("socket failed");
  33.             exit(EXIT_FAILURE);
  34.         }
  35.  
  36.     address.sin_family = AF_INET;
  37.     address.sin_addr.s_addr = INADDR_ANY;
  38.     address.sin_port = htons(PORT);
  39.  
  40. re:
  41.         system("fuser -k 2042/tcp");
  42.  
  43.     sleep(5);
  44.     if(bind(server_fd, (struct sockaddr*)&address, sizeof(address))  < 0) {
  45.         printf("bind failed - retrying in 3s.\n");
  46.         sleep(3);
  47.         goto re;
  48.     return 500;
  49.     }
  50.    
  51.     printf("start susscessfull. \n");
  52.     printf("listening port 2042.. \n \n");
  53.  
  54.     // Main cycle:
  55.     do{
  56.         listen(server_fd, 3);
  57.         new_socket = accept(server_fd, (struct sockaddr*)&address, &addrlen);
  58.  
  59.             valread = read(new_socket, buffer, 1024 - 1);                        
  60.         if(buffer != NULL){req_init();}
  61.         bzero(buffer, 1024);
  62.     }while(1);
  63.  
  64.     close(server_fd);
  65.     return 0;  
  66. }
  67.    
  68. void req_init(){
  69.    
  70.     printf("\033[92m => request \033[0m\n");
  71.     printf("      type: ");
  72.     switch(buffer[0]){
  73.         case 'H': printf("connection check.\n"); hi_request(); break;
  74.         case 'L': printf("loginig.\n"); logining_request(); break;
  75.         case 'V': printf("variable(s) request.\n"); variable_request(); break;
  76.         case 'R': printf("resource request.\n"); resource_request(); break;
  77.         default: printf("unknown...\n"); break;
  78.     }
  79.  
  80.  
  81. }
  82.  
  83. void hi_request(){
  84.     char hi[] = "hi";
  85.         //send(new_socket, hi, strlen(hi), 0);
  86.     printf("      responsed: none. \n");
  87. }
  88.  
  89. //   ***
  90.  
  91. void resource_request(){
  92.    
  93.     char resource_path[256];
  94.  
  95.     int i = 0;
  96.     while(buffer[i] != '"'){
  97.         i++;
  98.     };
  99.     int j = 0; i++;
  100.     while(buffer[i] != '"'){
  101.         resource_path[j] = buffer[i];
  102.         i++; j++;
  103.     }
  104.    
  105.     while(j != 255){
  106.         resource_path[j] = 0x00;
  107.         j++;
  108.     }
  109.  
  110.     //printf("\n%s\n", resource_path);
  111.     //printf("\n%s\n", buffer);                   // there's all okay
  112.  
  113.     FILE *requested = fopen(resource_path, "r");
  114.     if(requested == NULL){
  115.         send(new_socket, "err. 404", 228, 0);
  116.         printf("      responsed: err no. 404.\n");
  117.     }else{
  118.         fseek(requested, 0, SEEK_END);
  119.         long int fsize = ftell(requested);
  120.         fseek(requested, 0, SEEK_SET);
  121.         fsize = 12;
  122.  
  123.         unsigned char *send_buffer = (unsigned char*)malloc(4 * 1024 * 1024); // 4kb buffer
  124.        
  125.         fread(send_buffer, 14, 1, requested);
  126.         buffer[fsize + 1] = 0x00;
  127.         send(new_socket, send_buffer, 16, 0); // why only 8 bytes were sent?
  128.         free(send_buffer);
  129.         fclose(requested);
  130.     }
  131.  
  132. }
  133.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement