diff --git a/examples/rootfs b/examples/rootfs index 7a610d66..3f6aa4bc 160000 --- a/examples/rootfs +++ b/examples/rootfs @@ -1 +1 @@ -Subproject commit 7a610d66184be24e4b301c7552565d3229671ca8 +Subproject commit 3f6aa4bc9dd77839998af6837e4faf6dadf66fe0 diff --git a/examples/src/linux/picohttpd/httpd.c b/examples/src/linux/picohttpd/httpd.c index 746d6ea7..0630fd1c 100644 --- a/examples/src/linux/picohttpd/httpd.c +++ b/examples/src/linux/picohttpd/httpd.c @@ -14,6 +14,14 @@ #define CONNMAX 1000 +char *method, // "GET" or "POST" + *uri, // "/index.html" things before '?' + *qs, // "a=1&b=2" things after '?' + *prot; // "HTTP/1.1" + +char *payload; // for POST +int payload_size; + static int listenfd, clients[CONNMAX]; static void error(char *); static void startServer(const char *); diff --git a/examples/src/linux/picohttpd/httpd.h b/examples/src/linux/picohttpd/httpd.h index a0969a17..6cd7f517 100644 --- a/examples/src/linux/picohttpd/httpd.h +++ b/examples/src/linux/picohttpd/httpd.h @@ -10,13 +10,13 @@ void serve_forever(const char *PORT); // Client request -char *method, // "GET" or "POST" +extern char *method, // "GET" or "POST" *uri, // "/index.html" things before '?' *qs, // "a=1&b=2" things after '?' *prot; // "HTTP/1.1" -char *payload; // for POST -int payload_size; +extern char *payload; // for POST +extern int payload_size; char *request_header(const char* name); diff --git a/examples/src/linux/picohttpd/main.c b/examples/src/linux/picohttpd/main.c index 86bc9d95..0a0fb252 100644 --- a/examples/src/linux/picohttpd/main.c +++ b/examples/src/linux/picohttpd/main.c @@ -1,6 +1,6 @@ #include "httpd.h" -int main(int c, char** v) +int main(int c, char** v, int argc, const char **argv) { serve_forever("12913"); return 0; diff --git a/tests/test_elf_multithread.py b/tests/test_elf_multithread.py index a421e803..5b2a4037 100644 --- a/tests/test_elf_multithread.py +++ b/tests/test_elf_multithread.py @@ -296,6 +296,20 @@ class ELFTest(unittest.TestCase): f = os.popen("curl http://127.0.0.1:12913") self.assertEqual("httpd_test_successful", f.read()) + def test_http_elf_linux_arm(self): + def picohttpd(): + ql = Qiling(["../examples/rootfs/arm_linux/bin/picohttpd"], "../examples/rootfs/arm_linux", multithread=True, verbose=QL_VERBOSE.DEBUG) + ql.run() + + + picohttpd_therad = threading.Thread(target=picohttpd, daemon=True) + picohttpd_therad.start() + + time.sleep(1) + + f = os.popen("curl http://127.0.0.1:12913") + self.assertEqual("httpd_test_successful", f.read()) + if __name__ == "__main__": unittest.main()