/**
  * Check for spam links
  *
  * @param    string $post post to check for spam
  * @return   boolean         true = spam found, false = no spam
  *                        Note: Also returns 'false' in case of problems communicating with SLV.
  *                        Error messages are logged in Geeklog's error.log
  */
 public function CheckForSpam($post)
 {
     global $_SPX_CONF;
     $retval = false;
     if (empty($post)) {
         return $retval;
     }
     $links = $this->prepareLinks($post);
     if (empty($links)) {
         return $retval;
     }
     if (!isset($_SPX_CONF['timeout'])) {
         $_SPX_CONF['timeout'] = 5;
         // seconds
     }
     if ($this->_verbose) {
         SPAMX_log("Sending to SLV: {$links}");
     }
     $params = array(new XML_RPC_Value($links, 'string'));
     $msg = new XML_RPC_Message('slv', $params);
     $cli = new XML_RPC_Client('/slv.php', 'http://www.linksleeve.org');
     if ($this->_debug) {
         $cli->setDebug(1);
     }
     $resp = $cli->send($msg, $_SPX_CONF['timeout']);
     if (!$resp) {
         COM_errorLog('Error communicating with SLV: ' . $cli->getErrorString() . '; Message was ' . $msg->serialize());
     } else {
         if ($resp->faultCode()) {
             COM_errorLog('Error communicating with SLV. Fault code: ' . $resp->faultCode() . ', Fault reason: ' . $resp->faultString() . '; Message was ' . $msg->serialize());
         } else {
             $val = $resp->value();
             // note that SLV returns '1' for acceptable posts and '0' for spam
             if ($val->scalarval() != '1') {
                 $retval = true;
                 SPAMX_log("SLV: spam detected");
             } else {
                 if ($this->_verbose) {
                     SPAMX_log("SLV: no spam detected");
                 }
             }
         }
     }
     return $retval;
 }
/**
 * Send a Pingback
 *
 * @param    string $sourceURI URL of an entry on our site
 * @param    string $targetURI an entry on someone else's site
 * @return   string              empty string on success or error message
 */
function PNB_sendPingback($sourceURI, $targetURI)
{
    global $LANG_TRB;
    $retval = '';
    $pingback = PNB_getPingbackUrl($targetURI);
    if (empty($pingback)) {
        return $LANG_TRB['no_pingback_url'];
    }
    $parts = parse_url($pingback);
    if (empty($parts['port'])) {
        if (strcasecmp($parts['scheme'], 'https') == 0) {
            $parts['port'] = 443;
        } else {
            $parts['port'] = 80;
        }
    }
    if (!empty($parts['query'])) {
        $parts['path'] .= '?' . $parts['query'];
    }
    $client = new XML_RPC_Client($parts['path'], $parts['host'], $parts['port']);
    //$client->setDebug (1);
    $msg = new XML_RPC_Message('pingback.ping', array(new XML_RPC_Value($sourceURI, 'string'), new XML_RPC_Value($targetURI, 'string')));
    $response = $client->send($msg, 0, $parts['scheme']);
    if (!is_object($response) && $response == 0) {
        $retval = $client->getErrorString();
    } elseif ($response->faultCode() != 0) {
        $retval = $response->faultString();
    }
    return $retval;
}