mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 00:20:05 +00:00 
			
		
		
		
	Handle raw message content when istream is EOF
This commit is contained in:
		
							parent
							
								
									ad7f3674d6
								
							
						
					
					
						commit
						465507d6b5
					
				
					 1 changed files with 25 additions and 8 deletions
				
			
		|  | @ -164,16 +164,33 @@ bool TextProductMessage::Parse(std::istream& is) | |||
|    if (dataValid) | ||||
|    { | ||||
|       // Store raw message content
 | ||||
|       std::streampos  messageEnd  = is.tellg(); | ||||
|       std::streamsize messageSize = messageEnd - messageStart; | ||||
|       p->messageContent_.resize(messageEnd - messageStart); | ||||
|       is.seekg(messageStart); | ||||
|       if (is.peek() == common::Characters::SOH) | ||||
|       if (is.good()) | ||||
|       { | ||||
|          is.seekg(std::streamoff {1}, std::ios_base::cur); | ||||
|          messageSize--; | ||||
|          // Read content equal to the message size
 | ||||
|          std::streampos  messageEnd  = is.tellg(); | ||||
|          std::streamsize messageSize = messageEnd - messageStart; | ||||
|          p->messageContent_.resize(messageEnd - messageStart); | ||||
|          is.seekg(messageStart); | ||||
|          if (is.peek() == common::Characters::SOH) | ||||
|          { | ||||
|             is.seekg(std::streamoff {1}, std::ios_base::cur); | ||||
|             messageSize--; | ||||
|          } | ||||
|          is.read(p->messageContent_.data(), messageSize); | ||||
|       } | ||||
|       else | ||||
|       { | ||||
|          // Read remaining content in the input stream
 | ||||
|          is.clear(); | ||||
|          is.seekg(messageStart); | ||||
|          if (is.peek() == common::Characters::SOH) | ||||
|          { | ||||
|             is.seekg(std::streamoff {1}, std::ios_base::cur); | ||||
|          } | ||||
| 
 | ||||
|          constexpr std::istreambuf_iterator<char> eos; | ||||
|          p->messageContent_ = {std::istreambuf_iterator<char>(is), eos}; | ||||
|       } | ||||
|       is.read(p->messageContent_.data(), messageSize); | ||||
| 
 | ||||
|       // Trim extra characters from raw message
 | ||||
|       while (p->messageContent_.size() > 0 && | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat