Skip to content

Commit c09fc79

Browse files
committed
Merge branch 'grpc-1.4.5' of github.com:grpc/grpc-swift into grpc-1.4.5
2 parents 379e2d7 + f1023f7 commit c09fc79

File tree

10 files changed

+62
-28
lines changed

10 files changed

+62
-28
lines changed

Sources/CgRPC/include/CgRPC.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@ void grpc_init();
109109
void grpc_shutdown();
110110
const char *grpc_version_string();
111111

112+
// helper
113+
void cgrpc_free_copied_string(const char *string);
114+
112115
// channel support
113116
cgrpc_channel *cgrpc_channel_create(const char *address);
114117
cgrpc_channel *cgrpc_channel_create_secure(const char *address,
@@ -147,8 +150,8 @@ cgrpc_completion_queue *cgrpc_handler_get_completion_queue(cgrpc_handler *h);
147150
grpc_call_error cgrpc_handler_request_call(cgrpc_handler *h,
148151
cgrpc_metadata_array *metadata,
149152
long tag);
150-
const char *cgrpc_handler_host(cgrpc_handler *h);
151-
const char *cgrpc_handler_method(cgrpc_handler *h);
153+
const char *cgrpc_handler_copy_host(cgrpc_handler *h);
154+
const char *cgrpc_handler_copy_method(cgrpc_handler *h);
152155
const char *cgrpc_handler_call_peer(cgrpc_handler *h);
153156

154157
// call support
@@ -167,7 +170,6 @@ void cgrpc_metadata_array_destroy(cgrpc_metadata_array *array);
167170
size_t cgrpc_metadata_array_get_count(cgrpc_metadata_array *array);
168171
const char *cgrpc_metadata_array_copy_key_at_index(cgrpc_metadata_array *array, size_t index);
169172
const char *cgrpc_metadata_array_copy_value_at_index(cgrpc_metadata_array *array, size_t index);
170-
void cgrpc_metadata_free_copied_string(const char *string);
171173
void cgrpc_metadata_array_move_metadata(cgrpc_metadata_array *dest, cgrpc_metadata_array *src);
172174
void cgrpc_metadata_array_append_metadata(cgrpc_metadata_array *metadata, const char *key, const char *value);
173175

@@ -234,7 +236,7 @@ cgrpc_metadata_array *cgrpc_observer_recv_status_on_client_get_metadata
234236
long cgrpc_observer_recv_status_on_client_get_status
235237
(cgrpc_observer_recv_status_on_client *observer);
236238

237-
const char *cgrpc_observer_recv_status_on_client_get_status_details
239+
const char *cgrpc_observer_recv_status_on_client_copy_status_details
238240
(cgrpc_observer_recv_status_on_client *observer);
239241

240242
// GRPC_OP_RECV_CLOSE_ON_SERVER

Sources/CgRPC/shim/cgrpc.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@ void grpc_init();
109109
void grpc_shutdown();
110110
const char *grpc_version_string();
111111

112+
// helper
113+
void cgrpc_free_copied_string(const char *string);
114+
112115
// channel support
113116
cgrpc_channel *cgrpc_channel_create(const char *address);
114117
cgrpc_channel *cgrpc_channel_create_secure(const char *address,
@@ -147,8 +150,8 @@ cgrpc_completion_queue *cgrpc_handler_get_completion_queue(cgrpc_handler *h);
147150
grpc_call_error cgrpc_handler_request_call(cgrpc_handler *h,
148151
cgrpc_metadata_array *metadata,
149152
long tag);
150-
const char *cgrpc_handler_host(cgrpc_handler *h);
151-
const char *cgrpc_handler_method(cgrpc_handler *h);
153+
const char *cgrpc_handler_copy_host(cgrpc_handler *h);
154+
const char *cgrpc_handler_copy_method(cgrpc_handler *h);
152155
const char *cgrpc_handler_call_peer(cgrpc_handler *h);
153156

154157
// call support
@@ -167,7 +170,6 @@ void cgrpc_metadata_array_destroy(cgrpc_metadata_array *array);
167170
size_t cgrpc_metadata_array_get_count(cgrpc_metadata_array *array);
168171
const char *cgrpc_metadata_array_copy_key_at_index(cgrpc_metadata_array *array, size_t index);
169172
const char *cgrpc_metadata_array_copy_value_at_index(cgrpc_metadata_array *array, size_t index);
170-
void cgrpc_metadata_free_copied_string(const char *string);
171173
void cgrpc_metadata_array_move_metadata(cgrpc_metadata_array *dest, cgrpc_metadata_array *src);
172174
void cgrpc_metadata_array_append_metadata(cgrpc_metadata_array *metadata, const char *key, const char *value);
173175

@@ -234,7 +236,7 @@ cgrpc_metadata_array *cgrpc_observer_recv_status_on_client_get_metadata
234236
long cgrpc_observer_recv_status_on_client_get_status
235237
(cgrpc_observer_recv_status_on_client *observer);
236238

237-
const char *cgrpc_observer_recv_status_on_client_get_status_details
239+
const char *cgrpc_observer_recv_status_on_client_copy_status_details
238240
(cgrpc_observer_recv_status_on_client *observer);
239241

240242
// GRPC_OP_RECV_CLOSE_ON_SERVER

Sources/CgRPC/shim/handler.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,20 @@ void cgrpc_handler_destroy(cgrpc_handler *h) {
4343
free(h);
4444
}
4545

46-
const char *cgrpc_handler_host(cgrpc_handler *h) {
47-
return (const char *) GRPC_SLICE_START_PTR(h->call_details.host);
46+
const char *cgrpc_handler_copy_host(cgrpc_handler *h) {
47+
int length = GRPC_SLICE_LENGTH(h->call_details.host);
48+
char *str = (char *) malloc(length + 1);
49+
memcpy(str, GRPC_SLICE_START_PTR(h->call_details.host), length);
50+
str[length] = 0;
51+
return str;
4852
}
4953

50-
const char *cgrpc_handler_method(cgrpc_handler *h) {
51-
return (const char *) GRPC_SLICE_START_PTR(h->call_details.method);
54+
const char *cgrpc_handler_copy_method(cgrpc_handler *h) {
55+
int length = GRPC_SLICE_LENGTH(h->call_details.method);
56+
char *str = (char *) malloc(length + 1);
57+
memcpy(str, GRPC_SLICE_START_PTR(h->call_details.method), length);
58+
str[length] = 0;
59+
return str;
5260
}
5361

5462
const char *cgrpc_handler_call_peer(cgrpc_handler *h) {

Sources/CgRPC/shim/internal.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,7 @@ gpr_timespec cgrpc_deadline_in_seconds_from_now(float seconds) {
2525
return gpr_time_add(gpr_now(GPR_CLOCK_MONOTONIC),
2626
gpr_time_from_millis((int64_t)(1e3 * seconds), GPR_TIMESPAN));
2727
}
28+
29+
void cgrpc_free_copied_string(const char *string) {
30+
free(string);
31+
}

Sources/CgRPC/shim/metadata.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,6 @@ const char *cgrpc_metadata_array_copy_value_at_index(cgrpc_metadata_array *array
4949
return str;
5050
}
5151

52-
void cgrpc_metadata_free_copied_string(const char *string) {
53-
free(string);
54-
}
55-
5652
int cgrpc_metadata_array_get_value_length_at_index(cgrpc_metadata_array *array, size_t index) {
5753
return GRPC_SLICE_LENGTH(array->metadata[index].value);
5854
/*

Sources/CgRPC/shim/observers.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -235,8 +235,12 @@ long cgrpc_observer_recv_status_on_client_get_status(cgrpc_observer_recv_status_
235235
return observer->server_status;
236236
}
237237

238-
const char *cgrpc_observer_recv_status_on_client_get_status_details(cgrpc_observer_recv_status_on_client *observer) {
239-
return (const char *) GRPC_SLICE_START_PTR(observer->server_details);
238+
const char *cgrpc_observer_recv_status_on_client_copy_status_details(cgrpc_observer_recv_status_on_client *observer) {
239+
int length = GRPC_SLICE_LENGTH(observer->server_details);
240+
char *str = (char *) malloc(length + 1);
241+
memcpy(str, GRPC_SLICE_START_PTR(observer->server_details), length);
242+
str[length] = 0;
243+
return str;
240244
}
241245

242246
int cgrpc_observer_recv_close_on_server_get_was_cancelled(cgrpc_observer_recv_close_on_server *observer) {

Sources/gRPC/Handler.swift

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,26 @@ public class Handler {
3838

3939
/// The host name sent with the request
4040
public lazy var host: String = {
41-
return String(cString:cgrpc_handler_host(self.underlyingHandler),
42-
encoding:.utf8)!;
41+
if let string = cgrpc_handler_copy_host(self.underlyingHandler) {
42+
defer {
43+
cgrpc_free_copied_string(string);
44+
}
45+
return String(cString:string, encoding:.utf8)!;
46+
} else {
47+
return ""
48+
}
4349
}()
4450

4551
/// The method name sent with the request
4652
public lazy var method: String = {
47-
return String(cString:cgrpc_handler_method(self.underlyingHandler),
48-
encoding:.utf8)!;
53+
if let string = cgrpc_handler_copy_method(self.underlyingHandler) {
54+
defer {
55+
cgrpc_free_copied_string(string);
56+
}
57+
return String(cString:string, encoding:.utf8)!;
58+
} else {
59+
return ""
60+
}
4961
}()
5062

5163
/// The caller address associated with the request

Sources/gRPC/Metadata.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public class Metadata : CustomStringConvertible, NSCopying {
7373
public func key(_ index: Int) -> (String) {
7474
if let string = cgrpc_metadata_array_copy_key_at_index(underlyingArray, index) {
7575
defer {
76-
cgrpc_metadata_free_copied_string(string)
76+
cgrpc_free_copied_string(string)
7777
}
7878
if let key = String(cString:string, encoding:String.Encoding.utf8) {
7979
return key
@@ -85,7 +85,7 @@ public class Metadata : CustomStringConvertible, NSCopying {
8585
public func value(_ index: Int) -> (String) {
8686
if let string = cgrpc_metadata_array_copy_value_at_index(underlyingArray, index) {
8787
defer {
88-
cgrpc_metadata_free_copied_string(string)
88+
cgrpc_free_copied_string(string)
8989
}
9090
if let value = String(cString:string, encoding:String.Encoding.utf8) {
9191
return value

Sources/gRPC/OperationGroup.swift

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,8 +165,14 @@ internal class OperationGroup {
165165
for (i, operation) in operations.enumerated() {
166166
switch (operation) {
167167
case .receiveStatusOnClient:
168-
return String(cString:cgrpc_observer_recv_status_on_client_get_status_details(underlyingObservers[i]),
169-
encoding:String.Encoding.utf8)!
168+
if let string = cgrpc_observer_recv_status_on_client_copy_status_details(underlyingObservers[i]) {
169+
defer {
170+
cgrpc_free_copied_string(string);
171+
}
172+
return String(cString:string, encoding:String.Encoding.utf8)!
173+
} else {
174+
return nil
175+
}
170176
default:
171177
continue
172178
}

Tests/gRPCTests/GRPCTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
}
6363
}
6464

65-
let address = "localhost:8998"
65+
let address = "localhost:8081"
6666
let host = "foo.test.google.fr"
6767
let clientText = "hello, server!"
6868
let serverText = "hello, client!"
@@ -78,7 +78,7 @@
7878
["0": "zero",
7979
"1": "one",
8080
"2": "two"]
81-
let steps = 1
81+
let steps = 10
8282
let hello = "/hello"
8383
let statusCode = 0
8484
let statusMessage = "OK"

0 commit comments

Comments
 (0)