Update of /cvsroot/php-blog/jBlog
In directory sc8-pr-cvs1:/tmp/cvs-serv12723
Modified Files:
jBlog_functions.inc.php
Log Message:
pingback auto-detection
highly highly beta
Index: jBlog_functions.inc.php
===================================================================
RCS file: /cvsroot/php-blog/jBlog/jBlog_functions.inc.php,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -d -r1.29 -r1.30
--- jBlog_functions.inc.php 7 Mar 2003 04:07:37 -0000 1.29
+++ jBlog_functions.inc.php 7 Mar 2003 04:44:29 -0000 1.30
@@ -577,19 +577,57 @@
}
else if($final) {
if(preg_match('@trackback:ping(\s*rdf:resource)?\s*=\s*"(http:[^"]+)"@', $resp, $matches)) {
- return jBlog_trackback_is_success(_jBlog_send(parse_url($matches[2], $data)), 1);
+ return jBlog_trackback_is_success(_jBlog_send($matches[2], $data), 1);
}
}
return 1;
}
-
+function jBlog_pingback_autodiscover($loc, $body) {
+ if($_SERVER['X-PINGBACK']) {
+ $pingback = $_SERVER['X-PINGBACK'];
+ }
+ else if(preg_match('@<link rel="pingback" href="([^"]+)" ?/?>@', $body, $matches)) {
+ $pingback = $matches[1];
+ }
+ else {
+ // xml-rpc hack
+ $query = "
+<?xml version=\"1.0\"?>
+<methodCall>
+ <methodName>pingback.ping</methodName>
+ <params>
+ <param>
+ <name>sourceURI</name>
+ <value><string>http://{$_SERVER['HTTP_HOST']}{$jBlog['baseURL']}</string></value>
+ </param>
+ <name>targetURI</name>
+ <value><string>$loc</string></value>
+ </param>
+ </params>
+</methodCall>";
+ _jBlog_send($pingback, $query);
+ return;
+ }
+
+}
/**
* Send a trackback ping
*/
-function _jBlog_send($target, $data) {
+function _jBlog_send($loc, $data) {
+ $target = parse_url($loc);
+ if ($target['query'] != "") {
+ $target['query'] = '?' . $target['query'];
+ }
+ if (!is_numeric($target['port'])) {
+ $target['port'] = 80;
+ }
+ $sock = fsockopen($target['host'], $target['port']);
+ if (!is_resource($sock)) {
+ return "Couldn't connect to $loc";
+ }
fwrite($sock, "POST {$target['path']}{$target['query']} HTTP/1.1\r\n");
fwrite($sock, "Host: {$target['host']}\r\n");
fwrite($sock, "Content-type: application/x-www-form-urlencoded\r\n");
@@ -601,35 +639,20 @@
while (!feof($sock)) {
$res .= fgets($sock, 1024);
}
+ fclose($sock);
return $res;
}
function
jBlog_trackback_send($loc, $url, $author, $title, $text)
{
- $target = parse_url($loc);
-
- if ($target['query'] != "") {
- $target['query'] = '?' . $target['query'];
- }
-
- if (!is_numeric($target['port'])) {
- $target['port'] = 80;
- }
-
- $sock = fsockopen($target['host'], $target['port']);
- if (!is_resource($sock)) {
- return "Couldn't connect to $loc";
- }
-
$data = "url=".rawurlencode($url)."&title=".rawurlencode($title).
"&blog_name=".rawurlencode($author)."&excerpt=".rawurlencode($text);
- $res = _jBlog_send($target, $data);
- $res = jBlog_trackback_is_success($res, $data);
- fclose($sock);
-
- return $res;
+ $res = _jBlog_send($loc, $data);
+ $response = jBlog_trackback_is_success($res, $data);
+ jBlog_pingback_autodiscover($loc, $res);
+ return $response;
}
/**
|