static void parse_provider_key()

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);

}