! Copyright (c) 2020 Jeffrey Armstrong ! ! Permission is hereby granted, free of charge, to any person obtaining a copy ! of this software and associated documentation files (the "Software"), to deal ! in the Software without restriction, including without limitation the rights ! to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ! copies of the Software, and to permit persons to whom the Software is ! furnished to do so, subject to the following conditions: ! ! The above copyright notice and this permission notice shall be included in ! all copies or substantial portions of the Software. ! ! The Software shall be used for Good, not Evil. ! ! THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ! IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ! FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ! AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ! LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ! OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ! SOFTWARE. module http implicit none contains subroutine write_status(outunit, code) use logging implicit none integer, intent(in)::outunit, code character(len=32)::confirm write(outunit,'(A7,1X,I3)') "Status:", code write(confirm,'(A7,1X,I3)') "Status:", code call write_log(trim(confirm), LOG_INFO) end subroutine write_status subroutine write_response_headers(outunit, code, filesize, mimetype, cookiecmd) use logging implicit none integer, intent(in)::outunit, code, filesize character(*), intent(in)::mimetype character(*), intent(in), optional::cookiecmd character(16)::num_txt call write_status(outunit, code) if(present(cookiecmd)) then write(outunit, '(A)') cookiecmd end if write(num_txt, '(I16)') filesize write(outunit, '(A15,1X)', advance='no') "Content-Length:" write(outunit, *) trim(adjustl(num_txt)) write(outunit, '(A13,1X)', advance='no') "Content-Type:" write(outunit, *) trim(mimetype)//new_line(' ') end subroutine write_response_headers subroutine write_redirect(outunit, code, location) implicit none integer, intent(in)::outunit, code character(*), intent(in)::location call write_status(outunit, code) write(outunit, '(A9,1X)', advance='no') "Location:" write(outunit, *) trim(location)//new_line(' ') end subroutine write_redirect end module http