diff options
| -rwxr-xr-x | contrib/check_ica_program_neigbourhood.pl | 619 |
1 files changed, 619 insertions, 0 deletions
diff --git a/contrib/check_ica_program_neigbourhood.pl b/contrib/check_ica_program_neigbourhood.pl new file mode 100755 index 00000000..f29c0d1d --- /dev/null +++ b/contrib/check_ica_program_neigbourhood.pl | |||
| @@ -0,0 +1,619 @@ | |||
| 1 | #!/usr/bin/perl -w | ||
| 2 | |||
| 3 | # $Id$ | ||
| 4 | |||
| 5 | # $Log$ | ||
| 6 | # Revision 1.1 2005/01/25 09:05:53 stanleyhopcroft | ||
| 7 | # New plugin to check Citrix Metaframe XP "Program Neighbourhood" | ||
| 8 | # | ||
| 9 | # Revision 1.1 2005-01-25 16:50:30+11 anwsmh | ||
| 10 | # Initial revision | ||
| 11 | # | ||
| 12 | |||
| 13 | use strict ; | ||
| 14 | |||
| 15 | use Getopt::Long; | ||
| 16 | |||
| 17 | use utils qw($TIMEOUT %ERRORS &print_revision &support); | ||
| 18 | use LWP 5.65 ; | ||
| 19 | use XML::Parser ; | ||
| 20 | |||
| 21 | my $PROGNAME = 'check_program_neigbourhood' ; | ||
| 22 | my ($debug, $xml_debug, $pn_server, $pub_apps, $app_servers, $server_farm, $usage) ; | ||
| 23 | |||
| 24 | Getopt::Long::Configure('bundling', 'no_ignore_case') ; | ||
| 25 | GetOptions | ||
| 26 | ("V|version" => \&version, | ||
| 27 | "A|published_app:s" => \$pub_apps, | ||
| 28 | "h|help" => \&help, | ||
| 29 | 'usage|?' => \&usage, | ||
| 30 | "F|server_farm=s" => \$server_farm, | ||
| 31 | "P|pn_server=s" => \$pn_server, | ||
| 32 | "S|app_server=s" => \$app_servers, | ||
| 33 | "v|verbose" => \$debug, | ||
| 34 | "x|xml_debug" => \$xml_debug, | ||
| 35 | ) ; | ||
| 36 | |||
| 37 | $pn_server || do { | ||
| 38 | print "Name or IP Address of _one_ Program Neighbourhood server is required.\n" ; | ||
| 39 | &print_usage ; | ||
| 40 | exit $ERRORS{UNKNOWN} ; | ||
| 41 | } ; | ||
| 42 | |||
| 43 | $pub_apps ||= 'Word 2003' ; | ||
| 44 | $pub_apps =~ s/["']//g ; | ||
| 45 | my @pub_apps = split /,\s*/, $pub_apps ; | ||
| 46 | |||
| 47 | my @app_servers = split /,\s*/, $app_servers ; | ||
| 48 | |||
| 49 | @app_servers || do { | ||
| 50 | print "IP Address of _each_ Application server in the Metaframe Citrix XP server farm is required.\n" ; | ||
| 51 | &print_usage ; | ||
| 52 | exit $ERRORS{UNKNOWN} ; | ||
| 53 | } ; | ||
| 54 | |||
| 55 | my @non_ip_addresses = grep ! /\d+\.\d+\.\d+\.\d+/, @app_servers ; | ||
| 56 | |||
| 57 | scalar(@non_ip_addresses) && do { | ||
| 58 | print qq(Application servers must be specified by IP Address (not name): "@non_ip_addresses".\n) ; | ||
| 59 | &print_usage ; | ||
| 60 | exit $ERRORS{UNKNOWN} ; | ||
| 61 | } ; | ||
| 62 | |||
| 63 | $server_farm || do { | ||
| 64 | print "Name of Citrix Metaframe XP server farm is required.\n" ; | ||
| 65 | &print_usage ; | ||
| 66 | exit $ERRORS{UNKNOWN} ; | ||
| 67 | } ; | ||
| 68 | |||
| 69 | my %xml_tag = () ; | ||
| 70 | my @tag_stack = () ; | ||
| 71 | |||
| 72 | my $xml_p = new XML::Parser(Handlers => {Start => \&handle_start, | ||
| 73 | End => sub { pop @tag_stack }, | ||
| 74 | Char => \&handle_char}) ; | ||
| 75 | |||
| 76 | # values required by Metaframe XP that don't appear to matter too much | ||
| 77 | |||
| 78 | my $client_host = 'Nagios server (http://www.Nagios.ORG)' ; | ||
| 79 | my $user_name = 'nagios' ; | ||
| 80 | my $domain = 'Nagios_Uber_Alles' ; | ||
| 81 | |||
| 82 | # end values required by Metaframe XP | ||
| 83 | |||
| 84 | my $nilpotent_req = <<'EOR' ; | ||
| 85 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
| 86 | <!DOCTYPE NFuseProtocol SYSTEM "NFuse.dtd"><NFuseProtocol version="1.1"> | ||
| 87 | <RequestProtocolInfo> | ||
| 88 | <ServerAddress addresstype="dns-port" /> | ||
| 89 | </RequestProtocolInfo> | ||
| 90 | </NFuseProtocol> | ||
| 91 | EOR | ||
| 92 | |||
| 93 | my $server_farm_req = <<'EOR' ; | ||
| 94 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
| 95 | <!DOCTYPE NFuseProtocol SYSTEM "NFuse.dtd"> | ||
| 96 | <NFuseProtocol version="1.1"> | ||
| 97 | <RequestServerFarmData> | ||
| 98 | <Nil /> | ||
| 99 | </RequestServerFarmData> | ||
| 100 | </NFuseProtocol> | ||
| 101 | EOR | ||
| 102 | |||
| 103 | my $spec_server_farm_req = <<EOR ; | ||
| 104 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
| 105 | <!DOCTYPE NFuseProtocol SYSTEM "NFuse.dtd"> | ||
| 106 | <NFuseProtocol version="1.1"> | ||
| 107 | <RequestAddress> | ||
| 108 | <Name> | ||
| 109 | <UnspecifiedName>$server_farm*</UnspecifiedName> | ||
| 110 | </Name> | ||
| 111 | <ClientName>$client_host</ClientName> | ||
| 112 | <ClientAddress addresstype="dns-port" /> | ||
| 113 | <ServerAddress addresstype="dns-port" /> | ||
| 114 | <Flags /> | ||
| 115 | <Credentials> | ||
| 116 | <UserName>$user_name</UserName> | ||
| 117 | <Domain>$domain</Domain> | ||
| 118 | </Credentials> | ||
| 119 | </RequestAddress> | ||
| 120 | </NFuseProtocol> | ||
| 121 | EOR | ||
| 122 | |||
| 123 | my $app_req = <<EOR ; | ||
| 124 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
| 125 | <!DOCTYPE NFuseProtocol SYSTEM "NFuse.dtd"> | ||
| 126 | <NFuseProtocol version="1.1"> | ||
| 127 | <RequestAddress> | ||
| 128 | <Name> | ||
| 129 | <UnspecifiedName>PUBLISHED_APP_ENCODED</UnspecifiedName> | ||
| 130 | </Name> | ||
| 131 | <ClientName>Nagios_Service_Check</ClientName> | ||
| 132 | <ClientAddress addresstype="dns-port"/> | ||
| 133 | <ServerAddress addresstype="dns-port" /> | ||
| 134 | <Flags /> | ||
| 135 | <Credentials> | ||
| 136 | <UserName>$PROGNAME</UserName> | ||
| 137 | <Domain>$domain</Domain> | ||
| 138 | </Credentials> | ||
| 139 | </RequestAddress> | ||
| 140 | </NFuseProtocol> | ||
| 141 | EOR | ||
| 142 | |||
| 143 | my $ua = LWP::UserAgent->new ; | ||
| 144 | my $req = HTTP::Request->new('POST', "http://$pn_server/scripts/WPnBr.dll") ; | ||
| 145 | $req->content_type('text/xml') ; | ||
| 146 | |||
| 147 | my $svr ; | ||
| 148 | |||
| 149 | my @pubapp_encoded = map { my $x = $_ ; $x =~ s/(\W)/'&#' . ord($1) . ';'/eg; $x } @pub_apps ; | ||
| 150 | |||
| 151 | my $error_tag_cr = sub { ! exists($xml_tag{ErrorId}) } ; | ||
| 152 | |||
| 153 | my @app_reqs = ( | ||
| 154 | # { Content => url, Ok => ok_condition, Seq => \d+ } | ||
| 155 | |||
| 156 | { Content => $nilpotent_req, Ok => $error_tag_cr, Seq => 0 }, | ||
| 157 | { Content => $server_farm_req, Ok => sub { | ||
| 158 | ! exists($xml_tag{ErrorId}) && | ||
| 159 | exists( $xml_tag{ServerFarmName}) && | ||
| 160 | defined($xml_tag{ServerFarmName}) && | ||
| 161 | $xml_tag{ServerFarmName} eq $server_farm | ||
| 162 | }, Seq => 2 }, | ||
| 163 | { Content => $nilpotent_req, Ok => $error_tag_cr, Seq => 4 }, | ||
| 164 | { Content => $spec_server_farm_req, Ok => sub { | ||
| 165 | ! exists($xml_tag{ErrorId}) && | ||
| 166 | exists( $xml_tag{ServerAddress}) && | ||
| 167 | defined($xml_tag{ServerAddress}) && | ||
| 168 | $xml_tag{ServerAddress} =~ /\d+\.\d+\.\d+\.\d+:\d+/ | ||
| 169 | }, Seq => 6 }, | ||
| 170 | { Content => $nilpotent_req, Ok => $error_tag_cr, Seq => 8 }, | ||
| 171 | { Content => $app_req, Ok => sub { | ||
| 172 | ! exists($xml_tag{ErrorId}) && | ||
| 173 | exists( $xml_tag{ServerAddress}) && | ||
| 174 | defined($xml_tag{ServerAddress}) && | ||
| 175 | (($svr) = split(/:/, $xml_tag{ServerAddress})) && | ||
| 176 | defined($svr) && | ||
| 177 | scalar(grep $_ eq $svr, @app_servers) | ||
| 178 | }, Seq => 10 } | ||
| 179 | ) ; | ||
| 180 | |||
| 181 | my $app_location ; | ||
| 182 | |||
| 183 | foreach my $pub_app (@pub_apps) { | ||
| 184 | |||
| 185 | my $pubapp_enc = shift @pubapp_encoded ; | ||
| 186 | my $app_req_tmp = $app_reqs[5]{Content} ; | ||
| 187 | $app_reqs[5]{Content} =~ s/PUBLISHED_APP_ENCODED/$pubapp_enc/ ; | ||
| 188 | |||
| 189 | foreach (@app_reqs) { | ||
| 190 | |||
| 191 | $req->content($_->{Content}) ; | ||
| 192 | |||
| 193 | $debug && print STDERR "App: $pub_app Seq: $_->{Seq}\n", $req->as_string, "\n" ; | ||
| 194 | |||
| 195 | my $resp = $ua->request($req) ; | ||
| 196 | |||
| 197 | $debug && print STDERR "App: $pub_app Seq: ", $_->{Seq} + 1, "\n", $resp->as_string, "\n" ; | ||
| 198 | |||
| 199 | $resp->is_error && do { | ||
| 200 | my $err = $resp->as_string ; | ||
| 201 | $err =~ s/\n//g ; | ||
| 202 | &outahere(qq(Failed. HTTP error finding $pub_app at seq $_->{Seq}: "$err")) ; | ||
| 203 | } ; | ||
| 204 | my $xml = $resp->content ; | ||
| 205 | |||
| 206 | my $xml_disp ; | ||
| 207 | ($xml_disp = $xml) =~ s/\n//g ; | ||
| 208 | $xml_disp =~ s/ \s+/ /g ; | ||
| 209 | |||
| 210 | &outahere($resp->as_string) | ||
| 211 | unless $xml ; | ||
| 212 | |||
| 213 | my ($xml_ok, $whine) = &valid_xml($xml_p, $xml) ; | ||
| 214 | |||
| 215 | $xml_ok || &outahere(qq(Failed. Bad XML finding $pub_app at eq $_->{Seq} in "$xml_disp".)) ; | ||
| 216 | |||
| 217 | &{$_->{Ok}} || &outahere(qq(Failed. \"\&\$_->{Ok}\" false finding $pub_app at seq $_->{Seq} in "$xml_disp".)) ; | ||
| 218 | |||
| 219 | # Ugly but alternative is $_->{Ok}->(). | ||
| 220 | # eval $_->{Ok} where $_->{Ok} is an | ||
| 221 | # expression returning a bool is possible. but | ||
| 222 | # sub { } prevent recompilation. | ||
| 223 | |||
| 224 | } | ||
| 225 | |||
| 226 | $app_reqs[5]{Content} = $app_req_tmp ; | ||
| 227 | |||
| 228 | $app_location .= qq("$pub_app" => $svr, ) ; | ||
| 229 | |||
| 230 | } | ||
| 231 | |||
| 232 | substr($app_location, -2, 2) = '' ; | ||
| 233 | print qq(Ok. Citrix XML service located all published apps $app_location.\n) ; | ||
| 234 | exit $ERRORS{'OK'} ; | ||
| 235 | |||
| 236 | sub outahere { | ||
| 237 | print "Citrix XML service $_[0]\n" ; | ||
| 238 | exit $ERRORS{CRITICAL} ; | ||
| 239 | } | ||
| 240 | |||
| 241 | sub valid_xml { | ||
| 242 | my ($p, $input) = @_ ; | ||
| 243 | |||
| 244 | %xml_tag = () ; | ||
| 245 | @tag_stack = () ; | ||
| 246 | |||
| 247 | eval { | ||
| 248 | $p->parse($input) | ||
| 249 | } ; | ||
| 250 | |||
| 251 | return (0, qq(XML::Parser->parse failed: Bad XML in "$input".!)) | ||
| 252 | if $@ ; | ||
| 253 | |||
| 254 | if ( $xml_debug ) { | ||
| 255 | print STDERR pack('A4 A30 A40', ' ', $_, qq(-> "$xml_tag{$_}")), "\n" | ||
| 256 | foreach (keys %xml_tag) | ||
| 257 | } | ||
| 258 | |||
| 259 | return (1, 'valid xml') | ||
| 260 | |||
| 261 | } | ||
| 262 | |||
| 263 | |||
| 264 | sub handle_start { | ||
| 265 | push @tag_stack, $_[1] ; | ||
| 266 | |||
| 267 | $xml_debug && print STDERR pack('A8 A30 A40', ' ', 'handle_start - tag', " -> '$_[1]'"), "\n" ; | ||
| 268 | $xml_debug && print STDERR pack('A8 A30 A60', ' ', 'handle_start - @tag_stack', " -> (@tag_stack)"), "\n" ; | ||
| 269 | } | ||
| 270 | |||
| 271 | sub handle_char { | ||
| 272 | my $text = $_[1] ; | ||
| 273 | |||
| 274 | !($text =~ /\S/ || $text =~ /^[ \t]$/) && return ; | ||
| 275 | |||
| 276 | $text =~ s/\n//g ; | ||
| 277 | |||
| 278 | my $tag = $tag_stack[-1] ; | ||
| 279 | |||
| 280 | $xml_debug && print STDERR pack('A8 A30 A30', ' ', 'handle_char - tag', " -> '$tag'"), "\n" ; | ||
| 281 | $xml_debug && print STDERR pack('A8 A30 A40', ' ', 'handle_char - text', " -> '$text'"), "\n" ; | ||
| 282 | |||
| 283 | $xml_tag{$tag} .= $text ; | ||
| 284 | |||
| 285 | } | ||
| 286 | |||
| 287 | |||
| 288 | sub print_help() { | ||
| 289 | |||
| 290 | # 1 2 3 4 5 6 7 8 | ||
| 291 | #12345678901234567890123456789012345678901234567890123456789012345678901234567890 | ||
| 292 | |||
| 293 | print_revision($PROGNAME,'$Revision$ '); | ||
| 294 | |||
| 295 | my $help = <<EOHELP ; | ||
| 296 | Copyright (c) 2004 Karl DeBisschop/S Hopcroft | ||
| 297 | |||
| 298 | $PROGNAME -P <pn_server> -S <svr1,svr2,..> -A <app1,app2,..> | ||
| 299 | -F <Farm> [-v -x -h -V] | ||
| 300 | |||
| 301 | Check the Citrix Metaframe XP service by completing an HTTP dialogue with a Program | ||
| 302 | Neigbourhood server (pn_server) that returns an ICA server in the named Server farm | ||
| 303 | hosting the specified applications (an ICA server in a farm which runs some MS app). | ||
| 304 | EOHELP | ||
| 305 | |||
| 306 | print $help ; | ||
| 307 | print "\n"; | ||
| 308 | print "\n"; | ||
| 309 | print_usage(); | ||
| 310 | print "\n"; | ||
| 311 | support(); | ||
| 312 | } | ||
| 313 | |||
| 314 | sub print_usage () { | ||
| 315 | |||
| 316 | # 1 2 3 4 5 6 7 8 | ||
| 317 | #12345678901234567890123456789012345678901234567890123456789012345678901234567890 | ||
| 318 | |||
| 319 | my $usage = <<EOUSAGE ; | ||
| 320 | $PROGNAME | ||
| 321 | [-P | --pn_server] The name or address of the Citrix Metaframe XP | ||
| 322 | Program Neigbourhood server (required). | ||
| 323 | [-A | --pub_apps] The name or names of an application published by the | ||
| 324 | server farm (default 'Word 2003'). | ||
| 325 | [-F | --server_farm] The name of a Citrix Metaframe XP server farm. (required) | ||
| 326 | [-S | --app_servers] The _IP addresses_ of _all_ of the Farms ICA servers expected | ||
| 327 | to host the published application. | ||
| 328 | Enter as a comma separated string eg 'Srv1, Svr2, ..,Srvn'. | ||
| 329 | Since the PN servers round-robin the app servers to the clients, | ||
| 330 | _all_ the server farm addresses must be specified or the check | ||
| 331 | will fail (required). | ||
| 332 | [-v | --verbose] | ||
| 333 | [-h | --help] | ||
| 334 | [-x | --xml_debug] | ||
| 335 | [-V | --version] | ||
| 336 | EOUSAGE | ||
| 337 | |||
| 338 | print $usage ; | ||
| 339 | |||
| 340 | } | ||
| 341 | |||
| 342 | sub usage { | ||
| 343 | &print_usage ; | ||
| 344 | exit $ERRORS{'OK'} ; | ||
| 345 | } | ||
| 346 | |||
| 347 | sub version () { | ||
| 348 | print_revision($PROGNAME,'$Revision$ '); | ||
| 349 | exit $ERRORS{'OK'}; | ||
| 350 | } | ||
| 351 | |||
| 352 | sub help () { | ||
| 353 | print_help(); | ||
| 354 | exit $ERRORS{'OK'}; | ||
| 355 | } | ||
| 356 | |||
| 357 | =begin comment | ||
| 358 | |||
| 359 | This is the set of requests and responses transmitted between a Citrix Metaframe XP Program Neigbourhood (PN) client and a PN server. | ||
| 360 | |||
| 361 | This dialogue was captured by and reconstructed from tcpdump. | ||
| 362 | |||
| 363 | Citrix are not well known for documenting their protocols although the DTD may be informative. Note that the pair(s) 0 and 1, 4 and 5, ... | ||
| 364 | do not appear to do anything. | ||
| 365 | |||
| 366 | req 0 | ||
| 367 | POST /scripts/WPnBr.dll HTTP/1.1 | ||
| 368 | Content-type: text/xml | ||
| 369 | Host: 10.1.2.2:80 | ||
| 370 | Content-Length: 220 | ||
| 371 | Connection: Keep-Alive | ||
| 372 | |||
| 373 | |||
| 374 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
| 375 | <!DOCTYPE NFuseProtocol SYSTEM "NFuse.dtd"> | ||
| 376 | <NFuseProtocol version="1.1"><RequestProtocolInfo><ServerAddress addresstype="dns-port" /></RequestProtocolInfo></NFuseProtocol> | ||
| 377 | |||
| 378 | HTTP/1.1 100 Continue | ||
| 379 | Server: Citrix Web PN Server | ||
| 380 | Date: Thu, 30 Sep 2004 00:12:40 GMT | ||
| 381 | |||
| 382 | |||
| 383 | resp 1 | ||
| 384 | HTTP/1.1 200 OK | ||
| 385 | Server: Citrix Web PN Server | ||
| 386 | Date: Thu, 30 Sep 2004 00:12:40 GMT | ||
| 387 | Content-type: text/xml | ||
| 388 | Content-length: 253 | ||
| 389 | |||
| 390 | |||
| 391 | <?xml version="1.0" encoding="ISO-8859-1" ?> | ||
| 392 | <!DOCTYPE NFuseProtocol SYSTEM "NFuse.dtd"> | ||
| 393 | <NFuseProtocol version="1.1"> | ||
| 394 | <ResponseProtocolInfo> | ||
| 395 | <ServerAddress addresstype="no-change"></ServerAddress> | ||
| 396 | </ResponseProtocolInfo> | ||
| 397 | </NFuseProtocol> | ||
| 398 | |||
| 399 | req 2 | ||
| 400 | POST /scripts/WPnBr.dll HTTP/1.1 | ||
| 401 | Content-type: text/xml | ||
| 402 | Host: 10.1.2.2:80 | ||
| 403 | Content-Length: 191 | ||
| 404 | Connection: Keep-Alive | ||
| 405 | |||
| 406 | |||
| 407 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
| 408 | <!DOCTYPE NFuseProtocol SYSTEM "NFuse.dtd"> | ||
| 409 | <NFuseProtocol version="1.1"><RequestServerFarmData><Nil /></RequestServerFarmData></NFuseProtocol> | ||
| 410 | |||
| 411 | HTTP/1.1 100 Continue | ||
| 412 | Server: Citrix Web PN Server | ||
| 413 | Date: Thu, 30 Sep 2004 00:12:40 GMT | ||
| 414 | |||
| 415 | |||
| 416 | resp 3 | ||
| 417 | HTTP/1.1 200 OK | ||
| 418 | Server: Citrix Web PN Server | ||
| 419 | Date: Thu, 30 Sep 2004 00:12:40 GMT | ||
| 420 | Content-type: text/xml | ||
| 421 | Content-length: 293 | ||
| 422 | |||
| 423 | |||
| 424 | <?xml version="1.0" encoding="ISO-8859-1" ?> | ||
| 425 | <!DOCTYPE NFuseProtocol SYSTEM "NFuse.dtd"> | ||
| 426 | <NFuseProtocol version="1.1"> | ||
| 427 | <ResponseServerFarmData> | ||
| 428 | <ServerFarmData> | ||
| 429 | <ServerFarmName>FOOFARM01</ServerFarmName> | ||
| 430 | </ServerFarmData> | ||
| 431 | </ResponseServerFarmData> | ||
| 432 | </NFuseProtocol> | ||
| 433 | |||
| 434 | req 4 | ||
| 435 | POST /scripts/WPnBr.dll HTTP/1.1 | ||
| 436 | Content-type: text/xml | ||
| 437 | Host: 10.1.2.2:80 | ||
| 438 | Content-Length: 220 | ||
| 439 | Connection: Keep-Alive | ||
| 440 | |||
| 441 | |||
| 442 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
| 443 | <!DOCTYPE NFuseProtocol SYSTEM "NFuse.dtd"> | ||
| 444 | <NFuseProtocol version="1.1"><RequestProtocolInfo><ServerAddress addresstype="dns-port" /></RequestProtocolInfo></NFuseProtocol> | ||
| 445 | |||
| 446 | HTTP/1.1 100 Continue | ||
| 447 | Server: Citrix Web PN Server | ||
| 448 | Date: Thu, 30 Sep 2004 00:12:55 GMT | ||
| 449 | |||
| 450 | |||
| 451 | resp 5 | ||
| 452 | HTTP/1.1 200 OK | ||
| 453 | Server: Citrix Web PN Server | ||
| 454 | Date: Thu, 30 Sep 2004 00:12:55 GMT | ||
| 455 | Content-type: text/xml | ||
| 456 | Content-length: 253 | ||
| 457 | |||
| 458 | |||
| 459 | <?xml version="1.0" encoding="ISO-8859-1" ?> | ||
| 460 | <!DOCTYPE NFuseProtocol SYSTEM "NFuse.dtd"> | ||
| 461 | <NFuseProtocol version="1.1"> | ||
| 462 | <ResponseProtocolInfo> | ||
| 463 | <ServerAddress addresstype="no-change"></ServerAddress> | ||
| 464 | </ResponseProtocolInfo> | ||
| 465 | </NFuseProtocol> | ||
| 466 | |||
| 467 | req 6 | ||
| 468 | POST /scripts/WPnBr.dll HTTP/1.1 | ||
| 469 | Content-type: text/xml | ||
| 470 | Host: 10.1.2.2:80 | ||
| 471 | Content-Length: 442 | ||
| 472 | Connection: Keep-Alive | ||
| 473 | |||
| 474 | |||
| 475 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
| 476 | <!DOCTYPE NFuseProtocol SYSTEM "NFuse.dtd"> | ||
| 477 | <NFuseProtocol version="1.1"> | ||
| 478 | <RequestAddress><Name>i | ||
| 479 | <UnspecifiedName>FOOFARM01*</UnspecifiedName> | ||
| 480 | </Name><ClientName>WS09535</ClientName> | ||
| 481 | <ClientAddress addresstype="dns-port" /> | ||
| 482 | <ServerAddress addresstype="dns-port" /> | ||
| 483 | <Flags /> | ||
| 484 | <Credentials> | ||
| 485 | <UserName>foo-user</UserName> | ||
| 486 | <Domain>some-domain</Domain> | ||
| 487 | </Credentials> | ||
| 488 | </RequestAddress></NFuseProtocol> | ||
| 489 | |||
| 490 | HTTP/1.1 100 Continue | ||
| 491 | Server: Citrix Web PN Server | ||
| 492 | Date: Thu, 30 Sep 2004 00:12:56 GMT | ||
| 493 | |||
| 494 | |||
| 495 | resp 7 | ||
| 496 | HTTP/1.1 200 OK | ||
| 497 | Server: Citrix Web PN Server | ||
| 498 | Date: Thu, 30 Sep 2004 00:12:56 GMT | ||
| 499 | Content-type: text/xml | ||
| 500 | Content-length: 507 | ||
| 501 | |||
| 502 | |||
| 503 | <?xml version="1.0" encoding="ISO-8859-1" ?> | ||
| 504 | <!DOCTYPE NFuseProtocol SYSTEM "NFuse.dtd"> | ||
| 505 | <NFuseProtocol version="1.1"> | ||
| 506 | <ResponseAddress> | ||
| 507 | <ServerAddress addresstype="dot-port">10.1.2.2:1494</ServerAddress> | ||
| 508 | <ServerType>win32</ServerType> | ||
| 509 | <ConnectionType>tcp</ConnectionType> | ||
| 510 | <ClientType>ica30</ClientType> | ||
| 511 | <TicketTag>10.1.2.2</TicketTag> | ||
| 512 | <SSLRelayAddress addresstype="dns-port">ica_svr01.some.domain:443</SSLRelayAddress> | ||
| 513 | </ResponseAddress> | ||
| 514 | </NFuseProtocol> | ||
| 515 | |||
| 516 | req 8 | ||
| 517 | POST /scripts/WPnBr.dll HTTP/1.1 | ||
| 518 | Content-type: text/xml | ||
| 519 | Host: 10.1.2.2:80 | ||
| 520 | Content-Length: 220 | ||
| 521 | Connection: Keep-Alive | ||
| 522 | |||
| 523 | |||
| 524 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
| 525 | <!DOCTYPE NFuseProtocol SYSTEM "NFuse.dtd"> | ||
| 526 | <NFuseProtocol version="1.1"><RequestProtocolInfo><ServerAddress addresstype="dns-port" /></RequestProtocolInfo></NFuseProtocol> | ||
| 527 | |||
| 528 | HTTP/1.1 100 Continue | ||
| 529 | Server: Citrix Web PN Server | ||
| 530 | Date: Thu, 30 Sep 2004 00:13:29 GMT | ||
| 531 | |||
| 532 | |||
| 533 | resp 9 | ||
| 534 | HTTP/1.1 200 OK | ||
| 535 | Server: Citrix Web PN Server | ||
| 536 | Date: Thu, 30 Sep 2004 00:13:29 GMT | ||
| 537 | Content-type: text/xml | ||
| 538 | Content-length: 253 | ||
| 539 | |||
| 540 | |||
| 541 | <?xml version="1.0" encoding="ISO-8859-1" ?> | ||
| 542 | <!DOCTYPE NFuseProtocol SYSTEM "NFuse.dtd"> | ||
| 543 | <NFuseProtocol version="1.1"> | ||
| 544 | <ResponseProtocolInfo> | ||
| 545 | <ServerAddress addresstype="no-change"></ServerAddress> | ||
| 546 | </ResponseProtocolInfo> | ||
| 547 | </NFuseProtocol> | ||
| 548 | |||
| 549 | req 10 | ||
| 550 | POST /scripts/WPnBr.dll HTTP/1.1 | ||
| 551 | Content-type: text/xml | ||
| 552 | Host: 10.1.2.2:80 | ||
| 553 | Content-Length: 446 | ||
| 554 | Connection: Keep-Alive | ||
| 555 | |||
| 556 | |||
| 557 | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
| 558 | <!DOCTYPE NFuseProtocol SYSTEM "NFuse.dtd"> | ||
| 559 | <NFuseProtocol version="1.1"> | ||
| 560 | <RequestAddress>i | ||
| 561 | <Name> | ||
| 562 | <UnspecifiedName>EXCEL#32;2003</UnspecifiedName> | ||
| 563 | </Name> | ||
| 564 | <ClientName>WS09535</ClientName> | ||
| 565 | <ClientAddress addresstype="dns-port" /> | ||
| 566 | <ServerAddress addresstype="dns-port" /> | ||
| 567 | <Flags /> | ||
| 568 | <Credentials><UserName>foo-user</UserName> | ||
| 569 | <Domain>some-domain</Domain> | ||
| 570 | </Credentials> | ||
| 571 | </RequestAddress>i | ||
| 572 | </NFuseProtocol> | ||
| 573 | |||
| 574 | HTTP/1.1 100 Continue | ||
| 575 | Server: Citrix Web PN Server | ||
| 576 | Date: Thu, 30 Sep 2004 00:13:29 GMT | ||
| 577 | |||
| 578 | |||
| 579 | resp 11 | ||
| 580 | HTTP/1.1 200 OK | ||
| 581 | Server: Citrix Web PN Server | ||
| 582 | Date: Thu, 30 Sep 2004 00:13:29 GMT | ||
| 583 | Content-type: text/xml | ||
| 584 | Content-length: 509 | ||
| 585 | |||
| 586 | |||
| 587 | <?xml version="1.0" encoding="ISO-8859-1" ?> | ||
| 588 | <!DOCTYPE NFuseProtocol SYSTEM "NFuse.dtd"> | ||
| 589 | <NFuseProtocol version="1.1"> | ||
| 590 | <ResponseAddress> | ||
| 591 | <ServerAddress addresstype="dot-port">10.1.2.14:1494</ServerAddress> | ||
| 592 | <ServerType>win32</ServerType> | ||
| 593 | <ConnectionType>tcp</ConnectionType> | ||
| 594 | <ClientType>ica30</ClientType> | ||
| 595 | <TicketTag>10.1.2.14</TicketTag> | ||
| 596 | <SSLRelayAddress addresstype="dns-port">ica_svr02.some.domain:443</SSLRelayAddress> | ||
| 597 | </ResponseAddress> | ||
| 598 | </NFuseProtocol> | ||
| 599 | |||
| 600 | ** One sees this XML on an error (there may well be other error XML also, but I haven't seen it) ** | ||
| 601 | |||
| 602 | <?xml version="1.0" encoding="ISO-8859-1" ?> | ||
| 603 | <!DOCTYPE NFuseProtocol SYSTEM "NFuse.dtd"> | ||
| 604 | <NFuseProtocol version="1.1"> | ||
| 605 | <ResponseAddress> | ||
| 606 | <ErrorId>unspecified</ErrorId> | ||
| 607 | <BrowserError>0x0000000E</BrowserError> | ||
| 608 | </ResponseAddress> | ||
| 609 | </NFuseProtocol> | ||
| 610 | |||
| 611 | |||
| 612 | =end comment | ||
| 613 | |||
| 614 | =cut | ||
| 615 | |||
| 616 | |||
| 617 | # You never know when you may be embedded ... | ||
| 618 | |||
| 619 | |||
