[613] | 1 | %ZMGWSIS ; Service Integration - Child Process
|
---|
| 2 | ;
|
---|
| 3 | ; ----------------------------------------------------------------------------
|
---|
| 4 | ; | m_apache |
|
---|
| 5 | ; | Copyright (c) 2004-2009 M/Gateway Developments Ltd, |
|
---|
| 6 | ; | Surrey UK. |
|
---|
| 7 | ; | All rights reserved. |
|
---|
| 8 | ; | |
|
---|
| 9 | ; | http://www.mgateway.com |
|
---|
| 10 | ; | |
|
---|
| 11 | ; | This program is free software: you can redistribute it and/or modify |
|
---|
| 12 | ; | it under the terms of the GNU Affero General Public License as |
|
---|
| 13 | ; | published by the Free Software Foundation, either version 3 of the |
|
---|
| 14 | ; | License, or (at your option) any later version. |
|
---|
| 15 | ; | |
|
---|
| 16 | ; | This program is distributed in the hope that it will be useful, |
|
---|
| 17 | ; | but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
---|
| 18 | ; | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
---|
| 19 | ; | GNU Affero General Public License for more details. |
|
---|
| 20 | ; | |
|
---|
| 21 | ; | You should have received a copy of the GNU Affero General Public License |
|
---|
| 22 | ; | along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
---|
| 23 | ; ----------------------------------------------------------------------------
|
---|
| 24 | ;
|
---|
| 25 | A0 D VERS Q
|
---|
| 26 | ;f i=1:1:10000 s x=$$esize(.y,i,62),z=$$dsize(y,$l(y),62) w !,i,?10,y,?20,z
|
---|
| 27 | q
|
---|
| 28 | ;
|
---|
| 29 | V() ; Version and date
|
---|
| 30 | N V,R,D
|
---|
| 31 | S V="2.0"
|
---|
| 32 | S R=6
|
---|
| 33 | S D="17 February 2009"
|
---|
| 34 | Q V_"."_R_"."_D
|
---|
| 35 | ;
|
---|
| 36 | VERS ; Version information
|
---|
| 37 | N V
|
---|
| 38 | S V=$$V()
|
---|
| 39 | W !,"M/Gateway Developments Ltd - Service Integration Gateway"
|
---|
| 40 | W !,"Version: "_$P(V,".",1,2)_"; Revision "_$P(V,".",3)_" ("_$P(V,".",4)_")"
|
---|
| 41 | W !
|
---|
| 42 | Q
|
---|
| 43 | ;
|
---|
| 44 | VARS ; Public system variables
|
---|
| 45 | ;
|
---|
| 46 | ; The following variables can be modified in accordance with the documentation
|
---|
| 47 | s extra=$c(1) ; Key marker for oversize data strings
|
---|
| 48 | s abyref=0 ; Set to 1 to treat all arrays as if they were passed by reference
|
---|
| 49 | s mqinfo=0 ; Set to 1 to place all MQ error/information messages in %mgwmq("info")
|
---|
| 50 | ; Otherwise, error messages will be placed in %mgwmq("error")
|
---|
| 51 | ; and 'information only' messages in %mgwmq("info")
|
---|
| 52 | ;
|
---|
| 53 | ; The following variables must not be modified
|
---|
| 54 | i '($d(global)#10) s global=0
|
---|
| 55 | i '($d(oversize)#10) s oversize=0
|
---|
| 56 | i '($d(offset)#10) s offset=0
|
---|
| 57 | i '($d(version)#10) s version=+$$V()
|
---|
| 58 | ; #define MGW_TX_DATA 0
|
---|
| 59 | ; #define MGW_TX_AKEY 1
|
---|
| 60 | ; #define MGW_TX_AREC 2
|
---|
| 61 | ; #define MGW_TX_EOD 3
|
---|
| 62 | s ddata=0,dakey=1,darec=2,deod=3
|
---|
| 63 | q
|
---|
| 64 | ;
|
---|
| 65 | esize(esize,size,base)
|
---|
| 66 | n i,x
|
---|
| 67 | i base'=10 g esize1
|
---|
| 68 | s esize=size
|
---|
| 69 | q $l(esize)
|
---|
| 70 | esize1 ; Up to base 62
|
---|
| 71 | s esize=$$ebase62(size#base)
|
---|
| 72 | f i=1:1 s x=(size\(base**i)) q:'x s esize=$$ebase62(x#base)_esize
|
---|
| 73 | q $l(esize)
|
---|
| 74 | ;
|
---|
| 75 | dsize(esize,len,base)
|
---|
| 76 | n i,x
|
---|
| 77 | i base'=10 g dsize1
|
---|
| 78 | s size=+$e(esize,1,len)
|
---|
| 79 | q size
|
---|
| 80 | dsize1 ; Up to base 62
|
---|
| 81 | s size=0
|
---|
| 82 | f i=len:-1:1 s x=$e(esize,i) s size=size+($$dbase62(x)*(base**(len-i)))
|
---|
| 83 | q size
|
---|
| 84 | ;
|
---|
| 85 | ebase62(n10) ; Encode to single digit (up to) base-62 number
|
---|
| 86 | i n10'<0,n10<10 q $c(48+n10)
|
---|
| 87 | i n10'<10,n10<36 q $c(65+(n10-10))
|
---|
| 88 | i n10'<36,n10<62 q $c(97+(n10-36))
|
---|
| 89 | q ""
|
---|
| 90 | ;
|
---|
| 91 | dbase62(nxx) ; Decode single digit (up to) base-62 number
|
---|
| 92 | n x
|
---|
| 93 | s x=$a(nxx)
|
---|
| 94 | i x'<48,x<58 q (x-48)
|
---|
| 95 | i x'<65,x<91 q ((x-65)+10)
|
---|
| 96 | i x'<97,x<123 q ((x-97)+36)
|
---|
| 97 | q ""
|
---|
| 98 | ;
|
---|
| 99 | ehead(head,size,byref,type)
|
---|
| 100 | s slen=$$esize(.esize,size,10)
|
---|
| 101 | s code=slen+(type*8)+(byref*64)
|
---|
| 102 | s head=$c(code)_esize
|
---|
| 103 | s hlen=slen+1
|
---|
| 104 | q hlen
|
---|
| 105 | ;
|
---|
| 106 | dhead(head,size,byref,type)
|
---|
| 107 | s code=$a(head,1)
|
---|
| 108 | s byref=code\64
|
---|
| 109 | s type=(code#64)\8
|
---|
| 110 | s slen=code#8
|
---|
| 111 | s hlen=slen+1
|
---|
| 112 | s size=0 i $l(head)'<hlen s size=$$dsize($e(head,2,slen+1),slen,10)
|
---|
| 113 | q hlen
|
---|
| 114 | ;
|
---|
| 115 | rdxx(len) ; Read 'len' Bytes from MGWSI
|
---|
| 116 | n x,nmax,n,ncnt
|
---|
| 117 | i 'len q ""
|
---|
| 118 | s x="",nmax=len,n=0,ncnt=0 f r y#nmax d q:'nmax i ncnt>100 q
|
---|
| 119 | . i y="" s ncnt=ncnt+1 q
|
---|
| 120 | . s ncnt=0,x=x_y,n=n+$l(y),nmax=len-n
|
---|
| 121 | . q
|
---|
| 122 | i ncnt s x="" d HALT ; Client disconnect
|
---|
| 123 | q x
|
---|
| 124 | ;
|
---|
| 125 | rdx(len,clen,rlen) ; Read from MGWSI - Initialize: (rdxsize,rdxptr,rdxrlen)=0,rdxbuf="",maxlen=$$getslen()
|
---|
| 126 | n result,get,avail
|
---|
| 127 | ;
|
---|
| 128 | ;s result="" f get=1:1:len r *x s result=result_$c(x)
|
---|
| 129 | ;s rlen=rlen+len q result
|
---|
| 130 | ;
|
---|
| 131 | s get=len,result=""
|
---|
| 132 | i 'len q result
|
---|
| 133 | f d i 'get q
|
---|
| 134 | . s avail=rdxsize-rdxptr
|
---|
| 135 | . ;d EVENT("i="_i_";len="_len_";avail="_avail_";get="_get_"=("_rdxbuf_") "_CLEN_" "_RLEN)
|
---|
| 136 | . i get'>avail s result=result_$e(rdxbuf,rdxptr+1,rdxptr+get),rdxptr=rdxptr+get,get=0 q
|
---|
| 137 | . s result=rdxbuf,rdxptr=0,get=get-avail
|
---|
| 138 | . s avail=clen-rdxrlen i 'avail q
|
---|
| 139 | . i avail>maxlen s avail=maxlen
|
---|
| 140 | . s rdxbuf=$$rdxx(avail),rdxsize=avail,rdxptr=0,rdxrlen=rdxrlen+avail
|
---|
| 141 | . ;d EVENT("rdxbuf="_i_"="_rdxbuf)
|
---|
| 142 | . q
|
---|
| 143 | s rlen=rlen+len
|
---|
| 144 | q result
|
---|
| 145 | ;
|
---|
| 146 | CHILD(pport,port,conc,uci) ; Child
|
---|
| 147 | new $ZTRAP set $ZTRAP="ZGOTO "_$ZLEVEL_":CHILDE"
|
---|
| 148 | i uci'="" D UCI(uci)
|
---|
| 149 | i 'conc d
|
---|
| 150 | . s ^%MGWSI("TCP_PORT",pport,port)=$j
|
---|
| 151 | . Set dev="server$"_$j,timeout=30
|
---|
| 152 | . ; Open TCP server device
|
---|
| 153 | . Open dev:(ZLISTEN=port_":TCP":attach="server"):timeout:"SOCKET"
|
---|
| 154 | . Use dev
|
---|
| 155 | . Write /listen(1)
|
---|
| 156 | . set %ZNSock="",%ZNFrom=""
|
---|
| 157 | . S OK=1 F D Q:OK I $D(^%MGWSI("STOP")) S OK=0 Q
|
---|
| 158 | . . Write /wait(timeout)
|
---|
| 159 | . . I $KEY'="" S OK=1 Q
|
---|
| 160 | . . d EVENT^%ZMGWSIS("Write /wait(timeout) expires")
|
---|
| 161 | . . S OK=0
|
---|
| 162 | . . Q
|
---|
| 163 | . I 'OK C dev H
|
---|
| 164 | . set %ZNSock=$piece($KEY,"|",2),%ZNFrom=$piece($KEY,"|",3)
|
---|
| 165 | . ;d EVENT^%ZMGWSIS("Incoming child connection from "_%ZNFrom_" ("_%ZNSock_")")
|
---|
| 166 | . q
|
---|
| 167 | ;
|
---|
| 168 | s nato=0
|
---|
| 169 | CHILD2 ; Child request loop
|
---|
| 170 | d VARS
|
---|
| 171 | k ^%MGW("MPC",$J),^MGWSI($J)
|
---|
| 172 | f i=1:1:37 k @("req"_i)
|
---|
| 173 | k req s argc=1,array=0
|
---|
| 174 | i '($d(nato)#10) s nato=0
|
---|
| 175 | CHILD3 ; Read Request
|
---|
| 176 | ;d EVENT("******* GET NEXT REQUEST *******")
|
---|
| 177 | s maxlen=$$getslen()
|
---|
| 178 | s (rdxsize,rdxptr,rdxrlen)=0,rdxbuf=""
|
---|
| 179 | s sn=0,sl=0,ok=1,type=0,offset=0,var="req"_argc,req(argc)=var,(cmnd,pcmnd,buf)=""
|
---|
| 180 | i 'nato r *x
|
---|
| 181 | i nato r *x:nato i '$T D HALT ; No-activity timeout
|
---|
| 182 | i x=0 D HALT ; Client disconnect
|
---|
| 183 | s buf=$c(x) f r *x q:x=10!(x=0) s buf=buf_$c(x)
|
---|
| 184 | i x=0 D HALT ; Client disconnect
|
---|
| 185 | s type=0,byref=0 d REQ1 s @var=buf
|
---|
| 186 | s cmnd=$p(buf,"^",2)
|
---|
| 187 | S HLEN=$L(buf),CLEN=0
|
---|
| 188 | I cmnd="P" S CLEN=$$dsize($E(buf,HLEN-(5-1),HLEN),5,62)
|
---|
| 189 | s %ZCS("client")=$E(buf,4)
|
---|
| 190 | ;d EVENT("request size="_CLEN_" ("_$E(buf,HLEN-(5-1),HLEN)_"); client="_%ZCS("client")_" ;header = "_buf)
|
---|
| 191 | s RLEN=0
|
---|
| 192 | I CLEN D REQ
|
---|
| 193 | ;
|
---|
| 194 | ;f i=1:1:argc d EVENT("arg "_i_" = "_$g(@req(i)))
|
---|
| 195 | ;
|
---|
| 196 | s req=$g(@req(1)) i req="" G CHILD2
|
---|
| 197 | s cmnd=$p(req,"^",2)
|
---|
| 198 | k res s res="" s res(1)="00000cv"_$C(10)
|
---|
| 199 | i cmnd="A" D AYT
|
---|
| 200 | i cmnd="S" D DINT
|
---|
| 201 | i cmnd="P" D MPHP
|
---|
| 202 | i cmnd="H" D INFO
|
---|
| 203 | i cmnd="X" D HALT
|
---|
| 204 | D END
|
---|
| 205 | k res s res=""
|
---|
| 206 | G CHILD2
|
---|
| 207 | ;
|
---|
| 208 | CHILDE ; Error
|
---|
| 209 | d EVENT($ZS)
|
---|
| 210 | i $ZS["READ" g HALT
|
---|
| 211 | G CHILD2
|
---|
| 212 | ;
|
---|
| 213 | HALT ; Halt
|
---|
| 214 | i 'conc d
|
---|
| 215 | . ; Close TCP server device
|
---|
| 216 | . i $l($g(dev)) c dev
|
---|
| 217 | . s x="" f s x=$o(^%MGWSI("TCP_PORT",x)) q:x="" k ^%MGWSI("TCP_PORT",x,port)
|
---|
| 218 | . q
|
---|
| 219 | h
|
---|
| 220 | ;
|
---|
| 221 | REQ ; Read request data
|
---|
| 222 | n dev,get,got
|
---|
| 223 | REQ0 ; Get next argument
|
---|
| 224 | s x=$$rdx(1,CLEN,.RLEN),hlen=$$dhead(x,.size,.byref,.type)
|
---|
| 225 | ;d EVENT("(1) CLEN="_CLEN_";RLEN="_RLEN_";hlen="_hlen_";argc="_argc_";size="_size_";byref="_byref_";type="_type)
|
---|
| 226 | s slen=hlen-1
|
---|
| 227 | s esize=$$rdx(slen,CLEN,.RLEN)
|
---|
| 228 | s size=$$dsize(esize,slen,10)
|
---|
| 229 | ;d EVENT("(2) CLEN="_CLEN_";RLEN="_RLEN_";hlen="_hlen_";slen="_slen_";argc="_argc_";size="_size_";byref="_byref_";type="_type)
|
---|
| 230 | s argc=argc+1
|
---|
| 231 | d REQ1
|
---|
| 232 | i type=darec d ARRAY G REQZ
|
---|
| 233 | s got=0 f sn=0:1 s get=size-got s:get>maxlen get=maxlen s buf=$$rdx(get,CLEN,.RLEN) d i got=size q
|
---|
| 234 | . s got=got+get
|
---|
| 235 | . ;d EVENT("(3) Data: CLEN="_CLEN_";RLEN="_RLEN_";size="_size_";get="_get_";sn="_sn_";pcmnd="_pcmnd_";buf="_buf)
|
---|
| 236 | . i argc=3,pcmnd="h" s @var=buf d MPC q
|
---|
| 237 | . i 'sn s @var=buf q
|
---|
| 238 | . i sn s @(var_"(extra,sn)")=buf q
|
---|
| 239 | . q
|
---|
| 240 | REQZ ; Argument read
|
---|
| 241 | i RLEN<CLEN G REQ0
|
---|
| 242 | s eod=1
|
---|
| 243 | q
|
---|
| 244 | ;
|
---|
| 245 | REQ1 ; Initialize next argument
|
---|
| 246 | i argc=1 d
|
---|
| 247 | . s cmnd=$p(buf,"^",2)
|
---|
| 248 | . s sysp=$p(buf,"^",3)
|
---|
| 249 | . s uci=$p(sysp,"#",2) i uci'="" d
|
---|
| 250 | . . s ucic=$$getuci()
|
---|
| 251 | . . i ucic'="",uci=ucic q
|
---|
| 252 | . . D UCI(uci) D EVENT("Correct NameSpace from '"_ucic_"' to '"_uci_"'")
|
---|
| 253 | . . q
|
---|
| 254 | . s offset=$p(sysp,"#",3)+0
|
---|
| 255 | . s global=$p(sysp,"#",7)+0
|
---|
| 256 | . s pcmnd=$p(buf,"^",4)
|
---|
| 257 | . q
|
---|
| 258 | s sn=0,sl=0
|
---|
| 259 | s var="req"_argc
|
---|
| 260 | s req(argc)=var
|
---|
| 261 | s req(argc,0)=type i type=darec s req(argc,0)=1
|
---|
| 262 | s req(argc,1)=byref
|
---|
| 263 | i type=1,abyref=1 s req(argc,1)=1
|
---|
| 264 | q
|
---|
| 265 | ;
|
---|
| 266 | MPC ; Raw content for HTTP POST: save section of data
|
---|
| 267 | s sn=sn+1,^%MGW("MPC",$J,"CONTENT",sn)=buf,buf="",sl=0
|
---|
| 268 | q
|
---|
| 269 | ;
|
---|
| 270 | ARRAY ; Read array
|
---|
| 271 | n x,kn,val,sn,ext,get,got
|
---|
| 272 | ;d EVENT("*** array ***")
|
---|
| 273 | k x,ext s kn=0
|
---|
| 274 | ARRAY0 ; Read next element (key or data)
|
---|
| 275 | s sn=0,sl=0
|
---|
| 276 | s x=$$rdx(1,CLEN,.RLEN),hlen=$$dhead(x,.size,.byref,.type)
|
---|
| 277 | ;d EVENT("(1) Array CLEN="_CLEN_";RLEN="_RLEN_";hlen="_hlen_";argc="_argc_";size="_size_";byref="_byref_";type="_type)
|
---|
| 278 | s slen=hlen-1
|
---|
| 279 | s esize=$$rdx(slen,CLEN,.RLEN)
|
---|
| 280 | s size=$$dsize(esize,slen,10)
|
---|
| 281 | ;d EVENT("(2) Array CLEN="_CLEN_";RLEN="_RLEN_";hlen="_hlen_";slen="_slen_";argc="_argc_";size="_size_";byref="_byref_";type="_type)
|
---|
| 282 | i type=deod q
|
---|
| 283 | s got=0 f sn=0:1 s get=size-got s:get>maxlen get=maxlen s buf=$$rdx(get,CLEN,.RLEN) d i got=size q
|
---|
| 284 | . s got=got+get
|
---|
| 285 | . ;d EVENT("(3) Array Data CLEN="_CLEN_";RLEN="_RLEN_";size="_size_";get="_get_";sn="_sn_";pcmnd="_pcmnd_";buf="_buf)
|
---|
| 286 | . i argc=3,pcmnd="h" s @var=buf d MPC q
|
---|
| 287 | . i type=dakey s kn=kn+1,x(kn)=buf
|
---|
| 288 | . i type=ddata s val=buf D ARRAY1 k x,ext s kn=0
|
---|
| 289 | . q
|
---|
| 290 | g ARRAY0
|
---|
| 291 | ;
|
---|
| 292 | ARRAY1 ; Read array - Set a single node
|
---|
| 293 | n n,i,ref,com,key
|
---|
| 294 | new $ZTRAP set $ZTRAP="ZGOTO "_$ZLEVEL_":ARRAY1E"
|
---|
| 295 | s (key,com)="" f i=1:1:kn q:i=kn&($g(x(i))=" ") s key=key_com_"x("_i_")",com=","
|
---|
| 296 | i global d
|
---|
| 297 | . i $l(key) s ref="^MGWSI($j,argc-2,"_key_")",eref="^MGWSI($j,argc-2,"_key_",extra,sn)"
|
---|
| 298 | . i '$l(key) s ref="^MGWSI($j,argc-2)",eref="^MGWSI($j,argc-2,extra,sn)"
|
---|
| 299 | . q
|
---|
| 300 | i 'global d
|
---|
| 301 | . i $l(key) s ref=req(argc)_"("_key_")",eref=req(argc)_"("_key_",extra,sn)"
|
---|
| 302 | . i '$l(key) s ref=req(argc),eref=req(argc)_"(extra,sn)"
|
---|
| 303 | . q
|
---|
| 304 | i $l(ref) x "s "_ref_"=val"
|
---|
| 305 | f sn=1:1 q:'$d(ext(sn)) x "s "_eref_"=ext(sn)"
|
---|
| 306 | Q
|
---|
| 307 | ARRAY1E ;
|
---|
| 308 | d EVENT("Array: "_$ZS)
|
---|
| 309 | Q
|
---|
| 310 | ;
|
---|
| 311 | END ; Terminate Response
|
---|
| 312 | n len,len62,i,head,x
|
---|
| 313 | i $e($g(res(1)),6,7)="sc" w $p(res(1),"0",1) D FLUSH q ; Streamed response
|
---|
| 314 | s len=0
|
---|
| 315 | f i=1:1 q:'$d(res(i)) s len=len+$l(res(i))
|
---|
| 316 | s len=len-8
|
---|
| 317 | s head=$e($g(res(1)),1,8)
|
---|
| 318 | s x=$$esize(.len62,len,62)
|
---|
| 319 | f q:$l(len62)'<5 s len62="0"_len62
|
---|
| 320 | s head=len62_$e(head,6,8) i $l(head)'=8 s head=len62_"cv"_$c(10)
|
---|
| 321 | s res(1)=head_$e($g(res(1)),9,99999)
|
---|
| 322 | ; Flush the lot out
|
---|
| 323 | f i=1:1 q:'$d(res(i)) w res(i)
|
---|
| 324 | D FLUSH
|
---|
| 325 | Q
|
---|
| 326 | ;
|
---|
| 327 | FLUSH ; Flush output buffer
|
---|
| 328 | ;w *-3
|
---|
| 329 | ;w *1
|
---|
| 330 | q
|
---|
| 331 | ;
|
---|
| 332 | AYT ; Are you there?
|
---|
| 333 | S req=$g(@req(1))
|
---|
| 334 | s txt=$p($h,",",2)
|
---|
| 335 | f q:$l(txt)'<5 s txt="0"_txt
|
---|
| 336 | s txt="m"_txt
|
---|
| 337 | f q:$l(txt)'<12 s txt=txt_"0"
|
---|
| 338 | d send(txt)
|
---|
| 339 | q
|
---|
| 340 | ;
|
---|
| 341 | DINT ; Initialise the service link
|
---|
| 342 | N port,dev,conc,%uci
|
---|
| 343 | S req=$p($g(@req(1)),"^S^",2,9999)
|
---|
| 344 | ;"^S^version=%s&timeout=%d&nls=%s&uci=%s"
|
---|
| 345 | S version=$p($p(req,"version=",2),"&",1)
|
---|
| 346 | S nato=+$p($p(req,"timeout=",2),"&",1)
|
---|
| 347 | S %ZCS("NLS_TRANS")=$p($p(req,"nls=",2),"&",1)
|
---|
| 348 | S %UCI=$p($p(req,"uci=",2),"&",1)
|
---|
| 349 | I $L(%UCI) D UCI(%UCI)
|
---|
| 350 | S x=$$setio(%ZCS("NLS_TRANS"))
|
---|
| 351 | S %UCI=$$getuci()
|
---|
| 352 | s systype=$$getsys()
|
---|
| 353 | s txt="pid="_$J_"&uci="_%UCI_"&server_type="_systype_"&version="_$p($$V(),".",1,3)_"&child_port=0"
|
---|
| 354 | d send(txt)
|
---|
| 355 | q
|
---|
| 356 | ;
|
---|
| 357 | UCI(UCI) ; Change NameSpace/UCI
|
---|
| 358 | new $ZTRAP set $ZTRAP="ZGOTO "_$ZLEVEL_":UCIE"
|
---|
| 359 | i UCI="" Q
|
---|
| 360 | s $ZG=UCI
|
---|
| 361 | Q
|
---|
| 362 | UCIE ; Error
|
---|
| 363 | d EVENT("UCI Error: "_UCI_" : "_$ZS)
|
---|
| 364 | q
|
---|
| 365 | ;
|
---|
| 366 | INFO ; Connection Info
|
---|
| 367 | n port,dev,conc,nato
|
---|
| 368 | d send("HTTP/1.1 200 OK"_$Char(13,10)_"Connection: close"_$Char(13,10)_"Content-type: text/html"_$Char(13,10,13,10))
|
---|
| 369 | d send("<html><head><title>MGWSI - Connection Test</title></head><body bgcolor=#ffffcc>")
|
---|
| 370 | d send("<h2>MGWSI - Connection Test Successful</h2>")
|
---|
| 371 | d send("<table border=1>")
|
---|
| 372 | d send("<tr><td>"_$$getsys()_" Version:</td><td><b>"_$ZV_"<b><tr>")
|
---|
| 373 | d send("<tr><td>UCI:</td><td><b>"_$$getuci()_"<b><tr>")
|
---|
| 374 | d send("</table>")
|
---|
| 375 | d send("</body></html>")
|
---|
| 376 | q
|
---|
| 377 | ;
|
---|
| 378 | EVENT(TEXT) ; Log M-Side Event
|
---|
| 379 | N port,dev,conc,N,EMAX
|
---|
| 380 | new $ZTRAP set $ZTRAP="ZGOTO "_$ZLEVEL_":EVENTE"
|
---|
| 381 | F I=1:1 S X=$E(TEXT,I) Q:X="" S Y=$S(X=$C(13):"\r",X=$C(10):"\n",1:"") I Y'="" S $E(TEXT,I)=Y
|
---|
| 382 | S EMAX=100 ; Maximum log size (No. messages)
|
---|
| 383 | L +^%MGWSI("LOG")
|
---|
| 384 | S N=$G(^%MGWSI("LOG")) I N="" S N=0
|
---|
| 385 | S N=N+1,^%MGWSI("LOG")=N
|
---|
| 386 | L -^%MGWSI("LOG")
|
---|
| 387 | S ^%MGWSI("LOG",N,0)=$$HEAD(),^%MGWSI("LOG",N,1)=$E(TEXT,1,230)
|
---|
| 388 | F N=N-EMAX:-1 Q:'$D(^%MGWSI("LOG",N)) K ^(N)
|
---|
| 389 | Q
|
---|
| 390 | EVENTE ; Error
|
---|
| 391 | Q
|
---|
| 392 | ;
|
---|
| 393 | DDATE(DATE) ; Decode M date
|
---|
| 394 | new $ZTRAP set $ZTRAP="ZGOTO "_$ZLEVEL_":DATEE"
|
---|
| 395 | Q $ZD(DATE,2)
|
---|
| 396 | DDATEE ; No $ZD Function
|
---|
| 397 | Q DATE
|
---|
| 398 | ;
|
---|
| 399 | DTIME(TIME) ; Decode M Time
|
---|
| 400 | Q (TIME\3600)_":"_(TIME#3600\60)
|
---|
| 401 | ;
|
---|
| 402 | HEAD() ; Format Header record
|
---|
| 403 | N %UCI
|
---|
| 404 | new $ZTRAP set $ZTRAP="ZGOTO "_$ZLEVEL_":HEADE"
|
---|
| 405 | s %UCI=$$getuci()
|
---|
| 406 | HEADE ; Error
|
---|
| 407 | Q $$DDATE(+$H)_" at "_$$DTIME($P($H,",",2))_"~"_$G(%ZCS("PORT"))_"~"_%UCI
|
---|
| 408 | ;
|
---|
| 409 | HMACSHA256(string,key,b64,context) ; HMAC-SHA256
|
---|
| 410 | Q $$CRYPT("127.0.0.1",$s(context:80,1:7040),"HMAC-SHA256",string,key,b64,context)
|
---|
| 411 | ;
|
---|
| 412 | HMACSHA1(string,key,b64,context) ; HMAC-SHA1
|
---|
| 413 | Q $$CRYPT("127.0.0.1",$s(context:80,1:7040),"HMAC-SHA1",string,key,b64,context)
|
---|
| 414 | ;
|
---|
| 415 | HMACSHA(string,key,b64,context) ; HMAC-SHA
|
---|
| 416 | Q $$CRYPT("127.0.0.1",$s(context:80,1:7040),"HMAC-SHA",string,key,b64,context)
|
---|
| 417 | ;
|
---|
| 418 | HMACMD5(string,key,b64,context) ; HMAC-MD5
|
---|
| 419 | Q $$CRYPT("127.0.0.1",$s(context:80,1:7040),"HMAC-MD5",string,key,b64,context)
|
---|
| 420 | ;
|
---|
| 421 | SHA256(string,b64,context) ; SHA256
|
---|
| 422 | Q $$CRYPT("127.0.0.1",$s(context:80,1:7040),"SHA256",string,"",b64,context)
|
---|
| 423 | ;
|
---|
| 424 | SHA1(string,b64,context) ; SHA1
|
---|
| 425 | Q $$CRYPT("127.0.0.1",$s(context:80,1:7040),"SHA1",string,"",b64,context)
|
---|
| 426 | ;
|
---|
| 427 | SHA(string,b64,context) ; SHA
|
---|
| 428 | Q $$CRYPT("127.0.0.1",$s(context:80,1:7040),"SHA",string,"",b64,context)
|
---|
| 429 | ;
|
---|
| 430 | MD5(string,b64,context) ; MD5
|
---|
| 431 | Q $$CRYPT("127.0.0.1",$s(context:80,1:7040),"MD5",string,"",b64,context)
|
---|
| 432 | ;
|
---|
| 433 | B64(string,context) ; BASE64
|
---|
| 434 | Q $$CRYPT("127.0.0.1",$s(context:80,1:7040),"B64",string,"",0,context)
|
---|
| 435 | ;
|
---|
| 436 | DB64(string,context) ; DECODE BASE64
|
---|
| 437 | Q $$CRYPT("127.0.0.1",$s(context:80,1:7040),"D-B64",string,"",0,context)
|
---|
| 438 | ;
|
---|
| 439 | TIME(context) ; TIME
|
---|
| 440 | Q $$CRYPT("127.0.0.1",$s(context:80,1:7040),"TIME","","",0,context)
|
---|
| 441 | ;
|
---|
| 442 | ZTS(context) ; ZTS
|
---|
| 443 | S TIME=$$TIME(context)
|
---|
| 444 | S ZTS=$P($H,",",1)_","_(($P(TIME,":",1)*60*60)+($P(TIME,":",2)*60)+$P(TIME,":",3))
|
---|
| 445 | Q ZTS
|
---|
| 446 | ;
|
---|
| 447 | CRYPT(IP,PORT,METHOD,string,key,b64,context)
|
---|
| 448 | n %mgwmq,response,method
|
---|
| 449 | s method=METHOD i b64 s method=method_"-B64"
|
---|
| 450 | s %mgwmq("send")=string
|
---|
| 451 | s %mgwmq("key")=key
|
---|
| 452 | i context=0 s response=$$WSMQ(IP,PORT,method,.%mgwmq)
|
---|
| 453 | i context=1 s response=$$WSX(IP,PORT,method,.%mgwmq)
|
---|
| 454 | Q $G(%mgwmq("recv"))
|
---|
| 455 | ;
|
---|
| 456 | WSMQ(IP,PORT,REQUEST,%mgwmq) ; Message for WebSphere MQ (Parameters passed by reference)
|
---|
| 457 | Q $$WSMQ1(IP,PORT,REQUEST)
|
---|
| 458 | ;
|
---|
| 459 | WSMQ1(IP,PORT,REQUEST) ; Message for WebSphere MQ (Parameters passed by global array - %mgwmq())
|
---|
| 460 | N (IP,PORT,REQUEST,%mgwmq)
|
---|
| 461 | new $ZTRAP set $ZTRAP="ZGOTO "_$ZLEVEL_":WSMQE"
|
---|
| 462 | ;
|
---|
| 463 | ; Close connection to Gateway
|
---|
| 464 | i REQUEST="CLOSE" d S result=1 G WSMQ1X
|
---|
| 465 | . i $d(%mgwmq("keepalive","dev")) s DEV=%mgwmq("keepalive","dev") k %mgwmq("keepalive") C DEV
|
---|
| 466 | . q
|
---|
| 467 | ;
|
---|
| 468 | D VARS
|
---|
| 469 | S CRLF=$C(13,10)
|
---|
| 470 | S REQUEST=$$ucase(REQUEST)
|
---|
| 471 | I REQUEST="GET" k %mgwsi("send")
|
---|
| 472 | S res=""
|
---|
| 473 | S %mgwmq("error")=""
|
---|
| 474 | s global=+$g(%mgwmq("global"))
|
---|
| 475 | ;
|
---|
| 476 | ; Create TCP connection to Gateway
|
---|
| 477 | s OK=1
|
---|
| 478 | i $d(%mgwmq("keepalive","dev")) s DEV=%mgwmq("keepalive","dev")
|
---|
| 479 | i '$d(%mgwmq("keepalive","dev")) d
|
---|
| 480 | . S DEV="client$"_$j,timeout=10
|
---|
| 481 | . O DEV:(connect=IP_":"_PORT_":TCP":attach="client"):timeout:"SOCKET" E S %mgwmq("error")="Cannot connect to MGWSI" s OK=0
|
---|
| 482 | . q
|
---|
| 483 | i 'OK S result=0 G WSMQ1X
|
---|
| 484 | ;
|
---|
| 485 | S maxlen=$$getslen()
|
---|
| 486 | S BUFFER="",BSIZE=0,EOF=0
|
---|
| 487 | S DEV(0)=$IO
|
---|
| 488 | U DEV
|
---|
| 489 | S REQ="WSMQ "_REQUEST_" v1.1"_CRLF D WSMQS
|
---|
| 490 | S X="" F S X=$O(%mgwmq(X)) Q:X="" I X'="recv",X'="send" S Y=$G(%mgwmq(X)) I Y'="" S REQ=X_": "_Y_CRLF D WSMQS
|
---|
| 491 | S REQ=CRLF D WSMQS
|
---|
| 492 | i global d
|
---|
| 493 | . S REQ=$G(^MGWSI($j,1,"send")) I REQ'="" D WSMQS
|
---|
| 494 | . S X="" F S X=$O(^MGWSI($j,1,"send",extra,X)) Q:X="" S REQ=$G(^MGWSI($j,1,"send",extra,X)) I REQ'="" D WSMQS
|
---|
| 495 | . S X="" F S X=$O(^MGWSI($j,1,"send",X)) Q:X="" I X'=extra S REQ=$G(^MGWSI($j,1,"send",X)) I REQ'="" D WSMQS
|
---|
| 496 | . q
|
---|
| 497 | i 'global d
|
---|
| 498 | . S REQ=$G(%mgwmq("send")) I REQ'="" D WSMQS
|
---|
| 499 | . S X="" F S X=$O(%mgwmq("send",extra,X)) Q:X="" S REQ=$G(%mgwmq("send",extra,X)) I REQ'="" D WSMQS
|
---|
| 500 | . S X="" F S X=$O(%mgwmq("send",X)) Q:X="" I X'=extra S REQ=$G(%mgwmq("send",X)) I REQ'="" D WSMQS
|
---|
| 501 | . q
|
---|
| 502 | ;S REQ=$C(deod),EOF=1 D WSMQS
|
---|
| 503 | S REQ=$C(7),EOF=1 D WSMQS
|
---|
| 504 | U DEV
|
---|
| 505 | s size=+$$rdxx(10)
|
---|
| 506 | S res="",len=0,sn=0,got=0,pre="",plen=0,hdr=1 F d q:got=size
|
---|
| 507 | . s get=size-got i get>maxlen s get=maxlen
|
---|
| 508 | . s x=$$rdxx(get) s got=got+get
|
---|
| 509 | . i got=size,$e(x,get)=$c(deod) s x=$e(x,1,get-1)
|
---|
| 510 | . i hdr d q
|
---|
| 511 | . . s lx=$l(x,$c(13)) f i=1:1:lx d q:'hdr
|
---|
| 512 | . . . s r=$p(x,$c(13),i)
|
---|
| 513 | . . . i i=lx s pre=r,plen=$l(pre) q
|
---|
| 514 | . . . i plen s r=pre_r,pre="",plen=0
|
---|
| 515 | . . . i r=$c(10) s hdr=0 s pre=$p(x,$c(13),i+1,99999) s:$e(pre)=$c(10) pre=$e(pre,2,99999) s plen=$l(pre) q
|
---|
| 516 | . . . s nam=$p(r,": ",1),val=$p(r,": ",2,99999)
|
---|
| 517 | . . . i $e(nam)=$c(10) s nam=$e(nam,2,99999)
|
---|
| 518 | . . . i nam'="" s %mgwmq(nam)=val
|
---|
| 519 | . . . q
|
---|
| 520 | . . q
|
---|
| 521 | . s to=maxlen-plen
|
---|
| 522 | . s res=pre_$e(x,1,to),pre=$e(x,to+1,99999),plen=$l(pre)
|
---|
| 523 | . i global d
|
---|
| 524 | . . i 'sn s ^MGWSI($j,1,"recv")=res,res="",sn=sn+1 q
|
---|
| 525 | . . i sn s ^MGWSI($j,1,"recv",extra,sn)=res,res="",sn=sn+1 q
|
---|
| 526 | . . q
|
---|
| 527 | . i 'global d
|
---|
| 528 | . . i 'sn s %mgwmq("recv")=res,res="",sn=sn+1 q
|
---|
| 529 | . . i sn s %mgwmq("recv",extra,sn)=res,res="",sn=sn+1 q
|
---|
| 530 | . . q
|
---|
| 531 | . q
|
---|
| 532 | s result=1
|
---|
| 533 | i global d
|
---|
| 534 | . i plen,'sn s ^MGWSI($j,1,"recv")=pre,plen=0,sn=sn+1
|
---|
| 535 | . i plen,sn s ^MGWSI($j,1,"recv",extra,sn)=pre,plen=0,sn=sn+1
|
---|
| 536 | . i $g(^MGWSI($j,1,"r_code"))=2033 s result=0
|
---|
| 537 | . i $l($g(^MGWSI($j,1,"error"))) s result=0
|
---|
| 538 | . i $g(^MGWSI($j,1,"recv"))[":MGWSI:ERROR:" s result=0
|
---|
| 539 | . q
|
---|
| 540 | i 'global d
|
---|
| 541 | . i plen,'sn s %mgwmq("recv")=pre,plen=0,sn=sn+1
|
---|
| 542 | . i plen,sn s %mgwmq("recv",extra,sn)=pre,plen=0,sn=sn+1
|
---|
| 543 | . i $g(%mgwmq("r_code"))=2033 s result=0
|
---|
| 544 | . i $l($g(%mgwmq("error"))) s result=0
|
---|
| 545 | . i $g(%mgwmq("recv"))[":MGWSI:ERROR:" s result=0
|
---|
| 546 | . q
|
---|
| 547 | U DEV(0)
|
---|
| 548 | i $g(%mgwmq("keepalive"))=1 S %mgwmq("keepalive","dev")=DEV
|
---|
| 549 | i $g(%mgwmq("keepalive"))'=1 C DEV
|
---|
| 550 | WSMQ1X ; Exit point
|
---|
| 551 | I $G(mqinfo) M %mgwmq("info")=%mgwmq("error") S %mgwmq("error")=""
|
---|
| 552 | Q result
|
---|
| 553 | ;
|
---|
| 554 | WSMQE ; Error (EOF)
|
---|
| 555 | new $ZTRAP set $ZTRAP="ZGOTO "_$ZLEVEL_":"
|
---|
| 556 | i $D(DEV(0)) U DEV(0)
|
---|
| 557 | i '$D(DEV(0)) U 0
|
---|
| 558 | i $g(%mgwmq("keepalive"))=1 S %mgwmq("keepalive","dev")=DEV
|
---|
| 559 | i $g(%mgwmq("keepalive"))'=1 C DEV
|
---|
| 560 | I $l($G(%mgwmq("error"))) G WSMQEX
|
---|
| 561 | S %mgwmq("error")=$ZS G WSMQEX
|
---|
| 562 | WSMQEX ; Exit point
|
---|
| 563 | I $G(mqinfo) M %mgwmq("info")=%mgwmq("error") S %mgwmq("error")=""
|
---|
| 564 | Q 0
|
---|
| 565 | ;
|
---|
| 566 | WSMQS ; Send outgoing header
|
---|
| 567 | N N,X,LEN
|
---|
| 568 | WSMQS1 S LEN=$L(REQ)
|
---|
| 569 | I (BSIZE+LEN)<maxlen S BUFFER=BUFFER_REQ,BSIZE=BSIZE+LEN,REQ="",LEN=0 I 'EOF Q
|
---|
| 570 | W BUFFER D FLUSH
|
---|
| 571 | ; S N=1 F S X=$E(BUFFER,N,N+255) Q:X="" W X S N=N+255+1 D FLUSH
|
---|
| 572 | S BUFFER=REQ,BSIZE=LEN
|
---|
| 573 | I EOF S REQ="" I BSIZE G WSMQS1
|
---|
| 574 | Q
|
---|
| 575 | ;
|
---|
| 576 | WSMQSRV(%mgwmq) ; Server to WebSphere MQ
|
---|
| 577 | new $ZTRAP set $ZTRAP="ZGOTO "_$ZLEVEL_":WSMQSRVE^%ZMGWSIS"
|
---|
| 578 | i global d
|
---|
| 579 | . n x
|
---|
| 580 | . s x="" f s x=$o(^MGWSI($j,1,x)) q:x="" i x'="recv" s %mgwmq(x)=$g(^MGWSI($j,1,x))
|
---|
| 581 | . q
|
---|
| 582 | D @$g(%mgwmq("routine"))
|
---|
| 583 | k %mgwmq("qm_name")
|
---|
| 584 | k %mgwmq("q_name")
|
---|
| 585 | k %mgwmq("recv")
|
---|
| 586 | i global d
|
---|
| 587 | . k ^MGWSI($j,1,"qm_name")
|
---|
| 588 | . k ^MGWSI($j,1,"q_name")
|
---|
| 589 | . k ^MGWSI($j,1,"recv")
|
---|
| 590 | . m ^MGWSI($j,1)=%mgwmq
|
---|
| 591 | . q
|
---|
| 592 | Q 1
|
---|
| 593 | WSMQSRVE ; Error
|
---|
| 594 | k %mgwmq("qm_name")
|
---|
| 595 | k %mgwmq("q_name")
|
---|
| 596 | k %mgwmq("recv")
|
---|
| 597 | S %mgwmq("send")="ERROR: "_$ZS
|
---|
| 598 | S %mgwmq("error")="ERROR: "_$ZS
|
---|
| 599 | Q 0
|
---|
| 600 | ;
|
---|
| 601 | WSX(IP,PORT,REQUEST,%mgwmq) ; Message for Web Server (Parameters passed by reference)
|
---|
| 602 | Q $$WSX1(IP,PORT,REQUEST)
|
---|
| 603 | ;
|
---|
| 604 | WSX1(IP,PORT,REQUEST) ; Message for Web Server (Parameters passed by global array - %mgwmq())
|
---|
| 605 | N (IP,PORT,REQUEST,%mgwmq)
|
---|
| 606 | new $ZTRAP set $ZTRAP="ZGOTO "_$ZLEVEL_":WSXE"
|
---|
| 607 | D VARS
|
---|
| 608 | S CRLF=$C(13,10)
|
---|
| 609 | ;
|
---|
| 610 | ; Create TCP connection to server
|
---|
| 611 | s OK=1
|
---|
| 612 | S DEV="client$"_$j,timeout=10
|
---|
| 613 | O DEV:(connect=IP_":"_PORT_":TCP":attach="client"):timeout:"SOCKET" E S %mgwmq("error")="Cannot connect to Web Server" s OK=0
|
---|
| 614 | i 'OK S result=0 G WSXEX
|
---|
| 615 | ;
|
---|
| 616 | S maxlen=$$getslen()
|
---|
| 617 | S DEV(0)=$IO
|
---|
| 618 | U DEV
|
---|
| 619 | S REQ=""
|
---|
| 620 | S REQ=REQ_"POST /mgwsi/sys/system_functions.mgwsi?FUN="_REQUEST_"&KEY="_$$WSXESC($g(%mgwmq("key")))_" HTTP/1.1"_CRLF
|
---|
| 621 | S REQ=REQ_"Host: "_IP_$s(PORT'=80:":"_PORT,1:"")_CRLF
|
---|
| 622 | S REQ=REQ_"Content-Type: text/plain"_CRLF
|
---|
| 623 | S REQ=REQ_"User-Agent: zmgwsi v"_$g(version)_CRLF
|
---|
| 624 | S REQ=REQ_"Content-Length: "_$L($G(%mgwmq("send")))_CRLF
|
---|
| 625 | S REQ=REQ_"Connection: close"_CRLF
|
---|
| 626 | S REQ=REQ_CRLF
|
---|
| 627 | S REQ=REQ_$G(%mgwmq("send"))
|
---|
| 628 | ;
|
---|
| 629 | W REQ D FLUSH
|
---|
| 630 | ;
|
---|
| 631 | s res=$$rdxx(60) f q:res[$c(13,10,13,10) s res=res_$$rdxx(1)
|
---|
| 632 | s head=$p(res,$c(13,10,13,10),1),res=$p(res,$c(13,10,13,10),2,9999)
|
---|
| 633 | s headn=$$lcase(head)
|
---|
| 634 | s clen=+$p(headn,"content-length: ",2)
|
---|
| 635 | s rlen=clen-$l(res)
|
---|
| 636 | s res=res_$$rdxx(rlen)
|
---|
| 637 | WSXE ; Error (EOF)
|
---|
| 638 | new $ZTRAP set $ZTRAP="ZGOTO "_$ZLEVEL_":"
|
---|
| 639 | i $D(DEV(0)) U DEV(0)
|
---|
| 640 | i '$D(DEV(0)) U 0
|
---|
| 641 | C DEV
|
---|
| 642 | WSXEX ; Exit point
|
---|
| 643 | s %mgwmq("recv")=$g(res)
|
---|
| 644 | Q 0
|
---|
| 645 | ;
|
---|
| 646 | WSXESC(IN)
|
---|
| 647 | N OUT,I,A,C,LEN,N16
|
---|
| 648 | S OUT="",N16=0 F I=1:1:$L(IN) D
|
---|
| 649 | . S C=$E(IN,I),A=$A(C)
|
---|
| 650 | . I A=32 S C="+" S OUT=OUT_C Q
|
---|
| 651 | . I A<32!(A>127)!(C?1P) S LEN=$$esize(.N16,A,16) S:LEN=1 N16="0"_N16 S C="%"_N16 S OUT=OUT_C Q
|
---|
| 652 | . S OUT=OUT_C Q
|
---|
| 653 | . Q
|
---|
| 654 | Q OUT
|
---|
| 655 | ;
|
---|
| 656 | MPHP ; Request from m_client
|
---|
| 657 | n port,dev,conc,cmnd,nato
|
---|
| 658 | s cmnd=$p(req,"^",4)
|
---|
| 659 | d PHP
|
---|
| 660 | q
|
---|
| 661 | ;
|
---|
| 662 | PHP ; Serve request from m_client
|
---|
| 663 | n argz,i,m
|
---|
| 664 | new $ZTRAP set $ZTRAP="ZGOTO "_$ZLEVEL_":phpe^%ZMGWSIS"
|
---|
| 665 | s res=""
|
---|
| 666 | i cmnd="S" d set
|
---|
| 667 | i cmnd="G" d get
|
---|
| 668 | i cmnd="K" d kill
|
---|
| 669 | i cmnd="D" d data
|
---|
| 670 | i cmnd="O" d order
|
---|
| 671 | i cmnd="P" d previous
|
---|
| 672 | i cmnd="M" d mergedb
|
---|
| 673 | i cmnd="m" d mergephp
|
---|
| 674 | i cmnd="H" d html
|
---|
| 675 | i cmnd="y" d htmlm
|
---|
| 676 | i cmnd="h" d http
|
---|
| 677 | i cmnd="X" d proc
|
---|
| 678 | i cmnd="x" d meth
|
---|
| 679 | i cmnd="W" d web
|
---|
| 680 | q
|
---|
| 681 | phpe ; Error
|
---|
| 682 | d EVENT($$client()_" Error : "_$ZS)
|
---|
| 683 | k res s res="",res(2)="M Server Error : ["_$g(req(2))_"]"_$tr($ZS,"<>%","[]^")_$g(ref)
|
---|
| 684 | s res(1)="00000ce"_$C(10)
|
---|
| 685 | q
|
---|
| 686 | ;
|
---|
| 687 | client() ; Get client name
|
---|
| 688 | s name="m_client"
|
---|
| 689 | i $g(%ZCS("client"))="z" s name="m_php"
|
---|
| 690 | i $g(%ZCS("client"))="j" s name="m_jsp"
|
---|
| 691 | i $g(%ZCS("client"))="a" s name="m_aspx"
|
---|
| 692 | i $g(%ZCS("client"))="p" s name="m_python"
|
---|
| 693 | i $g(%ZCS("client"))="r" s name="m_ruby"
|
---|
| 694 | i $g(%ZCS("client"))="h" s name="m_apache"
|
---|
| 695 | i $g(%ZCS("client"))="c" s name="m_cgi"
|
---|
| 696 | i $g(%ZCS("client"))="w" s name="m_websphere_mq"
|
---|
| 697 | q name
|
---|
| 698 | ;
|
---|
| 699 | set ; Global set
|
---|
| 700 | i argc<3 q
|
---|
| 701 | s argz=argc-1
|
---|
| 702 | s fun=0 d ref
|
---|
| 703 | x "s "_ref_"="_"req"_argc
|
---|
| 704 | d res
|
---|
| 705 | Q
|
---|
| 706 | ;
|
---|
| 707 | get ; Global get
|
---|
| 708 | i argc<2 q
|
---|
| 709 | s argz=argc
|
---|
| 710 | s fun=0 d ref
|
---|
| 711 | x "s res=$g("_ref_")"
|
---|
| 712 | d res
|
---|
| 713 | Q
|
---|
| 714 | ;
|
---|
| 715 | kill ; Global kill
|
---|
| 716 | i argc<1 q
|
---|
| 717 | s argz=argc
|
---|
| 718 | s fun=0 d ref
|
---|
| 719 | x "k "_ref
|
---|
| 720 | d res
|
---|
| 721 | Q
|
---|
| 722 | ;
|
---|
| 723 | data ; Global get
|
---|
| 724 | i argc<2 q
|
---|
| 725 | s argz=argc
|
---|
| 726 | s fun=0 d ref
|
---|
| 727 | x "s res=$d("_ref_")"
|
---|
| 728 | d res
|
---|
| 729 | Q
|
---|
| 730 | ;
|
---|
| 731 | order ; Global order
|
---|
| 732 | i argc<3 q
|
---|
| 733 | s argz=argc
|
---|
| 734 | s fun=0 d ref
|
---|
| 735 | x "s res=$o("_ref_")"
|
---|
| 736 | d res
|
---|
| 737 | Q
|
---|
| 738 | ;
|
---|
| 739 | previous ; Global reverse order
|
---|
| 740 | i argc<3 q
|
---|
| 741 | s argz=argc
|
---|
| 742 | s fun=0 d ref
|
---|
| 743 | x "s res=$o("_ref_",-1)"
|
---|
| 744 | d res
|
---|
| 745 | Q
|
---|
| 746 | ;
|
---|
| 747 | mergedb ; Global Merge from PHP
|
---|
| 748 | i argc<3 q
|
---|
| 749 | s a="" f argz=1:1 q:'$d(req(argz)) i $g(req(argz,0))=1 s a=req(argz) q
|
---|
| 750 | i a="" q
|
---|
| 751 | s argz=argz-1
|
---|
| 752 | s fun=0 d ref
|
---|
| 753 | i ref["()" s ref=$p(ref,"()",1)
|
---|
| 754 | i $g(@req(argz+2))["ks" x "k "_ref
|
---|
| 755 | x "m "_ref_"="_a
|
---|
| 756 | d res
|
---|
| 757 | Q
|
---|
| 758 | ;
|
---|
| 759 | mergephp ; Global Merge to PHP
|
---|
| 760 | i argc<3 q
|
---|
| 761 | s a="" f argz=1:1 q:'$d(req(argz)) i $g(req(argz,0))=1 s a=req(argz) q
|
---|
| 762 | i a="" q
|
---|
| 763 | s argz=argz-1
|
---|
| 764 | s fun=0 d ref
|
---|
| 765 | i ref["()" s ref=$p(ref,"()",1)
|
---|
| 766 | x "m "_a_"="_ref
|
---|
| 767 | s argz=argz+1
|
---|
| 768 | s abyref=1
|
---|
| 769 | d res
|
---|
| 770 | Q
|
---|
| 771 | ;
|
---|
| 772 | html ; HTML
|
---|
| 773 | s res(1)=$c(1,2,1,10)_"0sc"_$C(10) w res(1)
|
---|
| 774 | i argc<2 q
|
---|
| 775 | s argz=argc
|
---|
| 776 | s fun=0 d ref
|
---|
| 777 | x "n ("_refn_") d "_ref
|
---|
| 778 | Q
|
---|
| 779 | ;
|
---|
| 780 | htmlm ; HTML (COS) Method
|
---|
| 781 | s res(1)=$c(1,2,1,10)_"0sc"_$C(10) w res(1)
|
---|
| 782 | i argc<1 q
|
---|
| 783 | s argz=argc
|
---|
| 784 | s fun=0 d oref
|
---|
| 785 | s ref=$tr($p(ref,",",1,2),".","")_","_$p(ref,",",3,999)
|
---|
| 786 | i argc=1 x "n ("_refn_") s req(-1)=$zobjclassmethod()"
|
---|
| 787 | i argc>1 x "n ("_refn_") s req(-1)=$zobjclassmethod("_ref_")"
|
---|
| 788 | s res=$g(req(-1))
|
---|
| 789 | Q
|
---|
| 790 | ;
|
---|
| 791 | web ; Web request
|
---|
| 792 | N REQ,x,y,i
|
---|
| 793 | new $ZTRAP set $ZTRAP="ZGOTO "_$ZLEVEL_":webe^%ZMGWSIS"
|
---|
| 794 | s res(1)=$c(1,2,1,10)_"0sc"_$C(10) w res(1)
|
---|
| 795 | i argc'=4 g webe
|
---|
| 796 | s argz=argc
|
---|
| 797 | s fun=1 d ref
|
---|
| 798 | s x="" f s x=$o(req4(x)) q:x="" s y="" f i=1:1 s y=$o(req4(x,y)) q:y="" i y'=i m req4(x,i)=req4(x,y) k req4(x,y)
|
---|
| 799 | x "n ("_refn_") d "_ref
|
---|
| 800 | q
|
---|
| 801 | webe ; error
|
---|
| 802 | S REQ=""
|
---|
| 803 | S REQ=REQ_"HTTP/1.1 200 OK"_$C(13,10)
|
---|
| 804 | S REQ=REQ_"Content-type: text/plain"_$C(13,10)
|
---|
| 805 | S REQ=REQ_"Connection: close"_$C(13,10)
|
---|
| 806 | S REQ=REQ_$C(13,10)
|
---|
| 807 | S REQ=REQ_"Error calling web function "_$g(ref)_$g(refn)_$C(13,10)
|
---|
| 808 | S REQ=REQ_$ZS
|
---|
| 809 | S REQ=REQ_"Web functions contain two arguments"_$C(13,10)
|
---|
| 810 | W REQ
|
---|
| 811 | Q
|
---|
| 812 | ;
|
---|
| 813 | WEB(CGI,DATA)
|
---|
| 814 | N REQ,X,Y
|
---|
| 815 | S REQ=""
|
---|
| 816 | S REQ=REQ_"HTTP/1.1 200 OK"_$C(13,10)
|
---|
| 817 | S REQ=REQ_"Content-type: text/plain"_$C(13,10)
|
---|
| 818 | S REQ=REQ_"Connection: close"_$C(13,10)
|
---|
| 819 | S REQ=REQ_$C(13,10)
|
---|
| 820 | W REQ
|
---|
| 821 | W $G(CGI)
|
---|
| 822 | S X="" F S X=$O(CGI(X)) Q:X="" W X_"="_$G(CGI(X))_$C(13,10)
|
---|
| 823 | W $C(13,10)
|
---|
| 824 | S X="" F S X=$O(DATA(X)) Q:X="" S Y="" F S Y=$O(DATA(X,Y)) Q:Y="" W X_":"_Y_"="_$G(DATA(X,Y))_$C(13,10)
|
---|
| 825 | Q
|
---|
| 826 | ;
|
---|
| 827 | http ; HTTP
|
---|
| 828 | new $ZTRAP set $ZTRAP="ZGOTO "_$ZLEVEL_":httpe"
|
---|
| 829 | i argc<2 q
|
---|
| 830 | s x=$$http1(.req2,@req(3))
|
---|
| 831 | httpx ; exit
|
---|
| 832 | k ^%MGW("MPC",$J,"CONTENT")
|
---|
| 833 | Q
|
---|
| 834 | httpe ; Error
|
---|
| 835 | w "<html><head><title>m_php/jsp: Error</title></head><h2>eXtc is not installed on this computer<h2></html>"
|
---|
| 836 | q
|
---|
| 837 | ;
|
---|
| 838 | http1(%CGIEVAR,content) ; HTTP
|
---|
| 839 | n (%CGIEVAR,content)
|
---|
| 840 | s test=0
|
---|
| 841 | i test d q 0
|
---|
| 842 | . w "<br><b>CGI</b>"
|
---|
| 843 | . s x="" f s x=$o(%CGIEVAR(x)) q:x="" w "<br>"_x_"="_$g(%CGIEVAR(x))
|
---|
| 844 | . w "<br><b>CONTENT</b>"
|
---|
| 845 | . s x="" f s x=$o(^%MGW("MPC",$J,"CONTENT",x)) q:x="" w "<br>"_x_"="_$g(^%MGW("MPC",$J,"CONTENT",x))
|
---|
| 846 | . q
|
---|
| 847 | i $G(%CGIEVAR("key_eXtcServer"))="true" d QUIT 1
|
---|
| 848 | . ; break out to eXtc Server here
|
---|
| 849 | . s namespace=$G(%CGIEVAR("key_namespace"))
|
---|
| 850 | . s:namespace'="" namespace=$G(^%eXtc("system","phpSettings","namespace",namespace))
|
---|
| 851 | . s:namespace="" namespace=$G(^%eXtc("system","phpSettings","defaultNamespace"))
|
---|
| 852 | . s:namespace="" namespace="%CACHELIB"
|
---|
| 853 | . d PHPServer^%eXMLServer
|
---|
| 854 | QUIT 0
|
---|
| 855 | ;
|
---|
| 856 | proc ; M extrinsic function
|
---|
| 857 | i argc<2 q
|
---|
| 858 | s argz=argc
|
---|
| 859 | s fun=1 d ref
|
---|
| 860 | i argc=2 x "n ("_refn_") s req(-1)=$$"_ref_"()"
|
---|
| 861 | i argc>2 x "n ("_refn_") s req(-1)=$$"_ref
|
---|
| 862 | s res=$g(req(-1))
|
---|
| 863 | d res
|
---|
| 864 | Q
|
---|
| 865 | ;
|
---|
| 866 | meth ; M (COS) method
|
---|
| 867 | ;
|
---|
| 868 | ; Synopsis:
|
---|
| 869 | ; s err=$zobjclassmethod(className,methodName,param1,...,paramN)
|
---|
| 870 | ;
|
---|
| 871 | ; s className="eXtc.DOMAPI"
|
---|
| 872 | ; s methodName="openDOM"
|
---|
| 873 | ; s err=$zobjclassmethod(className,methodName)
|
---|
| 874 | ;
|
---|
| 875 | ; ; This is equivalent to ...
|
---|
| 876 | ; s err=##class(eXtc.DOMAPI).openDOM()
|
---|
| 877 | ;
|
---|
| 878 | ; s methodName="getDocumentNode"
|
---|
| 879 | ; s documentName="eXtcDOM2"
|
---|
| 880 | ; s err=$zobjclassmethod(className,methodName,documentName)
|
---|
| 881 | ; ; This is equivalent to ...
|
---|
| 882 | ; s err=##class(eXtc.DOMAPI).getDocumentNode("eXtcDOM2")
|
---|
| 883 | ;
|
---|
| 884 | i argc<1 q
|
---|
| 885 | s argz=argc
|
---|
| 886 | s fun=1 d oref
|
---|
| 887 | s ref=$tr($p(ref,",",1,2),".","")_","_$p(ref,",",3,999)
|
---|
| 888 | i argc=1 x "n ("_refn_") s req(-1)=$zobjclassmethod()"
|
---|
| 889 | i argc>1 x "n ("_refn_") s req(-1)=$zobjclassmethod("_ref_")"
|
---|
| 890 | s res=$g(req(-1))
|
---|
| 891 | d res
|
---|
| 892 | Q
|
---|
| 893 | ;
|
---|
| 894 | sort(a) ; Sort an array
|
---|
| 895 | q 1
|
---|
| 896 | ;
|
---|
| 897 | ref ; Global reference
|
---|
| 898 | n com,i,strt,a1
|
---|
| 899 | s array=0,refn="res,req,extra,global,oversize"
|
---|
| 900 | i argc<2 q
|
---|
| 901 | s a1=$g(@req(2))
|
---|
| 902 | s strt=2 i a1?1"^"."^" s strt=strt+1
|
---|
| 903 | s ref=@req(strt) i argc=strt q
|
---|
| 904 | s ref=ref_"("
|
---|
| 905 | s com="" f i=strt+1:1:argz s refn=refn_","_req(i),ref=ref_com_$s(fun:".",1:"")_req(i),com=","
|
---|
| 906 | s ref=ref_")"
|
---|
| 907 | q
|
---|
| 908 | ;
|
---|
| 909 | oref ; Object reference
|
---|
| 910 | n com,i,strt,a1
|
---|
| 911 | s array=0,refn="req,extra,global,oversize"
|
---|
| 912 | i argc<2 q
|
---|
| 913 | s a1=$g(@req(2))
|
---|
| 914 | s strt=2 i a1?1"^"."^" s strt=strt+1
|
---|
| 915 | i '$d(req(strt)) q
|
---|
| 916 | s ref=""
|
---|
| 917 | s com="" f i=strt:1:argz s refn=refn_","_req(i),ref=ref_com_$s(fun:".",1:"")_req(i),com=","
|
---|
| 918 | q
|
---|
| 919 | ;
|
---|
| 920 | res ; Return result
|
---|
| 921 | n i,a,sn,argc
|
---|
| 922 | s maxlen=$$getslen()
|
---|
| 923 | d VARS
|
---|
| 924 | s anybyref=0 f argc=1:1:argz q:'$d(req(argc)) i $g(req(argc,1)) s anybyref=1 q
|
---|
| 925 | i 'anybyref d q
|
---|
| 926 | . d send($g(res))
|
---|
| 927 | . i oversize f sn=1:1 q:'$d(^MGWSI($j,0,extra,sn)) d send($g(^(sn)))
|
---|
| 928 | . q
|
---|
| 929 | s res(1)="00000cc"_$C(10)
|
---|
| 930 | s size=$l($g(res)),byref=0
|
---|
| 931 | i oversize f sn=1:1 q:'$d(^MGWSI($j,0,extra,sn)) s size=size+$l(^(sn))
|
---|
| 932 | s x=$$ehead(.head,size,byref,ddata)
|
---|
| 933 | d send(head)
|
---|
| 934 | d send($g(res))
|
---|
| 935 | i oversize f sn=1:1 q:'$d(^MGWSI($j,0,extra,sn)) d send($g(^(sn)))
|
---|
| 936 | f argc=1:1:argz q:'$d(req(argc)) d
|
---|
| 937 | . s byref=$g(req(argc,1))
|
---|
| 938 | . s array=$g(req(argc,0))
|
---|
| 939 | . i 'byref s size=0,x=$$ehead(.head,size,byref,ddata) d send(head) q
|
---|
| 940 | . i 'array d q
|
---|
| 941 | . . s size=$l($g(@req(argc)))
|
---|
| 942 | . . f sn=1:1 q:'$d(@(req(argc)_"(extra,sn)")) s size=size+$l($g(@(req(argc)_"(extra,sn)")))
|
---|
| 943 | . . s x=$$ehead(.head,size,byref,ddata)
|
---|
| 944 | . . d send(head)
|
---|
| 945 | . . d send($g(@req(argc)))
|
---|
| 946 | . . f sn=1:1 q:'$d(@(req(argc)_"(extra,sn)")) d send($g(@(req(argc)_"(extra,sn)")))
|
---|
| 947 | . . q
|
---|
| 948 | . s x=$$ehead(.head,0,0,darec)
|
---|
| 949 | . d send(head)
|
---|
| 950 | . d resa
|
---|
| 951 | . s x=$$ehead(.head,0,0,deod)
|
---|
| 952 | . d send(head)
|
---|
| 953 | . q
|
---|
| 954 | q
|
---|
| 955 | ;
|
---|
| 956 | res1 ; Link to array parser
|
---|
| 957 | d send($g(req(argc,0))_$g(req(argc,1)))
|
---|
| 958 | i '$g(req(argc,1)) q
|
---|
| 959 | i $g(req(argc,0))=0 d send($g(@req(argc))) q
|
---|
| 960 | s a=req(argc),fkey="" i global s a="^MGWSI",fkey="$j,argc-2"
|
---|
| 961 | d resa
|
---|
| 962 | q
|
---|
| 963 | ;
|
---|
| 964 | resa ; Return array
|
---|
| 965 | n ref,kn,ok,def,data,txt
|
---|
| 966 | new $ZTRAP set $ZTRAP="ZGOTO "_$ZLEVEL_":resae"
|
---|
| 967 | s byref=0
|
---|
| 968 | s a=req(argc),fkey="" i global s a="^MGWSI",fkey="$j,argc-2"
|
---|
| 969 | i a="" q
|
---|
| 970 | i global d
|
---|
| 971 | . i ($d(@(a_"("_fkey_")"))#10) d
|
---|
| 972 | . . s txt=" ",x=$$ehead(.head,$l(txt),byref,dakey) d send(head),send(txt)
|
---|
| 973 | . . s size=0
|
---|
| 974 | . . s size=size+$l($g(@req(argc)))
|
---|
| 975 | . . f sn=1:1 q:'$d(@(a_"("_fkey_","_"extra,sn)")) s size=size+$l($g(^(sn)))
|
---|
| 976 | . . s x=$$ehead(.head,size,byref,ddata) d send(head)
|
---|
| 977 | . . d send($g(@req(argc)))
|
---|
| 978 | . . f sn=1:1 q:'$d(@(a_"("_fkey_","_"extra,sn)")) d send($g(^(sn)))
|
---|
| 979 | . . q
|
---|
| 980 | . s fkey=fkey_","
|
---|
| 981 | . q
|
---|
| 982 | i 'global d
|
---|
| 983 | . i ($d(@a)#10),$l($g(@a)) d
|
---|
| 984 | . . s txt=" ",x=$$ehead(.head,$l(txt),byref,dakey) d send(head),send(txt)
|
---|
| 985 | . . s size=0
|
---|
| 986 | . . s size=size+$l($g(@a))
|
---|
| 987 | . . f sn=1:1 q:'$d(@(a_"(extra,sn)")) s size=size+$l($g(@(a_"(extra,sn)")))
|
---|
| 988 | . . s x=$$ehead(.head,size,byref,ddata) d send(head)
|
---|
| 989 | . . d send($g(@a))
|
---|
| 990 | . . f sn=1:1 q:'$d(@(a_"(extra,sn)")) d send($g(@(a_"(extra,sn)")))
|
---|
| 991 | . . q
|
---|
| 992 | . q
|
---|
| 993 | s ok=0,kn=1,x(kn)="",ref="x("_kn_")"
|
---|
| 994 | f s x(kn)=$o(@(a_"("_fkey_ref_")")) d resa1 i ok q
|
---|
| 995 | q
|
---|
| 996 | resae ; Error
|
---|
| 997 | new $ZTRAP set $ZTRAP="ZGOTO "_$ZLEVEL_":"
|
---|
| 998 | q
|
---|
| 999 | ;
|
---|
| 1000 | resa1 ; Array node
|
---|
| 1001 | i x(kn)=extra q
|
---|
| 1002 | i x(kn)="",kn=1 s ok=1 q
|
---|
| 1003 | i x(kn)="" s kn=kn-1,ref=$p(ref,",",1,$l(ref,",")-1) q
|
---|
| 1004 | s def=$d(@(a_"("_fkey_ref_")")) i (def\10) d resa3
|
---|
| 1005 | s data=$g(@(a_"("_fkey_ref_")"))
|
---|
| 1006 | i (def#10) d resa2
|
---|
| 1007 | i (def\10) s kn=kn+1,x(kn)="",ref=ref_","_"x("_kn_")"
|
---|
| 1008 | q
|
---|
| 1009 | ;
|
---|
| 1010 | resa2 ; Array node data
|
---|
| 1011 | n i,spc
|
---|
| 1012 | f i=1:1:kn s x=$$ehead(.head,$l(x(i)),byref,dakey) d send(head),send(x(i))
|
---|
| 1013 | i $g(%ZCS("client"))="z",(def\10) s spc=" ",x=$$ehead(.head,$l(spc),byref,dakey) d send(head),send(spc)
|
---|
| 1014 | s size=$l(data)
|
---|
| 1015 | f sn=1:1 q:'$d(@(a_"("_fkey_ref_",extra,sn)")) s size=size+$l($g(@(a_"("_fkey_ref_",extra,sn)")))
|
---|
| 1016 | s x=$$ehead(.head,size,byref,ddata) d send(head)
|
---|
| 1017 | d send(data)
|
---|
| 1018 | f sn=1:1 q:'$d(@(a_"("_fkey_ref_",extra,sn)")) d send($g(@(a_"("_fkey_ref_",extra,sn)")))
|
---|
| 1019 | q
|
---|
| 1020 | ;
|
---|
| 1021 | resa3 ; Array node data with descendants - test for non-extra data
|
---|
| 1022 | n y
|
---|
| 1023 | s y="" f s y=$o(@(a_"("_ref_",y)")) q:y="" i y'=extra q
|
---|
| 1024 | i y="" s def=1
|
---|
| 1025 | q
|
---|
| 1026 | ;
|
---|
| 1027 | send(data) ; Send data
|
---|
| 1028 | n n
|
---|
| 1029 | ;D EVENT(data_$g(res(1)))
|
---|
| 1030 | s n=$o(res(""),-1)
|
---|
| 1031 | i n="" s n=1
|
---|
| 1032 | i $l($g(res(n)))+$l(data)>maxlen s n=n+1
|
---|
| 1033 | s res(n)=$g(res(n))_data
|
---|
| 1034 | q
|
---|
| 1035 | ;
|
---|
| 1036 | getsys() ; Get system type
|
---|
| 1037 | s systype="GTM"
|
---|
| 1038 | q systype
|
---|
| 1039 | ;
|
---|
| 1040 | getuci() ; Get NameSpace/UCI
|
---|
| 1041 | new $ZTRAP set $ZTRAP="ZGOTO "_$ZLEVEL_":getucie^%ZMGWSIS"
|
---|
| 1042 | s %UCI=$ZG
|
---|
| 1043 | q %UCI
|
---|
| 1044 | getucie ; Error
|
---|
| 1045 | q ""
|
---|
| 1046 | ;
|
---|
| 1047 | getslen() ; Get maximum string length
|
---|
| 1048 | s slen=32000
|
---|
| 1049 | q slen
|
---|
| 1050 | ;
|
---|
| 1051 | lcase(string) ; Convert to lower case
|
---|
| 1052 | q $tr(string,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")
|
---|
| 1053 | ;
|
---|
| 1054 | ucase(string) ; Convert to upper case
|
---|
| 1055 | q $tr(string,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
|
---|
| 1056 | ;
|
---|
| 1057 | setio(tblname) ; Set I/O translation
|
---|
| 1058 | new $ZTRAP set $ZTRAP="ZGOTO "_$ZLEVEL_":setioe^%ZMGWSIS"
|
---|
| 1059 | Q ""
|
---|
| 1060 | setioe ; Error - do nothing
|
---|
| 1061 | Q ""
|
---|
| 1062 | ;
|
---|
| 1063 | zcvt(buffer,tblname) ; Translate buffer
|
---|
| 1064 | new $ZTRAP set $ZTRAP="ZGOTO "_$ZLEVEL_":zcvte^%ZMGWSIS"
|
---|
| 1065 | Q buffer
|
---|
| 1066 | zcvte ; Error - do nothing
|
---|
| 1067 | Q buffer
|
---|
| 1068 | ;
|
---|
| 1069 | WSMQTEST ; Test link to WebSphere MQ
|
---|
| 1070 | n %mgwmq,response
|
---|
| 1071 | w !,"Sending Test Message to MGWSI/WebSphere MQ interface..."
|
---|
| 1072 | S response=$$WSMQ("127.0.0.1",7040,"TEST",.%mgwmq)
|
---|
| 1073 | W !,"Response: ",response," ",$G(%mgwmq("recv"))
|
---|
| 1074 | Q
|
---|
| 1075 | ;
|
---|
| 1076 | WSMQTSTX(IP,PORT) ; Test link to WebSphere MQ: IP address and Port specified
|
---|
| 1077 | n %mgwmq,response
|
---|
| 1078 | w !,"Sending Test Message to MGWSI/WebSphere MQ interface..."
|
---|
| 1079 | S response=$$WSMQ(IP,PORT,"TEST",.%mgwmq)
|
---|
| 1080 | W !,"Response: ",response," ",$G(%mgwmq("recv"))
|
---|
| 1081 | Q
|
---|
| 1082 | ;
|
---|
| 1083 | HTEST ; Return HTML
|
---|
| 1084 | n systype
|
---|
| 1085 | s systype=$$getsys()
|
---|
| 1086 | w "<I>A line of HTML from "_systype_"</I>"
|
---|
| 1087 | Q
|
---|
| 1088 | ;
|
---|
| 1089 | HTEST1(P1) ; Return HTML
|
---|
| 1090 | n x,systype
|
---|
| 1091 | s systype=$$getsys()
|
---|
| 1092 | ;W "HTTP/1.1 200 OK",$c(13,10)
|
---|
| 1093 | ;W "Content-Type: text/html",$c(13,10)
|
---|
| 1094 | ;W "Connection: close",$c(13,10)
|
---|
| 1095 | ;W $c(13,10)
|
---|
| 1096 | w "<I>HTML content returned from "_systype_"</I>"
|
---|
| 1097 | W "<br><I>The input parameter passed was: <B>"_$g(P1)_"</B></I>"
|
---|
| 1098 | s x="" f s x=$o(P1(x)) q:x="" W "<br><I>Array element passed: <B>"_x_" = "_$g(P1(x))_"</B></I>"
|
---|
| 1099 | Q
|
---|
| 1100 | ;
|
---|
| 1101 | PTEST() ; Return result
|
---|
| 1102 | n systype
|
---|
| 1103 | s systype=$$getsys()
|
---|
| 1104 | q "Result from "_systype_" process: "_$J_"; UCI: "_$$getuci()
|
---|
| 1105 | Q
|
---|
| 1106 | ;
|
---|
| 1107 | PTEST1(P1) ; Return result
|
---|
| 1108 | n systype
|
---|
| 1109 | s systype=$$getsys()
|
---|
| 1110 | q "Result from "_systype_" process: "_$J_"; UCI: "_$$getuci()_"; The input parameter passed was: "_P1
|
---|
| 1111 | ;
|
---|
| 1112 | PTEST2(P1,P2) ; Manipulate an array
|
---|
| 1113 | n n,x,systype
|
---|
| 1114 | s systype=$$getsys()
|
---|
| 1115 | s n=0,x="" f s x=$o(P1(x)) q:x="" s n=n+1
|
---|
| 1116 | s P1("Key from M - 1")="Value 1"
|
---|
| 1117 | s P1("Key from M - 2")="Value 2"
|
---|
| 1118 | s P2="Stratford"
|
---|
| 1119 | q "Result from "_systype_" process: "_$J_"; UCI: "_$$getuci()_"; "_n_" elements were received in an array, 2 were added by this procedure"
|
---|
| 1120 | ;
|
---|