From 27c3147c7efe37657563fadcb835b50d00423475 Mon Sep 17 00:00:00 2001 From: Jeffrey Armstrong Date: Mon, 5 Apr 2021 09:45:49 -0400 Subject: Implemented titan handling on the server, hopefully. Added sending the captured file for a task to failed jobs as well. --- captain/response.f90 | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) (limited to 'captain/response.f90') diff --git a/captain/response.f90 b/captain/response.f90 index cd1895a..3526766 100644 --- a/captain/response.f90 +++ b/captain/response.f90 @@ -1,4 +1,6 @@ module server_response +use iso_c_binding +implicit none integer, parameter::GEMINI_CODE_INPUT = 10 integer, parameter::GEMINI_CODE_SUCCESS = 20 @@ -48,15 +50,18 @@ module server_response end type request type, extends(request) :: titan_request - + integer(kind=8)::size character(len=:), pointer::mimetype character(len=:), pointer::token + type(c_ptr)::ssl_connection + contains procedure :: init_from_request => titan_request_init procedure :: destroy => titan_request_destroy + procedure :: write_to => titan_write_to_filename end type titan_request @@ -338,11 +343,12 @@ contains end function titan_get_request_value - subroutine titan_request_init(self, regular_request) + subroutine titan_request_init(self, regular_request, ssl_connection) implicit none class(titan_request)::self class(request), intent(inout)::regular_request + type(c_ptr)::ssl_connection character(len=:), pointer::size_text integer::i, ierr @@ -372,6 +378,8 @@ contains self%mimetype => titan_get_request_value(regular_request%location, "mime") self%token => titan_get_request_value(regular_request%location, "token") + self%ssl_connection = ssl_connection + end subroutine titan_request_init subroutine titan_request_destroy(self) @@ -390,4 +398,36 @@ contains end subroutine titan_request_destroy + subroutine titan_write_to_filename(self, filename) + use jessl, only: ssl_read + implicit none + + class(titan_request)::self + character(*), intent(in)::filename + integer::unum + + character, dimension(64)::buf + integer::bufread + + integer(kind=8)::bytes_to_go + integer::i + + open(newunit=unum, file=filename, status="unknown", action="write", access="stream") + + bytes_to_go = self%size + + do while(bytes_to_go > 0) + bufread = ssl_read(self%ssl_connection, buf) + bytes_to_go = bytes_to_go - bufread + + do i = 1, bufread + write(unum, '(A1)', advance='no') buf(i:i) + end do + + end do + + close(unum) + + end subroutine titan_write_to_filename + end module server_response -- cgit v1.2.3