90 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
function gennntp($headers, $files) {
 | 
						|
	if (count($files) == 0) {
 | 
						|
	}
 | 
						|
	else if (count($files) == 1 && $files[0]['type'] == 'text/plain') {
 | 
						|
		$content = $files[0]['text'] . "\r\n";
 | 
						|
		$headers['Content-Type'] = "text/plain; charset=UTF-8";
 | 
						|
	}
 | 
						|
	else {
 | 
						|
		$boundary = sha1($headers['Message-Id']);
 | 
						|
		$content = "";
 | 
						|
		$headers['Content-Type'] = "multipart/mixed; boundary=$boundary";
 | 
						|
		foreach ($files as $file) {
 | 
						|
			$content .= "--$boundary\r\n";
 | 
						|
			if (isset($file['name'])) {
 | 
						|
				$file['name'] = preg_replace('/[\r\n\0"]/', '', $file['name']);
 | 
						|
				$content .= "Content-Disposition: form-data; filename=\"$file[name]\"; name=\"attachment\"\r\n";
 | 
						|
			}
 | 
						|
			$type = explode('/', $file['type'])[0];
 | 
						|
			if ($type == 'text') {
 | 
						|
				$file['type'] .= '; charset=UTF-8';
 | 
						|
			}
 | 
						|
			$content .= "Content-Type: $file[type]\r\n";
 | 
						|
			if ($type != 'text' && $type != 'message') {
 | 
						|
				$file['text'] = base64_encode($file['text']);
 | 
						|
				$content .= "Content-Transfer-Encoding: base64\r\n";
 | 
						|
			}
 | 
						|
			$content .= "\r\n";
 | 
						|
			$content .= $file['text'];
 | 
						|
			$content .= "\r\n";
 | 
						|
		}
 | 
						|
		$content .= "--$boundary--\r\n";
 | 
						|
	}
 | 
						|
 | 
						|
	//$headers['Content-Length'] = strlen($content);
 | 
						|
	$headers['Mime-Version'] = '1.0';
 | 
						|
	$headers['Date'] = date('r', $headers['Date']);
 | 
						|
 | 
						|
	$out = "";
 | 
						|
	foreach ($headers as $id => $val) {
 | 
						|
		$val = str_replace("\n", "\n\t", $val);
 | 
						|
		$out .= "$id: $val\r\n";
 | 
						|
	}
 | 
						|
	$out .= "\r\n";
 | 
						|
	$out .= $content;
 | 
						|
 | 
						|
	return $out;
 | 
						|
}
 | 
						|
 | 
						|
function shoveitup($msg, $id) {
 | 
						|
	$s = fsockopen("tcp://localhost:1119");
 | 
						|
	fgets($s);
 | 
						|
	fputs($s, "MODE STREAM\r\n");
 | 
						|
	fgets($s);
 | 
						|
	fputs($s, "TAKETHIS $id\r\n");
 | 
						|
	fputs($s, $msg);
 | 
						|
	fputs($s, "\r\n.\r\n");
 | 
						|
	fgets($s);
 | 
						|
	fclose($s);
 | 
						|
}
 | 
						|
 | 
						|
$time = time();
 | 
						|
 | 
						|
echo "\n@@@@ Thread:\n";
 | 
						|
echo $m0 = gennntp(["From" => "czaks <marcin@6irc.net>", "Message-Id" => "<1234.0000.".$time."@example.vichan.net>", "Newsgroups" => "overchan.test", "Date" => time(), "Subject" => "None"],
 | 
						|
[['type' => 'text/plain', 'text' => "THIS IS A NEW TEST THREAD"]]);
 | 
						|
 | 
						|
echo "\n@@@@ Single msg:\n";
 | 
						|
echo $m1 = gennntp(["From" => "czaks <marcin@6irc.net>", "Message-Id" => "<1234.1234.".$time."@example.vichan.net>", "Newsgroups" => "overchan.test", "Date" => time(), "Subject" => "None", "References" => "<1234.0000.".$time."@example.vichan.net>"],
 | 
						|
[['type' => 'text/plain', 'text' => "hello world, with no image :("]]);
 | 
						|
 | 
						|
echo "\n@@@@ Single msg and pseudoimage:\n";
 | 
						|
echo $m2 = gennntp(["From" => "czaks <marcin@6irc.net>", "Message-Id" => "<1234.2137.".$time."@example.vichan.net>", "Newsgroups" => "overchan.test", "Date" => time(), "Subject" => "None", "References" => "<1234.0000.".$time."@example.vichan.net>"],
 | 
						|
[['type' => 'text/plain', 'text' => "hello world, now with an image!"],
 | 
						|
 ['type' => 'image/gif', 'text' => base64_decode("R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs="), 'name' => "urgif.gif"]]);
 | 
						|
 | 
						|
echo "\n@@@@ Single msg and two pseudoimages:\n";
 | 
						|
echo $m3 = gennntp(["From" => "czaks <marcin@6irc.net>", "Message-Id" => "<1234.1488.".$time."@example.vichan.net>", "Newsgroups" => "overchan.test", "Date" => time(), "Subject" => "None", "References" => "<1234.0000.".$time."@example.vichan.net>"],
 | 
						|
[['type' => 'text/plain', 'text' => "hello world, now WITH TWO IMAGES!!!"],
 | 
						|
 ['type' => 'image/gif', 'text' => base64_decode("R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs="), 'name' => "urgif.gif"],
 | 
						|
 ['type' => 'image/gif', 'text' => base64_decode("R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs="), 'name' => "urgif2.gif"]]);
 | 
						|
 | 
						|
shoveitup($m0, "<1234.0000.".$time."@example.vichan.net>");
 | 
						|
sleep(1);
 | 
						|
shoveitup($m1, "<1234.1234.".$time."@example.vichan.net>");
 | 
						|
sleep(1);
 | 
						|
shoveitup($m2, "<1234.2137.".$time."@example.vichan.net>");
 | 
						|
shoveitup($m3, "<1234.2131.".$time."@example.vichan.net>");
 |