From b4fd544185cc11dd358eb7266329a3667b07d7b3 Mon Sep 17 00:00:00 2001
From: Azreyo <58790873+Azreyo@users.noreply.github.com>
Date: Wed, 1 Oct 2025 20:53:58 +0000
Subject: [PATCH] Update .gitignore, README.md, and server configuration
handling
- Added 'log/*' and 'server' to .gitignore to exclude log files and server binary.
- Enhanced README.md with improved structure and additional features.
- Updated server configuration to provide a warning for default server_name and changed default to '127.0.0.1'.
---
.gitignore | 2 +
README.md | 304 ++++++++++++++++++++++++++++++++++++------------
config_parser.c | 22 ++--
server_config.c | 1 +
server_config.h | 2 +-
5 files changed, 244 insertions(+), 87 deletions(-)
diff --git a/.gitignore b/.gitignore
index c6127b3..81b3361 100644
--- a/.gitignore
+++ b/.gitignore
@@ -50,3 +50,5 @@ modules.order
Module.symvers
Mkfile.old
dkms.conf
+log/*
+server
diff --git a/README.md b/README.md
index d3da126..fb6ee0a 100644
--- a/README.md
+++ b/README.md
@@ -1,44 +1,74 @@
-# Carbon HTTP Server
+
-A high-performance HTTP/HTTPS server written in C for Linux systems, featuring advanced security, caching, and async I/O.
+# π₯ Carbon HTTP Server
-## Core Features
+[](LICENSE)
+[](https://www.linux.org/)
+[](https://en.wikipedia.org/wiki/C_(programming_language))
+[](http://makeapullrequest.com)
-- β
Multi-threaded HTTP/HTTPS server with epoll-based async I/O
-- β
SSL/TLS support with automatic HTTP to HTTPS redirection
-- β
Advanced rate limiting and DDoS protection
-- β
File caching system for improved performance
-- β
Thread pooling for efficient connection handling
-- β
Comprehensive security headers and MIME type detection
-- β
JSON-based configuration
-- β
Detailed logging system with rotation
+**A high-performance HTTP/HTTPS server written in C for Linux systems**
-## Security Features
+*Features advanced security, caching, and asynchronous I/O capabilities*
-- β
Buffer overflow prevention
-- β
Path traversal protection
-- β
Input sanitization
-- β
SSL/TLS with modern cipher suites
-- β
Security headers (CSP, HSTS, X-Frame-Options, etc.)
-- β
Rate limiting per IP
-- β
Automatic HTTPS redirection
+[Features](#-features) β’ [Installation](#-installation) β’ [Configuration](#-configuration) β’ [Usage](#-usage) β’ [Contributing](#-contributing) β’ [License](#-license)
-## Performance Features
+
-- β
Epoll-based asynchronous I/O
-- β
Thread pool for connection handling
-- β
File caching system
-- β
SendFile() optimization for file transfers
-- β
Keep-alive connection support
-- β
TCP optimization (NODELAY, buffer sizes)
+---
-## Build Instructions
+## π Table of Contents
-### Prerequisites
+- [Overview](#-overview)
+- [Features](#-features)
+- [Prerequisites](#-prerequisites)
+- [Installation](#-installation)
+- [Configuration](#-configuration)
+- [Usage](#-usage)
+- [Project Structure](#-project-structure)
+- [Roadmap](#-roadmap)
+- [Contributing](#-contributing)
+- [Security](#-security)
+- [License](#-license)
+- [Acknowledgments](#-acknowledgments)
+
+## π Overview
+
+Carbon is a production-ready HTTP/HTTPS server implementation in C, designed for high performance and security. Built with modern Linux systems in mind, it leverages epoll-based I/O, thread pooling, and comprehensive security measures to deliver a robust web serving solution.
+
+## β¨ Features
+
+### π Performance
+- **Asynchronous I/O**: Epoll-based event handling for maximum efficiency
+- **Thread Pool**: Efficient connection handling with configurable worker threads
+- **Smart Caching**: File caching system to reduce disk I/O
+- **SendFile Optimization**: Zero-copy file transfers for better throughput
+- **Keep-Alive Support**: Persistent connections to reduce overhead
+- **TCP Optimization**: Fine-tuned NODELAY and buffer configurations
+
+### π Security
+- **SSL/TLS Support**: Full HTTPS support with modern cipher suites
+- **Auto HTTPS Redirect**: Automatic HTTP to HTTPS redirection
+- **Rate Limiting**: Per-IP rate limiting and DDoS protection
+- **Security Headers**: CSP, HSTS, X-Frame-Options, and more
+- **Input Sanitization**: Protection against path traversal and injection attacks
+- **Buffer Overflow Prevention**: Memory-safe operations throughout
+
+### π οΈ Developer Features
+- **JSON Configuration**: Easy-to-edit configuration files
+- **Comprehensive Logging**: Detailed logs with rotation support
+- **MIME Type Detection**: Automatic content-type detection via libmagic
+- **Debug Mode**: Built-in debugging support for development
+
+## π¦ Prerequisites
+
+Before building Carbon, ensure you have the following dependencies installed:
```bash
-# Install required dependencies
+# Update package lists
sudo apt-get update
+
+# Install required dependencies
sudo apt-get install -y \
build-essential \
libssl-dev \
@@ -47,104 +77,226 @@ sudo apt-get install -y \
pkg-config
```
-### Compilation
+## π Installation
+
+### Quick Start
```bash
-# Using Make (recommended)
-make # Normal build
-make debug # Debug build
-make release # Optimized release build
+# Clone the repository
+git clone https://github.com/Azreyo/Carbon.git
+cd Carbon
-# Manual compilation
+# Build the server
+make
+
+# Run the server
+./server
+```
+
+### Build Options
+
+Carbon provides multiple build configurations:
+
+```bash
+make # Standard build
+make debug # Debug build with symbols
+make release # Optimized release build
+make clean # Clean build artifacts
+```
+
+### Manual Compilation
+
+If you prefer manual compilation:
+
+```bash
gcc server.c config_parser.c server_config.c -o server \
-D_GNU_SOURCE \
-Wall -Wextra -O2 \
-lssl -lcrypto -lpthread -lmagic -lcjson
```
-### SSL Certificate Setup
+## βοΈ Configuration
+
+### SSL/TLS Setup
+
+> **β οΈ Important**: Self-signed certificates should only be used for testing purposes. For production, use certificates from a trusted Certificate Authority like [Let's Encrypt](https://letsencrypt.org/).
```bash
# Create certificates directory
mkdir -p certs
-# Generate self-signed certificate
+# Generate self-signed certificate (for testing only)
openssl req -x509 -newkey rsa:2048 \
-keyout certs/key.pem \
-out certs/cert.pem \
- -days 365 -nodes
+ -days 365 -nodes \
+ -subj "/C=US/ST=State/L=City/O=Organization/CN=localhost"
```
-### Configuration
+### Server Configuration
-Create `server.json`:
+Create or edit `server.json` in the project root:
```json
{
"port": 8080,
"use_https": false,
- "server_path": "bin/server",
- "config_path": "sever.json",
+ "server_path": "bin/server",
+ "config_path": "server.json",
"log_file": "log/server.log",
"max_threads": 4,
"running": true,
- "server_name": "Your_domain/IP",
- "verbose": true
- }
+ "server_name": "localhost",
+ "verbose": true
+}
```
+**Configuration Options:**
+- `port`: HTTP port (default: 8080)
+- `use_https`: Enable HTTPS (requires SSL certificates)
+- `log_file`: Path to log file
+- `max_threads`: Number of worker threads
+- `server_name`: Your domain or IP address
+- `verbose`: Enable detailed logging
+
### Directory Structure
+Set up the required directory structure:
+
```bash
+# Create web root and subdirectories
mkdir -p www/{css,js,images}
+
+# Create logs directory
+mkdir -p log
+
+# Place your web files in www/
+# Example: www/index.html, www/css/style.css, etc.
```
-## Running the Server
+## π― Usage
+
+### Starting the Server
```bash
-# Allow ports
-sudo ufw allow 8080/tcp # HTTP
-sudo ufw allow 443/tcp # HTTPS
-
# Run the server
./server
+
+# The server will start on the configured port (default: 8080)
+# Access it at http://localhost:8080
```
-## Planned Features
+### Firewall Configuration
+
+If you're using UFW, allow the necessary ports:
+
+```bash
+# Allow HTTP port
+sudo ufw allow 8080/tcp
+
+# Allow HTTPS port (if using SSL)
+sudo ufw allow 443/tcp
+
+# Reload firewall
+sudo ufw reload
+```
+
+### Testing
+
+```bash
+# Test HTTP endpoint
+curl http://localhost:8080
+
+# Test HTTPS endpoint (if enabled)
+curl -k https://localhost:443
+```
+
+## π Project Structure
+
+```
+Carbon/
+βββ server.c # Main server implementation
+βββ server_config.c # Configuration management
+βββ server_config.h # Configuration headers
+βββ config_parser.c # JSON configuration parser
+βββ Makefile # Build configuration
+βββ server.json # Server configuration file
+βββ README.md # This file
+βββ LICENSE # MIT License
+βββ certs/ # SSL certificates (create this)
+β βββ cert.pem
+β βββ key.pem
+βββ www/ # Web root directory
+β βββ index.html
+β βββ css/
+β βββ js/
+β βββ images/
+βββ log/ # Log files
+ βββ server.log
+```
+
+## πΊοΈ Roadmap
| Feature | Priority | Status |
|---------|----------|--------|
-| WebSocket Support | Medium | β |
-| User Authentication | High | β |
-| API Documentation | Medium | β |
-| Load Balancing | Low | β |
-| Security Audits | Medium | β |
+| HTTP/2 Support | High | π Planned |
+| WebSocket Support | Medium | π Planned |
+| User Authentication | High | π Planned |
+| API Rate Limiting | High | β
Implemented |
+| Reverse Proxy Mode | Medium | π Planned |
+| Load Balancing | Low | π Planned |
+| Docker Support | Medium | π Planned |
+| Comprehensive API Docs | Medium | π Planned |
-## Contributing
+## π€ Contributing
-1. Fork the repository
-2. Create your feature branch
-3. Commit your changes
-4. Push to the branch
-5. Create a Pull Request
+Contributions are welcome! Here's how you can help:
-## License
+1. **Fork** the repository
+2. **Create** a feature branch (`git checkout -b feature/AmazingFeature`)
+3. **Commit** your changes (`git commit -m 'Add some AmazingFeature'`)
+4. **Push** to the branch (`git push origin feature/AmazingFeature`)
+5. **Open** a Pull Request
-This project is licensed under the MIT License - see the [License](LICENSE) View our license terms
- file for details.
+Please ensure your code:
+- Follows the existing code style
+- Includes appropriate comments
+- Passes all tests
+- Updates documentation as needed
-## Security
+## π Security
-While this server implements various security measures, it's recommended to:
-- Use a reverse proxy (like Nginx) in production
-- Obtain proper SSL certificates (Let's Encrypt)
-- Regularly update dependencies
-- Monitor server logs
-- Conduct security audits
+Carbon implements multiple security layers, but for production deployments:
-## Acknowledgments
+- β
**Use a reverse proxy** (Nginx, Apache) for additional security
+- β
**Obtain proper SSL certificates** from Let's Encrypt or another CA
+- β
**Keep dependencies updated** regularly
+- β
**Monitor server logs** for suspicious activity
+- β
**Conduct regular security audits**
+- β
**Implement firewall rules** to restrict access
+- β
**Use strong passwords** and authentication mechanisms
-- OpenSSL for SSL/TLS support
-- cJSON for configuration parsing
-- libmagic for MIME type detection
+**Reporting Security Issues**: Please report security vulnerabilities to the maintainers privately before public disclosure.
+
+## π License
+
+This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
+
+## π Acknowledgments
+
+Carbon is built with these excellent open-source libraries:
+
+- [OpenSSL](https://www.openssl.org/) - SSL/TLS cryptography
+- [cJSON](https://github.com/DaveGamble/cJSON) - Lightweight JSON parser
+- [libmagic](https://www.darwinsys.com/file/) - MIME type detection
+
+---
+
+
+
+**Made with β€οΈ by [Azreyo](https://github.com/Azreyo)**
+
+β Star this repository if you find it helpful!
+
+
diff --git a/config_parser.c b/config_parser.c
index d5a1807..52d57f1 100644
--- a/config_parser.c
+++ b/config_parser.c
@@ -91,16 +91,18 @@ int load_config(const char *filename, ServerConfig *config) {
config->running = true;
}
- cJSON *server_name = cJSON_GetObjectItemCaseSensitive(root, "server_name");
- if (cJSON_IsString(server_name) && (server_name->valuestring != NULL)) {
- strncpy(config->server_name, server_name->valuestring, sizeof(config->server_name) - 1);
- config->server_name[sizeof(config->server_name) - 1] = '\0';
- printf("load_config: server_name = %s\n", config->server_name);
- } else {
- fprintf(stderr, "load_config: server_name not found or not a string. Using default.\n");
- strcpy(config->server_name, "192.168.1.1"); // Default IP address
- }
-
+ cJSON *server_name = cJSON_GetObjectItemCaseSensitive(root, "server_name");
+ if (cJSON_IsString(server_name) && (server_name->valuestring != NULL)) {
+ strncpy(config->server_name, server_name->valuestring, sizeof(config->server_name) - 1);
+ config->server_name[sizeof(config->server_name) - 1] = '\0';
+ printf("load_config: server_name = %s\n", config->server_name);
+ if (strcmp(config->server_name, "Your_domain/IP") == 0) {
+ fprintf(stderr, "WARNING: server_name is set to 127.0.0.1\nPlease set server_name in server.json to the server's IP address or domain name for proper operation.\n");
+ }
+ } else {
+ fprintf(stderr, "load_config: server_name not found or not a string. Using default.\n");
+ strcpy(config->server_name, "127.0.0.1");
+ }
cJSON_Delete(root);
return 0;
}
diff --git a/server_config.c b/server_config.c
index 49dc06e..c095a4c 100644
--- a/server_config.c
+++ b/server_config.c
@@ -10,4 +10,5 @@ void init_config(ServerConfig *config) {
config->running = true;
config->automatic_startup = false;
config->verbose = 0;
+ strcpy(config->server_name, "127.0.0.1");
}
diff --git a/server_config.h b/server_config.h
index ec23a00..5319a4c 100644
--- a/server_config.h
+++ b/server_config.h
@@ -11,7 +11,7 @@ typedef struct {
bool running;
bool automatic_startup;
char server_name[256];
- int verbose;
+ int verbose;
} ServerConfig;
int load_config(const char *filename, ServerConfig *config);