Fixes for BINKP, we were sending too many EOB's
This commit is contained in:
parent
029ec9c209
commit
5516b5dc23
@ -254,11 +254,11 @@ final class Receive extends Item
|
|||||||
&& (Storage::disk('local')->size($this->local_path($ao)) === $this->size))
|
&& (Storage::disk('local')->size($this->local_path($ao)) === $this->size))
|
||||||
{
|
{
|
||||||
Log::alert(sprintf('%s:- File already exists - skipping [%s]', self::LOGKEY, $this->file));
|
Log::alert(sprintf('%s:- File already exists - skipping [%s]', self::LOGKEY, $this->file));
|
||||||
return Protocol::FOP_SKIP;
|
return Protocol::FOP_GOT;
|
||||||
|
|
||||||
} elseif (file_exists($this->file) && (Storage::disk('local')->size($this->local_path($ao)) > 0)) {
|
} elseif (file_exists($this->file) && (Storage::disk('local')->size($this->local_path($ao)) > 0)) {
|
||||||
Log::alert(sprintf('%s:- File exists with different details - skipping [%s]',self::LOGKEY,$this->file));
|
Log::alert(sprintf('%s:- File exists with different details - skipping [%s]',self::LOGKEY,$this->file));
|
||||||
return Protocol::FOP_SUSPEND;
|
return Protocol::FOP_SKIP;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// @todo I dont think we are enabling resumable sessions - need to check
|
// @todo I dont think we are enabling resumable sessions - need to check
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
namespace App\Classes\Protocol;
|
namespace App\Classes\Protocol;
|
||||||
|
|
||||||
use App\Exceptions\FileGrewException;
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
@ -13,6 +12,7 @@ use App\Classes\Crypt;
|
|||||||
use App\Classes\Protocol as BaseProtocol;
|
use App\Classes\Protocol as BaseProtocol;
|
||||||
use App\Classes\Sock\SocketClient;
|
use App\Classes\Sock\SocketClient;
|
||||||
use App\Classes\Sock\SocketException;
|
use App\Classes\Sock\SocketException;
|
||||||
|
use App\Exceptions\FileGrewException;
|
||||||
use App\Models\Address;
|
use App\Models\Address;
|
||||||
|
|
||||||
final class Binkp extends BaseProtocol
|
final class Binkp extends BaseProtocol
|
||||||
@ -247,7 +247,7 @@ final class Binkp extends BaseProtocol
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// No dupes mode is preferred on BINKP 1.1
|
// No dupes mode is preferred on BINKP 1.1
|
||||||
if ($this->capGet(self::F_NODUPE,self::O_WE) || ($this->originate && $this->capGet(self::F_NOREL,self::O_WANT) && $this->node->get_versionint() > 100)) {
|
if ($this->capGet(self::F_NODUPE,self::O_WE) || ($this->originate && $this->capGet(self::F_NOREL,self::O_WANT) && $this->node->get_versionint() > 101)) {
|
||||||
Log::debug(sprintf('%s:/ NR mode enabled, because we are in NDA mode, or I want NDA and the remote is version [%d]',self::LOGKEY,$this->node->get_versionint()));
|
Log::debug(sprintf('%s:/ NR mode enabled, because we are in NDA mode, or I want NDA and the remote is version [%d]',self::LOGKEY,$this->node->get_versionint()));
|
||||||
$this->capSet(self::F_NOREL,self::O_YES);
|
$this->capSet(self::F_NOREL,self::O_YES);
|
||||||
}
|
}
|
||||||
@ -264,14 +264,14 @@ final class Binkp extends BaseProtocol
|
|||||||
self::LOGKEY,
|
self::LOGKEY,
|
||||||
$this->node->ver_major,
|
$this->node->ver_major,
|
||||||
$this->node->ver_minor,
|
$this->node->ver_minor,
|
||||||
$this->capGet(self::F_NOREL,0xFF),
|
$this->capGet(self::F_NOREL,self::O_WE),
|
||||||
$this->capGet(self::F_NODUPE,0xFF),
|
$this->capGet(self::F_NODUPE,self::O_WE),
|
||||||
$this->capGet(self::F_NODUPEA,0xFF),
|
$this->capGet(self::F_NODUPEA,self::O_WE),
|
||||||
$this->capGet(self::F_MD,0xFF),
|
$this->capGet(self::F_MD,self::O_WE),
|
||||||
$this->capGet(self::F_MULTIBATCH,0xFF),
|
$this->capGet(self::F_MULTIBATCH,self::O_WE),
|
||||||
$this->capGet(self::F_CRYPT,0xFF),
|
$this->capGet(self::F_CRYPT,self::O_WE),
|
||||||
$this->capGet(self::F_COMP,0xFF),
|
$this->capGet(self::F_COMP,self::O_WE),
|
||||||
$this->capGet(self::F_CHAT,0xFF),
|
$this->capGet(self::F_CHAT,self::O_WE),
|
||||||
));
|
));
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -555,8 +555,6 @@ final class Binkp extends BaseProtocol
|
|||||||
}
|
}
|
||||||
|
|
||||||
} elseif ($this->sessionGet(self::SE_SENDFILE) && $this->send->fd && (! $this->sessionGet(self::SE_WAITGET))) {
|
} elseif ($this->sessionGet(self::SE_SENDFILE) && $this->send->fd && (! $this->sessionGet(self::SE_WAITGET))) {
|
||||||
$data = '';
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$buf = $this->send->read(self::BLOCKSIZE);
|
$buf = $this->send->read(self::BLOCKSIZE);
|
||||||
|
|
||||||
@ -799,6 +797,7 @@ final class Binkp extends BaseProtocol
|
|||||||
$this->sessionSet(self::SE_RECVEOB);
|
$this->sessionSet(self::SE_RECVEOB);
|
||||||
$this->sessionClear(self::SE_DELAYEOB);
|
$this->sessionClear(self::SE_DELAYEOB);
|
||||||
|
|
||||||
|
// @todo Is this multibatch mode, if so we should check that MB hasn been agreed.
|
||||||
if (! $this->send->total_count && $this->sessionGet(self::SE_NOFILES)) {
|
if (! $this->send->total_count && $this->sessionGet(self::SE_NOFILES)) {
|
||||||
// Add our mail to the queue if we have authenticated
|
// Add our mail to the queue if we have authenticated
|
||||||
if ($this->node->aka_authed)
|
if ($this->node->aka_authed)
|
||||||
@ -836,7 +835,7 @@ final class Binkp extends BaseProtocol
|
|||||||
{
|
{
|
||||||
Log::info(sprintf('%s:+ About to receive a file [%s]',self::LOGKEY,$buf));
|
Log::info(sprintf('%s:+ About to receive a file [%s]',self::LOGKEY,$buf));
|
||||||
|
|
||||||
if ($this->sessionGet(self::SE_SENTEOB|self::SE_RECVEOB))
|
if ($this->sessionGet(self::SE_SENTEOB) && $this->sessionGet(self::SE_RECVEOB))
|
||||||
$this->sessionClear(self::SE_SENTEOB);
|
$this->sessionClear(self::SE_SENTEOB);
|
||||||
|
|
||||||
$this->sessionClear(self::SE_RECVEOB);
|
$this->sessionClear(self::SE_RECVEOB);
|
||||||
@ -898,13 +897,14 @@ final class Binkp extends BaseProtocol
|
|||||||
|
|
||||||
case self::FOP_OK:
|
case self::FOP_OK:
|
||||||
Log::debug(sprintf('%s:- Getting file from offset [%ld]',self::LOGKEY,$file['offs']));
|
Log::debug(sprintf('%s:- Getting file from offset [%ld]',self::LOGKEY,$file['offs']));
|
||||||
//$this->msgs(self::BPM_GET,sprintf('%s %ld',$this->recv->name_size_time,($file['offs'] < 0) ? 0 : $file['offs']));
|
|
||||||
|
|
||||||
if (((int)$file['offs'] === -1) && (! $this->capGet(self::F_NOREL,self::O_THEY))) {
|
if (((int)$file['offs'] === -1) && (! $this->capGet(self::F_NOREL,self::O_THEY))) {
|
||||||
Log::debug(sprintf('%s:- Assuming the remote wants NR mode, since offset is [%d] and they didnt specify an OPT with it',self::LOGKEY,$file['offs']));
|
Log::debug(sprintf('%s:- Assuming the remote wants NR mode, since offset is [%d] and they didnt specify an OPT with it',self::LOGKEY,$file['offs']));
|
||||||
$this->capSet(self::F_NOREL,self::O_THEY);
|
$this->capSet(self::F_NOREL,self::O_THEY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($this->capGet(self::F_NOREL,self::O_YES))
|
||||||
|
$this->msgs(self::BPM_GET,sprintf('%s %ld',$this->recv->name_size_time,($file['offs'] < 0) ? 0 : $file['offs']));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1302,7 +1302,12 @@ final class Binkp extends BaseProtocol
|
|||||||
if ($this->DEBUG)
|
if ($this->DEBUG)
|
||||||
Log::debug(sprintf('%s: - protocol_session LOOP',self::LOGKEY));
|
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))
|
||||||
|
&& (! $this->sessionGet(self::SE_SENDFILE))
|
||||||
|
&& (! $this->sessionGet(self::SE_SENTEOB))
|
||||||
|
&& (! $this->sessionGet(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)
|
||||||
$this->send->open();
|
$this->send->open();
|
||||||
@ -1312,7 +1317,7 @@ final class Binkp extends BaseProtocol
|
|||||||
$this->sessionSet(self::SE_SENDFILE);
|
$this->sessionSet(self::SE_SENDFILE);
|
||||||
|
|
||||||
// NR mode, we wait for an M_GET before sending
|
// NR mode, we wait for an M_GET before sending
|
||||||
if ($this->capGet(self::F_NOREL,self::O_WE)) {
|
if ($this->capGet(self::F_NOREL,self::O_YES)) {
|
||||||
$this->sessionSet(self::SE_WAITGET);
|
$this->sessionSet(self::SE_WAITGET);
|
||||||
|
|
||||||
Log::debug(sprintf('%s:- NR mode, waiting for M_GET',self::LOGKEY));
|
Log::debug(sprintf('%s:- NR mode, waiting for M_GET',self::LOGKEY));
|
||||||
@ -1334,7 +1339,12 @@ final class Binkp extends BaseProtocol
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! $this->sessionGet(self::SE_INIT|self::SE_WAITGOT|self::SE_SENTEOB|self::SE_DELAYEOB) && $this->sessionGet(self::SE_NOFILES)) {
|
if ((! $this->sessionGet(self::SE_INIT))
|
||||||
|
&& (! $this->sessionGet(self::SE_WAITGOT))
|
||||||
|
&& (! $this->sessionGet(self::SE_SENTEOB))
|
||||||
|
&& (! $this->sessionGet(self::SE_DELAYEOB))
|
||||||
|
&& $this->sessionGet(self::SE_NOFILES))
|
||||||
|
{
|
||||||
$this->msgs(self::BPM_EOB,'');
|
$this->msgs(self::BPM_EOB,'');
|
||||||
$this->sessionSet(self::SE_SENTEOB);
|
$this->sessionSet(self::SE_SENTEOB);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user