|
14 | 14 |
|
15 | 15 | static std::string toCppString(NSData *data) |
16 | 16 | { |
17 | | - return std::string((const char*) [data bytes], (size_t) [data length]); |
| 17 | + return std::string((const char*) data.bytes, (size_t) data.length); |
18 | 18 | } |
19 | 19 |
|
20 | 20 | static std::string toCppString(NSString *str) |
|
23 | 23 | } |
24 | 24 |
|
25 | 25 | HTTPSClient::Reply NSURLClient::request(const HTTPSClient::Request &req) |
26 | | -{ |
27 | | - NSURL *url = [NSURL URLWithString: toNSString(req.url)]; |
28 | | - NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: url]; |
| 26 | +{ @autoreleasepool { |
| 27 | + NSURL *url = [NSURL URLWithString:toNSString(req.url)]; |
| 28 | + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; |
29 | 29 |
|
30 | 30 | switch(req.method) |
31 | 31 | { |
32 | 32 | case Request::GET: |
33 | | - [request setHTTPMethod: @"GET"]; |
| 33 | + [request setHTTPMethod:@"GET"]; |
34 | 34 | break; |
35 | 35 | case Request::POST: |
36 | | - [request setHTTPMethod: @"POST"]; |
37 | | - [request setHTTPBody: [NSData dataWithBytesNoCopy: (void*) req.postdata.data() length: req.postdata.size()]]; |
| 36 | + [request setHTTPMethod:@"POST"]; |
| 37 | + [request setHTTPBody:[NSData dataWithBytesNoCopy:(void*) req.postdata.data() length:req.postdata.size()]]; |
38 | 38 | break; |
39 | 39 | } |
40 | 40 |
|
41 | 41 | for (auto &header : req.headers) |
42 | 42 | [request setValue: toNSString(header.second) forHTTPHeaderField: toNSString(header.first)]; |
43 | 43 |
|
44 | | - NSHTTPURLResponse *response = nil; |
45 | | - NSError *error = nil; |
46 | | - NSData *body = [NSURLConnection sendSynchronousRequest: request returningResponse: &response error: &error]; |
| 44 | + __block NSHTTPURLResponse *response = nil; |
| 45 | + __block NSError *error = nil; |
| 46 | + __block NSData *body = nil; |
| 47 | + |
| 48 | + dispatch_semaphore_t sem = dispatch_semaphore_create(0); |
| 49 | + |
| 50 | + NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request |
| 51 | + completionHandler:^(NSData *data, NSURLResponse *resp, NSError *err) { |
| 52 | + body = data; |
| 53 | + response = (NSHTTPURLResponse *)resp; |
| 54 | + error = err; |
| 55 | + dispatch_semaphore_signal(sem); |
| 56 | + }]; |
| 57 | + |
| 58 | + [task resume]; |
| 59 | + |
| 60 | + dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER); |
47 | 61 |
|
48 | 62 | HTTPSClient::Reply reply; |
49 | 63 | reply.responseCode = 400; |
|
66 | 80 | } |
67 | 81 |
|
68 | 82 | return reply; |
69 | | -} |
| 83 | +} } |
0 commit comments