From e9405d2a43d33dbfacfb844d1c117f254810a8ce Mon Sep 17 00:00:00 2001 From: Justin Meza Date: Mon, 5 May 2014 11:29:22 -0400 Subject: [PATCH] initial project import --- README.md | 48 +++++++++++++++++++++++++++++++++- httpd.lol | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ lol.html | 3 +++ 3 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 httpd.lol create mode 100644 lol.html diff --git a/README.md b/README.md index fd9dd71..a076a73 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,50 @@ httpd.lol ========= -A minimal HTTP server written in LOLCODE. +A minimal HTTP server written in LOLCODE. Because programming languages. + +Usage +----- + +Check out and build the future branch of [lci](https://github.com/justinmeza/lci/tree/future). + + $ ./lci httpd.lol + point your fanorite HTTP-getter to http://127.0.0.1:13337/lol.html + ... + profit? + + +Example +------- + +Here we're using Netcat, but browsers work just fine as well. + + $ ./lci httpd.lol & + $ echo "GET /lol.html HTTP/1.1" | nc 127.0.0.1 13337 + CMD IZ GET /lol.html HTTP/1.1 + + FIEL IZ lol.html + FIEL FOUND! + LEN IZ 74 + DATA IZ +

HAI, INTERWEBZ!!!1!!~

+ + + REPLY IZ HTTP/1.1 200 OK + Server: httpd.lol/0.1 (lci) + Context-Type: text/html + Content-Length: 74 + + +

HAI, INTERWEBZ!!!1!!~

+ + + + HTTP/1.1 200 OK + Server: httpd.lol/0.1 (lci) + Context-Type: text/html + Content-Length: 74 + + +

HAI, INTERWEBZ!!!1!!~

+ diff --git a/httpd.lol b/httpd.lol new file mode 100644 index 0000000..22b657a --- /dev/null +++ b/httpd.lol @@ -0,0 +1,78 @@ +OBTW + httpd.lol -- a minimal HTTP server written in LOLCODE + example: + ./lci httpd.lol + point your favorite HTTP-getter to http://127.0.0.1:13337/lol.html + ... + profit? + by Justin J. Meza, 2014 +TLDR +HAI 1.4 + CAN HAS STDIO? + CAN HAS SOCKS? + CAN HAS STRING? + + HOW IZ I parse YR header + I HAS A len ITZ I IZ STRING'Z LEN YR header MKAY + I HAS A readin ITZ FAIL + I HAS A file ITZ "" + IM IN YR loop UPPIN YR index TIL BOTH SAEM index AN len + I HAS A char ITZ I IZ STRING'Z AT YR header AN YR index MKAY + BOTH OF BOTH SAEM char AN " " AN readin + O RLY? + YA RLY, FOUND YR file + OIC + readin, O RLY?, YA RLY, file R SMOOSH file AN char MKAY, OIC + BOTH OF BOTH SAEM char AN "/" AN NOT readin + O RLY? + YA RLY, readin R WIN + OIC + IM OUTTA YR loop + FOUND YR "" + IF U SAY SO + + BTW bind to a local port + I HAS A sock + sock R I IZ SOCKS'Z BIND YR "127.0.0.1" AN YR 13337 MKAY + + IM IN YR loop + BTW receive a connection + I HAS A conn + conn R I IZ SOCKS'Z LISTN YR sock MKAY + + BTW get a command + I HAS A cmd + cmd R I IZ SOCKS'Z GET YR sock AN YR conn AN YR 1024 MKAY + VISIBLE "CMD IZ " AN cmd + + BTW parse the file name + I HAS A name ITZ I IZ parse YR cmd MKAY + VISIBLE "FIEL IZ " AN name + + I HAS A reply ITZ "" + + BTW get the file contents + I HAS A file ITZ I IZ STDIO'Z OPEN YR name AN YR "r" MKAY + I IZ STDIO'Z DIAF YR file MKAY, O RLY? + YA RLY + VISIBLE "FIEL NOT FOUND" + reply R SMOOSH "HTTP/1.1 404 Not Found:3:):3:)" MKAY + NO WAI + VISIBLE "FIEL FOUND!" + I HAS A data ITZ I IZ STDIO'Z LUK YR file AN YR 1024 MKAY + I HAS A len ITZ I IZ STRING'Z LEN YR data MKAY + I IZ STDIO'Z CLOSE YR file MKAY + VISIBLE "LEN IZ " AN len + VISIBLE "DATA IZ " AN data + + reply R SMOOSH "HTTP/1.1 200 OK:3:)Server: httpd.lol/0.1 (lci):3:)Context-Type: text/html:)Content-Length: :{len}:3:):3:):{data}:3:)" MKAY + OIC + + BTW serve it up + VISIBLE "REPLY IZ " AN reply + I IZ SOCKS'Z PUT YR sock AND YR conn AN YR reply MKAY + + BTW buh-bye + I IZ SOCKS'Z CLOSE YR conn MKAY + IM OUTTA YR loop +KTHXBYE diff --git a/lol.html b/lol.html new file mode 100644 index 0000000..feafbba --- /dev/null +++ b/lol.html @@ -0,0 +1,3 @@ + +

HAI, INTERWEBZ!!!1!!~

+