certificate_file); stream_context_set_option($context, 'ssl', 'passphrase', $g->certificate_passphrase); stream_context_set_option($context, 'ssl', 'allow_self_signed', true); stream_context_set_option($context, 'ssl', 'verify_peer', false); $socket = stream_socket_server("tcp://{$g->ip}:{$g->port}", $errno, $errstr, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $context); stream_socket_enable_crypto($socket, false); while(true) { $forkedSocket = stream_socket_accept($socket, "-1", $remoteIP); stream_set_blocking($forkedSocket, true); stream_socket_enable_crypto($forkedSocket, true, STREAM_CRYPTO_METHOD_TLS_SERVER); $line = fread($forkedSocket, 1024); stream_set_blocking($forkedSocket, false); $parsed_url = $g->parse_request($line); $filepath = $g->get_filepath($parsed_url); $status_code = $g->get_status_code($filepath); $meta = ""; $filesize = 0; if($status_code == "20") { $meta = $g->get_mime_type($filepath); $content = file_get_contents($filepath); $filesize = filesize($filepath); } else { $meta = "Not found"; } $status_line = $status_code." ".$meta; if($g->logging) $g->log_to_file($remoteIP,$status_code, $meta, $filepath, $filesize); $status_line .= "\r\n"; fwrite($forkedSocket, $status_line); if($status_code == "20") { fwrite($forkedSocket,$content); } fclose($forkedSocket); } ?>