Update index.php

This commit is contained in:
Namhyeon Go 2024-02-26 15:04:51 +09:00 committed by GitHub
parent e1c9f85163
commit 2f5e6b0a33
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -14,26 +14,30 @@ if (strpos($_SERVER['HTTP_USER_AGENT'], "php-httpproxy/") !== 0) {
ini_set("default_socket_timeout", 1); // must be. because of `feof()` works ini_set("default_socket_timeout", 1); // must be. because of `feof()` works
ini_set("max_execution_time", 0); ini_set("max_execution_time", 0);
function jsonrpc2_encode($params) { function jsonrpc2_encode($method, $params, $id = '') {
$data = array( $data = array(
"jsonrpc" => "2.0", "jsonrpc" => "2.0",
"params" => $params "method" => $method,
"params" => $params,
"id" => $id
); );
return json_encode($data); return json_encode($data);
} }
function jsonrpc2_result_encode($result) { function jsonrpc2_result_encode($result, $id = '') {
$data = array( $data = array(
"jsonrpc" => "2.0", "jsonrpc" => "2.0",
"result" => $result "result" => $result,
"id" => $id
); );
return json_encode($data); return json_encode($data);
} }
function jsonrpc2_error_encode($error) { function jsonrpc2_error_encode($error, $id = '') {
$data = array( $data = array(
"jsonrpc" => "2.0", "jsonrpc" => "2.0",
"error" => $error "error" => $error,
"id" => $id
); );
return json_encode($data); return json_encode($data);
} }
@ -57,7 +61,7 @@ function parse_headers($str) { // Parses HTTP headers into an array
return $headers; return $headers;
} }
function read_from_remote_server($remote_address, $remote_port, $scheme, $conn = null, $buffer_size = 8192) { function read_from_remote_server($remote_address, $remote_port, $scheme, $conn = null, $buffer_size = 8192, $id = '') {
if (in_array($scheme, array("https", "ssl", "tls"))) { if (in_array($scheme, array("https", "ssl", "tls"))) {
$remote_address = "tls://" . $remote_address; $remote_address = "tls://" . $remote_address;
} }
@ -70,7 +74,7 @@ function read_from_remote_server($remote_address, $remote_port, $scheme, $conn =
"message" => $error_message "message" => $error_message
); );
$buf = "HTTP/1.1 400 Bad Request\r\n\r\n" . jsonrpc2_error_encode($error); $buf = "HTTP/1.1 400 Bad Request\r\n\r\n" . jsonrpc2_error_encode($error, $id);
if ($conn == null) { if ($conn == null) {
echo $buf; echo $buf;
} else { } else {
@ -97,7 +101,7 @@ function read_from_remote_server($remote_address, $remote_port, $scheme, $conn =
} }
// stateless mode // stateless mode
function relay_request($params) { function relay_request($params, $id = '') {
$buffer_size = $params['buffer_size']; $buffer_size = $params['buffer_size'];
$request_data = base64_decode($params['request_data']); $request_data = base64_decode($params['request_data']);
$request_header = parse_headers($request_data); $request_header = parse_headers($request_data);
@ -121,12 +125,12 @@ function relay_request($params) {
break; break;
default: default:
read_from_remote_server($remote_address, $remote_port, $scheme, null, $buffer_size); read_from_remote_server($remote_address, $remote_port, $scheme, null, $buffer_size, $id);
} }
} }
// stateful mode // stateful mode
function relay_connect($params) { function relay_connect($params, $id = '') {
$buffer_size = $params['buffer_size']; $buffer_size = $params['buffer_size'];
$client_address = $params['client_address']; $client_address = $params['client_address'];
$client_port = intval($params['client_port']); $client_port = intval($params['client_port']);
@ -147,7 +151,7 @@ function relay_connect($params) {
echo "HTTP/1.1 400 Bad Request\r\n\r\n" . jsonrpc2_error_encode($error); echo "HTTP/1.1 400 Bad Request\r\n\r\n" . jsonrpc2_error_encode($error);
} else { } else {
fwrite($conn, jsonrpc2_result_encode(array("success" => true))); fwrite($conn, jsonrpc2_result_encode(array("success" => true)));
read_from_remote_server($remote_address, $remote_port, $scheme, $conn, $buffer_size); read_from_remote_server($remote_address, $remote_port, $scheme, $conn, $buffer_size, $id);
fclose($conn); fclose($conn);
} }
} }
@ -160,10 +164,10 @@ if ($context['jsonrpc'] == "2.0") {
$method = $context['method']; $method = $context['method'];
switch ($method) { switch ($method) {
case "relay_request": case "relay_request":
relay_request($context['params']); // stateless mode relay_request($context['params'], $context['id']); // stateless mode
break; break;
case "relay_connect": case "relay_connect":
relay_connect($context['params']); // stateful mode relay_connect($context['params'], $context['id']); // stateful mode
break; break;
} }
} }