<?php
$address = '127.0.0.1';
$port = 1337;
$sock = socketInit($address, $port);
do {
break;
}
socketWrite($msgsock, "Welcome\r\n\r\n");
$buf = '';
foreach (readSocket($msgsock) as $buffer) {
$buf .= $buffer;
}
socketWrite($msgsock, $buf);
} while (true);
function socketWrite($msgsock, $buffer) {
if ($bytesSent == $length) {
echo "all bytes have been sent \n";
break;
} else {
$buffer = substr($buffer, $bytesSent); }
}
if ($bytesSent === false) {
}
}
function socketInit($address, $port) {
if (($sock = socket_create(AF_INET
, SOCK_STREAM
, SOL_TCP
)) === false) { }
}
}
return $sock;
}
function readSocket($msgsock) {
do {
if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ
))) { break;
}
if ($buf == "") {
break;
}
yield $buf;
break;
}
} while (true);
}
PD9waHAKZXJyb3JfcmVwb3J0aW5nKEVfQUxMKTsKIAokYWRkcmVzcyA9ICcxMjcuMC4wLjEnOwokcG9ydCA9IDEzMzc7Cgokc29jayA9IHNvY2tldEluaXQoJGFkZHJlc3MsICRwb3J0KTsKIApkbyB7CglpZiAoKCRtc2dzb2NrID0gc29ja2V0X2FjY2VwdCgkc29jaykpID09PSBmYWxzZSkgewoJCWVjaG8gItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMIHNvY2tldF9hY2NlcHQoKTog0L/RgNC40YfQuNC90LA6ICIgLiBzb2NrZXRfc3RyZXJyb3Ioc29ja2V0X2xhc3RfZXJyb3IoJHNvY2spKSAuICJcbiI7CiAgICAgICAgYnJlYWs7Cgl9CiAKCXNvY2tldFdyaXRlKCRtc2dzb2NrLCAiV2VsY29tZVxyXG5cclxuIik7CgoJJGJ1ZiA9ICcnOwogCglmb3JlYWNoIChyZWFkU29ja2V0KCRtc2dzb2NrKSBhcyAkYnVmZmVyKSB7CgkJJGJ1ZiAuPSAkYnVmZmVyOwoJfQoKCXNvY2tldFdyaXRlKCRtc2dzb2NrLCAkYnVmKTsKCglzb2NrZXRfY2xvc2UoJG1zZ3NvY2spOwp9IHdoaWxlICh0cnVlKTsKIApzb2NrZXRfY2xvc2UoJHNvY2spOwogCmZ1bmN0aW9uIHNvY2tldFdyaXRlKCRtc2dzb2NrLCAkYnVmZmVyKSB7CgkkbGVuZ3RoID0gc3RybGVuKCRidWZmZXIpOwogCgl3aGlsZSAoJGJ5dGVzU2VudCA9IHNvY2tldF93cml0ZSgkbXNnc29jaywgJGJ1ZmZlcikpIHsKCQlpZiAoJGJ5dGVzU2VudCA9PSAkbGVuZ3RoKSB7CgkJCWVjaG8gImFsbCBieXRlcyBoYXZlIGJlZW4gc2VudCBcbiI7CgkJCWJyZWFrOwoJCX0gZWxzZSB7CgkJCSRidWZmZXIgPSBzdWJzdHIoJGJ1ZmZlciwgJGJ5dGVzU2VudCk7CgkJfQoJfQogCglpZiAoJGJ5dGVzU2VudCA9PT0gZmFsc2UpIHsKCQllY2hvICLQndC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0Ywg0LTQsNC90L3Ri9C1INCyINGB0L7QutC10YIsINC/0YDQuNGH0LjQvdCwOiIgLiBzb2NrZXRfc3RyZXJyb3Ioc29ja2V0X2xhc3RfZXJyb3IoKSk7CgkJc29ja2V0X2Nsb3NlKCRtc2dzb2NrKTsKCX0KfQoKZnVuY3Rpb24gc29ja2V0SW5pdCgkYWRkcmVzcywgJHBvcnQpIHsKCWlmICgoJHNvY2sgPSBzb2NrZXRfY3JlYXRlKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBTT0xfVENQKSkgPT09IGZhbHNlKSB7CgkJZWNobyAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDRgdC+0LrQtdGCLCDQv9GA0LjRh9C40L3QsDogIiAuIHNvY2tldF9zdHJlcnJvcihzb2NrZXRfbGFzdF9lcnJvcigpKSAuICJcbiI7CgkJZGllOwoJfQoKCWlmIChzb2NrZXRfYmluZCgkc29jaywgJGFkZHJlc3MsICRwb3J0KSA9PT0gZmFsc2UpIHsKCQllY2hvICLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQuNCy0Y/Qt9Cw0YLRjCDRgdC+0LrQtdGCINC6INCw0LTRgNGA0LXRgdGDLCDQv9GA0LjRh9C40L3QsDogIiAuIHNvY2tldF9zdHJlcnJvcihzb2NrZXRfbGFzdF9lcnJvcigpKSAuICJcbiI7CgkJZGllOwoJfQoKCWlmIChzb2NrZXRfbGlzdGVuKCRzb2NrLCA1KSA9PT0gZmFsc2UpIHsKCQllY2hvICLQndC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCBzb2NrZXRfbGlzdGVuKCk6INC/0YDQuNGH0LjQvdCwOiAiIC4gc29ja2V0X3N0cmVycm9yKHNvY2tldF9sYXN0X2Vycm9yKCRzb2NrKSkgLiAiXG4iOwoJCWRpZTsKCX0KCglyZXR1cm4gJHNvY2s7Cn0KCmZ1bmN0aW9uIHJlYWRTb2NrZXQoJG1zZ3NvY2spIHsKCWRvIHsKCQlpZiAoZmFsc2UgPT09ICgkYnVmID0gc29ja2V0X3JlYWQoJG1zZ3NvY2ssIDIwNDgsIFBIUF9OT1JNQUxfUkVBRCkpKSB7CgkJCWVjaG8gItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINGB0L7QutC10YIsINC/0YDQuNGH0LjQvdCwOiAiIC4gc29ja2V0X3N0cmVycm9yKHNvY2tldF9sYXN0X2Vycm9yKCRtc2dzb2NrKSk7CgkJCWJyZWFrOwoJCX0KIAoJCSRidWYgPSB0cmltKCRidWYpOwogCgkJaWYgKCRidWYgPT0gIiIpIHsKCQkJYnJlYWs7CgkJfQoKCQl5aWVsZCAkYnVmOwoKCQlpZiAocHJlZ19tYXRjaCgnL1xuLycsICRidWYpKSB7CgkJCWJyZWFrOwoJCX0KCgl9IHdoaWxlICh0cnVlKTsKfQ==