/**************************************************************************** * ethanol.c -- a server for the world's favorite drug * * A toy server to show basic HTTP toolkit programming only ****************************************************************************/ #include #include #include #include "dt_smiles.h" #include "dt_http.h" /*============================================================================ * my_loop() -- server loop for ethanol microserver */ dt_Integer my_loop(dt_Handle htob) { dt_Integer pathlen, replen; dt_String path, mime = NULL, rep = NULL; /*** Require a valid path. ***/ if (NULL == (path = dt_string(&pathlen, htob, 5, "_path"))) return 404; /*** Process pages: mini-index on home page. ***/ if (0 == strcmp(path, "/")) rep = "ethanol index:
\n"; /*** Other pages. ***/ else if (!strcmp(path, "/bp.html")) { rep = "boiling point: 78.2 C\n"; } else if (!strcmp(path, "/mp.html")) { rep = "melting point: -114.1 C\n"; } else if (!strcmp(path, "/bp.txt" )) { rep = "78.2\n"; mime = "text/plain"; } else if (!strcmp(path, "/mp.txt" )) { rep = "-114.1\n"; mime = "text/plain"; } /*** If not known, return 404 Not Found. ***/ if (NULL == rep) return 404; /*** Set _reply property. ***/ replen = strlen(rep); dt_setstring (htob, 6, "_reply", replen, rep); dt_setinteger(htob, 7, "_replen", replen); /*** Set _mime property, if needed. ***/ if (mime) dt_setstring (htob, 5, "_mime", strlen(mime), mime); return 200; } /*============================================================================ * main() program for ethanol microserver */ int main(int ac, char **av) { dt_Integer port = 22002; dt_Handle htob; /*** Create an http object. ***/ if (NULL_OB == (htob = dt_http_alloc(port))) { fprintf(stderr, "Ouch! Could not create an http object.\n"); exit(1); } /*** Set minimal server properties. ***/ dt_setstring(htob, 8, "_service", 7, "ethanol"); dt_setmethod(htob, 8, "_loop_cb", (void *) my_loop); /*** Set optional server properties, e.g., plain light green background. ***/ dt_setstring(htob, 8, "_bgcolor", 7, "#CCFFCC"); dt_setstring(htob, 8, "_bgimage", 0, NULL ); /*** Start the server loop (never returns until signaled). ***/ fprintf(stderr, "ethanol server starting up on port %d\n", port); dt_http_loop(htob); /*** Deallocate the http object (not really needed here). ***/ dt_dealloc(htob); return 0; }