[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: HTTPAPI returns a "Host name look up failed"
Thomas,
Strange doesn't begin to describe it! Here's what I learned:
Using F11 on the element.name variable will yield varying results,
depending on where the cursor is positioned. If it's on the portion
containing the word "element", this is displayed:
> EVAL
element
PATH OF ELEMENT
=
....5...10...15...20...25...30...35...40...45...50...55...60
1 '//// '
61
' '
121
' '
NS OF ELEMENT
=
....5...10...15...20...25...30...35...40...45...50...55...60
1
' '
61
' '
121
' '
NAME OF ELEMENT
=
....5...10...15...20...25...30...35...40...45...50...55...60
1 ' '
61
' '
121
' '
VALUE OF ELEMENT = SPP:C9EB2CCBCC0198D0
SIZE OF ELEMENT = 24
ALLOCSIZE OF ELEMENT = 65536
ATTRS OF ELEMENT = SPP:C9EB2CCBCC089C30
If I position the cursor on either the "." or "name" I get this:
NAME = SPP:C9EB2CCBCC0323A0
Positioning at the top of the program following arriving at the
breakpoint the first time, and searching for p_element brings me to
the data structure definition, where if I position the cursor under
"element" and press F11, I get "Call stack entry does not exist". If
I try "EVAL element", I get exactly what I described above, with the
various subfields' values as shown.
I added the debug_msg() statement, re-created the module and updated
the program, as instructed, and after running the program
again, here's what appeared in the debug log:
SetError() #13: HTTP/1.1 200 OK
recvdoc parms: identity 521
header_load_cookies() entered
recvdoc(): entered
SetError() #0:
<?xml version="1.0" encoding="utf-8"?><soap:Envelope
xmlns:soap="[1]http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="[2]http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="[3]http://www.w3.org/2001/XMLSchema"><soap:Body><GetGeoIPRe
sponse
xmlns="[4]http://www.webservicex.net"><GetGeoIPResult><ReturnCode>1</R
eturnCode><IP>209.131.36.158 </IP><ReturnCodeDetails>Record
Found</ReturnCodeDetails><CountryName>UNITED
STATES</CountryName><CountryCode>US</CountryCode></GetGeoIPResult></Ge
tGeoIPResponse></soap:Body></soap:Envelope>
INFO: endElement() - element.name=
INFO: endElement() - element.name= u
INFO: endElement() - element.name=
INFO: endElement() - element.name=
INFO: endElement() - element.name=
INFO: endElement() - element.name=
INFO: endElement() - element.name=
INFO: endElement() - element.name=
INFO: endElement() - element.name=
INFO: endElement() - element.name=
http_close(): entered
The EVAL displaying the hex representation looks like this (and leads
me to believe element is already incorrect) by the first time the
breakpoint is reached:
> EVAL p_element :x
64
00000 0026613F 3F3F3F3F 3F3F3F3F 613F3F3F -
../........./...
00010 3F3F3F3F 3F3F3F61 3F3F3F3F 3F3F3F3F -
......./........
00020 613F3F3F 3F3F3F3F 00000000 00000000 -
/...............
00030 00000000 00000000 00000000 00000000 -
................
I checked the compile listing and verified that ELEMENT was defined
as:
ELEMENT DS(10304)
BASED(P_ELEMENT)
.ALLOCSIZE I(10,0)
.ATTRS *(16)
.NAME A(1024)
VARYING
.NS A(1024)
VARYING
.PATH A(8192)
VARYING
.SIZE I(10,0)
.VALUE *(16)
So it appears that element is getting messed up before
that breakpoint. Should I try a different breakpoint to help
determine where it's getting messed up?
Thanks,
Rich
> Subject: RE: HTTPAPI returns a "Host name look up failed"
> To: ftpapi@xxxxxxxxxxxxxxxxxxxxxx
> From: thomas.raddatz@xxxxxx
> Date: Thu, 30 Apr 2009 09:02:07 +0200
>
>
> Rich,
>
> Strange things that happen at your side. I wonder if we are on the
right
> track. I often experienced that the most strangest problems had the
most
> simple solutions. Anyway, I downloaded the compiled version of eXpat
from
> Scott's web site and guess what, it works just fine with HTTP API
v1.23. I
> did not yet tested it with v1.25beta5 but I do not expect anything
> different with that.
>
> I do not remember if there was a problem in V5R1 to display
variables with
> qualified names. Please try the following things:
>
> a) Try to display the variable using F11 instead of "eval"
> b) Since "element" is a variable with a global scope, try to display
it
> from where it is defined. Once that you hit the breakpoint, go to
the top
> of HTTPXMLR4 and search for "p_element" (f p_element). Then try to
display
> "element" and "element.name" from there using "eval" and F11.
> c) If nothing helps, add a debug_msg() statement to HTTPXMLR4,
compile the
> module and update service program HTTPAPIR4. Run GEOIP and look at
the
> debug file to see the values of "element.name":
>
> debug_msg('INFO: endElement() - element.name=' + element.name);
> if (p_newval <> *null);
> xdealloc(p_newval);
> endif;
>
> Creation commands:
> CRTRPGMOD MODULE(LIBHTTP/HTTPXMLR4) DBGVIEW(*LIST)
>
> UPDSRVPGM SRVPGM(LIBHTTP/HTTPAPIR4) MODULE(LIBHTTP/HTTPXMLR4)
>
> Or you may try to look at "p_element" when you hit the breakpoint.
"EVAL
> p_element :X 64" should at least show you the namespace value. So we
at
> least know, that "element" is not completely messed up:
>
> > EVAL p_element :x 64
> 00000 003861A2 9681977A C595A585 93969785 - ../soap:Envelope
> 00010 61A29681 977AC296 84A861C7 85A3C785 - /soap:Body/GetGe
> 00020 96C9D7D9 85A29796 95A28561 C785A3C7 - oIPResponse/GetG
> 00030 8596C9D7 D985A2A4 93A30000 00000000 - eoIPResult......
>
> You probably should also verify that "element" has been compiled as
> expected. So after having compiled HTTPXMLR4 at option c), look at
the
> compiler listing and search for "ELEMENT" in upper cases. You should
get
> something similar to this:
>
> ELEMENT DS(10304)
> BASED(P_ELEMENT)
> ALLOCSIZE I(10,0)
> ATTRS *(16)
> NAME A(1024)
> VARYING
> NS A(1024)
> VARYING
> PATH A(8192)
> VARYING
> SIZE I(10,0)
> VALUE *(16)
>
> Info: I dropped the "References" columns to keep things simple.
>
> Thomas.
>
>
> ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx schrieb am 30.04.2009
00:51:06:
>
> >
> > Hi Thomas,
> >
> >
> >
> > I apologize for the delay in my response, I was out of commission
> > for a few days.
> >
> >
> >
> > I believe the GEOIP program you downloaded is essentially the same
> > as the one I downloaded, although my HTTPAPI version is 1.23, and
my
> > EXPAT is the already-compiled version. And I'm certain there are
> > differences in our system i OS versions - V5R1 for me.
> >
> >
> > Your debug instructions are just what I was hoping for, because if
I
> > can localize the problem it would be much easier for you point me
in
> > the right direction. However, when I get the environment set up
and
> > arrive at my breakpoint as directed, and try to check the values
> > list for element.name using "EVAL element.name" I get an
"identifier
> > does not exist" message. If I do a "find element.name" I can see
> > occurrences of it, so perhaps I don't understand the syntax of the
> > EVAL command in relation to a qualified entity. Sorry for my
> > ignorance, but I'd be grateful if you can walk me through this.
> >
> >
> >
> > Thanks!
> >
> >
> >
> > Rich
> >
> >
> >
> >
> >
> >
> >
> > EMAILING FOR THE GREATER GOOD
> > Join me
> >
> >
> >
> > > Subject: RE: HTTPAPI returns a "Host name look up failed"
> > > To: ftpapi@xxxxxxxxxxxxxxxxxxxxxx
> > > From: thomas.raddatz@xxxxxx
> > > Date: Tue, 28 Apr 2009 09:30:45 +0200
> > >
> > >
> > >
> > > Rich,
> > >
> > > I downloaded the GEOIP sample program from "
> > > http://www.pentontech.
> > com/IBMContent/Documents/article/56532_547_GeoIpService.zip"
> > > and I hope that it is the same that you use. I compiled and ran
the
> > > program with no modifications and it returned the correct
country name.
> I
> > > am using HTTP API V1.24beta5 and I compiled the included EXPAT
from
> source.
> > >
> > > I suggest to add a breakpoint to the "endElement" procedure in
module
> > > HTTPXMLR4 at the following statement:
> > >
> > > if (p_newval <> *null); <== add breakpoint here
> > > xdealloc(p_newval);
> > > endif;
> > >
> > > Once that you are there check the content of variable
"element.name".
> These
> > > are the values you should get:
> > >
> > > ReturnCode
> > > IP
> > > ReturnCodeDetails
> > > CountryName
> > > CountryCode
> > > GetGeoIPResult
> > > GetGeoIPResponse
> > > soap:Body
> > > soap:Envelope
> > >
> > > Please also verify the content of "name" when you reach
"endElement"
> for
> > > the first time. In that case "element.name" should be
"ReturnCode" and
> > > "name" should be:
> > >
> > > > EVAL name :x 32
> > > 00000 00520065 00740075 0072006E 0043006F - .ê.Á.È.Í.Ê.>.{.?
> > > 00010 00640065 000000-- -------- -------- - .À.Á...Á.È./.Ñ4-
> > >
> > > (Values beyond "000000" at offset 0014 can be ignored.)
> > >
> > > a) If "name" equals the value as shown above but "element.name"
is
> wrong,
> > > something goes wrong with character translation.
> > > b) If both values meet the expected values, something is wrong
with the
> > > "MapXmlData" procedure interface. Check the value of
"root.namespace"
> to
> > > determine which callback type is used.
> > > c) If "name" does not meet the expected value, I assume that
something
> is
> > > wrong with your EXPAT service program.
> > >
> > > Also ensure that HTTPAPIR4 binds to the EXPAT service program
that you
> > > think it binds to. Use "DSPSRVPGM SRVPGM(HTTPAPIR4)
DETAIL(*SRVPGM)" to
> > > check which EXPAT service is used by HTTPAPIR4.
> > >
> > > Thomas.
> > >
> > >
> > > ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx schrieb am 27.04.2009
23:17:25:
> > >
> > > >
> > > > Thomas,
> > > >
> > > >
> > > >
> > > > I don't believe so. At least I'm not specifically making that
call.
> > > > I'm simply using the GEOIP program stock out-of-the-box and
was
> > > > assuming it would work as-is. Is the modified procedure
interface
> > > > you mentioned supposed to replace the one currently there for
the
> > > > MapXmlData procedure? I'm not certain what I should do here...
> > > >
> > > >
> > > >
> > > > Thanks,
> > > >
> > > >
> > > >
> > > > Rich
> > > >
> > > >
> > > >
> > > > > Subject: RE: HTTPAPI returns a "Host name look up failed"
> > > > > To: ftpapi@xxxxxxxxxxxxxxxxxxxxxx
> > > > > From: thomas.raddatz@xxxxxx
> > > > > Date: Fri, 24 Apr 2009 08:26:09 +0200
> > > > >
> > > > >
> > > > > Rich,
> > > > >
> > > > > Do you have a call to http_xmlns(*ON) in your program?. If
> namespaces
> > > are
> > > > > enabled, the procedure interface should be:
> > > > >
> > > > > D endElementNS PR
> > > > > D userdata * value
> > > > > D depth 10I 0 value
> > > > > D ns 1024A const varying
> > > > > D name 1024A const varying
>
> > > > > D path 24576A const varying
> > > > > D value 65535A const
> > > > > D Attrs * const dim(32767)
> > > > > D options(*varsize)
> > > > >
> > > > > Thomas.
> > > > >
> > > > >
> > > > > ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx schrieb am 24.04.2009
> 01:50:57:
> > > > >
> > > > > >
> > > > > > Hi Scott,
> > > > > >
> > > > > >
> > > > > >
> > > > > > Here's what I believe is the relevant portion of th debuge
log:
> > > > > >
> > > > > >
> > > > > >
> > > > > > SetError() #13: HTTP/1.1 100 Continue
> > > > > > senddoc(): entered
> > > > > > <soapenv:Envelope
> > > > > xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/
> > > > > > " xmlns:web="http://www.webservicex.net">
<soapenv:Header/>
> > > > > > <soapenv:Body> <web:GetGeoIP> <!--Optional:-->
> <web:IPAddress>209.
> > > > > > 131.36.158 </web:IPAddress> </web:GetGeoIP>
</soapenv:Body>
> > > > > > </soapenv:Envelope>
> > > > > > recvresp(): entered
> > > > > > HTTP/1.1 200 OK
> > > > > > Date: Wed, 22 Apr 2009 22:34:18 GMT
> > > > > > Server: Microsoft-IIS/6.0
> > > > > >
> > > > > > X-Powered-By: ASP.NET
> > > > > > X-AspNet-Version: 1.1.4322
> > > > > > Cache-Control: private, max-age=0
> > > > > > Content-Type: text/xml; charset=utf-8
> > > > > > Content-Length: 521
> > > > > >
> > > > > > SetError() #13: HTTP/1.1 200 OK
> > > > > > recvdoc parms: identity 521
> > > > > > header_load_cookies() entered
> > > > > > recvdoc(): entered
> > > > > > SetError() #0:
> > > > > > <?xml version="1.0" encoding="utf-8"?><soap:Envelope
xmlns:soap="
> > > > > > http://schemas.xmlsoap.org/soap/envelope/"
> xmlns:xsi="http://www.w3.
> > > > > > org/2001/XMLSchema-instance"
> > > xmlns:xsd="http://www.w3.org/2001/XMLSchema
> > > > > > "><soap:Body><GetGeoIPResponse
xmlns="http://www.webservicex.net
> > > > > >
"><GetGeoIPResult><ReturnCode>1</ReturnCode><IP>209.131.36.158
> > > > > > </IP><ReturnCodeDetails>Record
> > > > > > Found</ReturnCodeDetails><CountryName>UNITED
> > > > > >
> > > > >
> > > >
> > >
> >
>
STATES</CountryName><CountryCode>US</CountryCode></GetGeoIPResult></Ge
tGeoIPResponse></soap:
>
> > >
> > > > >
> > > > > > Body></soap:Envelope>
> > > > > > http_close(): entered
> > > > > > New iconv() objects set, PostRem=1208. PostLoc=0.
ProtRem=819.
> > > ProtLoc=0
> > > > > > http_persist_open(): entered
> > > > > > http_long_ParseURL(): entered
> > > > > > DNS resolver retrans: 2
> > > > > > DNS resolver retry : 2
> > > > > > DNS resolver options: x'00000136'
> > > > > > DNS default domain: S105VX7M.COM
> > > > > > DNS server found: 68.87.85.98
> > > > > > DNS server found: 68.87.69.146
> > > > > > http_persist_post(): entered
> > > > > > http_long_ParseURL(): entered
> > > > > > do_post(): entered
> > > > > > POST /geoipservice.asmx HTTP/1.1
> > > > > > Host: www.webservicex.net
> > > > > > User-Agent: http-api/1.23
> > > > > > Content-Type: text/xml; charset=UTF-8
> > > > > > SOAPAction: "http://www.webservicex.net/GetGeoIP"
> > > > > > Expect: 100-continue
> > > > > > Content-Length: 279
> > > > > >
> > > > > >
> > > > > >
> > > > > > As you can see, the country name value is "UNITED STATES".
The
> > > > > > returned XML looks ok to me, but by the time the
MapXmlData
> > > > > > Procedure gets ahold of the parsed values, it's all
garbage,
> which
> > > > > > is why the if construct that tests for the "name" variable
to be
> the
> > > > > > value 'CountryName' is never satisfied, and even if it
were, the
> > > > > > value of variable "value" is also garbage.
> > > > > >
> > > > > >
> > > > > >
> > > > > > P MapXmlData B
> > > > > > D MapXmlData PI
> > > > > > D country 52a varying
> > > > > > D depth 10I 0 value
> > > > > > D name 1024A varying const
> > > > > > D path 24576A varying const
> > > > > > D value 65535A varying const
> > > > > > D attrs * dim(32767)
> > > > > > D const options(*varsize)
> > > > > >
> > > > > > /free
> > > > > > if (name = 'CountryName');
> > > > > > country = value;
> > > > > > endif;
> > > > > > /end-free
> > > > > > P E
> > > > > >
> > > > > >
> > > > > > Is it possible that my EXPAT setup is incorrect, or
mismatched
> > > > > > somehow with my HTTPAPI install (ver 1.23)? I'm pretty
certain I
> > > > > > downloaded and installed the precompiled version of EXPAT
> (version
> > > > > > 2.0.0 in SAVF format). I would really appreciate some help
in
> > > > > > figuring this out.
> > > > > >
> > > > > >
> > > > > >
> > > > > > Thanks,
> > > > > >
> > > > > >
> > > > > >
> > > > > > Rich
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > EMAILING FOR THE GREATER GOOD
> > > > > > Join me
> > > > > >
> > > > > >
> > > > > >
> > > > > > > Date: Wed, 22 Apr 2009 20:36:17 -0500
> > > > > > > From: sk@xxxxxxxxxxxxxxxx
> > > > > > > To: ftpapi@xxxxxxxxxxxxxxxxxxxxxx
> > > > > > > Subject: Re: HTTPAPI returns a "Host name look up
failed"
> > > > > > >
> > > > > > > Hi Rich,
> > > > > > >
> > > > > > > Create a debug log (like you did before) and look at
what is
> being
> > > > > > > received from the web service -- the details will be in
that
> debug
> > > > > file.
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > Rich Kitterman wrote:
> > > > > > > > Hi Scott,
> > > > > > > > > Just in case you didn't understand this: Your
messages are
> > > going to
> > > > > > > > a
> > > > > > > > > public mailing list. All participants on the mailing
list
> can
> > > read
> > > > > > > > > them. I'm able to read your response to Michael
Ryan, you
> don't
> > > > > have
> > > > > > > > to
> > > > > > > > > repeat it.
> > > > > > > > Thanks for the clarification. I understand that the
> > > correspondence
> > > > > > > > gets bounced to all on the public mailing list. I just
didn't
> > > know if
> > > > > > > > you personally were following every piece, so as a
courtesy I
> > > > > repeated
> > > > > > > > it.
> > > > > > > > > Here's why I would not have suspected that: You told
me
> that a
> > > PING
> > > > > > > > > worked. PING uses the same DNS resolver (configured
with
> CFGTCP
> > > 12)
> > > > > > > > > that HTTPAPI. Why did it work for PING and not for
HTTPAPI?
> > > > > > > > I was pinging with the same IP address I gave GEOIP as
a
> parm. I
> > > > > > > > think my confusion with the error message is in
understanding
> > > what
> > > > > > > > host name was actually being looked up. Did the error
have
> > > reference
> > > > > > > > to the target IP address I was trying to get GEOIP to
return
> a
> > > > > country
> > > > > > > > name for, or was it referring to something else? I
suspect
> the
> > > > > > > > latter.
> > > > > > > >
> > > > > > > > > Hard to say. You really haven't provided any
information
> other
> > > than
> > > > > > > > > "something didn't work". Check the XML that was
returned
> from
> > > the
> > > > > > > > web
> > > > > > > > > service and see if it contains the country name. If
it was,
> > > then
> > > > > the
> > > > > > > > > problem is in the way your interfacing to the XML
parser.
> > > > > > > > I agree. The problem is that I'm ignorant enough that
I'm not
> > > sure
> > > > > > > > where (which HTTPAPI module or procedure) to look for
the XML
> > > string
> > > > > > > > coming back from the web service. If you can point me
in the
> > > right
> > > > > > > > direction, I'd be grateful. What I did determine is
that when
> I
> > > go to
> > > > > > > >
[1]http://www.webservicex.net/geoipservice.asmx?op=GetGeoIP
> and
> > > test
> > > > > > > > the same IP address I pass to GEOIP, the XML I get
back is:
> > > > > > > >
> > > > > > > > <?xml version="1.0" encoding="utf-8" ?>
> > > > > > > > - <GeoIP
xmlns:xsd="[2]http://www.w3.org/2001/XMLSchema"
> > > > > > > >
xmlns:xsi="[3]http://www.w3.org/2001/XMLSchema-instance"
> > > > > > > > xmlns="[4]http://www.webservicex.net">
> > > > > > > > <ReturnCode>1</ReturnCode>
> > > > > > > > <IP>209.131.36.158</IP>
> > > > > > > > <ReturnCodeDetails>Record Found</ReturnCodeDetails>
> > > > > > > > <CountryName>UNITED STATES</CountryName>
> > > > > > > > <CountryCode>US</CountryCode>
> > > > > > > > </GeoIP>
> > > > > > > >
> > > > > > > > I appreciate your patience, as you can see I'm
completely a
> > > novice
> > > > > > > > with this.
> > > > > > >
> > >
----------------------------------------------------------------------
-
> > > > > > > This is the FTPAPI mailing list. To unsubscribe, please
go to:
> > > > > > > http://www.scottklement.com/mailman/listinfo/ftpapi
> > > > > > >
> > >
----------------------------------------------------------------------
-
> > > > > >
> > >
----------------------------------------------------------------------
-
> > > > > > This is the FTPAPI mailing list. To unsubscribe, please go
to:
> > > > > > http://www.scottklement.com/mailman/listinfo/ftpapi
> > > > > >
> > >
----------------------------------------------------------------------
-
> > > > >
> > > > >
> > > > > --
> > > > > IMPORTANT NOTICE:
> > > > > This email is confidential, may be legally privileged, and
is for
> the
> > > > > intended recipient only. Access, disclosure, copying,
distribution,
> or
> > > > > reliance on any of it by anyone else is prohibited and may
be a
> > > criminal
> > > > > offence. Please delete if obtained in error and email
confirmation
> > > > to the sender.
> > > > >
>
----------------------------------------------------------------------
-
> > > > > This is the FTPAPI mailing list. To unsubscribe, please go
to:
> > > > > http://www.scottklement.com/mailman/listinfo/ftpapi
> > > > >
>
----------------------------------------------------------------------
-
> > > >
>
----------------------------------------------------------------------
-
> > > > This is the FTPAPI mailing list. To unsubscribe, please go to:
> > > > http://www.scottklement.com/mailman/listinfo/ftpapi
> > > >
>
----------------------------------------------------------------------
-
> > >
> > >
> > > --
> > > IMPORTANT NOTICE:
> > > This email is confidential, may be legally privileged, and is
for the
> > > intended recipient only. Access, disclosure, copying,
distribution, or
> > > reliance on any of it by anyone else is prohibited and may be a
> criminal
> > > offence. Please delete if obtained in error and email
confirmation
> > to the sender.
> > >
----------------------------------------------------------------------
-
> > > This is the FTPAPI mailing list. To unsubscribe, please go to:
> > > http://www.scottklement.com/mailman/listinfo/ftpapi
> > >
----------------------------------------------------------------------
-
> >
----------------------------------------------------------------------
-
> > This is the FTPAPI mailing list. To unsubscribe, please go to:
> > http://www.scottklement.com/mailman/listinfo/ftpapi
> >
----------------------------------------------------------------------
-
>
>
> --
> IMPORTANT NOTICE:
> This email is confidential, may be legally privileged, and is for
the
> intended recipient only. Access, disclosure, copying, distribution,
or
> reliance on any of it by anyone else is prohibited and may be a
criminal
> offence. Please delete if obtained in error and email confirmation
to the sender.
>
----------------------------------------------------------------------
-
> This is the FTPAPI mailing list. To unsubscribe, please go to:
> http://www.scottklement.com/mailman/listinfo/ftpapi
>
----------------------------------------------------------------------
-
References
1. http://schemas.xmlsoap.org/soap/envelope/
2. http://www.w3.org/2001/XMLSchema-instance
3. http://www.w3.org/2001/XMLSchema"><soap:Body><GetGeoIPResponse
4. http://www.webservicex.net"><GetGeoIPResult><ReturnCode>1</ReturnCode><IP>209.131.36.158
-----------------------------------------------------------------------
This is the FTPAPI mailing list. To unsubscribe, please go to:
http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------