mirror of https://github.com/grpc/grpc.git
commit
d04dc4da81
46 changed files with 565 additions and 243 deletions
@ -0,0 +1,54 @@ |
||||
/*
|
||||
* |
||||
* 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 "src/core/lib/channel/handshaker_factory.h" |
||||
|
||||
#include <grpc/support/log.h> |
||||
|
||||
void grpc_handshaker_factory_add_handshakers( |
||||
grpc_exec_ctx *exec_ctx, grpc_handshaker_factory *handshaker_factory, |
||||
const grpc_channel_args *args, grpc_handshake_manager *handshake_mgr) { |
||||
if (handshaker_factory != NULL) { |
||||
GPR_ASSERT(handshaker_factory->vtable != NULL); |
||||
handshaker_factory->vtable->add_handshakers(exec_ctx, handshaker_factory, |
||||
args, handshake_mgr); |
||||
} |
||||
} |
||||
|
||||
void grpc_handshaker_factory_destroy( |
||||
grpc_exec_ctx *exec_ctx, grpc_handshaker_factory *handshaker_factory) { |
||||
if (handshaker_factory != NULL) { |
||||
GPR_ASSERT(handshaker_factory->vtable != NULL); |
||||
handshaker_factory->vtable->destroy(exec_ctx, handshaker_factory); |
||||
} |
||||
} |
@ -0,0 +1,66 @@ |
||||
/*
|
||||
* |
||||
* 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. |
||||
* |
||||
*/ |
||||
|
||||
#ifndef GRPC_CORE_LIB_CHANNEL_HANDSHAKER_FACTORY_H |
||||
#define GRPC_CORE_LIB_CHANNEL_HANDSHAKER_FACTORY_H |
||||
|
||||
#include <grpc/impl/codegen/grpc_types.h> |
||||
|
||||
#include "src/core/lib/channel/handshaker.h" |
||||
#include "src/core/lib/iomgr/exec_ctx.h" |
||||
|
||||
// A handshaker factory is used to create handshakers.
|
||||
|
||||
typedef struct grpc_handshaker_factory grpc_handshaker_factory; |
||||
|
||||
typedef struct { |
||||
void (*add_handshakers)(grpc_exec_ctx *exec_ctx, |
||||
grpc_handshaker_factory *handshaker_factory, |
||||
const grpc_channel_args *args, |
||||
grpc_handshake_manager *handshake_mgr); |
||||
void (*destroy)(grpc_exec_ctx *exec_ctx, |
||||
grpc_handshaker_factory *handshaker_factory); |
||||
} grpc_handshaker_factory_vtable; |
||||
|
||||
struct grpc_handshaker_factory { |
||||
const grpc_handshaker_factory_vtable *vtable; |
||||
}; |
||||
|
||||
void grpc_handshaker_factory_add_handshakers( |
||||
grpc_exec_ctx *exec_ctx, grpc_handshaker_factory *handshaker_factory, |
||||
const grpc_channel_args *args, grpc_handshake_manager *handshake_mgr); |
||||
|
||||
void grpc_handshaker_factory_destroy( |
||||
grpc_exec_ctx *exec_ctx, grpc_handshaker_factory *handshaker_factory); |
||||
|
||||
#endif /* GRPC_CORE_LIB_CHANNEL_HANDSHAKER_FACTORY_H */ |
@ -0,0 +1,113 @@ |
||||
/*
|
||||
* |
||||
* 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 "src/core/lib/channel/handshaker_registry.h" |
||||
|
||||
#include <string.h> |
||||
|
||||
#include <grpc/support/alloc.h> |
||||
|
||||
//
|
||||
// grpc_handshaker_factory_list
|
||||
//
|
||||
|
||||
typedef struct { |
||||
grpc_handshaker_factory** list; |
||||
size_t num_factories; |
||||
} grpc_handshaker_factory_list; |
||||
|
||||
static void grpc_handshaker_factory_list_register( |
||||
grpc_handshaker_factory_list* list, bool at_start, |
||||
grpc_handshaker_factory* factory) { |
||||
list->list = gpr_realloc( |
||||
list->list, (list->num_factories + 1) * sizeof(grpc_handshaker_factory*)); |
||||
if (at_start) { |
||||
memmove(list->list + 1, list->list, |
||||
sizeof(grpc_handshaker_factory*) * list->num_factories); |
||||
list->list[0] = factory; |
||||
} else { |
||||
list->list[list->num_factories] = factory; |
||||
} |
||||
++list->num_factories; |
||||
} |
||||
|
||||
static void grpc_handshaker_factory_list_add_handshakers( |
||||
grpc_exec_ctx* exec_ctx, grpc_handshaker_factory_list* list, |
||||
const grpc_channel_args* args, grpc_handshake_manager* handshake_mgr) { |
||||
for (size_t i = 0; i < list->num_factories; ++i) { |
||||
grpc_handshaker_factory_add_handshakers(exec_ctx, list->list[i], args, |
||||
handshake_mgr); |
||||
} |
||||
} |
||||
|
||||
static void grpc_handshaker_factory_list_destroy( |
||||
grpc_exec_ctx* exec_ctx, grpc_handshaker_factory_list* list) { |
||||
for (size_t i = 0; i < list->num_factories; ++i) { |
||||
grpc_handshaker_factory_destroy(exec_ctx, list->list[i]); |
||||
} |
||||
gpr_free(list->list); |
||||
} |
||||
|
||||
//
|
||||
// plugin
|
||||
//
|
||||
|
||||
static grpc_handshaker_factory_list |
||||
g_handshaker_factory_lists[NUM_HANDSHAKER_TYPES]; |
||||
|
||||
void grpc_handshaker_factory_registry_init() { |
||||
memset(g_handshaker_factory_lists, 0, sizeof(g_handshaker_factory_lists)); |
||||
} |
||||
|
||||
void grpc_handshaker_factory_registry_shutdown(grpc_exec_ctx* exec_ctx) { |
||||
for (size_t i = 0; i < NUM_HANDSHAKER_TYPES; ++i) { |
||||
grpc_handshaker_factory_list_destroy(exec_ctx, |
||||
&g_handshaker_factory_lists[i]); |
||||
} |
||||
} |
||||
|
||||
void grpc_handshaker_factory_register(bool at_start, |
||||
grpc_handshaker_type handshaker_type, |
||||
grpc_handshaker_factory* factory) { |
||||
grpc_handshaker_factory_list_register( |
||||
&g_handshaker_factory_lists[handshaker_type], at_start, factory); |
||||
} |
||||
|
||||
void grpc_handshakers_add(grpc_exec_ctx* exec_ctx, |
||||
grpc_handshaker_type handshaker_type, |
||||
const grpc_channel_args* args, |
||||
grpc_handshake_manager* handshake_mgr) { |
||||
grpc_handshaker_factory_list_add_handshakers( |
||||
exec_ctx, &g_handshaker_factory_lists[handshaker_type], args, |
||||
handshake_mgr); |
||||
} |
@ -0,0 +1,63 @@ |
||||
/*
|
||||
* |
||||
* 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. |
||||
* |
||||
*/ |
||||
|
||||
#ifndef GRPC_CORE_LIB_CHANNEL_HANDSHAKER_REGISTRY_H |
||||
#define GRPC_CORE_LIB_CHANNEL_HANDSHAKER_REGISTRY_H |
||||
|
||||
#include <grpc/impl/codegen/grpc_types.h> |
||||
|
||||
#include "src/core/lib/channel/handshaker_factory.h" |
||||
#include "src/core/lib/iomgr/exec_ctx.h" |
||||
|
||||
typedef enum { |
||||
HANDSHAKER_CLIENT = 0, |
||||
HANDSHAKER_SERVER, |
||||
NUM_HANDSHAKER_TYPES, // Must be last.
|
||||
} grpc_handshaker_type; |
||||
|
||||
void grpc_handshaker_factory_registry_init(); |
||||
void grpc_handshaker_factory_registry_shutdown(grpc_exec_ctx* exec_ctx); |
||||
|
||||
/// Registers a new handshaker factory. Takes ownership.
|
||||
/// If \a at_start is true, the new handshaker will be at the beginning of
|
||||
/// the list. Otherwise, it will be added to the end.
|
||||
void grpc_handshaker_factory_register(bool at_start, |
||||
grpc_handshaker_type handshaker_type, |
||||
grpc_handshaker_factory* factory); |
||||
|
||||
void grpc_handshakers_add(grpc_exec_ctx* exec_ctx, |
||||
grpc_handshaker_type handshaker_type, |
||||
const grpc_channel_args* args, |
||||
grpc_handshake_manager* handshake_mgr); |
||||
|
||||
#endif /* GRPC_CORE_LIB_CHANNEL_HANDSHAKER_REGISTRY_H */ |
@ -1,39 +0,0 @@ |
||||
@rem Copyright 2016, Google Inc. |
||||
@rem All rights reserved. |
||||
@rem |
||||
@rem Redistribution and use in source and binary forms, with or without |
||||
@rem modification, are permitted provided that the following conditions are |
||||
@rem met: |
||||
@rem |
||||
@rem * Redistributions of source code must retain the above copyright |
||||
@rem notice, this list of conditions and the following disclaimer. |
||||
@rem * Redistributions in binary form must reproduce the above |
||||
@rem copyright notice, this list of conditions and the following disclaimer |
||||
@rem in the documentation and/or other materials provided with the |
||||
@rem distribution. |
||||
@rem * Neither the name of Google Inc. nor the names of its |
||||
@rem contributors may be used to endorse or promote products derived from |
||||
@rem this software without specific prior written permission. |
||||
@rem |
||||
@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
|
||||
@rem Convenience wrapper that runs specified gRPC target using msbuild |
||||
@rem Usage: build_vs2010.bat TARGET_NAME |
||||
|
||||
setlocal |
||||
@rem Set VS variables (uses Visual Studio 2010) |
||||
@call "%VS100COMNTOOLS%\..\..\vc\vcvarsall.bat" x86 |
||||
|
||||
msbuild %* |
||||
exit /b %ERRORLEVEL% |
||||
endlocal |
Loading…
Reference in new issue