IMPORT util IMPORT com CONSTANT ERR_METHOD = "Method not supported" TYPE TYP_status RECORD code INTEGER, desc STRING END RECORD TYPE reqInfoTyp RECORD method STRING, ctype STRING, # check the Content-Type informat STRING, # short word for Content Type caccept STRING, # check which format the client accepts outformat STRING, # short word for Accept path STRING, query STRING, # the query string items DYNAMIC ARRAY OF RECORD name STRING, value STRING END RECORD END RECORD DEFINE m_reqInfo reqInfoTyp DEFINE err TYP_status MAIN DEFINE ret INTEGER DEFINE req com.HttpServiceRequest DEFINE method,url,acc,resp STRING DEFINE idx,rcode INT DEFER INTERRUPT # Start the server DISPLAY "Starting server..." # Starts the server on the port number specified by the FGLAPPSERVER environment variable # (EX: FGLAPPSERVER=8090) CALL com.WebServiceEngine.Start() DISPLAY "The server is listening." # create the server WHILE TRUE TRY LET req = com.WebServiceEngine.GetHTTPServiceRequest(10) CALL getReqInfo(req) # Get the type of method LET method = m_reqInfo.method # Get the request path LET url = m_reqInfo.path # Get the output format LET acc = m_reqInfo.outformat DISPLAY "Processing request... ", method, " ", url # parse the url, retrieve the operation and the operand DISPLAY method CASE method WHEN "GET" IF url.getIndexOf("/recepcion",1) > 0 THEN DISPLAY "URL AQUI:",url ELSE CALL req.sendTextResponse(400,"Url no es valida","Url no es valida") END IF IF url.getIndexOf("/aprobacioncomercial",1) > 0 THEN DISPLAY "URL AQUI:",url ELSE CALL req.sendTextResponse(400,"Url no es valida","Url no es valida") END IF EXIT CASE WHEN "POST" IF url.getIndexOf("/recepcion",1) > 0 THEN DISPLAY "entre a ejecutar" CALL recepcion(req,url) RETURNING rcode, resp CALL req.sendTextResponse(rcode,"Respuesta",resp) EXIT WHILE ELSE IF url.getIndexOf("/aprobacioncomercial",1) > 0 THEN DISPLAY "Aprobacion Comercial" CALL aprobacion(req) RETURNING rcode, resp CALL req.sendTextResponse(rcode,"Respuesta",resp) EXIT WHILE ELSE CALL req.sendTextResponse(400,"Respuesta","No se ha enviado correcto la URL") END IF END IF EXIT WHILE OTHERWISE CALL setError("Unknown request:\n" || url || "\n" || method) LET err.code = -3 LET err.desc = ERR_METHOD CALL req.sendTextResponse(200,"OK",util.JSON.stringify(err)) END CASE CATCH LET ret = status CASE ret WHEN -15565 DISPLAY "Server process has been stopped by Ctrl-C" EXIT WHILE WHEN -15575 DISPLAY "Server process has been disconnected by the GAS" EXIT WHILE OTHERWISE DISPLAY "[ERROR] " || ret EXIT WHILE END CASE IF int_flag<>0 THEN LET int_flag = 0 EXIT WHILE END IF END TRY END WHILE END MAIN FUNCTION getReqInfo(req) DEFINE req com.HTTPServiceRequest DEFINE str, val base.StringTokenizer DEFINE token STRING DEFINE i INT INITIALIZE m_reqInfo TO NULL LET m_reqInfo.ctype = getHeaderByName(req,"Content-Type") IF m_reqInfo.ctype.getIndexOf("/xml",1) THEN LET m_reqInfo.informat = "XML" ELSE LET m_reqInfo.informat = "JSON" END IF LET m_reqInfo.caccept = getHeaderByName(req,"Accept") IF m_reqInfo.caccept.getIndexOf("/xml",1) THEN LET m_reqInfo.outformat = "XML" ELSE LET m_reqInfo.outformat = "JSON" END IF LET m_reqInfo.method = req.getMethod() CALL parseUrl(req.getUrl()) RETURNING m_reqInfo.path, m_reqInfo.query LET str = base.StringTokenizer.create(m_reqInfo.query,"&") LET i=1 CALL m_reqInfo.items.clear() WHILE str.hasMoreTokens() LET token = str.nextToken() LET val = base.StringTokenizer.create(token,"=") IF val.hasMoreTokens() THEN LET m_reqInfo.items[i].name = val.nextToken() END IF IF val.hasMoreTokens() THEN LET m_reqInfo.items[i].value = val.nextToken() END IF LET i=i+1 END WHILE END FUNCTION FUNCTION getHeaderByName(areq,hname) DEFINE areq com.HTTPServiceRequest DEFINE hname STRING DEFINE aname STRING DEFINE iname STRING DEFINE i INT DEFINE n INT LET aname = hname.toLowerCase() TRY LET n = areq.getRequestHeaderCount() FOR i=1 TO n LET iname = areq.getRequestHeaderName(i) IF aname.equals(iname.toLowerCase()) THEN RETURN areq.getRequestHeaderValue(i) END IF END FOR CATCH RETURN NULL END TRY RETURN NULL END FUNCTION FUNCTION parseUrl(url) DEFINE url STRING DEFINE i INT LET i = url.getIndexOf("?",1) IF i = 0 THEN RETURN url, NULL ELSE RETURN url.subString(1,i), url.subString(i+1,url.getLength()) END IF END FUNCTION FUNCTION setError(s) DEFINE s STRING DISPLAY s END FUNCTION