Mercurial > hg > piper-cpp
comparison vamp-client/CapnpRRClient.h @ 147:96488e9e9096
Report messages < 1 word as incomplete, and messages with crazily large estimated sizes as invalid
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Thu, 19 Jan 2017 10:48:45 +0000 |
parents | c4f841ccb208 |
children | 590b1a1fd955 |
comparison
equal
deleted
inserted
replaced
146:c4f841ccb208 | 147:96488e9e9096 |
---|---|
75 | 75 |
76 class CompletenessChecker : public MessageCompletenessChecker { | 76 class CompletenessChecker : public MessageCompletenessChecker { |
77 public: | 77 public: |
78 State check(const std::vector<char> &message) const override { | 78 State check(const std::vector<char> &message) const override { |
79 | 79 |
80 if (message.size() < sizeof(capnp::word)) { | |
81 return Incomplete; | |
82 } | |
83 | |
80 auto karr = toKJArray(message); | 84 auto karr = toKJArray(message); |
81 size_t words = karr.size(); | 85 size_t words = karr.size(); |
82 size_t expected = capnp::expectedSizeInWordsFromPrefix(karr); | 86 size_t expected = capnp::expectedSizeInWordsFromPrefix(karr); |
83 | 87 |
84 // Lacking a way to definitively check whether a message | 88 // Lacking a way to definitively check whether a message |
101 << expected << ")" << std::endl; | 105 << expected << ")" << std::endl; |
102 return Complete; | 106 return Complete; |
103 } else if (words == expected) { | 107 } else if (words == expected) { |
104 return Complete; | 108 return Complete; |
105 } else if (expected > limit) { | 109 } else if (expected > limit) { |
110 std::cerr << "WARNING: apparently invalid message prefix: have " | |
111 << words << " words in prefix, projected message size is " | |
112 << expected << " against limit of " << limit << std::endl; | |
106 return Invalid; | 113 return Invalid; |
107 } else { | 114 } else { |
108 return Incomplete; | 115 return Incomplete; |
109 } | 116 } |
110 } | 117 } |