--- a/inc/comments/_trackback.funcs.php	2008-04-27 22:09:28.000000000 +0200
+++ blogs/inc/comments/_trackback.funcs.php	2008-05-30 14:49:57.000000000 +0200
@@ -85,25 +85,45 @@
 	if (strstr($trackback_url, '?'))
 	{
 		$Messages->add( $trackback_message.'[get]', 'note' );
-		$trackback_url .= "&".$query_string;;
-		flush();
-		if( $fp = fopen($trackback_url, 'r') )
-		{
-			// blueyed>> why do we here just read the first 4kb, but in the POSTed response everything?
-			// fp>> this is dirty code... I've never really reviewed it entirely. Feel free to refactor as much as needed.
-			$result = fread($fp, 4096);
-			fclose($fp);
-
-			/* debug code
-			$debug_file = 'trackback.log';
-			$fp = fopen($debug_file, 'a');
-			fwrite($fp, "\n*****\nTrackback URL query:\n\n$trackback_url\n\nResponse:\n\n");
-			fwrite($fp, $result);
-			fwrite($fp, "\n\n");
-			fclose($fp);
-			*/
-		}
-
+		$trackback_url .= "&".$query_string;
+		$trackback_url = parse_url($trackback_url);
+        if (((isset($trackback_url['host']) && !empty($trackback_url['host']))
+            && (isset($trackback_url['path']) && !empty($trackback_url['path'])))
+            && ($fp = fsockopen($trackback_url['host'], 80, $foo, $foo, 20)) !== false)
+        {
+            $header  = 'GET '.$trackback_url['path'].'?'.$trackback_url['query']." HTTP/1.0\r\n";
+            $header .= 'Host: '.$trackback_url['host']."\r\n";
+            $header .= 'User-Agent: '.$app_name.'/'.$app_version."\r\n\r\n";
+            fwrite($fp, $header, strlen($header));
+
+            if(function_exists('stream_set_timeout'))
+            {
+                stream_set_timeout($fp, 20); // PHP 4.3.0
+            }
+            else
+            {
+                socket_set_timeout($fp, 20); // PHP 4
+            }
+                
+            while (!feof($fp))
+                $result .= fgets($fp);
+            fclose($fp);
+
+            /* debug code
+            $debugmsg = "********\nRequest:\n\n$header\n\nResponse (full):\n\n$result\n\n";
+
+            // strip the HTTP header if possible
+            if (($pos = strpos($result, "\r\n\r\n")) !== false)
+            {
+                $result = substr($result, $pos+4);
+            }
+
+            $debugmsg .= "Response (header stripped):\n\n$result\n\n";
+            $df = fopen('trackback.log', 'a');
+            fwrite($df, $debugmsg, strlen($debugmsg));
+            fclose($df);
+            */
+        }
 	}
 	else
 	{
@@ -211,4 +231,4 @@
 
 
 
-?>
\ Kein Zeilenumbruch am Dateiende.
+?>

