Changeset 31998


Ignore:
Timestamp:
May 9, 2017, 9:53:38 AM (2 weeks ago)
Author:
brainslayer
Message:

for benchmarking

Location:
src/router/httpd
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/router/httpd/httpd.c

    r31004 r31998  
    6060
    6161#ifdef HAVE_MATRIXSSL
    62 # include <matrixSsl.h>
    63 # include <matrixssl_xface.h>
     62#include <matrixSsl.h>
     63#include <matrixssl_xface.h>
    6464#endif
    6565
     
    182182static int auth_check(char *user, char *pass, char *dirname, char *authorization);
    183183static void send_error(int status, char *title, char *extra_header, char *text);
    184 static void send_headers(int status, char *title, char *extra_header, char *mime_type, int length, char *attach_file);
     184void send_headers(int status, char *title, char *extra_header, char *mime_type, int length, char *attach_file);
    185185static int b64_decode(const char *str, unsigned char *space, int size);
    186186static int match(const char *pattern, const char *string);
     
    344344}
    345345
    346 static void send_headers(int status, char *title, char *extra_header, char *mime_type, int length, char *attach_file)
     346void send_headers(int status, char *title, char *extra_header, char *mime_type, int length, char *attach_file)
    347347{
    348348        time_t now;
     
    943943#endif
    944944
    945 #if 0
    946         if (strstr(file, "cgi-bin")) {
    947 
    948                 auth_fail = 0;
    949                 if (!do_auth(conn_fp, auth_userid, auth_passwd, auth_realm, authorization, auth_check))
    950                         auth_fail = 1;
    951                 query = NULL;
    952                 if (check_connect_type() < 0) {
    953                         send_error(401, "Bad Request", (char *)0, "Can't use wireless interface to access GUI.");
    954                         return;
    955                 }
    956                 if (auth_fail == 1) {
    957                         send_authenticate(auth_realm);
    958                         auth_fail = 0;
    959                         return;
    960                 }
    961                 if (strcasecmp(method, "post") == 0) {
    962                         query = safe_malloc(10000);
    963                         if ((count = wfread(query, 1, cl, conn_fp))) {
    964                                 query[count] = '\0';;
    965                                 cl -= strlen(query);
     945        {
     946                if (strncmp(file, "bigfile.bin", 11)) {
     947                        /* extract url args if present */
     948                        query = strchr(file, '?');
     949                        if (query) {
     950                                //see token length in createpageToken
     951                                char token[16] = "0";
     952                                strncpy(token, &query[1], sizeof(token));
     953                                nvram_set("token", token);
     954                                *query++ = 0;
    966955                        } else {
    967                                 free(query);
    968                                 query = NULL;
    969                         }
    970 #if defined(linux)
    971 #ifdef HAVE_HTTPS
    972                         if (!do_ssl && (flags = fcntl(fileno(conn_fp->fp), F_GETFL)) != -1 && fcntl(fileno(conn_fp->fp), F_SETFL, flags | O_NONBLOCK) != -1) {
    973                                 /* Read up to two more characters */
    974                                 if (fgetc(conn_fp->fp) != EOF)
    975                                         (void)fgetc(conn_fp->fp);
    976                                 fcntl(fileno(conn_fp->fp), F_SETFL, flags);
    977                         }
    978 #else
    979                         if ((flags = fcntl(fileno(conn_fp->fp), F_GETFL)) != -1 && fcntl(fileno(conn_fp->fp), F_SETFL, flags | O_NONBLOCK) != -1) {
    980                                 /* Read up to two more characters */
    981                                 if (fgetc(conn_fp->fp) != EOF)
    982                                         (void)fgetc(conn_fp->fp);
    983                                 fcntl(fileno(conn_fp->fp), F_SETFL, flags);
    984                         }
    985 #endif
    986 #endif
    987 
    988                 }
    989                 exec = fopen("/tmp/exec.tmp", "wb");
    990                 fprintf(exec, "export REQUEST_METHOD=\"%s\"\n", method);
    991                 if (query)
    992                         fprintf(exec, "/bin/sh %s/%s</tmp/exec.query\n", server_dir != NULL ? server_dir : "/www", file);
    993                 else
    994                         fprintf(exec, "/%s/%s\n", server_dir != NULL ? server_dir : "/www", file);
    995                 fclose(exec);
    996 
    997                 if (query) {
    998                         exec = fopen("/tmp/exec.query", "wb");
    999                         fprintf(exec, "%s\n", query);
    1000                         free(query);
    1001                         fclose(exec);
    1002                 }
    1003 
    1004                 chmod("/tmp/exec.tmp", 0700);
    1005                 system2("/tmp/exec.tmp>/tmp/shellout.asp");
    1006 
    1007                 do_ej(NULL, "/tmp/shellout.asp", conn_fp, "");
    1008                 unlink("/tmp/shellout.asp");
    1009                 unlink("/tmp/exec.tmp");
    1010                 unlink("/tmp/exec.query");
    1011 
    1012         } else
    1013 #endif
    1014         {
    1015                 /* extract url args if present */
    1016                 query = strchr(file, '?');
    1017                 if (query) {
    1018                         //see token length in createpageToken
    1019                         char token[16] = "0";
    1020                         strncpy(token, &query[1], sizeof(token));
    1021                         nvram_set("token", token);
    1022                         *query++ = 0;
    1023                 } else {
    1024                         nvram_seti("token", 0);
    1025                 }
    1026 
     956                                nvram_seti("token", 0);
     957                        }
     958                }
    1027959                int changepassword = 0;
    1028960
  • src/router/httpd/modules/base.c

    r31782 r31998  
    436436}
    437437
    438 // and now the tricky part (more dirty as dirty)
     438static void do_bigfile(struct mime_handler *handler, char *path, webs_t stream, char *query)
     439{
     440        char fs[32];
     441        char *temp2;
     442        memset(fs, 0, sizeof(fs));
     443        int idx = indexof(path, '?');
     444        if (idx > 0) {
     445                temp2 = &path[idx + 1];
     446                strncpy(fs, temp2, sizeof(fs));
     447        } else {
     448                return;
     449        }
     450        long filesize = atol(fs);
     451        long i;
     452        char *test = malloc(65536);
     453        srand(time(NULL));
     454        for (i = 0; i < 65536; i++)
     455                test[i] = rand() % 255;
     456
     457        if (!handler->send_headers)
     458                send_headers(200, "Ok", handler->extra_header, handler->mime_type, filesize, "bigfile.bin");
     459        for (i = 0; i < filesize / 65536; i++) {
     460                wfwrite(test, 65536, 1, stream);
     461        }
     462        wfwrite(test, filesize % 65536, 1, stream);
     463
     464        free(test);
     465}
     466
    439467static void do_filtertable(struct mime_handler *handler, char *path, webs_t stream, char *query)
    440468{
     
    447475                strncpy(ifname, temp2, sizeof(ifname));
    448476        }
     477// and now the tricky part (more dirty as dirty)
    449478        char *temp3 = websGetVar(stream, "ifname", NULL);
    450479        if (temp3) {
     
    25152544         do_auth, 0},
    25162545
     2546        {"bigfile.bin*", "application/octet-stream", no_cache, NULL,
     2547         do_bigfile, do_auth, 0},
     2548
    25172549#ifdef HAVE_DDLAN
    25182550        {"nvrambak.bin*", "application/octet-stream", no_cache, NULL,
    25192551         nv_file_out, do_auth2, 0},
     2552
    25202553        {"nvrambak**.bin*", "application/octet-stream", no_cache, NULL,
    25212554         nv_file_out,
Note: See TracChangeset for help on using the changeset viewer.