headers = new headers($_nntp, $_id); if (!$this->headers) { $this = null; return false; } $this->body = join("\n", $_nntp->body($_id)); if (isset($this->headers->contentencoding) && preg_match("/base64/", $this->headers->contentencoding)) { $this->body = base64_decode($this->body); } if (isset($this->headers->contentencoding) && preg_match("/quoted-printable/", $this->headers->contentencoding)) { $this->body = quoted_printable_decode($this->body); } if (preg_match('!charset=([^;]*);!', $this->headers->contenttype, $matches)) { $this->body = iconv($matches[1], 'iso-8859-1', $this->body); } } } /** class for headers */ class Headers { /** MSGNUM : *local* spool id */ var $nb; // numéro du post /** MSGID : Message-ID */ var $msgid; // Message-ID /** From header */ var $from; // From /** Name (if present in From header) */ var $name; /** Mail (in From header) */ var $mail; /** Subject header */ var $subject; // Subject /** Newsgroup¨ header */ var $newsgroups; // Newsgroups /** Followup-To header */ var $followup; /** Content-Type header */ var $contenttype; /** Content-Transfer-Encoding header */ var $contentencoding; /** Date header */ var $date; /** Organization header */ var $organization; /** References header */ var $references; /** constructor * @param $_nntp RESOURCE handle to NNTP socket * @param $_id STRING MSGNUM or MSGID */ function headers(&$_nntp, $_id) { global $news; $hdrs = $_nntp->head($_id); if (!$hdrs) { $this = null; return false; } // parse headers foreach ($hdrs as $line) { if (preg_match("/^[\t\r ]+/", $line)) { $line = ($lasthdr=="X-Face"?"":" ").ltrim($line); if (in_array($lasthdr, array_keys($news['head']))) { $this->{$news['head'][$lasthdr]} .= $line; } } else { list($hdr, $val) = split(":[ \t\r]*", $line, 2); if (in_array($hdr, array_keys($news['head']))) { $this->{$news['head'][$hdr]} = $val; } $lasthdr = $hdr; } } // decode headers foreach ($news['hdecode'] as $hdr) { if (isset($this->$hdr)) { $this->$hdr = headerDecode($this->$hdr); } } // sets name and mail $this->name = $this->from; $this->mail = $this->from; if (preg_match("/(.*)<(.*)@(.*)>/", $val, $match)) { $this->name = str_replace("\"", "", trim($match[1])); $this->mail = $match[2]."@".$match[3]; } if (preg_match("/([\w\.]+)@([\w\.]+) \((.*)\)/", $val, $match)) { $this->name = trim($match[3]); $this->mail = $match[1]."@".$match[2]; } $this->nb = $_id; $retour->numerr = 0; } } ?>