Azreyo 3abb77876c Update server.c
Fixed minor bugs
Fixed logging system
Optimization 
Redirects to HTTPS when available
2025-02-09 23:51:56 +01:00
2025-02-08 22:59:48 +01:00
2025-02-08 22:57:59 +01:00
2025-02-08 22:58:48 +01:00
2025-02-09 12:47:45 +01:00
2025-02-09 13:08:15 +01:00
2025-02-09 13:08:26 +01:00
2025-02-09 23:51:56 +01:00
2025-02-08 22:58:48 +01:00
2025-02-08 22:58:48 +01:00

Carbon HTTP Server

This is a simple HTTP server for linux operating system written in C. It supports basic HTTP requests, logging, etc. NOTE: This program is being used as a fun projects to see limits of C. I'll be not responsible for any vulnerabilities. If you find vulnerabilities please report them.

Features

  • Handles GET requests for static files.
  • Supports a control menu for managing server status, logging, and configuration (currently basic).
  • Uses pthreads for concurrent client handling.
  • Includes basic logging functionality with timestamps.
  • Configuration is loaded from a JSON file (server.json).

Future development

This section outlines potential features and improvements planned for future releases of the server.

Prioraty features

Enhancement Description Priority Completion
Basic HTTP and HTTPS server Functionality Switching from HTTP to HTTPS Medium
Logging Mechanism Add logging mechanism for better error handleling Low
SSL/TLS Support Implement SSL/TLS Support for HTTP/s High

Planned Features

Enhancement Description Priority Completion
WebSocket Support Implement WebSocket protocol for real-time communication. Medium
Rate Limiting Add rate limiting to prevent abuse and DDoS attacks. High
User Authentication Implement user authentication for secure access to certain endpoints. High
API Documentation Create comprehensive API documentation using Swagger or similar tools. Medium
Load Balancing Support for load balancing across multiple server instances. Low

Performance Improvements

Enhancement Description Priority Completion
Connecting Pooling Implement connection pooling to improve performance under load. High
Asynchronous I/O Use asynchronous I/O to handle more connections efficiently. Medium
Caching Mechanism Introduce caching for static resources to reduce server load. Medium

Security Enhancements

Enhancement Description Priority Completion
Buffer Overflow Prevention Implement comprehensive input validation to prevent injection attacks. High
HTTPS Redirect Automatically redirect HTTP traffic to HTTPS. High
Security Audits Conduct regular security audits and vulnerability assessments. Medium

Community Contributions

Contribution Area Description Priority Notes
Documentation Improve and expand documentation for developers and users. Medium Open for contributions
Testing Create unit tests and integration tests for better coverage. High Contributions welcome
Feature Requests Encourage users to submit feature requests and suggestions. Low Use GitHub Issues

Build Instructions

  1. Prerequisites:

    • GCC compiler
    • Make (recommended)
    • OpenSSL libraries (libssl, libcrypto)
    • pthreads library
    • cJSON library
  2. Clone the repository (optional):

    git clone https://github.com/Azreyo/Carbon  
    cd Carbon/
    
  3. Compile:

    gcc server.c config_parser.c server_config.c -o server -lssl -lcrypto -lpthread -pthread -lcjson -lcjson -I/usr/include/cjson
    

    Compile it in gcc

    make
    

    This command will use the provided Makefile to compile the source files, link the necessary libraries, and create the executable in the bin directory.

    make clean
    

    Cleanup of the unnecessary files after compiling.

  4. Create www directory:

    mkdir www
    

    Place your HTML files (e.g., index.html) inside the www directory.

  5. Create server.json:

    Create a server.json file in the same directory as the executable with the following structure:

    {
      "port": 8080,
      "use_https": false,
      "log_file": "server.log",
      "max_threads": 4,
      "running": true,
      "automatic_startup": false
    }
    

    Adjust the values as needed. use_https is not yet implemented.

Run Instructions

  1. Get IP address of your device that the program will run on:
ip address
  1. Enable port 8080 for ufw
sudo ufw allow 8080 # 8080 is the default port
  1. Run it and enjoy
./bin/server  # Run the executable from the bin directory

For using HTTP/s

mkdir certs # Create certs folder
cd certs

Create certs folder to create certificates to it.

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes

Generating pairs of keys key.pem and and cert.pem for 365 days. Note: its only self-signed browser may get Potential Security Risk. For further use on domains is recommended Let's encrypt.

Description
Http and https server made in C with high response time, secured connections and reliable server.
https://carbonc.eu Readme 411 KiB
Languages
C 79.7%
HTML 15.5%
Shell 2.1%
Makefile 1.7%
Dockerfile 1%