void AudioPlayer::db_default_item_list_get_cb(bool success, vector<string> result, void *data)
{
    PlayerInfoData *user_data = reinterpret_cast<PlayerInfoData *>(data);
    if (!user_data) return; //Probably leaking here !

    if (result.size() < 4) return;

    list<Params> infos;
    Params item;
    int cpt = 0;

    for (uint b = 4;b < result.size();b++)
    {
        string tmp = result[b];
        vector<string> tk;
        split(tmp, tk, ":", 2);
        if (tk.size() != 2) continue;

        if (tk[0] == "id")
        {
            if (cpt > 0) infos.push_back(item);
            item.clear();
            cpt++;
        }

        item.Add(tk[0], url_decode2(tk[1]));
    }

    if (item.size() > 0) infos.push_back(item);

    PlayerInfoList_signal sig;
    sig.connect(user_data->callback_list);
    sig.emit(infos);

    delete user_data;
}
	char* temphand_url_decodeToken(pool* p,void* config,char* src){
		return url_decode2(p,src);
	}
Beispiel #3
0
Buffer *
link_list_panel(Buffer *buf)
{
    LinkList *l;
    AnchorList *al;
    Anchor *a;
    FormItemList *fi;
    int i;
    char *t, *u, *p;
    ParsedURL pu;
    /* FIXME: gettextize? */
    Str tmp = Strnew_charp("<title>Link List</title>\
<h1 align=center>Link List</h1>\n");

    if (buf->bufferprop & BP_INTERNAL ||
	(buf->linklist == NULL && buf->href == NULL && buf->img == NULL)) {
	return NULL;
    }

    if (buf->linklist) {
	Strcat_charp(tmp, "<hr><h2>Links</h2>\n<ol>\n");
	for (l = buf->linklist; l; l = l->next) {
	    if (l->url) {
		parseURL2(l->url, &pu, baseURL(buf));
		p = parsedURL2Str(&pu)->ptr;
		u = html_quote(p);
		if (DecodeURL)
		    p = html_quote(url_decode2(p, buf));
		else
		    p = u;
	    }
	    else
		u = p = "";
	    if (l->type == LINK_TYPE_REL)
		t = " [Rel]";
	    else if (l->type == LINK_TYPE_REV)
		t = " [Rev]";
	    else
		t = "";
	    t = Sprintf("%s%s\n", l->title ? l->title : "", t)->ptr;
	    t = html_quote(t);
	    Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t, "</a><br>", p,
			   "\n", NULL);
	}
	Strcat_charp(tmp, "</ol>\n");
    }

    if (buf->href) {
	Strcat_charp(tmp, "<hr><h2>Anchors</h2>\n<ol>\n");
	al = buf->href;
	for (i = 0; i < al->nanchor; i++) {
	    a = &al->anchors[i];
	    if (a->hseq < 0 || a->slave)
		continue;
	    parseURL2(a->url, &pu, baseURL(buf));
	    p = parsedURL2Str(&pu)->ptr;
	    u = html_quote(p);
	    if (DecodeURL)
		p = html_quote(url_decode2(p, buf));
	    else
		p = u;
	    t = getAnchorText(buf, al, a);
	    t = t ? html_quote(t) : "";
	    Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t, "</a><br>", p,
			   "\n", NULL);
	}
	Strcat_charp(tmp, "</ol>\n");
    }

    if (buf->img) {
	Strcat_charp(tmp, "<hr><h2>Images</h2>\n<ol>\n");
	al = buf->img;
	for (i = 0; i < al->nanchor; i++) {
	    a = &al->anchors[i];
	    if (a->slave)
		continue;
	    parseURL2(a->url, &pu, baseURL(buf));
	    p = parsedURL2Str(&pu)->ptr;
	    u = html_quote(p);
	    if (DecodeURL)
		p = html_quote(url_decode2(p, buf));
	    else
		p = u;
	    if (a->title && *a->title)
		t = html_quote(a->title);
	    else
		t = html_quote(url_decode2(a->url, buf));
	    Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t, "</a><br>", p,
			   "\n", NULL);
	    a = retrieveAnchor(buf->formitem, a->start.line, a->start.pos);
	    if (!a)
		continue;
	    fi = (FormItemList *)a->url;
	    fi = fi->parent->item;
	    if (fi->parent->method == FORM_METHOD_INTERNAL &&
		!Strcmp_charp(fi->parent->action, "map") && fi->value) {
		MapList *ml = searchMapList(buf, fi->value->ptr);
		ListItem *mi;
		MapArea *m;
		if (!ml)
		    continue;
		Strcat_charp(tmp, "<br>\n<b>Image map</b>\n<ol>\n");
		for (mi = ml->area->first; mi != NULL; mi = mi->next) {
		    m = (MapArea *) mi->ptr;
		    if (!m)
			continue;
		    parseURL2(m->url, &pu, baseURL(buf));
		    p = parsedURL2Str(&pu)->ptr;
		    u = html_quote(p);
		    if (DecodeURL)
			p = html_quote(url_decode2(p, buf));
		    else
			p = u;
		    if (m->alt && *m->alt)
			t = html_quote(m->alt);
		    else
			t = html_quote(url_decode2(m->url, buf));
		    Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t,
				   "</a><br>", p, "\n", NULL);
		}
		Strcat_charp(tmp, "</ol>\n");
	    }
	}
	Strcat_charp(tmp, "</ol>\n");
    }

    return loadHTMLString(tmp);
}
int HttpRequestX::ParseUrlQuery(){
    if(m_initialized){
        return m_param_count;
    }

    m_initialized = true;

    char * content_type = GetContentType();
    if(content_type != NULL && strncmp(content_type, "multipart", 10) == 0) {
        return 0;  //  todo: support multipart/form-data
    }

    char * param_buffer = NULL;
    if(GetMethod() == HTTP_METHOD_POST) {
        unsigned long content_len;
        char * content_len_str = GetEnv("CONTENT_LENGTH");
        sscanf(content_len_str,"%ld",&content_len);
        content_len += 1;
        if(content_len > MAX_CONTENT_LENGTH) {
            // TODO 检查content_len是否超出最大
            return -2;
        }

        param_buffer = (char*) malloc (sizeof(char)*content_len);
        bzero(param_buffer, sizeof(char)*content_len);
        int read_num = FCGX_GetStr(param_buffer, content_len, request_.in);
        if (read_num < 0) {
            return -1;
        }
    }
    else if(GetMethod() == HTTP_METHOD_GET) {
        char * query_string = GetEnv("QUERY_STRING");
        param_buffer = strdup(query_string);
    }
    else {
        //TODO: 不支持的方法
        return -1;
    }

    char *query = param_buffer;
    int len = strlen(param_buffer);
    int num = 0;  // 参数个数
    char * q = query;

    if(q == NULL)
    {
        free(param_buffer);
        return 0;
    }

    while(strsep(&q, "&") != NULL){
        num ++;
    }

    if(num == 0) {
        free(param_buffer);
        return 0;
    }

    int size = (num)*sizeof(param_pair_t);
    if(m_params == NULL){
        m_params = (param_pair_t*)malloc(size);
    }
    else if(m_param_array_size<num){
        // 与上次请求的参数个数相比较,如果需要更多内存,则重新分配
        m_params = (param_pair_t*)realloc(m_params, size);
        m_param_array_size = num;
    }

    if(m_params == NULL)
    {
        free(param_buffer);
        return -1;
    }

    memset(m_params, 0, size);
    param_pair_t * my_param = m_params;

    char * name;
    char * value;
    for (q = query; q < (query + len);){
        name = q;
        value = q;
        q += strlen(q)+1;              // 跳到下一个参数
        name = strsep(&value, "=");    // 分解当前参数
        my_param->name = url_decode2(strdup(name));
        my_param->value = url_decode2(strdup(value==NULL ? "" : value) );
        my_param++;
    }
    free(param_buffer);
    return num;
}