Files

79 lines
2.5 KiB
C
Raw Permalink Normal View History

2026-08-27 11:22:43 -06:00
#include <windows.h>
#include <stdio.h>
#include "badger_exports.h"
// compile with:
// x86_64-w64-mingw32-gcc modify_http.c -c -o modify_http.o
char* RemoveDelimiter(char* src_buffer) {
int i, j = 0;
size_t len = BadgerStrlen(src_buffer);
char* dst_buffer = (char*)BadgerAlloc(len + 1); // +1 for the null terminator
if (! dst_buffer) {
return NULL; // Allocation failed
}
BadgerMemcpy(dst_buffer, src_buffer, len);
for (i = 0; i < len; i++) {
// If the current character is not '$', copy it to the new position
if (dst_buffer[i] != '$') {
dst_buffer[j++] = dst_buffer[i];
}
}
// Null-terminate the modified string
dst_buffer[j] = '\0';
return dst_buffer;
}
char* DelimitBuffer(char* src_buffer, size_t part_size) {
size_t size = BadgerStrlen(src_buffer);
if (size == 0 || part_size == 0 || part_size > size) {
return NULL;
}
// Calculate the number of parts
size_t num_parts = (size + part_size - 1) / part_size; // ceil(size / part_size)
size_t new_size = size + (num_parts - 1); // Additional space for delimiters
// Allocate memory for the new string
char* dst_buffer = (char*)BadgerAlloc(new_size + 1); // +1 for the null terminator
if (! dst_buffer) {
return NULL; // Allocation failed
}
size_t new_index = 0;
// Split the src_buffer and add delimiters
for (size_t i = 0; i < size; i += part_size) {
// Copy the part
size_t current_part_size = (i + part_size <= size) ? part_size : (size - i);
BadgerMemcpy(&dst_buffer[new_index], &src_buffer[i], current_part_size);
new_index += current_part_size;
// Add delimiter if not the last part
if (i + part_size < size) {
dst_buffer[new_index++] = '$';
}
}
// Null terminate the new string
dst_buffer[new_index] = '\0';
return dst_buffer;
}
void coffee(char** argv, int argc, WCHAR** dispatch) {
// argc will be 2
// argv[0] : if string "0", its request; if string "1", its response
// argv[1] : contains request or response buffer depending on argv[0]
CHAR *src_buffer = argv[1];
CHAR *dst_buffer = NULL;
if (BadgerStrcmp(argv[0], "0") == 0) {
size_t part_size = 5;
dst_buffer = DelimitBuffer(src_buffer, part_size);
} else if (BadgerStrcmp(argv[0], "1") == 0) {
dst_buffer = RemoveDelimiter(src_buffer);
}
if (dst_buffer) {
BadgerSetHTTPBuffer((PVOID)dst_buffer);
BadgerFree((PVOID*)&dst_buffer);
}
}