in agent/src/c/src/fsof_main.c [125:175]
static void parse_provider_key(struct String_vector *list,const char *path) {
int i ;
struct fsof_message message = {0};
char url_encode_data[URL_ENCODE_BUF_LEN] = {0};
int nlen = 0;
int service_len = 0;
int provider_index = 0;
char *provider_str = NULL;
//get service key
provider_str = strstr(path,PROVIDER_NAME);
provider_index = provider_str - path;
service_len = provider_index - sizeof(FSOF_ROOT_NAME);
if (service_len <= 0) {
return;
}
message.key = malloc(service_len + 1);
assert(message.key);
memcpy(message.key,path + sizeof(FSOF_ROOT_NAME),service_len);
message.key[service_len] = '\0';
if (list->count > 0) {
message.value = malloc(sizeof(char*) * list->count);
assert(message.value);
memset(message.value,0,sizeof(char*) * list->count);
int val_index = 0;
for (i = 0; i < list->count; i++) {
memcpy(url_encode_data,list->data[i],strlen(list->data[i]));
nlen = fsof_url_decode(url_encode_data,strlen(url_encode_data));
fsof_log_info(INFO,"key: %s,value: %s,nlen is %d\n",message.key,url_encode_data,nlen);
message.value[val_index] = malloc(nlen + 1);
assert(message.value[val_index]);
strcpy(message.value[val_index],url_encode_data);
message.value[val_index][nlen] = '\0';
val_index++;
memset(url_encode_data,0,URL_ENCODE_BUF_LEN);
}
message.count = val_index;
}else {
fsof_log_info(INFO,"parse key child is zero,need to delete redis key %s\n",path);
//means delete provider key
message.count = 0;
}
fsof_mq_push(g_message_queue,&message);
}