in Sources/Producer/LogProducerConfig.m [33:127]
static int os_http_post(const char *url,
char **header_array,
int header_count,
const void *data,
int data_len,
post_log_result *http_response)
{
size_t request_id_len = sizeof(char) * 256;
http_response->requestID = (char*) malloc(request_id_len);
memset(http_response->requestID, 0, request_id_len);
size_t error_message_len = sizeof(char) * 256;
http_response->errorMessage = (char*) malloc(error_message_len);
memset(http_response->errorMessage, 0, error_message_len);
if(url == NULL || *url == 0 || header_array == NULL || header_count < 1 || data == NULL || data_len <= 0) {
http_response->statusCode = 400;
strcpy(http_response->requestID, "");
strcpy(http_response->errorMessage, "request is incorrect");
return 400; // bad request
}
NSString *urlString = [NSString stringWithUTF8String:url];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setHTTPMethod:@"POST"];
[request setURL:[NSURL URLWithString:urlString]];
// set headers
for(int i=0; i<header_count; i++) {
char *kv = header_array[i];
if(kv != NULL) {
char *eq = strchr(kv, ':');
if(eq != NULL && eq != kv && eq[1] != 0) {
*eq = 0;
[request addValue:[NSString stringWithUTF8String:eq+1] forHTTPHeaderField:[NSString stringWithUTF8String:kv]];
*eq = '='; // restore
}
}
}
// set body
NSData *postData = [NSData dataWithBytes:data length:data_len];
[request setHTTPBody:postData];
// send
NSError *error = nil;
NSHTTPURLResponse *response = nil;
NSData *resData = [SLSURLSession sendSynchronousRequest:request
returningResponse:&response
error:&error
];
if(response != nil){
int responseCode = (int)[response statusCode];
http_response->statusCode = responseCode;
NSDictionary *fields = [response allHeaderFields];
NSString *timeVal = fields[@"x-log-time"];
if ([timeVal length] != 0) {
NSInteger serverTime = [timeVal integerValue];
if (serverTime > 1500000000 && serverTime < 4294967294) {
[TimeUtils updateServerTime:serverTime];
}
}
if (responseCode != 200) {
NSString *res = [[NSString alloc] initWithData:resData encoding:NSUTF8StringEncoding];
strncpy(http_response->requestID, res.length > 0 ? [res UTF8String] : "", request_id_len);
SLSLog(@"%ld %@ %@", [response statusCode], [response allHeaderFields], res);
} else {
NSString *requestId = fields[@"x-log-requestid"];
strncpy(http_response->requestID, requestId.length > 0 ? [requestId UTF8String] : "", request_id_len);
}
return responseCode;
} else {
http_response->statusCode = -1;
strcpy(http_response->requestID, "");
if(error != nil){
NSString *errorMessage = [NSString stringWithFormat:@"domain: %@, code: %ld, description: %@", error.domain, (long)error.code, error.localizedDescription];
SLSLog(@"os_http_post error: %@", errorMessage);
strncpy(http_response->errorMessage, [errorMessage UTF8String], error_message_len);
if (error.code == kCFURLErrorUserCancelledAuthentication) {
return 401;
}
if (error.code == kCFURLErrorBadServerResponse) {
return 500;
}
}
return -1;
}
}