in Sources/Producer/LogProducerConfig.m [201:240]
void sls_ios_http_header_inject_func(log_producer_config *config, char **src_headers, int src_count, char **dest_headers, int *dest_count) {
NSMutableArray<NSString *> *headers = [NSMutableArray array];
for (int i = 0; i < src_count; i ++) {
char *kv = src_headers[i];
if (NULL == kv) {
continue;
}
char *eq = strchr(kv, ':');
if (NULL == eq || eq == kv || eq[1] == 0) {
continue;
}
*eq = 0;
[headers addObject:[NSString stringWithUTF8String:kv]];
[headers addObject:[NSString stringWithUTF8String:(eq+1)]];
}
LogProducerConfig *producer = (__bridge LogProducerConfig *)(config->user_params);
NSArray<NSString *> *injectedHeaders = producer->_injector(headers);
if(nil == injectedHeaders || injectedHeaders.count == 0) {
return;
}
NSUInteger count = injectedHeaders.count / 2;
for (int i = 0; i < count; i ++) {
const char *key = [[injectedHeaders objectAtIndex:2*i] UTF8String];
const char *value = [[injectedHeaders objectAtIndex:2*i+1] UTF8String];
unsigned long len = strlen(key) + strlen(value) + strlen(":") + 1;
// dynamic alloc 'len' of char* for reduce mem cost
char *kv = (char *) malloc(sizeof(char) * len);
memset(kv, 0, sizeof(char) * len);
strcat(kv, key);
strcat(kv, ":");
strcat(kv, value);
dest_headers[i] = kv;
(*dest_count)++;
}
}