MCPcopy Create free account
hub / github.com/IppClub/Dora-SSR / cliLuaHttp

Function cliLuaHttp

Source/Basic/Application.cpp:328–385  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

326}
327
328int cliLuaHttp(lua_State* L) {
329 auto method = cliGetString(L, 1);
330 auto url = cliGetString(L, 2);
331 std::vector<std::string> names;
332 std::vector<std::string> values;
333 if (lua_istable(L, 3)) {
334 lua_pushnil(L);
335 while (lua_next(L, 3) != 0) {
336 size_t keyLen = 0;
337 size_t valueLen = 0;
338 auto key = luaL_tolstring(L, -2, &keyLen);
339 auto value = luaL_tolstring(L, -2, &valueLen);
340 names.emplace_back(key, keyLen);
341 values.emplace_back(value, valueLen);
342 lua_pop(L, 3);
343 }
344 }
345 size_t bodyLen = 0;
346 auto body = lua_gettop(L) >= 4 && !lua_isnil(L, 4) ? luaL_checklstring(L, 4, &bodyLen) : nullptr;
347 auto timeout = lua_gettop(L) >= 5 && !lua_isnil(L, 5) ? luaL_checknumber(L, 5) : 10.0;
348 std::vector<const char*> headerNames;
349 std::vector<const char*> headerValues;
350 headerNames.reserve(names.size());
351 headerValues.reserve(values.size());
352 for (const auto& name : names) headerNames.push_back(name.c_str());
353 for (const auto& value : values) headerValues.push_back(value.c_str());
354 std::string responseBody;
355 int statusCode = 0;
356 auto status = DoraXrtHttpExecuteStream(
357 method.c_str(),
358 url.c_str(),
359 headerNames.data(),
360 headerValues.data(),
361 headerNames.size(),
362 body,
363 bodyLen,
364 s_cast<unsigned int>(timeout * 1000.0),
365 0,
366 nullptr,
367 nullptr,
368 [](const char* data, size_t dataLen, size_t, size_t, void* userData) {
369 auto body = s_cast<std::string*>(userData);
370 body->append(data, dataLen);
371 return 0;
372 },
373 &responseBody,
374 &statusCode);
375 lua_newtable(L);
376 lua_pushinteger(L, status);
377 lua_setfield(L, -2, "netStatus");
378 lua_pushstring(L, DoraXrtHttpStatusName(status));
379 lua_setfield(L, -2, "netStatusName");
380 lua_pushinteger(L, statusCode);
381 lua_setfield(L, -2, "statusCode");
382 lua_pushlstring(L, responseBody.data(), responseBody.size());
383 lua_setfield(L, -2, "body");
384 return 1;
385}

Callers

nothing calls this directly

Calls 15

cliGetStringFunction · 0.85
luaL_tolstringFunction · 0.85
DoraXrtHttpExecuteStreamFunction · 0.85
DoraXrtHttpStatusNameFunction · 0.85
lua_pushnilFunction · 0.50
lua_nextFunction · 0.50
lua_gettopFunction · 0.50
luaL_checklstringFunction · 0.50
luaL_checknumberFunction · 0.50
lua_pushintegerFunction · 0.50
lua_setfieldFunction · 0.50
lua_pushstringFunction · 0.50

Tested by

no test coverage detected