You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by ch...@apache.org on 2008/09/13 13:10:55 UTC

svn commit: r694929 - /incubator/shindig/trunk/php/src/social/servlet/RestServlet.php

Author: chabotc
Date: Sat Sep 13 04:10:55 2008
New Revision: 694929

URL: http://svn.apache.org/viewvc?rev=694929&view=rev
Log:
Removed 0.8 multipart batch handling, it got removed from the spec @ 0.8.1

Modified:
    incubator/shindig/trunk/php/src/social/servlet/RestServlet.php

Modified: incubator/shindig/trunk/php/src/social/servlet/RestServlet.php
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/php/src/social/servlet/RestServlet.php?rev=694929&r1=694928&r2=694929&view=diff
==============================================================================
--- incubator/shindig/trunk/php/src/social/servlet/RestServlet.php (original)
+++ incubator/shindig/trunk/php/src/social/servlet/RestServlet.php Sat Sep 13 04:10:55 2008
@@ -124,11 +124,6 @@
 				// custom json batch format used by the gadgets
 				$responses = $this->handleJsonBatchRequest($token);
 				$outputConverter->outputJsonBatch($responses, $token);
-			} elseif ($this->isBatchProxyUrl()) {
-				// spec compliant batch proxy
-				$this->noHeaders = true;
-				$responses = $this->handleBatchProxyRequest($token);
-				$outputConverter->outputBatch($responses, $token);
 			} else {
 				// single rest request
 				$response = $this->handleRequest($token, $method);
@@ -178,104 +173,6 @@
 		}
 	}
 
-	private function handleBatchProxyRequest($token)
-	{
-		// Is this is a multipath/mixed post? Check content type:
-		if (isset($GLOBALS['HTTP_RAW_POST_DATA']) && strpos($_SERVER['CONTENT_TYPE'], 'multipart/mixed') !== false && strpos($_SERVER['CONTENT_TYPE'], 'boundary=') !== false) {
-			// Ok looks swell, see what our boundry is..
-			$boundry = substr($_SERVER['CONTENT_TYPE'], strpos($_SERVER['CONTENT_TYPE'], 'boundary=') + strlen('boundary='));
-			// Split up requests per boundry
-			$requests = explode($boundry, $GLOBALS['HTTP_RAW_POST_DATA']);
-			$responses = array();
-			foreach ($requests as $request) {
-				$request = trim($request);
-				if (! empty($request)) {
-					// extractBatchRequest() does the magic parsing of the raw post data to a meaninful request array
-					$request = $this->extractBatchRequest($request);
-					$requestItem = new RestRequestItem();
-					$requestItem->createRequestItemWithRequest($request, $token);
-					$responses[] = array('request' => $requestItem, 
-							'response' => $this->getResponseItem($requestItem));
-				}
-			}
-		} else {
-			$this->outputError(new ResponseItem(BAD_REQUEST, "Invalid multipart/mixed request"));
-		}
-		return $responses;
-	}
-
-	private function extractBatchRequest($request)
-	{
-		/* Multipart request is formatted like:
-		 * -batch-a73hdj3dy3mm347ddjjdf
-		 * Content-Type: application/http;version=1.1
-		 * Content-Transfer-Encoding: binary
-		 * 
-		 * GET /people/@me/@friends?startPage=5&count=10&format=json
-		 * Host: api.example.org
-		 * If-None-Match: "837dyfkdi39df"
-		 * 
-		 * but we only want to have the last bit (the actual request), this filters that down first
-		 */
-		$emptyFound = false;
-		$requestLines = explode("\r\n", $request);
-		$request = '';
-		foreach ($requestLines as $line) {
-			if ($emptyFound) {
-				$request .= $line . "\n";
-			} elseif (empty($line)) {
-				$emptyFound = true;
-			}
-		}
-		if (! $emptyFound) {
-			throw new Exception("Mallformed multipart structure");
-		}
-		// Now that we have the basic request in $request, split that up again & parse it into a meaningful representation
-		$firstFound = $emptyFound = false;
-		$requestLines = explode("\n", $request);
-		$request = array();
-		$request['headers'] = array();
-		$request['postData'] = '';
-		foreach ($requestLines as $line) {
-			if (! $firstFound) {
-				$firstFound = true;
-				$parts = explode(' ', trim($line));
-				if (count($parts) != 2) {
-					throw new Exception("Mallshaped request uri in multipart block");
-				}
-				$request['method'] = strtoupper(trim($parts[0]));
-				// cut it down to an actual meaningful url without the prefix/social/rest part right away 
-				$request['url'] = substr(trim($parts[1]), strlen(Config::get('web_prefix') . '/social/rest'));
-			} elseif (! $emptyFound && ! empty($line)) {
-				// convert the key to the PHP 'CONTENT_TYPE' style naming convention.. it's ugly but consitent
-				$key = str_replace('-', '_', strtoupper(trim(substr($line, 0, strpos($line, ':')))));
-				$val = trim(substr($line, strpos($line, ':') + 1));
-				$request['headers'][$key] = $val;
-			} elseif (! $emptyFound && empty($line)) {
-				$emptyFound = true;
-			} else {
-				if (get_magic_quotes_gpc()) {
-					$line = stripslashes($line);
-				}
-				$request['postData'] .= $line . "\n";
-			}
-		}
-		if (empty($request['method']) || empty($request['url'])) {
-			throw new Exception("Mallformed multipart structure");
-		}
-		if (empty($request['postData'])) {
-			// don't trip the requestItem into thinking there is postData when there's not
-			unset($request['postData']);
-		} else {
-			// if there was a post data blob present, decode it into an array, the format is based on the 
-			// content type header, which is either application/json or 
-			$format = isset($request['headers']['CONTENT_TYPE']) && strtolower($request['headers']['CONTENT_TYPE']) == 'application/atom+xml' ? 'atom' : 'json';
-			$requestType = $this->getRouteFromParameter($request['url']);
-			$request['postData'] = $this->decodeRequests($request['postData'], $requestType, $format);
-		}
-		return $request;
-	}
-
 	private function getResponseItem(RestRequestItem $requestItem)
 	{
 		$path = $this->getRouteFromParameter($requestItem->getUrl());