diff options
Diffstat (limited to 'captain/gemini.f90')
-rw-r--r-- | captain/gemini.f90 | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/captain/gemini.f90 b/captain/gemini.f90 index cb829e8..5eeb956 100644 --- a/captain/gemini.f90 +++ b/captain/gemini.f90 @@ -38,7 +38,7 @@ contains type(c_ptr)::ssl character(*), intent(out)::req - character, dimension(64)::buf + character, dimension(256)::buf integer::bufread integer::i, j @@ -78,10 +78,11 @@ contains end subroutine read_request - function read_into_buffer(unit_number, buffer) + function read_into_buffer(unit_number, buffer, bufsize) implicit none integer, intent(in)::unit_number + integer, intent(in)::bufsize character, dimension(*), intent(out)::buffer integer::read_into_buffer @@ -89,7 +90,7 @@ contains ierr = 0 i = 0 - do while(ierr == 0 .and. i < 64) + do while(ierr == 0 .and. i < bufsize) i = i + 1 read(unit_number, iostat=ierr) buffer(i) end do @@ -133,15 +134,18 @@ contains type(c_ptr)::ssl integer, intent(in)::unit_number character(*), intent(in)::mimetype - character, dimension(64)::buf - integer::buflen, written + + integer, parameter::bufsize = 4096 + + character, dimension(bufsize)::buf + integer::readlen, written call write_status(ssl, GEMINI_CODE_SUCCESS, mimetype) - buflen = read_into_buffer(unit_number, buf) - do while(buflen > 0) - written = ssl_write(ssl, buf(1:buflen)) - buflen = read_into_buffer(unit_number, buf) + readlen = read_into_buffer(unit_number, buf, bufsize) + do while(readlen > 0) + written = ssl_write(ssl, buf(1:readlen)) + readlen = read_into_buffer(unit_number, buf, bufsize) end do end subroutine write_file @@ -383,4 +387,4 @@ contains end subroutine handle_request -end module gemini
\ No newline at end of file +end module gemini |