Ignore:
Timestamp:
Feb 4, 2016, 11:11:09 PM (8 years ago)
Author:
coas-nagasima
Message:

URLがフォルダを指している場合、/index.htmlにリダイレクトするよう変更。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uKadecot/trunk/uip/apps/webserver/httpd.c

    r154 r155  
    203203  }
    204204
     205  if (s->file.redirect) {
     206    len = strlen(http_location);
     207    memcpy(pos, http_location, len); pos += len;
     208    if (s->drv == 1) {
     209      len = 2;
     210      memcpy(pos, "/~", len); pos += len;
     211    }
     212    len = strlen(s->filename);
     213    memcpy(pos, s->filename, len); pos += len;
     214    len = 2;
     215    memcpy(pos, "\r\n", len); pos += len;
     216  }
     217
    205218  ptr = strrchr(s->message.request_url, ISO_period);
    206219  if (ptr == NULL) {
     
    248261  PT_BEGIN(&s->outputpt);
    249262
    250   s->file.fs = ((char *)&s[1]) - 64 - 512;
    251 
    252   if (!httpd_fs_open(s->drv, s->filename, &s->file)) {
     263  if (!httpd_fs_open(s->drv, s->filename, sizeof(s->filename), &s->file)) {
    253264    s->drv = 0;
    254     httpd_fs_open(s->drv, http_404_html, &s->file);
    255     strcpy_s(s->message.request_url, sizeof(s->message.request_url), http_404_html);
     265    strcpy_s(s->filename, sizeof(s->filename), http_404_html);
     266    httpd_fs_open(s->drv, s->filename, sizeof(s->filename), &s->file);
    256267    PT_WAIT_THREAD(&s->outputpt,
    257268      send_headers(s,
     
    261272    PT_WAIT_THREAD(&s->outputpt,
    262273      send_headers(s,
    263       http_header_200));
     274      s->file.redirect ? http_header_301 : http_header_200));
    264275    PT_WAIT_THREAD(&s->outputpt, send_file(s));
    265276  }
     
    381392  size_t done;
    382393  const char *data;
     394  char *ptr;
     395
    383396  PSOCK_BEGIN(&s->sin);
    384397
     
    407420  /* ""か"/"なら"index.html"に変更 */
    408421  if ((s->message.request_url[0] == '\0') || ((s->message.request_url[0] == '/') && (s->message.request_url[1] == '\0'))) {
    409     strncpy_s(s->message.request_url, sizeof(s->message.request_url), http_index_html, sizeof(s->message.request_url));
    410     s->filename = s->message.request_url;
     422    s->drv = 0;
     423    strcpy_s(s->filename, sizeof(s->filename), http_index_html);
    411424  }
    412425  /* "/~/"ならSDカードから読み込み */
    413426  else if ((s->message.request_url[0] == '/') && (s->message.request_url[1] == '~') && (s->message.request_url[2] == '/')) {
    414427    s->drv = 1;
    415     s->filename = &s->message.request_url[2];
     428    strcpy_s(s->filename, sizeof(s->filename), &s->message.request_url[2]);
    416429  }
    417430  else {
    418431    s->drv = 0;
    419     s->filename = s->message.request_url;
    420   }
     432    strcpy_s(s->filename, sizeof(s->filename), s->message.request_url);
     433  }
     434
     435  ptr = strrchr(s->filename, '?');
     436  if (ptr != NULL)
     437    ptr[0] = '\0';
    421438
    422439  /*  httpd_log_file(uip_conn->ripaddr, s->message.request_url);*/
     
    426443    s->state = STATE_WS_OUTPUT;
    427444
     445    s->close_req = 0;
    428446    websocket_init(&s->websocket, uip_getid((struct uip_conn *)((intptr_t)s - offsetof(struct uip_conn, appstate))));
    429447    for (;;) {
Note: See TracChangeset for help on using the changeset viewer.