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