54 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			54 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#include <kinc/network/http.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#import <Foundation/Foundation.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void kinc_http_request(const char *url, const char *path, const char *data, int port, bool secure, int method, const char *header,
							 | 
						||
| 
								 | 
							
								                       kinc_http_callback_t callback, void *callbackdata) {
							 | 
						||
| 
								 | 
							
									NSString *urlstring = secure ? @"https://" : @"http://";
							 | 
						||
| 
								 | 
							
									urlstring = [urlstring stringByAppendingString:[NSString stringWithUTF8String:url]];
							 | 
						||
| 
								 | 
							
									urlstring = [urlstring stringByAppendingString:@":"];
							 | 
						||
| 
								 | 
							
									urlstring = [urlstring stringByAppendingString:[[NSNumber numberWithInt:port] stringValue]];
							 | 
						||
| 
								 | 
							
									urlstring = [urlstring stringByAppendingString:@"/"];
							 | 
						||
| 
								 | 
							
									urlstring = [urlstring stringByAppendingString:[NSString stringWithUTF8String:path]];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									NSURL *aUrl = [NSURL URLWithString:urlstring];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
							 | 
						||
| 
								 | 
							
									sessionConfiguration.HTTPAdditionalHeaders = @{@"Content-Type" : @"application/json"};
							 | 
						||
| 
								 | 
							
									NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration];
							 | 
						||
| 
								 | 
							
									NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:aUrl];
							 | 
						||
| 
								 | 
							
									if (data != 0) {
							 | 
						||
| 
								 | 
							
										// printf("Sending %s\n\n", data);
							 | 
						||
| 
								 | 
							
										NSString *datastring = [NSString stringWithUTF8String:data];
							 | 
						||
| 
								 | 
							
										request.HTTPBody = [datastring dataUsingEncoding:NSUTF8StringEncoding];
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									switch (method) {
							 | 
						||
| 
								 | 
							
									case KINC_HTTP_GET:
							 | 
						||
| 
								 | 
							
										request.HTTPMethod = @"GET";
							 | 
						||
| 
								 | 
							
										break;
							 | 
						||
| 
								 | 
							
									case KINC_HTTP_POST:
							 | 
						||
| 
								 | 
							
										request.HTTPMethod = @"POST";
							 | 
						||
| 
								 | 
							
										break;
							 | 
						||
| 
								 | 
							
									case KINC_HTTP_PUT:
							 | 
						||
| 
								 | 
							
										request.HTTPMethod = @"PUT";
							 | 
						||
| 
								 | 
							
										break;
							 | 
						||
| 
								 | 
							
									case KINC_HTTP_DELETE:
							 | 
						||
| 
								 | 
							
										request.HTTPMethod = @"DELETE";
							 | 
						||
| 
								 | 
							
										break;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
							 | 
						||
| 
								 | 
							
									                                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
							 | 
						||
| 
								 | 
							
										                                            NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
							 | 
						||
| 
								 | 
							
										                                            int statusCode = (int)[httpResponse statusCode];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										                                            NSMutableData *responseData = [[NSMutableData alloc] init];
							 | 
						||
| 
								 | 
							
										                                            [responseData appendData:data];
							 | 
						||
| 
								 | 
							
										                                            [responseData appendBytes:"\0" length:1];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										                                            callback(error == nil ? 0 : 1, statusCode, (const char *)[responseData bytes], callbackdata);
							 | 
						||
| 
								 | 
							
									                                            }];
							 | 
						||
| 
								 | 
							
									[dataTask resume];
							 | 
						||
| 
								 | 
							
								}
							 |