* (bug 6074) Correct squid purging of offsite upload URLs
[lhc/web/wiklou.git] / includes / SquidUpdate.php
index dba47c5..7ccdf5b 100644 (file)
@@ -90,7 +90,7 @@ class SquidUpdate {
 
                $maxsocketspersquid = 8; //  socket cap per Squid
                $urlspersocket = 400; // 400 seems to be a good tradeoff, opening a socket takes a while
-               $firsturl = $urlArr[0];
+               $firsturl = SquidUpdate::expand( $urlArr[0] );
                unset($urlArr[0]);
                $urlArr = array_values($urlArr);
                $sockspersq =  max(ceil(count($urlArr) / $urlspersocket ),1);
@@ -164,7 +164,8 @@ class SquidUpdate {
                                                }
                                        }
                                        $urindex = $r + $urlspersocket * ($s - $sockspersq * floor($s / $sockspersq));
-                                       $msg = 'PURGE ' . $urlArr[$urindex] . " HTTP/1.0\r\n".
+                                       $url = SquidUpdate::expand( $urlArr[$urindex] );
+                                       $msg = 'PURGE ' . $url . " HTTP/1.0\r\n".
                                        "Connection: Keep-Alive\r\n\r\n";
                                        #$this->debug($msg);
                                        @fputs($sockets[$s],$msg);
@@ -210,6 +211,8 @@ class SquidUpdate {
                                        $wgHTCPMulticastTTL );
 
                        foreach ( $urlArr as $url ) {
+                               $url = SquidUpdate::expand( $url );
+                               
                                // Construct a minimal HTCP request diagram
                                // as per RFC 2756
                                // Opcode 'CLR', no response desired, no auth
@@ -247,5 +250,26 @@ class SquidUpdate {
                        wfDebug( $text );
                }
        }
+       
+       /**
+        * Expand local URLs to fully-qualified URLs using the internal protocol
+        * and host defined in $wgInternalServer. Input that's already fully-
+        * qualified will be passed through unchanged.
+        *
+        * This is used to generate purge URLs that may be either local to the
+        * main wiki or include a non-native host, such as images hosted on a
+        * second internal server.
+        *
+        * Client functions should not need to call this.
+        *
+        * @return string
+        */
+       static function expand( $url ) {
+               global $wgInternalServer;
+               if( $url != '' && $url{0} == '/' ) {
+                       return $wgInternalServer . $url;
+               }
+               return $url;
+       }
 }
 ?>