Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // it is server side code:
- #include <netinet/in.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <sys/socket.h>
- #include <unistd.h>
- #define PORT 2042
- int server_fd, new_socket;
- ssize_t valread;
- struct sockaddr_in address;
- int opt = 1;
- socklen_t addrlen = sizeof(address);
- char buffer[4096];
- void req_init();
- void hi_request();
- void logining_request();
- void resource_request();
- void variable_request();
- int main(){
- printf("Cardinal v1.0A \n");
- // Starting server:
- if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0){
- perror("socket failed");
- exit(EXIT_FAILURE);
- }
- address.sin_family = AF_INET;
- address.sin_addr.s_addr = INADDR_ANY;
- address.sin_port = htons(PORT);
- re:
- system("fuser -k 2042/tcp");
- sleep(5);
- if(bind(server_fd, (struct sockaddr*)&address, sizeof(address)) < 0) {
- printf("bind failed - retrying in 3s.\n");
- sleep(3);
- goto re;
- return 500;
- }
- printf("start susscessfull. \n");
- printf("listening port 2042.. \n \n");
- // Main cycle:
- do{
- listen(server_fd, 3);
- new_socket = accept(server_fd, (struct sockaddr*)&address, &addrlen);
- valread = read(new_socket, buffer, 1024 - 1);
- if(buffer != NULL){req_init();}
- bzero(buffer, 1024);
- }while(1);
- close(server_fd);
- return 0;
- }
- void req_init(){
- printf("\033[92m => request \033[0m\n");
- printf(" type: ");
- switch(buffer[0]){
- case 'H': printf("connection check.\n"); hi_request(); break;
- case 'L': printf("loginig.\n"); logining_request(); break;
- case 'V': printf("variable(s) request.\n"); variable_request(); break;
- case 'R': printf("resource request.\n"); resource_request(); break;
- default: printf("unknown...\n"); break;
- }
- }
- void hi_request(){
- char hi[] = "hi";
- //send(new_socket, hi, strlen(hi), 0);
- printf(" responsed: none. \n");
- }
- // ***
- void resource_request(){
- char resource_path[256];
- int i = 0;
- while(buffer[i] != '"'){
- i++;
- };
- int j = 0; i++;
- while(buffer[i] != '"'){
- resource_path[j] = buffer[i];
- i++; j++;
- }
- while(j != 255){
- resource_path[j] = 0x00;
- j++;
- }
- //printf("\n%s\n", resource_path);
- //printf("\n%s\n", buffer); // there's all okay
- FILE *requested = fopen(resource_path, "r");
- if(requested == NULL){
- send(new_socket, "err. 404", 228, 0);
- printf(" responsed: err no. 404.\n");
- }else{
- fseek(requested, 0, SEEK_END);
- long int fsize = ftell(requested);
- fseek(requested, 0, SEEK_SET);
- fsize = 12;
- unsigned char *send_buffer = (unsigned char*)malloc(4 * 1024 * 1024); // 4kb buffer
- fread(send_buffer, 14, 1, requested);
- buffer[fsize + 1] = 0x00;
- send(new_socket, send_buffer, 16, 0); // why only 8 bytes were sent?
- free(send_buffer);
- fclose(requested);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement