Skip to content

Commit

Permalink
first implementations for proxy module
Browse files Browse the repository at this point in the history
  • Loading branch information
zelgerj committed Apr 2, 2015
1 parent 360f953 commit 60969d8
Show file tree
Hide file tree
Showing 7 changed files with 297 additions and 28 deletions.
2 changes: 1 addition & 1 deletion bin/webserver
Expand Up @@ -25,4 +25,4 @@ BASE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )";
[ -z "$PHP_BIN" ] && PHP_BIN="/opt/appserver/bin/php";

# call webserver script
$PHP_BIN -dappserver.php_sapi=webserver -ddate.timezone=Europe/Berlin -dauto_globals_jit=0 $BASE_DIR/../src/server.php $@
$PHP_BIN -ddisplay_errors=1 -dappserver.php_sapi=webserver -ddate.timezone=Europe/Berlin -dauto_globals_jit=0 $BASE_DIR/../src/server.php $@
47 changes: 25 additions & 22 deletions etc/webserver.xml
Expand Up @@ -230,22 +230,25 @@

<modules>
<!-- REQUEST_POST hook -->
<module type="\AppserverIo\WebServer\Modules\AuthenticationModule"/>
<module type="\AppserverIo\WebServer\Modules\VirtualHostModule"/>
<module type="\AppserverIo\WebServer\Modules\AuthenticationModule" />
<module type="\AppserverIo\WebServer\Modules\VirtualHostModule" />
<module type="\AppserverIo\WebServer\Modules\EnvironmentVariableModule" />
<module type="\AppserverIo\WebServer\Modules\RewriteMapModule"/>
<module type="\AppserverIo\WebServer\Modules\RewriteModule"/>
<module type="\AppserverIo\WebServer\Modules\DirectoryModule"/>
<module type="\AppserverIo\WebServer\Modules\AccessModule"/>
<module type="\AppserverIo\WebServer\Modules\LocationModule"/>
<module type="\AppserverIo\WebServer\Modules\AutoIndexModule"/>
<module type="\AppserverIo\WebServer\Modules\CoreModule"/>
<module type="\AppserverIo\WebServer\Modules\PhpModule"/>
<module type="\AppserverIo\WebServer\Modules\FastCgiModule"/>
<module type="\AppserverIo\WebServer\Modules\RewriteMapModule" />
<module type="\AppserverIo\WebServer\Modules\RewriteModule" />
<module type="\AppserverIo\WebServer\Modules\DirectoryModule" />
<module type="\AppserverIo\WebServer\Modules\AccessModule" />
<module type="\AppserverIo\WebServer\Modules\LocationModule" />
<module type="\AppserverIo\WebServer\Modules\AutoIndexModule" />
<module type="\AppserverIo\WebServer\Modules\CoreModule" />
<module type="\AppserverIo\WebServer\Modules\PhpModule" />
<module type="\AppserverIo\WebServer\Modules\FastCgiModule" />
<module type="\AppserverIo\WebServer\Modules\ProxyModule" />
<!-- RESPONSE_PRE hook -->
<module type="\AppserverIo\WebServer\Modules\DeflateModule"/>
<module type="\AppserverIo\WebServer\Modules\DeflateModule" />
</modules>
<handlers>

<handler name="proxy" extension=".*"/>
<handler name="php" extension=".php"/>
<handler name="php" extension=".phtml"/>
<handler name="servlet" extension=".do"/>
Expand Down Expand Up @@ -430,17 +433,17 @@

<modules>
<!-- REQUEST_POST hook -->
<module type="\AppserverIo\WebServer\Modules\AuthenticationModule"/>
<module type="\AppserverIo\WebServer\Modules\VirtualHostModule"/>
<module type="\AppserverIo\WebServer\Modules\AuthenticationModule" />
<module type="\AppserverIo\WebServer\Modules\VirtualHostModule" />
<module type="\AppserverIo\WebServer\Modules\EnvironmentVariableModule" />
<module type="\AppserverIo\WebServer\Modules\RewriteMapModule"/>
<module type="\AppserverIo\WebServer\Modules\RewriteModule"/>
<module type="\AppserverIo\WebServer\Modules\DirectoryModule"/>
<module type="\AppserverIo\WebServer\Modules\AccessModule"/>
<module type="\AppserverIo\WebServer\Modules\LocationModule"/>
<module type="\AppserverIo\WebServer\Modules\AutoIndexModule"/>
<module type="\AppserverIo\WebServer\Modules\CoreModule"/>
<module type="\AppserverIo\WebServer\Modules\PhpModule"/>
<module type="\AppserverIo\WebServer\Modules\RewriteMapModule" />
<module type="\AppserverIo\WebServer\Modules\RewriteModule" />
<module type="\AppserverIo\WebServer\Modules\DirectoryModule" />
<module type="\AppserverIo\WebServer\Modules\AccessModule" />
<module type="\AppserverIo\WebServer\Modules\LocationModule" />
<module type="\AppserverIo\WebServer\Modules\AutoIndexModule" />
<module type="\AppserverIo\WebServer\Modules\CoreModule" />
<module type="\AppserverIo\WebServer\Modules\PhpModule" />
<module type="\AppserverIo\WebServer\Modules\FastCgiModule"/>
<!-- RESPONSE_PRE hook -->
<module type="\AppserverIo\WebServer\Modules\DeflateModule"/>
Expand Down
7 changes: 6 additions & 1 deletion resources/templates/www/error.phtml
Expand Up @@ -16,7 +16,12 @@
<h1><?php echo $response->getStatusCode() ?> <?php echo $response->getStatusReasonPhrase() ?></h1>
</header>

<p class="exception"><?php echo $errorMessage ?></p>
<div class="exception">
<?php if ($response->getStatusReasonPhrase() !== $exception->getMessage()): ?>
<h2><?php echo $exception->getMessage() ?></h2>
<?php endif; ?>
<p><?php echo str_replace("\n","<br/><br/>", $exception->__toString()); ?></p>
</div>

<p>Please report bugs to<br/>
<a href="https://github.com/appserver-io/webserver/issues/new">https://github.com/appserver-io/webserver/issues/new</a>
Expand Down
Expand Up @@ -38,6 +38,7 @@
use AppserverIo\Http\HttpQueryParser;
use AppserverIo\Http\HttpRequestParser;
use AppserverIo\Http\HttpResponseStates;
use AppserverIo\Http\HttpProtocol;

/**
* Class HttpConnectionHandler
Expand Down Expand Up @@ -301,6 +302,7 @@ public function handle(SocketInterface $connection, WorkerInterface $worker)
// init keep alive settings
$keepAliveTimeout = (int) $serverConfig->getKeepAliveTimeout();
$keepAliveMax = (int) $serverConfig->getKeepAliveMax();

// init keep alive connection flag
$keepAliveConnection = false;

Expand Down Expand Up @@ -341,7 +343,7 @@ public function handle(SocketInterface $connection, WorkerInterface $worker)
$keepAliveConnection = false;

// set first line from connection
$line = $connection->readLine(self::HTTP_CONNECTION_READ_LENGTH);
$line = $connection->readLine(self::HTTP_CONNECTION_READ_LENGTH, $keepAliveTimeout);

/**
* In the interest of robustness, servers SHOULD ignore any empty
Expand Down Expand Up @@ -443,6 +445,10 @@ public function handle(SocketInterface $connection, WorkerInterface $worker)
} catch (\Exception $e) {
// set status code given by exception
// if 0 is comming set 500 by default

echo $e;
echo __METHOD__ . __LINE__ . PHP_EOL;

$response->setStatusCode($e->getCode() ? $e->getCode() : 500);
$this->renderErrorPage($e);
}
Expand Down Expand Up @@ -538,6 +544,7 @@ public function prepareResponse()
{
// get local var refs
$response = $this->getParser()->getResponse();

// prepare headers in response object to be ready for delivery
$response->prepareHeaders();
}
Expand All @@ -557,7 +564,11 @@ public function sendResponse()
// write response headers
$connection->write($response->getHeaderString());
// stream response body to connection
$connection->copyStream($response->getBodyStream());

$contentLength = $response->getHeader(HttpProtocol::HEADER_CONTENT_LENGTH);

$connection->copyStream($response->getBodyStream(), (int)$contentLength);

}

/**
Expand Down Expand Up @@ -680,7 +691,7 @@ public function shutdown()
$worker = $this->getWorker();
$request = $this->getParser()->getRequest();
$response = $this->getParser()->getResponse();

// check if connections is still alive
if ($connection) {
// call current fileahandler module's shutdown hook if exists
Expand Down
9 changes: 9 additions & 0 deletions src/AppserverIo/WebServer/Modules/CoreModule.php
Expand Up @@ -168,6 +168,12 @@ public function populateRequestContext(RequestContextInterface $requestContext)
$requestContext->setServerVar(ServerVars::PATH_TRANSLATED, $documentRoot . $pathInfo);
}

// first check if wildcard file handler was registered
if (isset($handlers['.*'])) {
// set wildcard filehandler which will overload all specific filehandlers at this point
$possibleValidPathExtension = '*';
}

// check if file handler is defined for that script and expand request context
if (isset($handlers['.' . $possibleValidPathExtension])) {
// set the file handler to use for modules being able to react on this setting
Expand Down Expand Up @@ -219,6 +225,9 @@ public function process(RequestInterface $request, ResponseInterface $response,
$this->populateRequestContext($requestContext);

// check if file handler is not core module anymore

var_dump($requestContext->getServerVar(ServerVars::SERVER_HANDLER));

if ($requestContext->getServerVar(ServerVars::SERVER_HANDLER) !== self::MODULE_NAME) {
// stop processing
return;
Expand Down
6 changes: 5 additions & 1 deletion src/AppserverIo/WebServer/Modules/DeflateModule.php
Expand Up @@ -117,8 +117,12 @@ public function process(RequestInterface $request, ResponseInterface $response,
if (ModuleHooks::RESPONSE_PRE !== $hook) {
return;
}
// check if content type header exists if not stop processing
if (!$response->hasHeader(Protocol::HEADER_CONTENT_TYPE)) {
return;
}
// check if no accept encoding headers are sent
if (! $request->hasHeader(Protocol::HEADER_ACCEPT_ENCODING)) {
if (!$request->hasHeader(Protocol::HEADER_ACCEPT_ENCODING)) {
return;
}
// check if response was encoded before and exit than
Expand Down

0 comments on commit 60969d8

Please sign in to comment.