Fix done state for WebSocket reads

This commit is contained in:
Vinnie Falco
2017-08-15 12:49:02 -07:00
parent aabd33a677
commit a435dde2a3
2 changed files with 192 additions and 182 deletions

View File

@@ -1,3 +1,11 @@
Version 107:
WebSocket
* Fix done state for WebSocket reads
--------------------------------------------------------------------------------
Version 106:
* Dynamic buffer input areas are mutable

View File

@@ -346,11 +346,12 @@ operator()(
// Empty non-final frame
goto loop;
}
ws_.rd_.done = ws_.rd_.remain == 0 && ws_.rd_.fh.fin;
if(ws_.rd_.done)
goto upcall; // Empty final frame
ws_.rd_.done = false;
}
if(! ws_.pmd_ || ! ws_.pmd_->rd_set)
{
// Check for empty final frame
if(ws_.rd_.remain > 0 || ! ws_.rd_.fh.fin)
{
if(ws_.rd_.buf.size() == 0 && ws_.rd_.buf.max_size() >
(std::min)(clamp(ws_.rd_.remain),
@@ -431,8 +432,8 @@ operator()(
bytes_written_ += bytes_transferred;
ws_.rd_.size += bytes_transferred;
}
ws_.rd_.done =
ws_.rd_.remain == 0 && ws_.rd_.fh.fin;
}
ws_.rd_.done = ws_.rd_.remain == 0 && ws_.rd_.fh.fin;
goto upcall;
}
else
@@ -1033,15 +1034,16 @@ loop:
// Empty non-final frame
goto loop;
}
rd_.done = rd_.remain == 0 && rd_.fh.fin;
rd_.done = false;
}
else
{
ec.assign(0, ec.category());
}
if( ! rd_.done)
{
if(! pmd_ || ! pmd_->rd_set)
{
// Check for empty final frame
if(rd_.remain > 0 || ! rd_.fh.fin)
{
if(rd_.buf.size() == 0 && rd_.buf.max_size() >
(std::min)(clamp(rd_.remain),
@@ -1122,6 +1124,7 @@ loop:
bytes_written += bytes_transferred;
rd_.size += bytes_transferred;
}
}
rd_.done = rd_.remain == 0 && rd_.fh.fin;
}
else
@@ -1250,7 +1253,6 @@ loop:
}
}
}
}
return bytes_written;
}