Commit f1018ee0 authored by Gonzalo Gomez's avatar Gonzalo Gomez
Browse files

message_stream will now return appropriate status if WriteMessage encountered...

message_stream will now return appropriate status if WriteMessage encountered an error. byte_stream now passes int* to appropriate method calls. outgoing_string_value must match interface
parent 0c4ee02b
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -36,7 +36,8 @@ PlainByteStream::PlainByteStream(int fd, IncomingValueFactoryInterface &value_fa

bool PlainByteStream::Read(void *buf, size_t n) {
    ReaderWriter reader_writer(fd_);
    return reader_writer.Read(buf, n);
    int err;
    return reader_writer.Read(buf, n, &err);
}

bool PlainByteStream::Write(const void *buf, size_t n) {
@@ -48,8 +49,8 @@ IncomingValueInterface *PlainByteStream::ReadValue(size_t n) {
    return value_factory_.NewValue(fd_, n);
}

bool PlainByteStream::WriteValue(const OutgoingValueInterface &value) {
    return value.TransferToSocket(fd_);
bool PlainByteStream::WriteValue(const OutgoingValueInterface &value, int* err) {
    return value.TransferToSocket(fd_, err);
}

SslByteStream::SslByteStream(SSL *ssl) : ssl_(ssl) {}
@@ -125,9 +126,9 @@ IncomingValueInterface *SslByteStream::ReadValue(size_t n) {
    return new IncomingStringValue(value);
}

bool SslByteStream::WriteValue(const OutgoingValueInterface &value) {
bool SslByteStream::WriteValue(const OutgoingValueInterface &value, int* err) {
    std::string s;
    if (!value.ToString(&s)) {
    if (!value.ToString(&s, err)) {
        return false;
    }
    return Write(s.data(), s.size());
+8 −8
Original line number Diff line number Diff line
@@ -77,32 +77,32 @@ MessageStream::MessageStreamReadStatus MessageStream::ReadMessage(
    return MessageStreamReadStatus_SUCCESS;
}

bool MessageStream::WriteMessage(const ::google::protobuf::Message &message,
        const OutgoingValueInterface& value) {
int MessageStream::WriteMessage(const ::google::protobuf::Message &message,
        const OutgoingValueInterface& value, int* err) {
    // First the header
    if (!WriteHeader(message.ByteSize(), value.size())) {
        LOG(WARNING) << "Failed to write header";
        return false;
        return 1;
    }

    // Now the message
    std::string message_string;
    if (!message.SerializeToString(&message_string)) {
        LOG(WARNING) << "Failed to serialize protocol buffer";
        return false;
        return 2;
    }
    if (!byte_stream_->Write(message_string.data(), message_string.size())) {
        LOG(WARNING) << "Failed to write message";
        return false;
        return 3;
    }

    // And finally the value if any
    if (!byte_stream_->WriteValue(value)) {
    if (!byte_stream_->WriteValue(value, err)) {
        LOG(WARNING) << "Failed to write value";
        return false;
        return 4;
    }

    return true;
    return 0;
}

MessageStreamFactory::MessageStreamFactory(SSL_CTX *ssl_context,
+2 −2
Original line number Diff line number Diff line
@@ -38,12 +38,12 @@ size_t OutgoingStringValue::size() const {
    return s_.size();
}

bool OutgoingStringValue::TransferToSocket(int fd) const {
bool OutgoingStringValue::TransferToSocket(int fd, int* err) const {
    ReaderWriter reader_writer(fd);
    return reader_writer.Write(s_.data(), s_.size());
}

bool OutgoingStringValue::ToString(std::string *result) const {
bool OutgoingStringValue::ToString(std::string *result, int* err) const {
    *result = s_;
    return true;
}