X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fhttp-svc.c;h=ac5cd7899b24bc2b2882169b8a5bd01cbd8b23b4;hb=e7c246a1b0d30b8156c7033061a61ecb5d2bdfc8;hp=a5bd4b8080af4b2b022d13760f4e6dca40269b43;hpb=f51e658a95edeb35b7b3027f7f066d3af0de04c7;p=src%2Fapp-framework-binder.git diff --git a/src/http-svc.c b/src/http-svc.c index a5bd4b80..ac5cd789 100644 --- a/src/http-svc.c +++ b/src/http-svc.c @@ -99,17 +99,7 @@ STATIC int servFile (struct MHD_Connection *connection, AFB_session *session, co fprintf(stderr, "Fail to stat file: [%s] error:%s\n", staticfile->path, strerror(errno)); goto abortRequest; } - - if (! S_ISREG (sbuf.st_mode)) { // only standard file any other one including symbolic links are refused. - close (staticfile->fd); // nothing useful to do with this file - fprintf (stderr, "Fail file: [%s] is not a regular file\n", staticfile->path); - const char *errorstr = "Alsa-Json-Gateway Invalid file type"; - response = MHD_create_response_from_buffer (strlen (errorstr), - (void *) errorstr, MHD_RESPMEM_PERSISTENT); - MHD_queue_response (connection, MHD_HTTP_INTERNAL_SERVER_ERROR, response); - goto sendRequest; - } - + // if url is a directory let's add index.html and redirect client if (S_ISDIR (sbuf.st_mode)) { close (staticfile->fd); // close directory check for Index @@ -128,8 +118,16 @@ STATIC int servFile (struct MHD_Connection *connection, AFB_session *session, co if (-1 == (staticfile->fd = open(staticfile->path, O_RDONLY)) || (fstat (staticfile->fd, &sbuf) != 0)) { fprintf(stderr, "No Index.html in direcory [%s]\n", staticfile->path); goto abortRequest; - } - } + } + } else if (! S_ISREG (sbuf.st_mode)) { // only standard file any other one including symbolic links are refused. + close (staticfile->fd); // nothing useful to do with this file + fprintf (stderr, "Fail file: [%s] is not a regular file\n", staticfile->path); + const char *errorstr = "Application Framework Binder Invalid file type"; + response = MHD_create_response_from_buffer (strlen (errorstr), + (void *) errorstr, MHD_RESPMEM_PERSISTENT); + MHD_queue_response (connection, MHD_HTTP_INTERNAL_SERVER_ERROR, response); + goto sendRequest; + } // https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hl=fr // ftp://ftp.heanet.ie/disk1/www.gnu.org/software/libmicrohttpd/doxygen/dc/d0c/microhttpd_8h.html @@ -151,7 +149,7 @@ STATIC int servFile (struct MHD_Connection *connection, AFB_session *session, co if (session->magic) { mimetype= magic_descriptor(session->magic, staticfile->fd); if (mimetype != NULL) MHD_add_response_header (response, MHD_HTTP_HEADER_CONTENT_TYPE, mimetype); - } else mimetype="Unknown"; + } else mimetype="application/unknown"; if (verbose) fprintf(stderr, "Serving: [%s] mime=%s\n", staticfile->path, mimetype); response = MHD_create_response_from_fd(sbuf.st_size, staticfile->fd); @@ -196,14 +194,14 @@ STATIC int requestFile(struct MHD_Connection *connection, AFB_session *session, char *requestdir, *requesturl; // default search for file is rootdir base - requestdir = session->config->rootdir; - requesturl=url; + requestdir= session->config->rootdir; + requesturl=(char*)url; // Check for optional aliases for (idx=0; session->config->aliasdir[idx].url != NULL; idx++) { if (0 == strncmp(url, session->config->aliasdir[idx].url, session->config->aliasdir[idx].len)) { requestdir = session->config->aliasdir[idx].path; - requesturl=&url[session->config->aliasdir[idx].len]; + requesturl=(char*)&url[session->config->aliasdir[idx].len]; break; } }