Fix SocketClient checking for more data, now that we buffer received data
This commit is contained in:
parent
ade5f07e37
commit
b41d65a8fd
@ -309,9 +309,10 @@ final class Binkp extends BaseProtocol
|
|||||||
if ($this->DEBUG)
|
if ($this->DEBUG)
|
||||||
Log::debug(sprintf('%s:+ binkp_recv',self::LOGKEY));
|
Log::debug(sprintf('%s:+ binkp_recv',self::LOGKEY));
|
||||||
|
|
||||||
$blksz = $this->rx_size == -1 ? BinkpMessage::BLK_HDR_SIZE : $this->rx_size;
|
$blksz = $this->rx_size === -1 ? BinkpMessage::BLK_HDR_SIZE : $this->rx_size;
|
||||||
|
|
||||||
if ($this->DEBUG)
|
if ($this->DEBUG)
|
||||||
Log::debug(sprintf('%s: - binkp_recv blksize [%d] rx_size [%d].',self::LOGKEY,$blksz,$this->rx_size));
|
Log::debug(sprintf('%s: - binkp_recv blksize [%d] rx_size [%d] rx_ptr (%d).',self::LOGKEY,$blksz,$this->rx_size,$this->rx_ptr));
|
||||||
|
|
||||||
if ($blksz !== 0) {
|
if ($blksz !== 0) {
|
||||||
try {
|
try {
|
||||||
@ -333,7 +334,7 @@ final class Binkp extends BaseProtocol
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strlen($this->rx_buf) == 0) {
|
if (strlen($this->rx_buf) === 0) {
|
||||||
// @todo Check that this is correct.
|
// @todo Check that this is correct.
|
||||||
Log::debug(sprintf('%s: - binkp_recv Was the socket closed by the remote?',self::LOGKEY));
|
Log::debug(sprintf('%s: - binkp_recv Was the socket closed by the remote?',self::LOGKEY));
|
||||||
$this->error = -2;
|
$this->error = -2;
|
||||||
@ -354,7 +355,7 @@ final class Binkp extends BaseProtocol
|
|||||||
Log::debug(sprintf('%s: - binkp_recv rx_ptr [%d] blksz [%d].',self::LOGKEY,$this->rx_ptr,$blksz));
|
Log::debug(sprintf('%s: - binkp_recv rx_ptr [%d] blksz [%d].',self::LOGKEY,$this->rx_ptr,$blksz));
|
||||||
|
|
||||||
/* Received complete block */
|
/* Received complete block */
|
||||||
if ($this->rx_ptr == $blksz) {
|
if ($this->rx_ptr === $blksz) {
|
||||||
/* Header */
|
/* Header */
|
||||||
if ($this->rx_size == -1 ) {
|
if ($this->rx_size == -1 ) {
|
||||||
$this->is_msg = ord(substr($this->rx_buf,0,1)) >> 7;
|
$this->is_msg = ord(substr($this->rx_buf,0,1)) >> 7;
|
||||||
@ -498,7 +499,7 @@ final class Binkp extends BaseProtocol
|
|||||||
if ($this->DEBUG)
|
if ($this->DEBUG)
|
||||||
Log::debug(sprintf('%s:+ binkp_send - tx_left [%d]',self::LOGKEY,$this->tx_left));
|
Log::debug(sprintf('%s:+ binkp_send - tx_left [%d]',self::LOGKEY,$this->tx_left));
|
||||||
|
|
||||||
if ($this->tx_left == 0 ) { /* tx buffer is empty */
|
if ($this->tx_left === 0 ) { /* tx buffer is empty */
|
||||||
$this->tx_ptr = $this->tx_left = 0;
|
$this->tx_ptr = $this->tx_left = 0;
|
||||||
|
|
||||||
if ($this->DEBUG)
|
if ($this->DEBUG)
|
||||||
@ -550,8 +551,14 @@ final class Binkp extends BaseProtocol
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
|
if ($this->DEBUG)
|
||||||
|
Log::debug(sprintf('%s:+ sending - tx_ptr [%d] tx_buf [%d]',self::LOGKEY,$this->tx_ptr,strlen($this->tx_buf)));
|
||||||
|
|
||||||
$rc = $this->client->send(substr($this->tx_buf,$this->tx_ptr,$this->tx_left),self::BP_TIMEOUT);
|
$rc = $this->client->send(substr($this->tx_buf,$this->tx_ptr,$this->tx_left),self::BP_TIMEOUT);
|
||||||
|
|
||||||
|
if ($this->DEBUG)
|
||||||
|
Log::debug(sprintf('%s:+ sent [%d]',self::LOGKEY,$rc));
|
||||||
|
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
if ($e->getCode() == 11)
|
if ($e->getCode() == 11)
|
||||||
return 1;
|
return 1;
|
||||||
@ -1214,6 +1221,9 @@ final class Binkp extends BaseProtocol
|
|||||||
$this->binkp_hs();
|
$this->binkp_hs();
|
||||||
|
|
||||||
while (TRUE) {
|
while (TRUE) {
|
||||||
|
if ($this->DEBUG)
|
||||||
|
Log::debug(sprintf('%s: - protocol_session LOOP',self::LOGKEY));
|
||||||
|
|
||||||
if (! $this->sessionGet(self::SE_INIT|self::SE_SENDFILE|self::SE_SENTEOB|self::SE_NOFILES) && ! $this->send->fd) {
|
if (! $this->sessionGet(self::SE_INIT|self::SE_SENDFILE|self::SE_SENTEOB|self::SE_NOFILES) && ! $this->send->fd) {
|
||||||
// Open our next file to send
|
// Open our next file to send
|
||||||
if ($this->send->total_count && ! $this->send->fd)
|
if ($this->send->total_count && ! $this->send->fd)
|
||||||
@ -1261,9 +1271,15 @@ final class Binkp extends BaseProtocol
|
|||||||
$rd = TRUE;
|
$rd = TRUE;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
if ($this->DEBUG)
|
||||||
|
Log::debug(sprintf('%s: - Checking if there more data (ttySelect), timeout [%d]',self::LOGKEY,self::BP_TIMEOUT));
|
||||||
|
|
||||||
// @todo we need to catch a timeout if there are no reads/writes
|
// @todo we need to catch a timeout if there are no reads/writes
|
||||||
$rc = $this->client->ttySelect($rd,$wd,self::BP_TIMEOUT);
|
$rc = $this->client->ttySelect($rd,$wd,self::BP_TIMEOUT);
|
||||||
|
|
||||||
|
if ($this->DEBUG)
|
||||||
|
Log::debug(sprintf('%s: - ttySelect returned [%d]',self::LOGKEY,$rc));
|
||||||
|
|
||||||
} catch (Exception) {
|
} catch (Exception) {
|
||||||
$this->error_close();
|
$this->error_close();
|
||||||
$this->error = -2;
|
$this->error = -2;
|
||||||
|
@ -502,7 +502,7 @@ final class SocketClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* See if we there is data waiting to collect, or if we can send
|
* See if there is data waiting to collect, or if we can send
|
||||||
*
|
*
|
||||||
* @param bool $read
|
* @param bool $read
|
||||||
* @param bool $write
|
* @param bool $write
|
||||||
@ -512,6 +512,9 @@ final class SocketClient {
|
|||||||
*/
|
*/
|
||||||
public function ttySelect(bool $read,bool $write, int $timeout): int
|
public function ttySelect(bool $read,bool $write, int $timeout): int
|
||||||
{
|
{
|
||||||
|
if (strlen($this->rx_buf) && ($this->rx_left))
|
||||||
|
return 1;
|
||||||
|
|
||||||
$read = $read ? [$this->connection] : NULL;
|
$read = $read ? [$this->connection] : NULL;
|
||||||
$write = $write ? [$this->connection] : NULL;
|
$write = $write ? [$this->connection] : NULL;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user