Skip to content

Commit

Permalink
compiles!
Browse files Browse the repository at this point in the history
  • Loading branch information
dgquintas committed Mar 8, 2016
1 parent e1ce31e commit 8c3d994
Show file tree
Hide file tree
Showing 20 changed files with 289 additions and 96 deletions.
2 changes: 2 additions & 0 deletions BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -824,6 +824,7 @@ cc_library(
"src/cpp/util/byte_buffer.cc",
"src/cpp/util/slice.cc",
"src/cpp/util/status.cc",
"src/cpp/util/string_ref.cc",
"src/cpp/util/time.cc",
],
hdrs = [
Expand Down Expand Up @@ -914,6 +915,7 @@ cc_library(
"src/cpp/util/byte_buffer.cc",
"src/cpp/util/slice.cc",
"src/cpp/util/status.cc",
"src/cpp/util/string_ref.cc",
"src/cpp/util/time.cc",
],
hdrs = [
Expand Down
3 changes: 3 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3042,6 +3042,7 @@ LIBGRPC++_SRC = \
src/cpp/util/byte_buffer.cc \
src/cpp/util/slice.cc \
src/cpp/util/status.cc \
src/cpp/util/string_ref.cc \
src/cpp/util/time.cc \

PUBLIC_HEADERS_CXX += \
Expand Down Expand Up @@ -3154,6 +3155,7 @@ endif


LIBGRPC++_CODEGEN_LIB_SRC = \
src/cpp/codegen/codegen_init.cc \

PUBLIC_HEADERS_CXX += \
include/grpc++/impl/codegen/async_stream.h \
Expand Down Expand Up @@ -3368,6 +3370,7 @@ LIBGRPC++_UNSECURE_SRC = \
src/cpp/util/byte_buffer.cc \
src/cpp/util/slice.cc \
src/cpp/util/status.cc \
src/cpp/util/string_ref.cc \
src/cpp/util/time.cc \

PUBLIC_HEADERS_CXX += \
Expand Down
4 changes: 3 additions & 1 deletion build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,7 @@ filegroups:
- src/cpp/util/byte_buffer.cc
- src/cpp/util/slice.cc
- src/cpp/util/status.cc
- src/cpp/util/string_ref.cc
- src/cpp/util/time.cc
- name: grpc_base
public_headers:
Expand Down Expand Up @@ -746,7 +747,8 @@ libs:
- include/grpc++/impl/codegen/sync_stream.h
- include/grpc++/impl/codegen/time.h
headers: []
src: []
src:
- src/cpp/codegen/codegen_init.cc
deps:
- grpc_codegen_lib
filegroups:
Expand Down
15 changes: 9 additions & 6 deletions include/grpc++/impl/codegen/core_codegen_interface.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@

namespace grpc {

class CoreCodegenInterface;

extern CoreCodegenInterface* g_core_codegen_interface;

class CoreCodegenInterface {
public:
virtual grpc_completion_queue* grpc_completion_queue_create(
Expand Down Expand Up @@ -74,12 +78,11 @@ class CoreCodegenInterface {
};

/* XXX */
#define GPR_CODEGEN_ASSERT(x) \
do { \
if (!(x)) { \
extern CoreCodegenInterface* g_core_codegen_interface; \
g_core_codegen_interface->assert_fail(#x); \
} \
#define GPR_CODEGEN_ASSERT(x) \
do { \
if (!(x)) { \
grpc::g_core_codegen_interface->assert_fail(#x); \
} \
} while (0)

} // namespace grpc
Expand Down
2 changes: 1 addition & 1 deletion include/grpc++/impl/codegen/string_ref.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ class string_ref {
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;

// constants
const static size_t npos = size_t(-1);
const static size_t npos;

// construct/copy.
string_ref() : data_(nullptr), length_(0) {}
Expand Down
8 changes: 7 additions & 1 deletion include/grpc++/impl/grpc_library.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@
#include <grpc++/impl/codegen/grpc_library.h>
#include <grpc/grpc.h>

#include "src/cpp/codegen/core_codegen.h"

namespace grpc {

namespace internal {
Expand All @@ -51,10 +53,14 @@ class GrpcLibrary GRPC_FINAL : public GrpcLibraryInterface {
};

static GrpcLibrary g_gli;
static CoreCodegen g_core_codegen;

class GrpcLibraryInitializer GRPC_FINAL {
public:
GrpcLibraryInitializer() { grpc::g_glip = &g_gli; }
GrpcLibraryInitializer() {
grpc::g_glip = &g_gli;
grpc::g_core_codegen_interface = &g_core_codegen;
}

/// A no-op method to force the linker to reference this class, which will
/// take care of initializing and shutting down the gRPC runtime.
Expand Down
38 changes: 38 additions & 0 deletions src/cpp/codegen/codegen_init.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/*
*
* Copyright 2016, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/

#include <grpc++/impl/codegen/core_codegen_interface.h>
#include <grpc++/impl/codegen/grpc_library.h>

grpc::CoreCodegenInterface *grpc::g_core_codegen_interface = nullptr;
grpc::GrpcLibraryInterface* grpc::g_glip = nullptr;
159 changes: 80 additions & 79 deletions src/cpp/codegen/core_codegen.cc
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,10 @@
*
*/

#include "src/cpp/codegen/core_codegen.h"

#include <stdlib.h>

#include <grpc++/impl/codegen/core_codegen_interface.h>
#include <grpc++/support/config.h>
#include <grpc/byte_buffer.h>
#include <grpc/byte_buffer_reader.h>
Expand All @@ -47,6 +48,8 @@

#include "src/core/profiling/timers.h"

grpc::CoreCodegenInterface* grpc::g_core_codegen_interface = nullptr;

namespace {

const int kGrpcBufferWriterMaxBufferLength = 8192;
Expand Down Expand Up @@ -167,86 +170,84 @@ class GrpcBufferReader GRPC_FINAL

namespace grpc {

class CoreCodegen : public CoreCodegenInterface {
private:
grpc_completion_queue* grpc_completion_queue_create(void* reserved) override {
return ::grpc_completion_queue_create(reserved);
}

void grpc_completion_queue_destroy(grpc_completion_queue* cq) override {
::grpc_completion_queue_destroy(cq);
}

grpc_event grpc_completion_queue_pluck(grpc_completion_queue* cq, void* tag,
gpr_timespec deadline,
void* reserved) override {
return ::grpc_completion_queue_pluck(cq, tag, deadline, reserved);
}

void* gpr_malloc(size_t size) override { return ::gpr_malloc(size); }

void gpr_free(void* p) override { return ::gpr_free(p); }

void grpc_byte_buffer_destroy(grpc_byte_buffer* bb) override {
::grpc_byte_buffer_destroy(bb);
}

void grpc_metadata_array_init(grpc_metadata_array* array) override {
::grpc_metadata_array_init(array);
}

void grpc_metadata_array_destroy(grpc_metadata_array* array) override {
::grpc_metadata_array_destroy(array);
}

void assert_fail(const char* failed_assertion) override {
gpr_log(GPR_ERROR, "assertion failed: %s", failed_assertion);
abort();
}

Status SerializeProto(const grpc::protobuf::Message& msg,
grpc_byte_buffer** bp) override {
GPR_TIMER_SCOPE("SerializeProto", 0);
int byte_size = msg.ByteSize();
if (byte_size <= kGrpcBufferWriterMaxBufferLength) {
gpr_slice slice = gpr_slice_malloc(byte_size);
GPR_ASSERT(
GPR_SLICE_END_PTR(slice) ==
msg.SerializeWithCachedSizesToArray(GPR_SLICE_START_PTR(slice)));
*bp = grpc_raw_byte_buffer_create(&slice, 1);
gpr_slice_unref(slice);
return Status::OK;
} else {
GrpcBufferWriter writer(bp, kGrpcBufferWriterMaxBufferLength);
return msg.SerializeToZeroCopyStream(&writer)
? Status::OK
: Status(StatusCode::INTERNAL, "Failed to serialize message");
}
grpc_completion_queue* CoreCodegen::grpc_completion_queue_create(
void* reserved) {
return ::grpc_completion_queue_create(reserved);
}

void CoreCodegen::grpc_completion_queue_destroy(grpc_completion_queue* cq) {
::grpc_completion_queue_destroy(cq);
}

grpc_event CoreCodegen::grpc_completion_queue_pluck(grpc_completion_queue* cq,
void* tag,
gpr_timespec deadline,
void* reserved) {
return ::grpc_completion_queue_pluck(cq, tag, deadline, reserved);
}

void* CoreCodegen::gpr_malloc(size_t size) { return ::gpr_malloc(size); }

void CoreCodegen::gpr_free(void* p) { return ::gpr_free(p); }

void CoreCodegen::grpc_byte_buffer_destroy(grpc_byte_buffer* bb) {
::grpc_byte_buffer_destroy(bb);
}

void CoreCodegen::grpc_metadata_array_init(grpc_metadata_array* array) {
::grpc_metadata_array_init(array);
}

void CoreCodegen::grpc_metadata_array_destroy(grpc_metadata_array* array) {
::grpc_metadata_array_destroy(array);
}

void CoreCodegen::assert_fail(const char* failed_assertion) {
gpr_log(GPR_ERROR, "assertion failed: %s", failed_assertion);
abort();
}

Status CoreCodegen::SerializeProto(const grpc::protobuf::Message& msg,
grpc_byte_buffer** bp) {
GPR_TIMER_SCOPE("SerializeProto", 0);
int byte_size = msg.ByteSize();
if (byte_size <= kGrpcBufferWriterMaxBufferLength) {
gpr_slice slice = gpr_slice_malloc(byte_size);
GPR_ASSERT(GPR_SLICE_END_PTR(slice) ==
msg.SerializeWithCachedSizesToArray(GPR_SLICE_START_PTR(slice)));
*bp = grpc_raw_byte_buffer_create(&slice, 1);
gpr_slice_unref(slice);
return Status::OK;
} else {
GrpcBufferWriter writer(bp, kGrpcBufferWriterMaxBufferLength);
return msg.SerializeToZeroCopyStream(&writer)
? Status::OK
: Status(StatusCode::INTERNAL, "Failed to serialize message");
}
}

Status CoreCodegen::DeserializeProto(grpc_byte_buffer* buffer,
grpc::protobuf::Message* msg,
int max_message_size) {
GPR_TIMER_SCOPE("DeserializeProto", 0);
if (buffer == nullptr) {
return Status(StatusCode::INTERNAL, "No payload");
}
GrpcBufferReader reader(buffer);
::grpc::protobuf::io::CodedInputStream decoder(&reader);
if (max_message_size > 0) {
decoder.SetTotalBytesLimit(max_message_size, max_message_size);
}
if (!msg->ParseFromCodedStream(&decoder)) {
grpc_byte_buffer_destroy(buffer);
return Status(StatusCode::INTERNAL, msg->InitializationErrorString());
}

Status DeserializeProto(grpc_byte_buffer* buffer,
grpc::protobuf::Message* msg,
int max_message_size) override {
GPR_TIMER_SCOPE("DeserializeProto", 0);
if (buffer == nullptr) {
return Status(StatusCode::INTERNAL, "No payload");
}
GrpcBufferReader reader(buffer);
::grpc::protobuf::io::CodedInputStream decoder(&reader);
if (max_message_size > 0) {
decoder.SetTotalBytesLimit(max_message_size, max_message_size);
}
if (!msg->ParseFromCodedStream(&decoder)) {
grpc_byte_buffer_destroy(buffer);
return Status(StatusCode::INTERNAL, msg->InitializationErrorString());
}
if (!decoder.ConsumedEntireMessage()) {
grpc_byte_buffer_destroy(buffer);
return Status(StatusCode::INTERNAL, "Did not read entire message");
}
if (!decoder.ConsumedEntireMessage()) {
grpc_byte_buffer_destroy(buffer);
return Status::OK;
return Status(StatusCode::INTERNAL, "Did not read entire message");
}
};
grpc_byte_buffer_destroy(buffer);
return Status::OK;
}

} // namespace grpc
Loading

0 comments on commit 8c3d994

Please sign in to comment.