Browse Source

Language protocol: fixed header parsing when partial header was received

merge-requests/389/head
eidheim 8 years ago
parent
commit
672e08c05f
  1. 8
      src/source_language_protocol.cc

8
src/source_language_protocol.cc

@ -134,6 +134,9 @@ void LanguageProtocol::Client::close(Source::LanguageProtocolView *view) {
void LanguageProtocol::Client::parse_server_message() { void LanguageProtocol::Client::parse_server_message() {
if(!header_read) { if(!header_read) {
server_message_size=static_cast<size_t>(-1);
auto header_pos=server_message_stream.tellg();
std::string line; std::string line;
while(!header_read && std::getline(server_message_stream, line)) { while(!header_read && std::getline(server_message_stream, line)) {
if(!line.empty()) { if(!line.empty()) {
@ -146,12 +149,15 @@ void LanguageProtocol::Client::parse_server_message() {
catch(...) {} catch(...) {}
} }
} }
if(line.empty()) { if(line.empty() && server_message_size!=static_cast<size_t>(-1)) {
server_message_content_pos=server_message_stream.tellg(); server_message_content_pos=server_message_stream.tellg();
server_message_size+=server_message_content_pos; server_message_size+=server_message_content_pos;
header_read=true; header_read=true;
} }
} }
if(!header_read)
server_message_stream.seekg(header_pos, std::ios::beg); // Could not read header, start again at next output
} }
if(header_read) { if(header_read) {

Loading…
Cancel
Save