mirror of https://github.com/grpc/grpc.git
commit
4d736a024c
184 changed files with 12710 additions and 12029 deletions
@ -0,0 +1,53 @@ |
||||
# How to contribute |
||||
|
||||
We definitely welcome patches and contribution to grpc! Here is some guideline |
||||
and information about how to do so. |
||||
|
||||
## Getting started |
||||
|
||||
### Legal requirements |
||||
|
||||
In order to protect both you and ourselves, you will need to sign the |
||||
[Contributor License Agreement](https://cla.developers.google.com/clas). |
||||
|
||||
### Technical requirements |
||||
|
||||
You will need several tools to work with this repository. In addition to all of |
||||
the packages described in the [INSTALL](INSTALL) file, you will also need |
||||
python, and the mako template renderer. To install the latter, using pip, one |
||||
should simply be able to do `pip install mako`. |
||||
|
||||
In order to run all of the tests we provide, you will need valgrind and clang. |
||||
More specifically, under debian, you will need the package libc++-dev to |
||||
properly run all the tests. |
||||
|
||||
If you are planning to work on any of the languages other than C and C++, you |
||||
will also need their appropriate development environments. |
||||
|
||||
If you want to work under Windows, we recommend you to use Visual Studio 2013. |
||||
The [Community or Express editions](http://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx) |
||||
are free and suitable for developing with grpc. Note however that our test |
||||
environment and tools are available for Unix environments only at the moment. |
||||
|
||||
## Testing your changes |
||||
|
||||
We provide a tool to help you run our suite of tests in various environments. |
||||
In order to run most of the available tests, one would need to run: |
||||
|
||||
`./tools/run_tests/run_tests.py` |
||||
|
||||
If you want to run all the possible tests for all possible languages, do this: |
||||
|
||||
`./tools/run_tests/run_tests.py -lall -call` |
||||
|
||||
## Adding or removing source code |
||||
|
||||
Each language uses its own build system to work. Currently, the root's Makefile |
||||
and the Visual Studio project files are building the C and C++ source code only |
||||
at the moment. In order to ease the maintenance of these files, we have a |
||||
template system. Please do not contribute manual changes to any of the generated |
||||
files. Instead, modify the template files, or the build.json file, and |
||||
re-generate the project files using the following command: |
||||
|
||||
`./tools/buildgen/generate_projects.sh` |
||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,110 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2015, 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/debug/trace.h" |
||||
|
||||
#include <string.h> |
||||
|
||||
#include <grpc/support/alloc.h> |
||||
#include <grpc/support/log.h> |
||||
#include "src/core/support/env.h" |
||||
|
||||
#if GRPC_ENABLE_TRACING |
||||
gpr_uint32 grpc_trace_bits = 0; |
||||
|
||||
static void add(const char *beg, const char *end, char ***ss, size_t *ns) { |
||||
size_t n = *ns; |
||||
size_t np = n + 1; |
||||
char *s = gpr_malloc(end - beg + 1); |
||||
memcpy(s, beg, end - beg); |
||||
s[end-beg] = 0; |
||||
*ss = gpr_realloc(*ss, sizeof(char**) * np); |
||||
(*ss)[n] = s; |
||||
*ns = np; |
||||
} |
||||
|
||||
static void split(const char *s, char ***ss, size_t *ns) { |
||||
const char *c = strchr(s, ','); |
||||
if (c == NULL) { |
||||
add(s, s + strlen(s), ss, ns); |
||||
} else { |
||||
add(s, c, ss, ns); |
||||
split(c+1, ss, ns); |
||||
} |
||||
} |
||||
|
||||
static void parse(const char *s) { |
||||
char **strings = NULL; |
||||
size_t nstrings = 0; |
||||
size_t i; |
||||
split(s, &strings, &nstrings); |
||||
|
||||
grpc_trace_bits = 0; |
||||
|
||||
for (i = 0; i < nstrings; i++) { |
||||
const char *s = strings[i]; |
||||
if (0 == strcmp(s, "surface")) { |
||||
grpc_trace_bits |= GRPC_TRACE_SURFACE; |
||||
} else if (0 == strcmp(s, "channel")) { |
||||
grpc_trace_bits |= GRPC_TRACE_CHANNEL; |
||||
} else if (0 == strcmp(s, "tcp")) { |
||||
grpc_trace_bits |= GRPC_TRACE_TCP; |
||||
} else if (0 == strcmp(s, "secure_endpoint")) { |
||||
grpc_trace_bits |= GRPC_TRACE_SECURE_ENDPOINT; |
||||
} else if (0 == strcmp(s, "all")) { |
||||
grpc_trace_bits = -1; |
||||
} else { |
||||
gpr_log(GPR_ERROR, "Unknown trace var: '%s'", s); |
||||
} |
||||
} |
||||
|
||||
for (i = 0; i < nstrings; i++) { |
||||
gpr_free(strings[i]); |
||||
} |
||||
gpr_free(strings); |
||||
} |
||||
|
||||
void grpc_init_trace_bits() { |
||||
char *e = gpr_getenv("GRPC_TRACE"); |
||||
if (e == NULL) { |
||||
grpc_trace_bits = 0; |
||||
} else { |
||||
parse(e); |
||||
gpr_free(e); |
||||
} |
||||
} |
||||
#else |
||||
void grpc_init_trace_bits() { |
||||
} |
||||
#endif |
||||
|
@ -0,0 +1,166 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2015, 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/support/port_platform.h> |
||||
#ifdef GPR_WINSOCK_SOCKET |
||||
|
||||
#include "src/core/iomgr/sockaddr.h" |
||||
#include "src/core/iomgr/resolve_address.h" |
||||
|
||||
#include <sys/types.h> |
||||
#include <string.h> |
||||
|
||||
#include "src/core/iomgr/iomgr_internal.h" |
||||
#include "src/core/iomgr/sockaddr_utils.h" |
||||
#include "src/core/support/string.h" |
||||
#include <grpc/support/alloc.h> |
||||
#include <grpc/support/host_port.h> |
||||
#include <grpc/support/log.h> |
||||
#include <grpc/support/thd.h> |
||||
#include <grpc/support/time.h> |
||||
|
||||
typedef struct { |
||||
char *name; |
||||
char *default_port; |
||||
grpc_resolve_cb cb; |
||||
void *arg; |
||||
} request; |
||||
|
||||
grpc_resolved_addresses *grpc_blocking_resolve_address( |
||||
const char *name, const char *default_port) { |
||||
struct addrinfo hints; |
||||
struct addrinfo *result = NULL, *resp; |
||||
char *host; |
||||
char *port; |
||||
int s; |
||||
size_t i; |
||||
grpc_resolved_addresses *addrs = NULL; |
||||
const gpr_timespec start_time = gpr_now(); |
||||
|
||||
/* parse name, splitting it into host and port parts */ |
||||
gpr_split_host_port(name, &host, &port); |
||||
if (host == NULL) { |
||||
gpr_log(GPR_ERROR, "unparseable host:port: '%s'", name); |
||||
goto done; |
||||
} |
||||
if (port == NULL) { |
||||
if (default_port == NULL) { |
||||
gpr_log(GPR_ERROR, "no port in name '%s'", name); |
||||
goto done; |
||||
} |
||||
port = gpr_strdup(default_port); |
||||
} |
||||
|
||||
/* Call getaddrinfo */ |
||||
memset(&hints, 0, sizeof(hints)); |
||||
hints.ai_family = AF_UNSPEC; /* ipv4 or ipv6 */ |
||||
hints.ai_socktype = SOCK_STREAM; /* stream socket */ |
||||
hints.ai_flags = AI_PASSIVE; /* for wildcard IP address */ |
||||
|
||||
s = getaddrinfo(host, port, &hints, &result); |
||||
if (s != 0) { |
||||
gpr_log(GPR_ERROR, "getaddrinfo: %s", gai_strerror(s)); |
||||
goto done; |
||||
} |
||||
|
||||
/* Success path: set addrs non-NULL, fill it in */ |
||||
addrs = gpr_malloc(sizeof(grpc_resolved_addresses)); |
||||
addrs->naddrs = 0; |
||||
for (resp = result; resp != NULL; resp = resp->ai_next) { |
||||
addrs->naddrs++; |
||||
} |
||||
addrs->addrs = gpr_malloc(sizeof(grpc_resolved_address) * addrs->naddrs); |
||||
i = 0; |
||||
for (resp = result; resp != NULL; resp = resp->ai_next) { |
||||
memcpy(&addrs->addrs[i].addr, resp->ai_addr, resp->ai_addrlen); |
||||
addrs->addrs[i].len = resp->ai_addrlen; |
||||
i++; |
||||
} |
||||
|
||||
/* Temporary logging, to help identify flakiness in dualstack_socket_test. */ |
||||
{ |
||||
const gpr_timespec delay = gpr_time_sub(gpr_now(), start_time); |
||||
const int delay_ms = |
||||
delay.tv_sec * GPR_MS_PER_SEC + delay.tv_nsec / GPR_NS_PER_MS; |
||||
gpr_log(GPR_INFO, "logspam: getaddrinfo(%s, %s) resolved %d addrs in %dms:", |
||||
host, port, addrs->naddrs, delay_ms); |
||||
for (i = 0; i < addrs->naddrs; i++) { |
||||
char *buf; |
||||
grpc_sockaddr_to_string(&buf, (struct sockaddr *)&addrs->addrs[i].addr, |
||||
0); |
||||
gpr_log(GPR_INFO, "logspam: [%d] %s", i, buf); |
||||
gpr_free(buf); |
||||
} |
||||
} |
||||
|
||||
done: |
||||
gpr_free(host); |
||||
gpr_free(port); |
||||
if (result) { |
||||
freeaddrinfo(result); |
||||
} |
||||
return addrs; |
||||
} |
||||
|
||||
/* Thread function to asynch-ify grpc_blocking_resolve_address */ |
||||
static void do_request(void *rp) { |
||||
request *r = rp; |
||||
grpc_resolved_addresses *resolved = |
||||
grpc_blocking_resolve_address(r->name, r->default_port); |
||||
void *arg = r->arg; |
||||
grpc_resolve_cb cb = r->cb; |
||||
gpr_free(r->name); |
||||
gpr_free(r->default_port); |
||||
gpr_free(r); |
||||
cb(arg, resolved); |
||||
grpc_iomgr_unref(); |
||||
} |
||||
|
||||
void grpc_resolved_addresses_destroy(grpc_resolved_addresses *addrs) { |
||||
gpr_free(addrs->addrs); |
||||
gpr_free(addrs); |
||||
} |
||||
|
||||
void grpc_resolve_address(const char *name, const char *default_port, |
||||
grpc_resolve_cb cb, void *arg) { |
||||
request *r = gpr_malloc(sizeof(request)); |
||||
gpr_thd_id id; |
||||
grpc_iomgr_ref(); |
||||
r->name = gpr_strdup(name); |
||||
r->default_port = gpr_strdup(default_port); |
||||
r->cb = cb; |
||||
r->arg = arg; |
||||
gpr_thd_new(&id, do_request, r, NULL); |
||||
} |
||||
|
||||
#endif |
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1 @@ |
||||
gRPC C# is work-in-progress and is not intended to be used. See README. |
@ -0,0 +1,23 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<package > |
||||
<metadata> |
||||
<id>Grpc.Core</id> |
||||
<title>gRPC Core</title> |
||||
<summary>Core C# implementation of gRPC - an RPC library and framework</summary> |
||||
<description>Core C# implementation of gRPC - an RPC library and framework. See project site for more info. |
||||
This is an experimental release, not ready to use. |
||||
</description> |
||||
<version>0.1.0</version> |
||||
<authors>Google Inc.</authors> |
||||
<owners>jtattermusch</owners> |
||||
<licenseUrl>https://github.com/grpc/grpc/blob/master/LICENSE</licenseUrl> |
||||
<projectUrl>https://github.com/grpc/grpc</projectUrl> |
||||
<requireLicenseAcceptance>false</requireLicenseAcceptance> |
||||
<releaseNotes>The first experimental release. Not ready to use.</releaseNotes> |
||||
<copyright>Copyright 2015, Google Inc.</copyright> |
||||
<tags>gRPC RPC Protocol HTTP/2</tags> |
||||
</metadata> |
||||
<files> |
||||
<file src="bin/Release/Grpc.Core.dll" target="lib/net45" /> |
||||
</files> |
||||
</package> |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue