aboutsummaryrefslogtreecommitdiff
path: root/captain/gemini.f90
diff options
context:
space:
mode:
Diffstat (limited to 'captain/gemini.f90')
-rw-r--r--captain/gemini.f9024
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