/*
Copyright (c) [2023] [squallzhao]
fountain is licensed under APACHE LICENSE, VERSION 2.0.
You can use this software according to the terms and conditions of the APACHE LICENSE, VERSION 2.0.
You may obtain a copy of APACHE LICENSE, VERSION 2.0 at: https://www.apache.org/licenses/LICENSE-2.0
*/
package microservice.web.http11
import std.convert.*
import microservice.trace.*
public class Http11Req {
var httpMethodType = HttpCommon.GET
public var uri = ""
public var queryString = ""
public var headers = Headers()
public var params = Params()
public var body = ""
private var length: Int32 = -1
public func getBodyLength(): Int32{
return length;
}
public func getMethod(): String{
return httpMethodType
}
public func parseFirstLine(line: String): Unit{
var pathFlag = 4
if (line.startsWith(HttpCommon.GET)){
httpMethodType = HttpCommon.GET
pathFlag = 4
} else if (line.startsWith(HttpCommon.POST)){
httpMethodType = HttpCommon.POST
pathFlag = 5
}
var path = line[pathFlag..line.indexOf(' ',pathFlag).getOrThrow()]
//var path = line.substring(pathFlag,line.indexOf(' ',pathFlag).getOrThrow())
if (line.startsWith(HttpCommon.GET)){
var t = path.indexOf('?')
if (t != Option<Int64>.None){
uri = path[0..t.getOrThrow()]
queryString = path[t.getOrThrow()+1..path.indexOf(' ').getOrThrow()-1]
params.load(queryString)
} else{
uri = path
}
} else if (line.startsWith(HttpCommon.POST)){
var t = path.indexOf(' ')
if (t != Option<Int64>.None){
uri = path[0..t.getOrThrow()]
queryString = ""
} else{
uri = path
}
}
}
public func parseOtherLine(line: String): Unit{
var header = Header()
if (header.parse(line)){
headers.put(header.key.getOrThrow(), header.value.getOrThrow())
if (header.key== HttpCommon.CONTENT_LENGTH){
this.length = Int32.parse(header.value.getOrThrow())
}
}
}
public func dump(){
Logger.trace("receive a request")
Logger.trace("uri="+uri)
Logger.trace("queryString="+queryString)
headers.dump()
params.dump()
Logger.trace("body="+body)
}
}