- XTHCURL ;HCIOFO/SG - HTTP 1.0 CLIENT (URL TOOLS) ;07/29/10 14:01
- ;;7.3;TOOLKIT;**123**;Apr 25, 1995;Build 5
- ;Per VHA Directive 2004-038, this routine should not be modified
- Q
- ;
- ;***** ENCODES THE STRING
- ;
- ; STR String to be encoded
- ;
- ENCODE(STR) ;
- N CH,I
- F I=1:1 S CH=$E(STR,I) Q:CH="" I CH?1CP D
- . I CH="." Q
- . I CH=" " S $E(STR,I)="+" Q
- . S $E(STR,I)="%"_$$RJ^XLFSTR($$CNV^XLFUTL($A(CH),16),2,"0"),I=I+2
- Q STR
- ;
- ;##### CREATES URL FROM COMPONENTS
- ;
- ; HOST Host name
- ; [PORT] Port number (80, by default)
- ; [PATH] Resource path ("/", by default)
- ;
- ; [.QUERY] Reference to a local variable containing values of
- ; the query parameters: QUERY(Name)=Value.
- ;
- ; Return values:
- ; <0 Error Descriptor
- ; ... Resulting URL
- ;
- MAKEURL(HOST,PORT,PATH,QUERY) ;
- N NAME,QSTR,VAL
- S:HOST'["://" HOST="http://"_HOST
- S PORT=$S($G(PORT)>0:":"_(+PORT),1:"")
- ;---
- S (NAME,QSTR)=""
- F S NAME=$O(QUERY(NAME)) Q:NAME="" D
- . S VAL=$G(QUERY(NAME))
- . S QSTR=QSTR_"&"_$$ENCODE(NAME)_"="_$$ENCODE(VAL)
- S:QSTR'="" $E(QSTR,1)="?"
- ;---
- S:$G(PATH)="" PATH="/"
- Q HOST_PORT_$$NORMPATH($G(PATH)_QSTR)
- ;
- ;##### RETURNS "NORMALIZED" PATH
- ;
- ; PATH Source path
- ;
- NORMPATH(PATH) ;
- N LAST
- ;--- Make sure the path has a leading slash if it
- ;--- is not empty and has no query string
- I $E(PATH,1)'="/" S:$E(PATH,1)'="?" PATH="/"_PATH
- ;--- Append a trailing slash to the path if it has
- ;--- neither a file name nor a query string
- S LAST=$L(PATH,"/"),LAST=$P(PATH,"/",LAST)
- I LAST'="",LAST'["?",LAST'["." S PATH=PATH_"/"
- Q PATH
- ;
- ;##### PARSES THE URL INTO COMPONENTS
- ;
- ; URL Source URL
- ;
- ; .HOST Reference to a local variable for the host name
- ; .PORT Reference to a local variable for the port number
- ; .PATH Reference to a local variable for the path
- ;
- ; Return values:
- ; <0 Error Descriptor
- ; 0 Ok
- ;
- PARSEURL(URL,HOST,PORT,PATH) ;
- S:$F(URL,"://") URL=$P(URL,"://",2,999)
- S HOST=$TR($P(URL,"/")," ")
- S PATH=$$NORMPATH($P(URL,"/",2,999))
- S PORT=$P(HOST,":",2),HOST=$P(HOST,":")
- Q:HOST?." " $$ERROR^XTHC10(1,URL)
- S:PORT'>0 PORT=80
- Q 0
- XTHCURL ;HCIOFO/SG - HTTP 1.0 CLIENT (URL TOOLS) ;07/29/10 14:01
- +1 ;;7.3;TOOLKIT;**123**;Apr 25, 1995;Build 5
- +2 ;Per VHA Directive 2004-038, this routine should not be modified
- +3 QUIT
- +4 ;
- +5 ;***** ENCODES THE STRING
- +6 ;
- +7 ; STR String to be encoded
- +8 ;
- ENCODE(STR) ;
- +1 NEW CH,I
- +2 FOR I=1:1
- SET CH=$EXTRACT(STR,I)
- IF CH=""
- QUIT
- IF CH?1CP
- Begin DoDot:1
- +3 IF CH="."
- QUIT
- +4 IF CH=" "
- SET $EXTRACT(STR,I)="+"
- QUIT
- +5 SET $EXTRACT(STR,I)="%"_$$RJ^XLFSTR($$CNV^XLFUTL($ASCII(CH),16),2,"0")
- SET I=I+2
- End DoDot:1
- +6 QUIT STR
- +7 ;
- +8 ;##### CREATES URL FROM COMPONENTS
- +9 ;
- +10 ; HOST Host name
- +11 ; [PORT] Port number (80, by default)
- +12 ; [PATH] Resource path ("/", by default)
- +13 ;
- +14 ; [.QUERY] Reference to a local variable containing values of
- +15 ; the query parameters: QUERY(Name)=Value.
- +16 ;
- +17 ; Return values:
- +18 ; <0 Error Descriptor
- +19 ; ... Resulting URL
- +20 ;
- MAKEURL(HOST,PORT,PATH,QUERY) ;
- +1 NEW NAME,QSTR,VAL
- +2 IF HOST'["
- SET HOST="http://"_HOST
- +3 SET PORT=$SELECT($GET(PORT)>0:":"_(+PORT),1:"")
- +4 ;---
- +5 SET (NAME,QSTR)=""
- +6 FOR
- SET NAME=$ORDER(QUERY(NAME))
- IF NAME=""
- QUIT
- Begin DoDot:1
- +7 SET VAL=$GET(QUERY(NAME))
- +8 SET QSTR=QSTR_"&"_$$ENCODE(NAME)_"="_$$ENCODE(VAL)
- End DoDot:1
- +9 IF QSTR'=""
- SET $EXTRACT(QSTR,1)="?"
- +10 ;---
- +11 IF $GET(PATH)=""
- SET PATH="/"
- +12 QUIT HOST_PORT_$$NORMPATH($GET(PATH)_QSTR)
- +13 ;
- +14 ;##### RETURNS "NORMALIZED" PATH
- +15 ;
- +16 ; PATH Source path
- +17 ;
- NORMPATH(PATH) ;
- +1 NEW LAST
- +2 ;--- Make sure the path has a leading slash if it
- +3 ;--- is not empty and has no query string
- +4 IF $EXTRACT(PATH,1)'="/"
- IF $EXTRACT(PATH,1)'="?"
- SET PATH="/"_PATH
- +5 ;--- Append a trailing slash to the path if it has
- +6 ;--- neither a file name nor a query string
- +7 SET LAST=$LENGTH(PATH,"/")
- SET LAST=$PIECE(PATH,"/",LAST)
- +8 IF LAST'=""
- IF LAST'["?"
- IF LAST'["."
- SET PATH=PATH_"/"
- +9 QUIT PATH
- +10 ;
- +11 ;##### PARSES THE URL INTO COMPONENTS
- +12 ;
- +13 ; URL Source URL
- +14 ;
- +15 ; .HOST Reference to a local variable for the host name
- +16 ; .PORT Reference to a local variable for the port number
- +17 ; .PATH Reference to a local variable for the path
- +18 ;
- +19 ; Return values:
- +20 ; <0 Error Descriptor
- +21 ; 0 Ok
- +22 ;
- PARSEURL(URL,HOST,PORT,PATH) ;
- +1 IF $FIND(URL,"
- SET URL=$PIECE(URL,"://",2,999)
- +2 SET HOST=$TRANSLATE($PIECE(URL,"/")," ")
- +3 SET PATH=$$NORMPATH($PIECE(URL,"/",2,999))
- +4 SET PORT=$PIECE(HOST,":",2)
- SET HOST=$PIECE(HOST,":")
- +5 IF HOST?." "
- QUIT $$ERROR^XTHC10(1,URL)
- +6 IF PORT'>0
- SET PORT=80
- +7 QUIT 0