Applications/Internet/Cyberia: Initial support for POST requests

This commit is contained in:
Alec Murphy
2025-10-10 11:39:37 -04:00
parent 02bb0e9f3d
commit f9e9f46081

View File

@@ -260,44 +260,50 @@ U0 @cyberia_form_submit(@html_dom_node* form_node)
JsonArray* form_elements = Json.CreateArray(browser->renderer->task);
@cyberia_collect_form_nodes(form_elements, form_node);
U8 get_request_str[1024];
U8* form_data_str = CAlloc(2048, browser->renderer->task);
if (!StrICmp(method, "get")) {
StrPrint(get_request_str, "%s?", action);
for (i = 0; i < form_elements->length; i++) {
element_node = form_elements->@(i);
U8* name = element_node->attributes->@("name");
U8* raw_value = "";
U8* encoded_value = NULL;
I64 encoded_value_length = 0;
Widget* element_gui_widget = element_node->attributes->@("cyberiaGuiWidget");
switch (element_gui_widget->type) {
case WIDGET_TYPE_CHECKBOX:
if (element_gui_widget(CheckBoxWidget*)->checked) {
raw_value = @t(element_node->attributes->@("value"), element_node->attributes->@("value"), "on");
} else {
raw_value = NULL;
}
break;
case WIDGET_TYPE_INPUT:
raw_value = &element_gui_widget(TextInputWidget*)->text;
break;
default:
break;
for (i = 0; i < form_elements->length; i++) {
element_node = form_elements->@(i);
U8* name = element_node->attributes->@("name");
U8* raw_value = "";
U8* encoded_value = NULL;
I64 encoded_value_length = 0;
Widget* element_gui_widget = element_node->attributes->@("cyberiaGuiWidget");
switch (element_gui_widget->type) {
case WIDGET_TYPE_CHECKBOX:
if (element_gui_widget(CheckBoxWidget*)->checked) {
raw_value = @t(element_node->attributes->@("value"), element_node->attributes->@("value"), "on");
} else {
raw_value = NULL;
}
break;
case WIDGET_TYPE_INPUT:
raw_value = &element_gui_widget(TextInputWidget*)->text;
break;
default:
break;
}
encoded_value = @cyberia_urlencode_str(raw_value, &encoded_value_length);
encoded_value = @cyberia_urlencode_str(raw_value, &encoded_value_length);
if (encoded_value) {
String.Append(get_request_str, "%s=%s", name, encoded_value);
if (i < form_elements->length - 1)
String.Append(get_request_str, "&");
if (encoded_value_length != StrLen(raw_value)) {
Free(encoded_value);
}
if (encoded_value) {
String.Append(form_data_str, "%s=%s", name, encoded_value);
if (i < form_elements->length - 1)
String.Append(form_data_str, "&");
if (encoded_value_length != StrLen(raw_value)) {
Free(encoded_value);
}
}
StrCpy(&addressbar1->text, &get_request_str);
}
if (!StrICmp(method, "GET")) {
StrPrint(&addressbar1->text, "%s?%s", action, form_data_str);
Free(form_data_str);
}
if (!StrICmp(method, "POST")) {
StrCpy(&addressbar1->text, action);
browser->renderer->form_data_str = form_data_str;
}
Free(action);
@@ -485,6 +491,11 @@ U0 @cyberia_navigate(Bool refresh = FALSE)
url_string = StrNew("http://127.0.0.255");
}
U8* form_data_str = NULL;
if (browser->renderer) {
form_data_str = browser->renderer->form_data_str;
}
if (!refresh) {
browser->renderer = CAlloc(sizeof(HtmlRenderer), browser_task);
++browser->history_index;
@@ -497,6 +508,7 @@ U0 @cyberia_navigate(Bool refresh = FALSE)
HtmlRenderer* renderer = browser->renderer;
@cyberia_init_renderer(renderer, url_string);
browser->renderer->form_data_str = form_data_str;
U8 err_msg_buffer[128];
U8 status_text_buffer[1024];