MCPcopy Create free account
hub / github.com/defold/defold / PostHandler

Method PostHandler

engine/engine/src/engine_service.cpp:129–183  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

127 }
128
129 static void PostHandler(void* user_data, dmWebServer::Request* request)
130 {
131 char msg_buf[1024];
132 const char* error_msg = "";
133 dmWebServer::Result r;
134 uint32_t recv_bytes = 0;
135 dmMessage::HSocket socket = 0;
136 const dmDDF::Descriptor* desc = 0;
137 dmhash_t message_id;
138
139 if (request->m_ContentLength > sizeof(msg_buf))
140 {
141 error_msg = "Too large message";
142 goto bail;
143 }
144
145 if (!ParsePostUrl(request->m_Resource, &socket, &desc, &message_id))
146 {
147 error_msg = "Invalid request";
148 goto bail;
149 }
150
151 r = dmWebServer::Receive(request, msg_buf, request->m_ContentLength, &recv_bytes);
152 if (r == dmWebServer::RESULT_OK)
153 {
154 void* msg;
155 uint32_t msg_size;
156 dmDDF::Result ddf_r = dmDDF::LoadMessage(msg_buf, recv_bytes, desc, &msg, dmDDF::OPTION_OFFSET_POINTERS, &msg_size);
157 if (ddf_r == dmDDF::RESULT_OK)
158 {
159 dmMessage::URL url;
160 url.m_Socket = socket;
161 url.m_Path = 0;
162 url.m_Fragment = 0;
163 dmMessage::Post(0, &url, message_id, 0, (uintptr_t) desc, msg, msg_size, 0);
164 dmDDF::FreeMessage(msg);
165 }
166 }
167 else
168 {
169 dmLogError("Error while reading message post data (%d)", r);
170 error_msg = INTERNAL_SERVER_ERROR;
171 goto bail;
172 }
173
174 dmWebServer::SetStatusCode(request, 200);
175 dmWebServer::Send(request, "OK", strlen("OK"));
176 return;
177
178 bail:
179 SlurpHttpContent(request);
180 dmLogError("%s", error_msg);
181 dmWebServer::SetStatusCode(request, 400);
182 dmWebServer::Send(request, error_msg, strlen(error_msg));
183 }
184
185 static void PingHandler(void* user_data, dmWebServer::Request* request)
186 {

Callers

nothing calls this directly

Calls 6

FreeMessageFunction · 0.85
ReceiveFunction · 0.50
LoadMessageFunction · 0.50
PostFunction · 0.50
SetStatusCodeFunction · 0.50
SendFunction · 0.50

Tested by

no test coverage detected