Changeset 436
- Timestamp:
- Jul 6, 2020, 9:22:43 PM (3 years ago)
- Location:
- EcnlProtoTool/trunk/ntshell
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/ntshell/ntshell/util/ntstdio.c
r433 r436 292 292 return; 293 293 put_buf->outptr[handle->pos] = (char)c; 294 handle->pos++;295 294 } 296 295 … … 307 306 handle.exinf = &exinf; 308 307 exinf.outptr = buf; 309 exinf.len = len ;308 exinf.len = len - 1; /* null char */ 310 309 311 310 va_start(arp, fmt); … … 314 313 315 314 /* Terminate output string with a \0 */ 316 buf[ handle.pos] = '\0';317 return result; 315 buf[result] = '\0'; 316 return result; /* not count null char */ 318 317 } 319 318 -
EcnlProtoTool/trunk/ntshell/webserver/httpd-fs.c
r434 r436 1 1 /* 2 * TOPPERS ECHONET Lite Communication Middleware3 * 4 * Copyright (C) 2017 Cores Co., Ltd. Japan2 * TOPPERS PROJECT Home Network Working Group Software 3 * 4 * Copyright (C) 2017-2019 Cores Co., Ltd. Japan 5 5 * 6 6 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ … … 63 63 #endif /* NULL */ 64 64 65 extern ntstdio_t ntstdio; 66 65 67 /*-----------------------------------------------------------------------------------*/ 66 68 #ifdef FILE_DUMP … … 87 89 } 88 90 else { 89 syslog(LOG_ERROR, "%s/%s\n", path, fn);91 ntstdio_printf(&ntstdio, "%s/%s\n", path, fn); 90 92 } 91 93 } … … 112 114 if ((res = f_open(fd, name, FA_OPEN_EXISTING | FA_READ)) != FR_OK) { 113 115 if ((res = f_opendir(&dir, name)) != FR_OK) { 114 syslog(LOG_ERROR, "f_opendir(%s) => %d\n", name, res);116 ntstdio_printf(&ntstdio, "f_opendir(%s) => %d\n", name, res); 115 117 return 0; 116 118 } 117 119 118 120 if ((res = f_readdir(&dir, &fno)) != FR_OK) { 119 syslog(LOG_ERROR, "f_readdir(%s) => %d\n", name, res);121 ntstdio_printf(&ntstdio, "f_readdir(%s) => %d\n", name, res); 120 122 return 0; 121 123 } … … 130 132 131 133 if (res != FR_OK) { 132 syslog(LOG_ERROR, "f_open(%s) => %d %x\n", name, res, fno.fattrib);134 ntstdio_printf(&ntstdio, "f_open(%s) => %d %x\n", name, res, fno.fattrib); 133 135 return 0; 134 136 } … … 137 139 file->len = fd->fsize; 138 140 139 // syslog(LOG_ERROR, "httpd_fs_open(%d:%s) %d\n", drv, name, file->len);141 //ntstdio_printf(&ntstdio, "httpd_fs_open(%s) %d\n", name, file->len); 140 142 141 143 return 1; … … 156 158 157 159 if ((res = f_open(fd, name, FA_CREATE_ALWAYS | FA_WRITE)) != FR_OK) { 158 syslog(LOG_ERROR, "f_open(%s) => %d\n", name, res);160 ntstdio_printf(&ntstdio, "f_open(%s) => %d\n", name, res); 159 161 return 0; 160 162 } … … 163 165 file->len = 0; 164 166 165 // syslog(LOG_ERROR, "httpd_fs_create(%d:%s) %d\n", drv,name, file->len);167 //ntstdio_printf(&ntstdio, "httpd_fs_create(%s) %d\n", file->name, file->len); 166 168 167 169 return 1; … … 177 179 178 180 if ((ret = f_lseek(fd, file->pos)) != FR_OK) { 179 syslog(LOG_ERROR, "f_lseek(%s, %d) => %d\n", file->name, file->pos, ret);181 ntstdio_printf(&ntstdio, "f_lseek(%s, %d) => %d\n", file->name, file->pos, ret); 180 182 return 0; 181 183 } 182 184 183 185 if (file->pos != fd->fptr) { 184 syslog(LOG_ERROR, "f_lseek(%s, %d) != %d\n", file->name, file->pos, fd->fptr);186 ntstdio_printf(&ntstdio, "f_lseek(%s, %d) != %d\n", file->name, file->pos, fd->fptr); 185 187 } 186 188 187 189 if ((ret = f_read(fd, dst, len, &rlen)) != FR_OK) { 188 syslog(LOG_ERROR, "f_read(%s, 0x%p, %d) => %d\n", file->name, dst, len, ret);189 return 0; 190 } 191 192 // syslog(LOG_ERROR, "httpd_fs_read(%d:%s, %d, %d) => %d\n", file->drv, file->name, file->pos, len, rlen);190 ntstdio_printf(&ntstdio, "f_read(%s, 0x%p, %d) => %d\n", file->name, dst, len, ret); 191 return 0; 192 } 193 194 //ntstdio_printf(&ntstdio, "httpd_fs_read(%s, %d, %d) => %d\n", file->name, file->pos, len, rlen); 193 195 194 196 return rlen; … … 204 206 205 207 if ((ret = f_lseek(fd, file->pos)) != FR_OK) { 206 syslog(LOG_ERROR, "f_lseek(%s, %d) => %d\n", file->name, file->pos, ret);208 ntstdio_printf(&ntstdio, "f_lseek(%s, %d) => %d\n", file->name, file->pos, ret); 207 209 return 0; 208 210 } 209 211 210 212 if (file->pos != fd->fptr) { 211 syslog(LOG_ERROR, "f_lseek(%s, %d) != %d\n", file->name, file->pos, fd->fptr);213 ntstdio_printf(&ntstdio, "f_lseek(%s, %d) != %d\n", file->name, file->pos, fd->fptr); 212 214 } 213 215 214 216 if ((ret = f_write(fd, src, len, &rlen)) != FR_OK) { 215 syslog(LOG_ERROR, "f_write(%s, 0x%p, %d) => %d\n", file->name, src, len, ret);217 ntstdio_printf(&ntstdio, "f_write(%s, 0x%p, %d) => %d\n", file->name, src, len, ret); 216 218 return 0; 217 219 } … … 220 222 file->len += rlen; 221 223 222 // syslog(LOG_ERROR, "httpd_fs_write(%d:%s, %d, %d) => %d\n", file->drv, file->name, file->pos, len, rlen);224 //ntstdio_printf(&ntstdio, "httpd_fs_write(%s, %d, %d) => %d\n", file->name, file->pos, len, rlen); 223 225 224 226 return rlen; … … 232 234 233 235 if ((ret = f_close(fd)) != FR_OK) { 234 syslog(LOG_ERROR, "f_close(%s) => %d\n", file->name, ret);236 ntstdio_printf(&ntstdio, "f_close(%s) => %d\n", file->name, ret); 235 237 return 0; 236 238 } -
EcnlProtoTool/trunk/ntshell/webserver/httpd-fs.h
r321 r436 1 1 /* 2 * TOPPERS ECHONET Lite Communication Middleware2 * TOPPERS PROJECT Home Network Working Group Software 3 3 * 4 * Copyright (C) 2017 Cores Co., Ltd. Japan4 * Copyright (C) 2017-2019 Cores Co., Ltd. Japan 5 5 * 6 6 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ -
EcnlProtoTool/trunk/ntshell/webserver/httpd.c
r331 r436 1 1 /* 2 * TOPPERS ECHONET Lite Communication Middleware2 * TOPPERS PROJECT Home Network Working Group Software 3 3 * 4 * Copyright (C) 2017 Cores Co., Ltd. Japan4 * Copyright (C) 2017-2019 Cores Co., Ltd. Japan 5 5 * 6 6 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ … … 62 62 SYSTIM httpd_time; 63 63 struct httpd_state *uploding; 64 extern char command[256]; 65 66 extern int execute_command(int wait); 64 static char command[256]; 67 65 68 66 /* TCP 送受信ウィンドバッファ */ … … 367 365 368 366 if (s->message.body_is_final) { 369 syslog(LOG_ERROR, "\n\n *** Error http_body_is_final() should return 1"367 ntstdio_printf(&ntstdio, "\n\n *** Error http_body_is_final() should return 1 \n" 370 368 "on last on_body callback call " 371 369 "but it doesn't! ***\n\n"); … … 405 403 struct httpd_state *s = get_context(p); 406 404 if (s->message.should_keep_alive != http_should_keep_alive(p)) { 407 syslog(LOG_ERROR, "\n\n *** Error http_should_keep_alive() should have same"405 ntstdio_printf(&ntstdio, "\n\n *** Error http_should_keep_alive() should have same \n" 408 406 "value in both on_message_complete and on_headers_complete " 409 407 "but it doesn't! ***\n\n"); … … 414 412 http_body_is_final(p) && 415 413 !s->message.body_is_final) { 416 syslog(LOG_ERROR, "\n\n *** Error http_body_is_final() should return 1"414 ntstdio_printf(&ntstdio, "\n\n *** Error http_body_is_final() should return 1 \n" 417 415 "on last on_body callback call " 418 416 "but it doesn't! ***\n\n"); … … 486 484 slen = tcp_get_buf(s->cepid, (void **)&buf, TMO_FEVR); 487 485 if (slen < 0) { 488 syslog(LOG_ERROR, "send_file#tcp_get_buf(%s.%d) => %d", s->addr, ((T_IPV4EP *)s->dst)->portno, slen);486 ntstdio_printf(&ntstdio, "send_file#tcp_get_buf(%s.%d) => %d\n", s->addr, ((T_IPV4EP *)s->dst)->portno, slen); 489 487 s->state = STATE_CLOSING; 490 488 break; … … 499 497 len = httpd_fs_read(&s->file, buf, len); 500 498 if (len <= 0) { 501 syslog(LOG_ERROR, "send_file#httpd_fs_read(%s.%d) => %d", s->addr, ((T_IPV4EP *)s->dst)->portno, len);499 ntstdio_printf(&ntstdio, "send_file#httpd_fs_read(%s.%d) => %d\n", s->addr, ((T_IPV4EP *)s->dst)->portno, len); 502 500 break; 503 501 } … … 507 505 508 506 if ((slen = tcp_snd_buf(s->cepid, len)) != E_OK) { 509 syslog(LOG_ERROR, "send_file#tcp_snd_buf(%s.%d) => %d", s->addr, ((T_IPV4EP *)s->dst)->portno, slen);507 ntstdio_printf(&ntstdio, "send_file#tcp_snd_buf(%s.%d) => %d\n", s->addr, ((T_IPV4EP *)s->dst)->portno, slen); 510 508 s->state = STATE_CLOSING; 511 509 break; … … 529 527 slen = tcp_get_buf(s->cepid, (void **)&buf, TMO_FEVR); 530 528 if (slen < 0) { 531 syslog(LOG_ERROR, "send_data#tcp_get_buf(%s.%d) => %d", s->addr, ((T_IPV4EP *)s->dst)->portno, slen);529 ntstdio_printf(&ntstdio, "send_data#tcp_get_buf(%s.%d) => %d\n", s->addr, ((T_IPV4EP *)s->dst)->portno, slen); 532 530 s->state = STATE_CLOSING; 533 531 break; … … 546 544 547 545 if ((slen = tcp_snd_buf(s->cepid, len)) != E_OK) { 548 syslog(LOG_ERROR, "send_data#tcp_snd_buf(%s.%d) => %d", s->addr, ((T_IPV4EP *)s->dst)->portno, slen);546 ntstdio_printf(&ntstdio, "send_data#tcp_snd_buf(%s.%d) => %d\n", s->addr, ((T_IPV4EP *)s->dst)->portno, slen); 549 547 s->state = STATE_CLOSING; 550 548 break; … … 660 658 len = sizeof(http_content_length) - 1; 661 659 tcp_snd_dat(s->cepid, (void *)http_content_length, len, TMO_FEVR); 662 ntstdio_snprintf(s->temp, sizeof(s->temp), "%d\r\n", s->file.len);663 tcp_snd_dat(s->cepid, (void *)s->temp, ntlibc_strlen(s->temp), TMO_FEVR);660 len = ntstdio_snprintf(s->temp, sizeof(s->temp), "%d\r\n", s->file.len); 661 tcp_snd_dat(s->cepid, (void *)s->temp, len, TMO_FEVR); 664 662 } 665 663 … … 706 704 break; 707 705 case OUT_STATE_WAIT_POST_BODY: 706 //ntstdio_printf(&ntstdio, "wait post body\n"); 708 707 s->out.wait = true; 709 708 break; 710 709 case OUT_STATE_BODY_RECEIVED: 710 //ntstdio_printf(&ntstdio, "body received\n"); 711 711 s->out.statushdr = http_header_200; 712 712 s->out.state = OUT_STATE_SEND_HEADER; 713 713 break; 714 714 case OUT_STATE_SEND_HEADER: 715 //ntstdio_printf(&ntstdio, "send header\n"); 715 716 send_headers(s, s->out.statushdr); 716 717 break; 717 718 case OUT_STATE_SEND_FILE: 719 //ntstdio_printf(&ntstdio, "send file %d\n", s->file.len); 718 720 send_file(s); 719 721 break; 720 722 case OUT_STATE_SEND_DATA: 723 //ntstdio_printf(&ntstdio, "send data %d\n", s->response_len); 721 724 send_data(s); 722 725 break; 723 726 case OUT_STATE_SEND_END: 727 //ntstdio_printf(&ntstdio, "send end\n"); 724 728 s->out.wait = true; 725 729 if (s->message.should_keep_alive && s->reset == 0) { … … 779 783 slen = tcp_get_buf(s->cepid, (void **)&buf, TMO_FEVR); 780 784 if (slen < 0) { 781 syslog(LOG_ERROR, "send_ws_data#tcp_get_buf(%s.%d) => %d", s->addr, ((T_IPV4EP *)s->dst)->portno, slen);785 ntstdio_printf(&ntstdio, "send_ws_data#tcp_get_buf(%s.%d) => %d\n", s->addr, ((T_IPV4EP *)s->dst)->portno, slen); 782 786 return; 783 787 } … … 843 847 //} 844 848 } 845 syslog(LOG_ERROR, "handle_input#tcp_rcv_buf#%d(%s.%d) => %d", s->in.state, s->addr, ((T_IPV4EP *)s->dst)->portno, len);849 ntstdio_printf(&ntstdio, "handle_input#tcp_rcv_buf#%d(%s.%d) => %d\n", s->in.state, s->addr, ((T_IPV4EP *)s->dst)->portno, len); 846 850 uploding = NULL; 847 851 s->state = STATE_CLOSING; … … 851 855 tcp_rel_buf(s->cepid, done); 852 856 if (s->parser.http_errno != HPE_OK) { 853 syslog(LOG_ERROR, "http_parser error %s.%d => %d", s->addr, ((T_IPV4EP *)s->dst)->portno, s->parser.http_errno);857 ntstdio_printf(&ntstdio, "http_parser error %s.%d => %d\n", s->addr, ((T_IPV4EP *)s->dst)->portno, s->parser.http_errno); 854 858 uploding = NULL; 855 859 s->state = STATE_CLOSING; … … 876 880 break; 877 881 } 878 syslog(LOG_ERROR, "handle_input#tcp_rcv_buf#%d(%s.%d) => %d", s->in.state, s->addr, ((T_IPV4EP *)s->dst)->portno, len);882 ntstdio_printf(&ntstdio, "handle_input#tcp_rcv_buf#%d(%s.%d) => %d\n", s->in.state, s->addr, ((T_IPV4EP *)s->dst)->portno, len); 879 883 s->state = STATE_CLOSING; 880 884 break; … … 932 936 ret2 = get_tim(&httpd_time); 933 937 if (ret2 != E_OK) { 934 syslog(LOG_ERROR, "get_tim");938 ntstdio_printf(&ntstdio, "get_tim\n"); 935 939 return; 936 940 } … … 939 943 case STATE_DISCONNECTED: 940 944 memset(&s->dst, 0, sizeof(s->dst)); 941 if ((ret = TCP_ACP_CEP(s->cepid, TCP_REPID, (T_IPV4EP *)s->dst, TMO_FEVR)) != E_OK) {942 syslog(LOG_ERROR, "tcp_acp_cep(%d) => %d", s->cepid, ret);943 tslp_tsk(100 ); // TODO945 if ((ret = tcp_acp_cep(s->cepid, TCP_REPID, (T_IPV4EP *)s->dst, TMO_FEVR)) != E_OK) { 946 ntstdio_printf(&ntstdio, "tcp_acp_cep(%d) => %d\n", s->cepid, ret); 947 tslp_tsk(100 * 1000); // TODO 944 948 s->state = STATE_CLOSING; 945 949 break; … … 974 978 break; 975 979 case STATE_RESET: 976 execute_command(0);980 cmd_execute(command, NULL); 977 981 s->state = STATE_DISCONNECTED; 978 982 break; … … 980 984 981 985 if (s->in.wait && s->out.wait) { 982 tslp_tsk(100 );983 } 984 } 985 } 986 tslp_tsk(100 * 1000); 987 } 988 } 989 } -
EcnlProtoTool/trunk/ntshell/webserver/httpd.cfg
r321 r436 1 1 /* 2 * TOPPERS ECHONET Lite Communication Middleware2 * TOPPERS PROJECT Home Network Working Group Software 3 3 * 4 * Copyright (C) 2017 Cores Co., Ltd. Japan4 * Copyright (C) 2017-2019 Cores Co., Ltd. Japan 5 5 * 6 6 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ -
EcnlProtoTool/trunk/ntshell/webserver/httpd.h
r321 r436 1 1 /* 2 * TOPPERS ECHONET Lite Communication Middleware2 * TOPPERS PROJECT Home Network Working Group Software 3 3 * 4 * Copyright (C) 2017 Cores Co., Ltd. Japan4 * Copyright (C) 2017-2019 Cores Co., Ltd. Japan 5 5 * 6 6 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ -
EcnlProtoTool/trunk/ntshell/webserver/tinet_httpd.cfg
r321 r436 1 1 /* 2 * TOPPERS ECHONET Lite Communication Middleware2 * TOPPERS PROJECT Home Network Working Group Software 3 3 * 4 * Copyright (C) 2016 Cores Co., Ltd. Japan4 * Copyright (C) 2016-2019 Cores Co., Ltd. Japan 5 5 * 6 6 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ … … 46 46 #ifdef SUPPORT_INET6 47 47 48 TCP6_CRE_REP (TCP _REPID, { 0, { IPV6_ADDRANY, 80 } } );48 TCP6_CRE_REP (TCP6_REPID, { 0, { IPV6_ADDRANY, 80 } } ); 49 49 50 50 #endif /* of #ifdef SUPPORT_INET6 */ … … 60 60 #ifdef SUPPORT_INET6 61 61 62 TCP6_CRE_CEP (TCP _CEPID1, {62 TCP6_CRE_CEP (TCP6_CEPID1, { 63 63 0, 64 64 tcp_swbuf1, … … 69 69 } ); 70 70 71 TCP6_CRE_CEP (TCP _CEPID2, {71 TCP6_CRE_CEP (TCP6_CEPID2, { 72 72 0, 73 73 tcp_swbuf2, -
EcnlProtoTool/trunk/ntshell/webserver/websocket.c
r321 r436 1 1 /* 2 * TOPPERS ECHONET Lite Communication Middleware3 * 4 * Copyright (C) 2015 Cores Co., Ltd. Japan2 * TOPPERS PROJECT Home Network Working Group Software 3 * 4 * Copyright (C) 2015-2019 Cores Co., Ltd. Japan 5 5 * 6 6 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ -
EcnlProtoTool/trunk/ntshell/webserver/websocket.cfg
r321 r436 1 1 /* 2 * TOPPERS ECHONET Lite Communication Middleware2 * TOPPERS PROJECT Home Network Working Group Software 3 3 * 4 * Copyright (C) 2017 Cores Co., Ltd. Japan4 * Copyright (C) 2017-2019 Cores Co., Ltd. Japan 5 5 * 6 6 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ -
EcnlProtoTool/trunk/ntshell/webserver/websocket.h
r321 r436 1 1 /* 2 * TOPPERS ECHONET Lite Communication Middleware2 * TOPPERS PROJECT Home Network Working Group Software 3 3 * 4 * Copyright (C) 2015 Cores Co., Ltd. Japan4 * Copyright (C) 2015-2019 Cores Co., Ltd. Japan 5 5 * 6 6 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ -
EcnlProtoTool/trunk/ntshell/webserver/websocket_fbs.c
r321 r436 1 1 /* 2 * TOPPERS WEBSOCKET Lite Communication Middleware2 * TOPPERS PROJECT Home Network Working Group Software 3 3 * 4 * Copyright (C) 2017 Cores Co., Ltd. Japan4 * Copyright (C) 2017-2019 Cores Co., Ltd. Japan 5 5 * 6 6 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ … … 47 47 #include "websocket_fbs.h" 48 48 49 void *sys_malloc(size_t size); 50 void sys_free(void *ptr); 51 49 52 static ER get_message(T_WS_FST_BLK **ppk_msg, int size) 50 53 { … … 78 81 return E_PAR; 79 82 80 ret = pget_mpf(ws_mempoolid, &blk); 83 #ifndef NOUSE_MPF_NET_BUF 84 ret = tget_mpf(ws_mempoolid, &blk, WEBSOCKET_MEMPOOL_GET_TMO); 81 85 if (ret != E_OK) 82 86 return ret; 83 87 #else 88 blk = sys_malloc(size); 89 #endif 84 90 memset(blk, 0, WEBSOCKET_MEMPOOL_BLOCK_SIZE); 85 91 *ppk_msg = (T_WS_FST_BLK *)(blk); … … 122 128 if (exp) { 123 129 if (mblk == NULL) { 124 ret = get_mpf(ws_mempoolid, &blk); 130 #ifndef NOUSE_MPF_NET_BUF 131 ret = tget_mpf(ws_mempoolid, &blk, WEBSOCKET_MEMPOOL_GET_TMO); 125 132 if (ret != E_OK) 126 133 return NULL; 127 134 #else 135 blk = sys_malloc(size); 136 #endif 128 137 mblk = (T_WS_SUB_BLK *)(blk); 129 138 … … 153 162 continue; 154 163 164 #ifndef NOUSE_MPF_NET_BUF 155 165 ret = rel_mpf(ws_mempoolid, blk); 156 166 if (ret != E_OK) 157 167 return ret; 158 } 159 168 #else 169 sys_free(blk); 170 #endif 171 } 172 173 #ifndef NOUSE_MPF_NET_BUF 160 174 return rel_mpf(ws_mempoolid, pk_msg); 175 #else 176 sys_free(pk_msg); 177 178 return E_OK; 179 #endif 161 180 } 162 181 … … 285 304 return NULL; 286 305 306 #ifndef NOUSE_MPF_NET_BUF 287 307 ret = get_mpf(ws_mempoolid, &result); 288 308 if (ret != E_OK) 289 309 return NULL; 310 #else 311 result = sys_malloc(fa_req_size); 312 #endif 290 313 291 314 memset(result, 0, WEBSOCKET_MEMPOOL_BLOCK_SIZE); … … 297 320 ER _ws_fbs_mbx_rel(void *p) 298 321 { 322 #ifndef NOUSE_MPF_NET_BUF 299 323 return rel_mpf(ws_mempoolid, p); 324 #else 325 sys_free(p); 326 327 return E_OK; 328 #endif 300 329 } 301 330 -
EcnlProtoTool/trunk/ntshell/webserver/websocket_fbs.h
r321 r436 1 1 /* 2 * TOPPERS WEBSOCKET Lite Communication Middleware3 * 4 * Copyright (C) 2017 Cores Co., Ltd. Japan2 * TOPPERS PROJECT Home Network Working Group Software 3 * 4 * Copyright (C) 2017-2019 Cores Co., Ltd. Japan 5 5 * 6 6 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
Note:
See TracChangeset
for help on using the changeset viewer.