Refactor FastCGI server and compiler, enhance HTTP header parsing, and add WebSocket support
- Refactored FastCGIServer class to improve socket handling and added shutdown functionality. - Updated compiler functions to streamline HTML and text literal processing. - Enhanced split_kv function to support uppercase keys and added split_http_headers for better HTTP header parsing. - Introduced new session management functions to validate and handle session IDs. - Added WebSocket frame parsing and handling in the URI module. - Created systemd service scripts for easier deployment and management of the UCE FastCGI runtime. - Added new test cases for header handling, time parsing, and WebSocket functionality.
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
|
||||
|
||||
RENDER()
|
||||
{
|
||||
DTree t;
|
||||
|
||||
<>
|
||||
<link rel="stylesheet" href='style.css'></link>
|
||||
<h1>
|
||||
<a href="index.uce">UCE Test</a>:
|
||||
Header
|
||||
</h1>
|
||||
|
||||
Response Headers
|
||||
<pre style="white-space: pre-wrap"><?
|
||||
|
||||
print(var_dump(context->header));
|
||||
|
||||
?></pre>
|
||||
|
||||
Params
|
||||
<pre><?= var_dump(context->params) ?></pre>
|
||||
</>
|
||||
|
||||
}
|
||||
@@ -33,6 +33,9 @@ RENDER()
|
||||
<li><a href="task_repeat.uce">Task repeat</a></li>
|
||||
<li><a href="utf8.uce">UTF-8</a></li>
|
||||
<li><a href="call_file.uce">call_file()</a></li>
|
||||
<li><a href="parse_time.uce">parse_time()</a></li>
|
||||
<li><a href="header.uce">header</a></li>
|
||||
<li><a href="websockets.ws.uce">WebSockets</a></li>
|
||||
</ul>
|
||||
<pre><?
|
||||
print("Worker PID: ", my_pid, "\n");
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
|
||||
RENDER()
|
||||
{
|
||||
|
||||
String raw = first(context->post["raw"], "today");
|
||||
|
||||
<>
|
||||
<link rel="stylesheet" href='style.css'></link>
|
||||
<h1>
|
||||
<a href="index.uce">UCE Test</a>:
|
||||
parse_time
|
||||
</h1>
|
||||
<form action="?" method="post">
|
||||
<div>
|
||||
<label>Time string</label>
|
||||
<input type="text" name="raw" value="<?= raw ?>"/>
|
||||
</div>
|
||||
<div>
|
||||
<input type="submit" value="Parse"/>
|
||||
</div>
|
||||
</form>
|
||||
<pre><?
|
||||
|
||||
print(date("%Y-%m-%d %H:%M", parse_time(raw)));
|
||||
|
||||
?></pre>
|
||||
<pre><?= var_dump(context->params) ?></pre>
|
||||
</>
|
||||
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
|
||||
RENDER()
|
||||
{
|
||||
String raw = first(context->post["raw"], "today");
|
||||
String server_url = context->params["HTTP_HOST"]+context->params["DOCUMENT_URI"];
|
||||
<>
|
||||
<link rel="stylesheet" href='style.css'></link>
|
||||
<h1>
|
||||
<a href="index.uce">UCE Test</a>:
|
||||
WebSocket Test
|
||||
</h1>
|
||||
<form action="?" method="post">
|
||||
<div>
|
||||
<label></label>
|
||||
<input type="text" name="raw" value="<?= raw ?>"/>
|
||||
</div>
|
||||
<div>
|
||||
<input type="submit" value="Parse"/>
|
||||
</div>
|
||||
</form>
|
||||
<pre id="log"></pre>
|
||||
<script>
|
||||
const ws = new WebSocket('wss://<?= server_url ?>');
|
||||
const log_element = document.getElementById('log');
|
||||
log_element.append('Connecting to wss://<?= server_url ?>...' + "\n");
|
||||
ws.addEventListener('open', (event) => {
|
||||
log_element.append('Connection open' + "\n");
|
||||
ws.send('Hello, server!');
|
||||
});
|
||||
ws.addEventListener('message', (event) => {
|
||||
log_element.append('Message: ' + JSON.stringify(event.data) + "\n");
|
||||
});
|
||||
ws.addEventListener('close', (event) => {
|
||||
log_element.append('Connection closed' + "\n");
|
||||
});
|
||||
ws.addEventListener('error', (event) => {
|
||||
log_element.append('Error: ' + JSON.stringify(event) + "\n");
|
||||
});
|
||||
</script>
|
||||
<pre><?= var_dump(context->params) ?></pre>
|
||||
</>
|
||||
}
|
||||
Reference in New Issue
Block a user