aboutsummaryrefslogtreecommitdiff
path: root/captain/response.f90
diff options
context:
space:
mode:
authorJeffrey Armstrong <jeff@approximatrix.com>2021-04-05 09:45:49 -0400
committerJeffrey Armstrong <jeff@approximatrix.com>2021-04-05 09:45:49 -0400
commit27c3147c7efe37657563fadcb835b50d00423475 (patch)
tree1a7ddebc114a4e465326080b6a1b9a662447c641 /captain/response.f90
parentbff06af2176e2f2813482b4fa7b4096a9982999b (diff)
downloadlevitating-27c3147c7efe37657563fadcb835b50d00423475.tar.gz
levitating-27c3147c7efe37657563fadcb835b50d00423475.zip
Implemented titan handling on the server, hopefully. Added sending the captured file for a task to failed jobs as well.
Diffstat (limited to 'captain/response.f90')
-rw-r--r--captain/response.f9044
1 files changed, 42 insertions, 2 deletions
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