I'm trying
to use LISTSERV's "API" in PHP. L-Soft calls this TCPGUI, and essentially, you can request data like over Telnet.
To do this, I'm using PHP's TCP socket functions.
I've seen this done in other languages but can't quite convert it
to PHP. I can connect, I can change set ASCII or BINARY mode. But I can never quite craft the header packet the way I need
to authenticate, so I'm thinking I'm messing up my conversion.
C: http://www.lsoft.com/manuals/16.0/htmlhelp/advanced%20topics/TCPGUI.html#2334328
$origin = '
[email protected]';
$pwd = 'password';
$host = "example.com";
$port = 2306;
$email = "
[email protected]";
$list = "mailinglist";
$command = "Query $list FOR $email";
$fp = stream_socket_client("tcp://$host:$port", $errno, $errstr, 30);
$cmd = $command . " PW=" . $pwd;
$len = strlen($cmd);
$orglen = strlen($origin);
$n = $len + $orglen + 1;
$headerPacket[0] = "1";
$headerPacket[1] = "B";
$headerPacket[2] = "\r";
$headerPacket[3] = "\n";
$headerPacket[4] = ord($n / 256);
$headerPacket[5] = ord($n + 255);
$headerPacket[6] = ord($orglen);
for ($i = 0; $i < $orglen; $i++) {
$headerPacket[$i + 7] = ord($origin[$i]);
}
for ($i = 0; $i < $len; $i++) {
$cmdPacket[$i] = ord($cmd[$i]);
}
fwrite($fp, implode($headerPacket));
while (!feof($fp)) {
echo fgets($fp, 1024);
}
Any thoughts on where I'm going wrong? I'd much appreciate it if anyone could point me toward some code
to do this, days of googling and searching here on SO has only lead me
to examples in other languages.
Of course, if you know C (or Java or Perl as linked below in my comment
to bypass the spam filter), PHP, and socket
programming fairly well, you could probably rewrite the whole of the code in an hour, maybe a few minutes. You'd have my eternal thanks for that.