bool HttpParserImpl::parseUrl() { Uri uri; if(!uri.parse(url_)) { return false; } const std::string& query = uri.getQuery(); std::string::size_type pos = 0; while (true) { auto pos1 = query.find('=', pos); if(pos1 == std::string::npos){ break; } std::string name(query.begin()+pos, query.begin()+pos1); pos = pos1 + 1; pos1 = query.find('&', pos); if(pos1 == std::string::npos){ std::string value(query.begin()+pos, query.end()); addParamValue(name, value); break; } std::string value(query.begin()+pos, query.begin()+pos1); pos = pos1 + 1; addParamValue(name, value); } return true; }
static void methodRespContent(ParserControl *parm, parseUnion *stateUnion) { parseUnion lvalp={0}; ct = localLex(&lvalp, parm); if(ct == XTOK_ERROR) { dontLex = 1; error(parm, (parseUnion*)&lvalp.xtokErrorResp); } else if(ct == XTOK_RETVALUE || ct == XTOK_PARAMVALUE) { dontLex = 1; if(ct == XTOK_RETVALUE) { dontLex = 1; returnValue(parm, (parseUnion*)&lvalp.xtokReturnValue); } ct = localLex(&lvalp, parm); dontLex = 1; if(ct == XTOK_PARAMVALUE) { do { dontLex = 1; paramValue(parm, (parseUnion*)&lvalp.xtokParamValue); addParamValue(parm, &stateUnion->xtokMethodRespContent.values, &lvalp.xtokParamValue); ct = localLex(&lvalp, parm); } while(ct == XTOK_PARAMVALUE); dontLex = 1; } } else if(ct == ZTOK_METHODRESP) { dontLex = 1; } else { parseError("XTOK_ERROR or XTOK_RETVALUE or XTOK_PARAMVALUE or ZTOK_METHODRESP", ct, parm); } }