# JSSE V1.0 Implementation Problem

Eugene Larkin Work (eugene@systemchanges.com)
Sun, 22 Aug 1999 23:15:13 -0500

- Messages sorted by: [ date ][ thread ][ subject ][ author ]
- Next message: yang: "question"
- Previous message: Jean Claude COLLART: "Error: Issuer certificate is invalid (-8156)"
- Next in thread: Jeff Nisewanger: "Re: JSSE V1.0 Implementation Problem"

    From: "Eugene Larkin Work" <eugene@systemchanges.com>

    To: <java-security@Sun.COM>

    Subject: JSSE V1.0 Implementation Problem

    Date: Sun, 22 Aug 1999 23:15:13 -0500

------=_NextPart_000_000C_01BEECF4.302EC760
Content-Type: multipart/related; boundary="----=_NextPart_001_000D_01BEECF4.302EC760"
X-Sun-Content-Length: 29336

------=_NextPart_001_000D_01BEECF4.302EC760
Content-Type: multipart/alternative;
boundary="----=_NextPart_002_000E_01BEECF4.302EC760"

------=_NextPart_002_000E_01BEECF4.302EC760
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

After much haggeling with the source and limited
examples I have the following errors when I
compile my application trying to use JSSE v1.0. I
have attached the java source for the two objects.
I hoped you might have some insight as to why I am
getting these messages. Thank you in advance for
your time to look at this problem.

After doing all of the install instructions and
trying to create an executable object this is
whatI get. What is the reason. Have I got
completely off base on this project. The
documentation islimited for URL handling and I can
not find any sample code except for a promise that
SUN is goingto release some. I am trying to run
an application. I have a servlet version of this
and anapplet version as well but the application
is the most important to my development project.
The following errors are received from compiling
the upmhttpserver.java to an executable. I
havemarked the code with Route 1 and Route 2
comments. They are at lines 414 and 418
respectively. Followingis the information from
the documentation that looks easy but is actually
not.
QUOTE---------HTTPS SupportThe protocol "HTTPS" is
HTTP (used for Web browsing and other purposes),
used in conjunction with a secure socket.The JSSE
reference implementation provides a basic client
side HTTPS protocol handler. This supports
firewall tunneling, so that HTTPS clients can
access servers through firewalls which support
that tunneling (usually, only to port 443). This
means that you can write lines of Java code such
as
URL url = new URL
("https://www.sun.com/");---------END QUOTE

Useing Route 1...import java.net.URLEncoder;import
com.sun.net.ssl.internal.www.protocol.https.HttpsU
RLConnection;import
com.sun.net.ssl.internal.www.protocol.https.Handle
r;import
com.sun.net.ssl.internal.www.https.HttpsClient;...
com.sun.net.ssl.internal.www.protocol.https.Handle
r hnd = new Handler();...// route one URL
anacomURL = new
URL("https://www.anacom.com/order/testaccount/tran
saction.htm"); URLConnection connection =
hnd.openConnection(anacomURL);...
error received by compile is as follows
link @upmhttpserver.lnkError:
D:\Eugene\wwwroot\TESTHOME\servlets\Worker.obj(Wor
ker) (138584016): Symbol Undefined
_$com_sun_net_ssl_internal_www_protocol_https_Hand
ler__4init_5__Error:
D:\Eugene\wwwroot\TESTHOME\servlets\Worker.obj(Wor
ker) (138584016): Symbol Undefined
_$Classcom_sun_net_ssl_internal_www_protocol_https
_HandlerBuild Failed
Using Route 2...import java.net.URLEncoder;import
com.sun.net.ssl.internal.www.protocol.https.HttpsU
RLConnection;import
com.sun.net.ssl.internal.www.protocol.https.Handle
r;import
com.sun.net.ssl.internal.www.https.HttpsClient;...
// route two URL anacomURL = new
URL("https://www.anacom.com/order/testaccount/tran
saction.htm"); URLConnection connection = new
HttpsURLConnection(anacomURL, hnd);
link @upmhttpserver.lnkError:
D:\Eugene\wwwroot\TESTHOME\servlets\Worker.obj(Wor
ker) (138584016): Symbol Undefined
_$com_sun_net_ssl_internal_www_protocol_https_Http
sURLConnection__4init_5__Ljava_net_URL_2Lcom_sun_n
et_ssl_internal_www_protocol_https_Handler_2Error:
D:\Eugene\wwwroot\TESTHOME\servlets\Worker.obj(Wor
ker) (138584016): Symbol Undefined
_$Classcom_sun_net_ssl_internal_www_protocol_https
_HttpsURLConnectionError:
D:\Eugene\wwwroot\TESTHOME\servlets\Worker.obj(Wor
ker) (138584016): Symbol Undefined
_$com_sun_net_ssl_internal_www_protocol_https_Hand
ler__4init_5__Error:
D:\Eugene\wwwroot\TESTHOME\servlets\Worker.obj(Wor
ker) (138584016): Symbol Undefined
_$Classcom_sun_net_ssl_internal_www_protocol_https
_HandlerBuild Failed

Eugene Larkin

Phone Numbers

(972) 588-8333 Cell
(972) 390-6672 Work

EMail Addresses

mailto:eugene@systemchanges.com
Personal
mailto:ELarkin@lyrick.com Work

URL Addresses

http://www.systemchanges.com Personal
http://www.eugenelarkin.com Personal

------=_NextPart_002_000E_01BEECF4.302EC760
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
After much=20 haggeling with the source and limited examples I have the following = errors when=20 I compile my application trying to use JSSE v1.0. I have attached = the java=20 source for the two objects. I hoped you might have some = insight as t o = why I am=20 g etting these = messages. Thank=20 you in advance for your time to look at this = problem.

    After doing all of the install instructions and =
    trying to create an executable object this is what
    I get.  What =
    is the reason.  Have I got completely off base on this =
    project.  The documentation is
    limited for URL handling and I =
    can not find any sample code except for a promise that SUN is =
    going
    to release some.  I am trying to run an application.  =
    I have a servlet version of this and an
    applet version as well but =
    the application is the most important to my development =
    project.

    The following errors are =
    received from compiling the upmhttpserver.java to an executable.  I =
    have
    marked the code with Route 1 and Route 2 comments.  They =
    are at lines 414 and 418 respectively.  Following
    is the =
    information from the documentation that looks easy but is actually =
    not.

    QUOTE
    ---------
    HTTPS =
    Support
    The protocol "HTTPS" is HTTP (used for Web browsing and other =
    purposes), used in conjunction with a secure socket.
    The JSSE =
    reference implementation provides a basic client side HTTPS protocol =
    handler. This supports firewall tunneling, so that HTTPS clients can =
    access servers through firewalls which support that tunneling (usually, =
    only to port 443). This means that you can write lines of Java code such =
    as

        URL url =3D new =
    URL ("https://www.sun.com/");
    ---------
    END =
    QUOTE

    Useing Route 1
    ...
    import java.net.URLEncoder;
    import =
    com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnection;
    import=
     com.sun.net.ssl.internal.www.protocol.https.Handler;
    import =
    com.sun.net.ssl.internal.www.https.HttpsClient;
    ...
    com.sun.net.ssl.internal.www.protocol.https.Handler hnd =3D new =
    Handler();
    ...

    // route =
    one
     URL anacomURL =3D new =
    URL("https://www.anacom.com/order/testaccount/transaction.htm");
     =
    URLConnection connection =3D =
    hnd.openConnection(anacomURL);
    ...

    error received by compile is =
    as follows

    link =
    @upmhttpserver.lnk
    Error: =
    D:\Eugene\wwwroot\TESTHOME\servlets\Worker.obj(Worker)  =
    (138584016): Symbol Undefined =
    _$com_sun_net_ssl_internal_www_protocol_https_Handler__4init_5__
    Error=
    : D:\Eugene\wwwroot\TESTHOME\servlets\Worker.obj(Worker)  =
    (138584016): Symbol Undefined =
    _$Classcom_sun_net_ssl_internal_www_protocol_https_Handler
    Build =
    Failed

    Using Route 2
    ...
    import java.net.URLEncoder;
    import =
    com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnection;
    import=
     com.sun.net.ssl.internal.www.protocol.https.Handler;
    import =
    com.sun.net.ssl.internal.www.https.HttpsClient;
    ...
    // =
    route two
     URL anacomURL =3D new =
    URL("https://www.anacom.com/order/testaccount/transaction.htm");
     =
    ;URLConnection connection =3D new HttpsURLConnection(anacomURL, =
    hnd);

    link =
    @upmhttpserver.lnk
    Error: =
    D:\Eugene\wwwroot\TESTHOME\servlets\Worker.obj(Worker)  =
    (138584016): Symbol Undefined =
    _$com_sun_net_ssl_internal_www_protocol_https_HttpsURLConnection__4init_5=
    __Ljava_net_URL_2Lcom_sun_net_ssl_internal_www_protocol_https_Handler_2Error: D:\Eugene\wwwroot\TESTHOME\servlets\Worker.obj(Worker)  =
    (138584016): Symbol Undefined =
    _$Classcom_sun_net_ssl_internal_www_protocol_https_HttpsURLConnection
    =
    Error: D:\Eugene\wwwroot\TESTHOME\servlets\Worker.obj(Worker)  =
    (138584016): Symbol Undefined =
    _$com_sun_net_ssl_internal_www_protocol_https_Handler__4init_5__
    Error=
    : D:\Eugene\wwwroot\TESTHOME\servlets\Worker.obj(Worker)  =
    (138584016): Symbol Undefined =
    _$Classcom_sun_net_ssl_internal_www_protocol_https_Handler
    Build =
    Failed

Eugene Larkin
=
Phone Numbers=20
(972)=20 588-8333 | Cell
(972)=20 390-6672 | Work
EMail Addresses=20
mailto:eugene@systemchanges.co= m | Personal
mailto:ELarkin@lyrick.com= | Work
URL Addresses=20
http://www.systemchanges.com | Personal
http://www.eugenelarkin.com | Personal

------=_NextPart_002_000E_01BEECF4.302EC760-- ------=_NextPart_001_000D_01BEECF4.302EC760 Content-Type: image/jpeg; name="javaperl.jpg" Content-Transfer-Encoding: base64 Content-ID: <720311204@23081999-2f02> /9j/4AAQSkZJRgABAAEAYABgAAD//gAfTEVBRCBUZWNobm9sb2dpZXMgSW5jLiBWMS4wMQD/2wCE AAQDAwMDAgQDAwMFBAQFBgsHBgYGBg0JCggLEA4REA8ODw8RFBkVERMYEw8PFh4WGBobHB0cERUf IR8cIRkcHBsBBAUFBgUGDQcHDRsSDxIbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsb GxsbGxsbGxsbGxsbGxsbG//+ABg8bnNvPSJqYXZhcGVybC5uc28iPiAA/8QBogAAAQUBAQEBAQEA AAAAAAAAAAECAwQFBgcICQoLAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+hEA AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl 8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImK kpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP0 9fb3+Pn6/8AAEQgAbQDrAwERAAIRAQMRAf/aAAwDAQACEQMRAD8A+0fG+qTaf4dENrM8NxcSAI6P tYAcnB/IfjQNHL+HfFFzpWu+Rrt9cyxTRgIHZpMMRuXj/dz+lMai5OyF8Z/EO3jht7XSrqaAPkyS KhDD0A9O/NSpI65YOtDRr8TnE1a6s7eC8stUuZCy5HlEkg+hHelzruP6nXtdI7lPiFp3/CKNc3TS w3i27EqYyPnA4+mSP1o54p2H9RrpXa/EXSvGmg6Z4MtpLu7m/dQqzl0JJJ7fnmjnVwlga8Vdo4S5 8avf+JIb2W5nhR5FKqMqAgOAP51XMjP6tVWljofGHj2GW8g0rS7qWKOQYkcKQSxOAD3A6fmKV0N4 SrGXL19ShF4oj8L+Jbcf2tPd2cm3zNynaf7wxnqMZzQpIc8JVho0XPFPjeO91yDR9NvJbe2OA7qp BJJ5z3wARRdCeFqxlyvcg0bxSmi/EK10KLVJ7uG4cKBIpwc/xc9CMdfrTuKrhqlJXmem6hq+naVG jX10kO77oJ5NByJDdO1jTtVDfYLpJNn31B5HbkUAXsDOcc1RZn6rrOm6Pb+dqV7HbJ0UMeW+g6mp clHc3o4eriJWpq5Qk8S6bBojanKJEg4Cb4iGkPYKvU5o5klc1jg6sqvso2v66L1ZUgPi7VSLjzId Egb7sewTSkepzwDjt2x+SXOby+pUPd1m++yJpofFdgwuor2HUoUU74ZIxGxA9CO/sf8A9R70SYSw dX3ZRcX0ad/vubOm3kV/p6XUOQrdVI5U45Bqk7o4qtJ0ZuD6FumZkVxwisDjBoAz5CBEWOMdWz26 df8AP/1gDkdV8YaBpmsy6TdXha9iQM8UUUkzKCQoBwCMkkfL1GRxTA4XU/iteRXv2m206CLTYp/J uILl/Lu2IA3EJuwoByO/bOOdquB6ZZXcV7aJdR8q+cgjBBHBBHHIIx2xjHGOGBU8T+JLPwn4Sn1e 7Tf5eFiiVwjSucYUEn8T7A8ccAHg+ofE3xHrhkjvNbubWMyFkgtNsIAxwpkHOBjpg9c5O2pA6PwL 8TJ7C7uE17U2uI48MHklbEnMa4xtzlQMg/KOTnH8LA99ZQUXHTryPp6Z7f56YAI9rLx6e4/qKYHD ePb9brxQtsWYw2qKNoxyx5bH4YH4VJKOX8ca5Be3MepWNqbZk2Lt3g8gEDHHpgfhUS2O3CNxqXRw mo332gbbm4c5O5D6f5wK4eaabSPsaqoTgubS+xSkiubFFmt7wqOxU4P+etUqnNozmqYR4dc8ZF46 ne3OkJDLMzea4Q578/8A1hWfM4zfkdS5atCKa1bsR6rqVw88drNIxgj6oOMiqpuTjfqZ4xwVVRa0 K1zqktzdQzqCvloqgHHQE9K0TlHQ5as6dSSlFWSJ5r+ebWra8eQpnY4z7H/61KLdmjWrZ1oSSsnY sa5dzvdQhptzInA/z+P5VovdQ8dCKqRURZp5z4mEjynllKt64GBWsbpiqRjHFpdNC/pDzXHxX0rL NJIzqAB1JwcVX2keZmloycV0SPSr2W4vfH940umtqLRTSIluDjIXIH4cA1Z86XNO0/WLfxva31to M1jEZFEiKchUPDZ56dT+AoA7DxBq76ZAkVmizXs52Qxk4x6sf9kcZ+tKTaWh24Wgq0rz0it3+nqz m/B3h83bHxNrDNe3M0hNs0w4Vc8MB79R6DArOEFfmZ6ePxbhbDUVypb2/I0Lv/SPEt9qFzhbbRoD 5QYjHmFdxb8Bx/nitW35HND93QhCO9R6+l7WNnw88reHrUXbFrhk3kN1IJJBP4VUdjjxaiq0uTZG iwChQo6HOMDAqjkM3w/Kk1nczQyB4HuXMZHpnj/P+REXc7MUnGUYvdJGuDnPHSrOQil4IHNAFF02 pjCjGCR68f8A1v8APYA8r+Ivh3Tbey1DxgL+8027ht1/1BASSUMojLDbkksEGcjGAeMEgA8d1C8t LvRozaW5j1N3droovkgRDayqVUhCQRx8oPA43YwgPSPh7rln4V+Ft3e6r+5jt7xgyBg/mMQmAq9B wQMdiCTjnbSA5bUtU8QfEq6jguGa1SOTNpBE2Y0HKFpDzlgxiBOflDEheThCOTXQNTjdp7qza1iV 2TdOGXcykhgMjBIORj1wDgnFIZ6Dd+B9YTRBMrafp8jO293RrXcVT94wIbBARGwMbSrSthcghgeh fC/xcmraIvh2+mlGs6bGVk8+LYWQNtDcdCPlBB5zmgDvTlWK+SrYPVipP6jNMDKsfBf2fxK+rX91 Feb2d2jMGAWPfkkd6km5lfE3w/aXXhGH7LFDaMtwMukIyQVbPTHtWcnZHo5fDnquPkeFy6WHtlia XdJHkBgOMelcN+WTaPtXg1KlGLeqK66PMceZcKo9AOlPn8jmjgZ7SkXRZKkkOz7kOTj1JrO71PQ9 iouFtolgwxsCXiRj6suaaNpQjJ6ooXdramdZXmjgVfl27etaRcrWR5mIpUFPnlJRt0NFdEk1aFGt AFCfdboD7VtCnJHnYzHYR2UW2/JEKaRPb6huupfMaNiMcnp05rZRd7HVh6DqKNabvsya704XG1w5 SROhzV8p0YjDqq+ZOzNr4daYf+FwaZLdv5rKZCBjuImwfzo5Wndng4+hKNOUpO+x7DrfhCa71kat pV99kuycv2BOAMg9Rx+dM+cHaF4avLDVG1HU9TkuZj0QFtv1PPPHQdBQBm6wtxJqev3u4iSzs1hh weAG5Y4/4DWUurPdwzjCnSp9JO7+W35nSaAsQ8MaaIc+WLWPYCckDaMVpH4TzMVf28773f5nEa3q aQeG285WB1DUnSUIpLGNG5AA5JIXH4/ljKXKtT38NQvX937EVb1a/S5VsvE+snxxdfYtHf8AdWyx i03qAAOQWckBeD0HXpQpvmtYurgqKwsVOe7bvr+C6/0ze1zW9QvoP7OsG/s638pXvdQl4WNT/ChH 3m68jp/KpSctFoefhcNTovnn7z2jHq33fZB4Zmk1XWFk0eaSDw9p6CG3UDiZx1P0Hv8A/qVN82sd h4yKoUrVlerLV+SO3TgEc8dz3rc8NEc+QFPQA/1oGVHxsLYAIAI/T/P+HYA8t+M8U7fD+Joiqxre RGZ2AO1efm9fvbeF5xnHQ0AeP3NpCdLtbuK7gtiWS1JkkYsTv3NOhzwgcOu8Z/ixg8KgLfimCDSr PQfD6i8t7CCV5J3kiw7y7gGOw4VsKBg8DnqMHDA7/wCE6WKaHNcY8iN1VYSWGd21fOwCAeWUEnkE FBwVwogMm/0DStQu5dTudSkWxAlkBcyBQ4mUcRsEbJVdrEsSX9SAQAW/DXg/xbJrt5Fqt/LJpYjZ boi53vdZjZf3bMuDgnHOOhz04ACXSZPhr4r0vWh9ovI1kuDeSQbnZodiACTcwG4sQ2M/eJ6jAU2A 9qtruzv7SO7s5YLmGRcrIihwe3X26e2MUAb3QVJByvjwA+F4wB0uBjA/2WqZLQ9XLNK79P1R4LMp 89iwAIY9K4pR6n6AthAMDg4pWAxrjXbaL5LdGlI6FeB+dXGlJ+R4mIzihR92HvP8DMl1G+u/kVto cYCIK3jSjE+exGZ4mvonZeQul/Zxcq8wklK5+VF3HPFbLQ8ttyd2eiaTqN+9my2ely2+wDa0qhQ3 rz1H5UxFaZnkkWeYqZHQF9pyAejD8wapI+0yypzYVLtdf18hqqxQnrg8nFUei2bXgEY+LmmjGDiT /wBEtUs8TM7ewl8vzPfCAeKg+REZRtwaAOXLrY+PJYbiNPI1OFQj9MunBB+oYfl+U7S16nqWdXCp x3g/wfX8CuLfX/DkUi6cIL3TEyyxyEpJCOyg9CB2/wA4LOGxopYbGNe0vGb+5nmltd6u1+dSTyh5 0MstpJJJu+yqXIJAHAYt8oz3P5cq573PqpwoKPsW9rXW3NovwS1ZvOsemW0NvLZpPcxqs11BG5EU C/8ATQg5dyei5q9vU867qtyi7LZPq/RbJLqzp4NAubzS31LVFHniI/ZLMj93bccYXu31/wD1bKLt dnlzxUKc1Tp7X1l1f/ANfwetsvgyxW224WMBsf3sc596qHwnHj+f6zLm7m6OOBxVnAMk4xxxjn/P +f8AAApOPkVO3GT+XPH+f6AzmvGPh1PEvhG70li8ZlAaNlIG1xyuc9iQBj+XUAHz9oFjNYeKp/B2 rzW8EMk7JcOwyMRbmPBxwSOHOGUZII5wAM8R3WjfY9Pso7ppZIknl84BX3yb8CRzgtvfygcHgKyc gKcoCp4d13Wrbw9c6bpssp4VRGAQuDINoDhsx8yNkgA9u/AB1Gs6zDo2hWZudHXF3EPOjkmLCYKE LSOwxtkJ2lv3e7aeGHG1gYPhjxtruhTGPSoBdOxVI7cxs8eCB/AG4YsFOOpPpyKQDvh9HLrXjmz0 qSeP7Pf3Je4gYbwwjIl5BwCDtK8575HSgCxovi3VNC0SHSFna2+zllMTlVKHcSRhpARjPoKYH1p0 qSDlvHeD4ZVf+m44/wCAtSZ6mW/xn6fqjwmUYun7/Men1+tRy8uh95F6Ij2jpu2+vNQ4l3OIu4vJ v5YB8oV22j2zx+larY/OcRTVKtOHZsXTl330IBxkgcVS3OY7zQoYbSSSFYVSRCRnqT36/wCetUBr LdEuC52jB9sDrnn6CkK1jMW4WSSVBwI5T0IPBwx6e5NVE+kyep8dN+v+f6EwYH+DHHFWfQ2NjwEM fF3TgpyMSc/9smqGeLmX8CV/L8z3yoPkQPA4oAy9X0q01ex+zXaHaCGVgcMjA8MD2NDipaM6aNee HnzxMN7HxjZosFnqVpdQqMB7pCrj0yRkHp/ntNprZncquBn704OL8nocJrXh7/hGfEGn6teTW179 omxLbAeXEjEde/Hfp2rF05RlzLU9/D42OMpyoRvGy0e7f9epJ4fuIFsbSW7lkXGpfabhiAyNtI2g N14x39aIrlWosTGUpSULfDZd9d/vPW7a4jubdZoJEdD91geOldSsfHSjKD5ZaGQtg2k+IGvrMxxW d0f9JRm2gPxhhn8j+FQo66HZKtGtR5KnxR2f6GnDe2MzhIruFmx0V1J7GtHFx3OEmkGBuI6d/wDP +f6ICuzgAYJzx26DigZCR8pz8owMHHTp/n/PABy2v+D9A1y7W71SwE08e1VkDlHAG49QQQAWJ+uD /DwwPE/ip4R0vwtHpn2D7Q8108xkeWTLMAY8L07ZOCeemcgfKmBlN4StYfhivjIah5LvcFbW3eMN vAbaAzYAyACfu4wp9flQjT8HJqnjO41O1m+VRp2J7h4VkLOnEW8sDnkZ55ODyAoCsZp/BDQRqXiy 51i6Z5F0uNRBGc43yAruPsFX8yp7HCQDfCWnnQPjhpnh4KVvLC4u9srxriVWgzHIcHOSAMjIUDHA O7LEdbb/AAPTUYjqOvas51K5d5rg26qY9zMT8uUPHP8A+rpQB7genSpJOZ8b5PhuMEj/AFw/9Bap Z6mW/wAZ+n6o8MmUC4kBXHzEbc9OfXvWlj7iL91EO3aAwPPoeCDmoaNEzlvENuU1beqgFowfx6E0 lofG5vDlxPN3SKujgjWIt2cbgM496pHindy2epyag39nyW8KvEjMZQSRnIGP++amU+Q7cNhXiL2d rGRqsOmw25aTxOZrtDkRqMq/qPlzt70oyk3qa1qOGpQ92d2RaPAbW8xNKGMuA3PA64/nWuw8sqOG JXnob27A6HHTpWh9kbPgIj/hbmnben7zGef+WTVDPFzP+DL5fmj32oPkAI4waAOV8YX3iKx0sSeH 7NJpCcOxBLIPUDoa7MNCjOdqrsizzvT9a13Ub6aS806+1KZRgwxymMrgjnap47fl+XrToUoxXK1F eauBBqupapqtxDpv9gXlsLeRGuEjCsVXgqMlSfzPb8uSeGhytKa1+X6/oddCp7D32vT+rMmXVdZt 9UbTtL8NXAErJNPBJAAx2nIICAAdO/p+Uzw1KbvKor/13ZrGvKFO/LorpPpr02NrTvEXim8167n0 fQobOCAbbqOaXaobGc9huGD+GOnbJUcLGTXtL+iMqqqxpR9otHs3v/wxQGjav8QLmW8vPEFpbxID 5dpC5bYBjllz8vrzz/Tv9rTwOkINvuctzlRoM0F3Dd6NczRQ/bEtEnB2s7n7zIRg4GK6/brlaqLW zdvLzA9X8G6tfXVlLY6qVlu7O8a1acAfvAF3BvyX/Pbw8TThCScNmrgzpym0qGJyvr+HNcYhhXKg qADng+nTmgChIVO0DOe3HTof89P8ADyL44Wk02i6TcQ2buEmZN4wdmV3dMZOQhPHZTntgYB4h8L3 DeHPBngxJ/sFnOkv2mRfmVZ1i3j5s9CzOccDHIA28AHS/DzwZJ4W0We61C/Mt1ewwtN8oUQhFwFy Cd2Mkbh1xx7AFf4R+GJ/Dul3t5cI8ZuVjDjzUlVWjLqRuU8+4wAAQMkggAEvie2sdK+OPhHWhatH NMZIrlox6hYo2btw0oGTzjA7DAB6YYwcbolyBg7lyfzxQBoHpjFSQc341I/4RoZbjzRn8jSZ6eW/ xvl/keH3GDeSMMFS5xjp1rVI+2jdRRDzgcjB4571LaRojF1mxutR8hLC2kuJEJ3LEhJA45PtxWak noj57Oorlg76q5HZ+EtatSt9dQxwKvzbGbLH8BVo+XDVNZstbmt7dYJY/s+QxLcN0z09/wCtGgao ntrW1iTakQCnn5R17c1SQEkzpbwhkXBXBHPXFBpTn7KamujuagkzhuQDyCfSnc/Q0rrQ3Ph8c/Fv Tun/AC0/9FNUs8TM1+5l8vzR79Unx4dBn0oAp3dtBeQPbXKB4mGGU9/84q03F3RWx494vjtNM8Yr Yy6fFpVqMOJ7RS08g9R0Ax7/AIe3vYTmnSck+Z9nsUfK2v8Aj74x3X7YniL4Y/DD4lHQ9Migjubb 7Tp8Mi7vsscjBiyMwyzNzk4rzqqqTruFlf5dgcpOyb2Oz+A3x91K50z4iaH8Ydba017w7IFvNVt1 Ub4UZkkHUKGDrxtxneMLxXM6LqOSbSa3/pHTRxLptc65ktk9jqvDv7THwW1rxF4f0i98Ea/oWjar I0Wn67rFkYbS7dSFOx0Yl8tjk8AnnbV0asqEGoNoiviJ4ifPN6nYaT8d/BWuyePPDugaPqXho+C7 eWbW5bu2ijPkJu3NbhZG3AhDgnbwyn6EJrm5qmrXRnOcZZ/tSfDyLwdoPiew8Pa3JJeTyWXhjw/F ZLLfXbKwja4ZUcrjdlAN2WYMBnBI1dZSi+a95PX07ILot3Px+0nVf2ZviLrXga81HQvHfhuFp7+z 1awSC8tJywQMYm3ptGGXHJGAGAOKwqVfaPTRLZBcPAf7UWmeF/2NfBPxE+MGsXOq69r0t3DHFZ2c QuLwxXUifJGmxAEURgngcr3bnEDtPC37T3w78WaB4yvI7PW9H1XwjYT6hqeialZLb36wwglyse/a SCNpBYYJUHbkUAcPB+278Ibqz0vUm0TxVaaTqFybV9Qn0wC3tJQQSkjrIQWCbXKx7yFcHAOQALkv xz+OHgjSvFen/D2G31fX9djkW8nt9BsVvJLaMxNtYgkDJDo2Bzt5yuVNMZp69+0v8G7L9nHTPiKb TUNU8MXmoLpItLC3jFxaTiNpAjo0iCMqI8ghs8oy9QwQrkPw3+NmkfFDw/d6JpL6zpunWzRfZtV1 a0VJL+LILxxqGbzJQCqkYYOAeOTtBn0Va+QbdDBHti4KjbgjODyCAc8859/wAOX8QLG3xc8Hf6tW QXkg3NjgRKCqjvkkH/gH5AHabM87vyA/+JpAXe3HFIg5vxllfDYHUeaBj0+U1L2PTy7+N8v8jwLW ZpreGSWKTDRyDcSOozj8OtavbQ+oxdSpSw3tKejVv8jP1CaAaHvTJkIGWPOD7VDinufKzxuInvNm 5pvjDStOsIRJKSzIrFIkyQcd6Zxu71ZQufFd9rDy2+mWSRgg7WmfDD3x+NAjjpke010rO4Mgb5iv TJ5PH1pdQOgtZECKoGflwOM1aAz9VuysBUZBI556VLA2NLnafRrdn+Zgm1vU44/pWblbRn32XzdX Cwk/T7tDqPh25/4W7pijpiTA7k+U9Sp3lY8/NU1Rl8v0PoWtT40Q9OKAMy91jSdPkEd7qNrbMBkL JIFPHtWsaVSfwpss858c20+ohde8Ov8AabaRSl20KeYRtxt46jofTH8vWwUlB+zq6PpfQD4z1ex+ L3hz9sbVviz4Q8A6dr0EsEcEKyz28MLL9mijZtm9SuCh7Cor4Wt7Zypp29f+CKzuReGPgn4o1H4d fEqXxxfWdh4m8aMkxjt1VkgcTC552jauZQoITOFBxRTwFWUZc+je2oWMjwJ+zd498VnR/CuqfDGR rezZlvNWvPFObVV38SRwJ8y/Lkbec99vbhq0Z0UlNW+YrHsP7TH7Ofxc8VfHCfxd8K7WK4tfFWnL pniFkuIoWjRHiILiV1JBEcf3Mn9yRxkZwbjpYbJPjZ+yPq6at4A8Q/C7S316Hw3p0OlXukrqa6dc 3UcbMwmjnOAjtvfceMYGAeQBtvfoBzNp+zt4o0z4V/EjXNU8EJ4M13V9JfT9PtbvxVHez3atNE5E szMIQB5aDJIJPQLjlAc3N8HfGVl8Dfg9rfh/VNHj8deB7m5ln0m41a02H/T2uYSsgk2FuckFiCM8 gqQQCxqHg/xrr+u/F347/EHWdD8I6nf+G722tNFtL6C9eZfsflbSyuwGY41UlTksxICABaAPJfCW gfEv4ifs0aN8PdOt9Kg8LReIH1B9QuNTiR7dxGUJMJbzCuHY/IrZwABkHII9J8d/BbU9J+NNx428 L6Pe+K/DGrWqW9s8esrorxXCRxZJlfhl3IcLwcgjgx5IMb4r+C98f2RLXw14V0rSLPxFe+JoNSut Kh8QRTmCFLaaPc8srKhbc4yqkj5hgnnaCPpTw74c8EWvga2t9c8cx/bDpVva8urG1ZUTcAVJBAZS oC4AUsuT1AUei+HPGXgbwx4UttIl8ZRXgtgwM7KwLEks3QZHJ9Tgd/QA5bVfifp8/wAY7G5s7uCD SrbET3uSJJExlxypIUZwVwMkA5BwUAPYoL+2vLSG9tMSwTxrLG543KwBBwQD0NAG+elSQcx43OPD aFVGfOHb/Zakz1Mt/jP0/VHhWpxiaG5gU/f3AbvXt79avofYVKXtaDh3X6HF3N4z6cFVgM4yKVz8 /L+gWtvdxLJcDJUlTzx7Z9aECOs+zWsNiWtj8kHzSCJc7SeOR6YOaV0jaFKc4uUVotzg9cnWXUPP C4BHQt1psxLVtcgWqluTj/JoAzbycyTncdy570gNfQJz9klg3H5XyAfQ1wYluLTR9jkU+ajKHZ/m dv8ADVmb4waWWPTzeD/1yepou80PNv4E/l+aPoyvRPiQPAoA8Ga7fQtXiv4/DtxBPEm24W9iafy2 GCrK/AJIz/np9JGPt4+zc9OltPwNDXtfivcrGIho8Nzg8iM7O3HHNYvLYvaVgKl74x0jU5TLqXgG IyYBLvIR7dkHp+n5awwtSlpCr+H/AAQKUnibw1AyiP4f2pPci5Jx/wCO/wCf5afVq7/5ev7v+CBo 2PxRtNLjK2Pg+O3U8ttnx/7LWMstlPWVT8P+CFjXtPidc6mrxQ2mn2TgcSXV6cdiSBt7D3/+tzTw KpWbbfogsXdK1of2v/auo62t/N5flR2lhC3lqMg556np9P5Z1KXuckI282I6uwub26tDJd2P2LEh CI7ZbYMYJI6ZOP8APTgmoxdou4FjC4PT73Pf0/z/AJ4gDP1fSNO1vQbzRdWto7nT72Bra5gkB2yI 67WU4IOCuf1/AAwvC/gvwx4I8PJoPhLRYNH05JGkFvACEDHG4jJ9f5fkwNlVAwMYBx07dP8AH/PY AkjjHBA4wO3Tp/n/ADwgJFjj42hcj1H6j/P/ANYAq6pb6zLGo0e+tbMqDvNxaNNnpjbh1AIOeufw oA86+DPifXfE2o6zca1qL3ZiSFYwVVVXl8kKoAB4HP09OAD1GRcyZIxwOi5HT/doA3DwKkg5fxwS PDSD/psP/QWqWeplv8Z+n6o8LnJW4mVzuZScnt1pOSWx93Be6rHAahH5Gqzx42gOcY7D/wDVTi7q 6Pz/ABlP2WInDzNXw7d21vLMs8SOcK8Yk6A5wcetJx5tL2Kw2IjhuZ8t3pY7Jbs3FtK5ITzBh9vA IGcZ/OqjBRVkKpi6tRt3tfscBqQ2uy/d2t19KZxleGUrbDAx2NAkVzhiDn7vf0pDNPQZQl+yMTh4 zj6jH/165MVG8L9j6DI6nLiHHuvyPQvhs2fjFpQ7fvf/AES9Y4f4kejmz/czXp+aPo6vSPihDwKA OL8SeMV8PP5Gp6DdTWz8LKpQo/t7H/P0ynW9k72PZwmXfXI+5NXXR3uGneFtC1SGLV/7Gn0maTDK sUxhOOxIQ4Fd8cZWcLN6eaT/ADPPr01RqOCknbsao8M2BG1ri/dccq1/KR29/pU+3l5fcjG5WPgn w+8rStaSEt6zv7e/tWixdZKyf4IBp8BeE3bDaduA6gyMR29/b/PZ/XK6+0BetvC3h21CrDodoGUY BMSkgfXHtWTr1XvJgakFvFboEihSJR0VFAH6Csb9wKGu6lFo+lTX8tvd3GxfljtYGldj6AKO+AOc D19gDzvSvjNomq/aUtNLv2aExrb20cYkubgsSWCxjsoXJ+bpxwcUAZN38a77TL6KPxH4FvtMt5CS HeRgxA6kBkUHBK554B5PagDvrfXtNvtFTWrW9R7ExmXzy2xQoHOeRtxz1xjHOMcMDlYvHGuatEbv wr4Mm1bTwxRbqW7jtRIVOCVDclePvdsEYyCAgE8NfFPStalmtL2yu9M1K3yZLVomlJIbGFCDcxHG RtBGSRkKSACKD4vaFL4xGjxafdRpCZzc3E6bPLESliwTBZj8p4O0g9RngAEVp8X47nx/beG5fC17 ZxzTKivcnZMhZQQWiI4GSO/TnjsAYP7PJxf66SpztgweuOW/L6f5AhHtpRGww2jgcccfpQM2W+7U kHLeO2K+GFJ4/fjjt91qieiPVyxfv/l+qPBJpMzucgncenQ158qqjofoEVocprsRXUlkB+V0HzHn px/hXVh5c0Wux8bndLkxCl3X5f0ijaN5dyBtI7cH2rpPAOz0m31SeICO38tG+88zYx+HeqDY5fVP OS9ngukCzI+CB0zng49xzUgZzERsUkbb9P8A61Ja7FSi4OzLlhbCRxm0eUDOQeAawqz5VvY9bA4X 2jvKm5fgjZ06wltFkDBcOxYdyvtmuGrVUreR9NgcHLDKSdrNt+nkdj8N1UfGLSuvHmD/AMgvWmHf vI482VqM/l+aPo6vSPiRD0oA89+LW7/hFbPGVxeLznGODWNf4Pmj6PIv94l/hf6HaW3yWUJ/2VJy OnA/wrdHgT+Jnndt4mv/APhaMEsztFot1ut7csPlyvGf++h1/wAOOZTl7S/Q+nngqSwDjHWpHV99 f+AHjS0m0TxDp+pnU7v+zrm4C3Ue8/J0yc/Tt7Uqt4SUr6Bl1SOJozpcq50tDu7+4tLbw7Nd3Ehi txBuZx94DAwa6W0o3Z89RhOVZQitb7HK+DrabS/DEviPWLq4VnRmVJZdypHwV4xweMf54ypJqPMz 18wqRr11h6KWltl16md4S1G+1bXNT0fWmljN3Gt3DtkwUQ42hePQj8vyzpuUpOMjrx9Knh6MKtG3 u+69Pv8AxO6stPTTtJW1WeaYKSd0rFj1/pXUly6Hzlaq61RzaS9Dw39n63ibUPEFy0StJGkChwvK q24kA+mVXP8Auj8AwPRviRpNrqXw01aK7AzbQNcxOApaNkGQVznGcbfdSR9GM8PtNbvbL9nm4tYp ZESXVvs2dx+SPyw5VOQMEhuMY+Y+tHQR6fp9l8TbDTLaxtF8MR29tCscY3XJKqoAHX8ufTn2eozA T4deMrj4kW/i2+vNLtpBcxSTraSSL8gwGVQU5yAeDj070gM65sYLr9rFLa4TzESVJQo7Oturq3/A WVT+H5HUD2z7DaNcw3j2kT3EAYRSFQWjJADBSemcCmB4/wDs/IxvNeUll+WADB+79/8Az+H5JAj3 UQhlDEL09qANWpIOR+IRI8LRjI5uF/8AQWrOp8J62V/x36f5Hz/LcRrMzEBDuOAO1eO4vmZ99zRg tWZWrpFdWqtG2PLzj34rpw7dN2fU8XNKUcRRTi9Y3/I59JhbvHLnuG9ea9JHxTSidjb+Jbl0MWmW LyNj78h2gcelROrGCvJnZRwlXEStTjp9xSm0+81C5+16pNH5hUDbGmAK454vpFHvYfJbe9WfyRYi 0iyhbcIQzY/irllXqS0uezSy/DUXeMdS2FCL8uFXsAKwvc7rJLQfwq4HGP0pFG98OR/xd/S+MH95 z/2xeu/Dbo+eze3sJ/L80fRdemfECE4HpQB598WG2+FbIjteL1+hrGv8HzR9HkX+8y/wv9DY8S6o NJ8EySKQ088YghXldztwB+Az+VaSlyxODBUPb4q3Rav0Rwuv+G/E2meCLSSWay8jSSJoxAG3hsjJ z065P4VzVYTjTT7H0GExmErYqSSd56O+x2t1BB4z+GYKHc1zbhoyTjEi/T0YGt2lVp2PCpyll2O1 6P8AB/8AAOU0nWZ/Evh7TPC+T9oWXbfHPSKMjP4HOPwrOEnOKj1PYr4eOCrTxS2t7vq/8jo/GzS3 FpYeF7B1SfUJNuCvyrGnJJwPYD/PGlTpFHmZalCU8TPaC/FnNeIIte0LxNoviTVm08pFILfMCsAF II+b6DNYVFKElNnqYR4fFUKuHpc2uuv6HphkjksllSUFWGQ3Yj/Cu0+SacXZngn7P91At/rtszgT OkLpGTyVUuGP4blH4/kkI9I+I+qWmlfDDVpbslTNbtbRLkfM7jaMDPOPvEDnAJHThjPJb3wZqlj+ ziWuFkhuo7v+0pIPK3MgwI+xyMKd56Y5BxjIAOt+G3jrR73wlZaVeX1vZ6hZolsscjBRJjiMoC3z AgY45yucAYw0B0mq+KLZ500Hw7epe6tMxTELLKLJQQHlk5wNpP3TjceBzQB56hD/ALXiMFwN3Y/9 On+T/nhdRHt8fFuCQcjA6+nT+X+ewM8U/Z8ljTVtaj3qsjxRFFz2DMCR9CV/z0BHvIiVlDZkXjog GB+lAzQJwKkg5D4inZ4UiYkcXAJycD7jVnNe6erljtWfp/kfOMiSNOygEfMQcAc158rRbPq4xnJb B/ZzO21m+mDUe1S2NvqvN8TLCadaoT+4B7jPWs3Wm+prHB0I6cpcVAihQuABwBWOvU7LWVkOK49T SAOcg4wPpQA35goOOfcc0DGvIqL8xC/U9KpJvYlyUdza+G10j/GTSVj5z5v0/wBS9ehh4OLTZ8zm taEqUkvL9D6Sr0D48DwKAPN/iZ/p76Lo9oolmuLjcqqewHP86wr62it7n0uTtUvaVpaJI1tY8L6h qut2l0NXWO1tZFkhhMO4ZHGc+vX/AD00lBtrXY48PjadClKPJq73dzc1Gznv9BmskuPKkmTYX256 jBwPz/z0trSx59GpGlVU2rpGR4U8OXvhq0a0k1c3VmOY49mNpJ559P8AP0inB01a5247GU8ZJT5O WXVk+k+GLTSPEmqatE+5rxgVTbjywOuPx/lTjTUZOS6mdfGSxFCnSf2fxKsHhfUo/HA8RT6sspCG MRGLCqnoDU8j5+a5tLGUnhfq8YW8/MteKvD8niHRhYLdi2jzlyybs49D/n/Cpw51YxwOKWDqc/Lf 52Ky/wBpeGtEs7a5e41Y+ekQaKLmNCQuWx/CudxPotVFOKszPFVadao5wjy3PnTwNBH/AGHq9zHo Wo6jdxT26wSaY7Lc22RNlwygkKRgHjHI74wzjOmsbq9tdXg1LUvh/wCLdcnt/mtzqc0k32fIGWRf JwD0PIOCAeCOAZ0bfEXxMx+X4Yaxk9PlcbfTnyz9c9sfk7gefapo1vqeom7T4Xa9YFuWitJGWMnO SQDEcdcYHAAA7GgR0Oha1qnh3SX07QvhZrNk8wQyXKszSysNuCS0BHPPAAAySAOtAzCGl3T6r/ab fDvxXLd7hJ57XMnmFuCG3CDIIP5YHTsgOtufGXi690dNNl8BeJ1RDxLBO8csnIxllhB4wRkYyOvO QGBhaIl3oGow6lo/ws8SWc0YGHS8lAK5U4IEXI4+6RzgceiEfQOlyf2hodnfXWnvazzwJJJA65aI kAlDwOR0PA6dKYzcbhakg88+MFzLb/D2GSM4LXir9BtesK75Yqx7eT29vJ/3f1R4GrPuGWJJPXNc DPplJrZgJGCg5PAzQPnl3HB3IALtzz1pWQc8u4pmcqCWb86LIfPLuN85w20E8e9FkLnl3I5LqSNC Rnj3q4wUnYyqVpU43Kb391gfvSCfetlRgefPG1VomV3lc9SfzrVRS2OWVWb3Z2nwj5+Mmje/nf8A ol6uOjOOvrTb/rc+o62PIEY7Vz6UAcb4W8O6Dpu6707TzFKTsLvIZGA9ienWs6VOMF7qPZx+LxFZ qFSWn3HWxjEYI781seSOoAKACgAAA6DFABjFAjlfiB4nbwf4QfWlshdkOsYj8zy+p65wfb8qWwHz V8PPHs/grVL2UWAvYbuNUeMS+UdwI2tuCnoGIx70bAfUquHiibZjeA3bjp6fWmMaUBlUH/PT/AUA LDAsoVjgHcF6fSgBYwAivg7gByT6/wD66YEsaDzBGOi4GPy/xpAWFhC7SMcqOMfSgByKDInYHGB6 dP8AGgBS4GBt7D09PpSA/9k= ------=_NextPart_001_000D_01BEECF4.302EC760-- ------=_NextPart_000_000C_01BEECF4.302EC760 Content-Type: java/*; name="upmhttpserver.java" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="upmhttpserver.java" X-Sun-Content-Length: 29130 //##################################################################### // //##################################################################### /* import crysec.SSL.*; import crysec.*; import crysec.X509.*; */ import java.io.*; import java.net.*; import java.io.*; import java.util.*; import java.util.Date; import java.text.*; import java.lang.System; import java.util.Hashtable; import java.util.StringTokenizer; import java.net.URLEncoder; import com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnection; import com.sun.net.ssl.internal.www.protocol.https.Handler; import com.sun.net.ssl.internal.www.https.HttpsClient; //##################################################################### // //##################################################################### class upmhttpserver implements HttpConstants { =20 //##################################################################### //* print to stdout */ //##################################################################### protected static void p(String s) { System.out.println(s); } //##################################################################### // //##################################################################### /* print to the log file */ protected static void log(String s) { synchronized (log) { log.println(s); log.flush(); } } //##################################################################### // //##################################################################### /* print to the html file */ protected static void htmlout(String s) { synchronized (htmlout) { htmlout.println(s); htmlout.flush(); htmlout.close(); } } //##################################################################### // //##################################################################### /* print to the html file */ protected static void numout(String s) { synchronized (numout) { numout.println(s); numout.flush(); numout.close(); } } //##################################################################### // //##################################################################### /* print to the text file */ protected static void textout(String s) { synchronized (textout) { textout.println(s); textout.flush(); textout.close(); } } //##################################################################### static PrintStream htmlout =3D null; static PrintStream textout =3D null; static PrintStream numout =3D null; static PrintStream log =3D null; /* our server's configuration information is stored * in these properties */ protected static Properties props =3D new Properties(); /* Where worker threads stand idle */ static Vector threads =3D new Vector(); /* the web server's virtual root */ static File root; /* timeout on client connections */ static int timeout =3D 0; =20 static int showreceivedpages =3D 0; static int returnredirect =3D 0; static int returnfixed =3D 0; static String validfixedfilename =3D null; static String invalidfixedfilename =3D null; static int keeplogs =3D 0; static int htmlresponse =3D 0; static int textresponse =3D 0; static int posttourl =3D 0; static int saveresult =3D 0; static String lastnumberused =3D null; static String last_used_response_num =3D null; static String htmldir =3D null; static String textdir =3D null; static String posturladdress =3D null; static String connecturl =3D null; /* max # worker threads */ static int workers =3D 100; //##################################################################### //* load httpsserver.properties from disk */ //##################################################################### static void loadProps() throws IOException { File f =3D new = File("c:\\eugene\\testhome\\servlets\\httpsserver.properties"); if (f.exists()) { InputStream is =3Dnew BufferedInputStream(new FileInputStream(f)); props.load(is); is.close(); validfixedfilename =3D = props.getProperty("validfixedfilename"); invalidfixedfilename =3D = props.getProperty("invalidfixedfilename"); posturladdress =3D props.getProperty("posturladdress"); htmldir =3D props.getProperty("htmldir"); textdir =3D props.getProperty("textdir"); connecturl =3D props.getProperty("connecturl"); last_used_response_num =3D = props.getProperty("last_used_response_num"); lastnumberused =3D props.getProperty("lastnumberused"); =20 String r =3D props.getProperty("root"); if (r !=3D null) { root =3D new File(r); } r =3D props.getProperty("timeout"); if (r !=3D null) { timeout =3D Integer.parseInt(r); } r =3D props.getProperty("workers"); if (r !=3D null) { workers =3D Integer.parseInt(r); } r =3D props.getProperty("showreceivedpages"); if (r !=3D null) { showreceivedpages =3D Integer.parseInt(r); } =20 r =3D props.getProperty("returnfixed"); if (r !=3D null) { returnfixed =3D Integer.parseInt(r); } =20 r =3D props.getProperty("returnredirect"); if (r !=3D null) { returnredirect =3D Integer.parseInt(r); } =20 r =3D props.getProperty("keeplog"); if (r !=3D null) { keeplogs =3D Integer.parseInt(r); } =20 r =3D props.getProperty("htmlresponse"); if (r !=3D null) { htmlresponse =3D Integer.parseInt(r); } =20 r =3D props.getProperty("textresponse"); if (r !=3D null) { textresponse =3D Integer.parseInt(r); } =20 if (keeplogs =3D=3D 1) { r =3D props.getProperty("log"); if (r !=3D null) { p("opening log file: " + r); log =3D new PrintStream(new BufferedOutputStream( new FileOutputStream(r))); } } else { p("logging not turned on"); } } } //##################################################################### // //##################################################################### static void printProps() { p("root=3D"+root); p("timeout=3D"+timeout); p("workers=3D"+workers); if (keeplogs =3D=3D 1) { log("root=3D"+root); log("timeout=3D"+timeout); log("workers=3D"+workers); } } //##################################################################### // //##################################################################### public static void main(String[] a) throws Exception { int port =3D 8989; if (keeplogs =3D=3D 1) { log("Listening on port : "+port); } p("Listening on port : "+port); =20 if (a.length > 0) { port =3D Integer.parseInt(a[0]); } =20 // load setup constants loadProps(); // print current setup printProps(); =20 // start worker threads for vector array assignments for (int i =3D 0; i < workers; ++i) { Worker w =3D new Worker(showreceivedpages, returnredirect, = returnfixed, validfixedfilename); (new Thread(w, "worker #"+i)).start(); threads.addElement(w); } ServerSocket ss =3D new ServerSocket(port); =20 // do until system is shutdown while (true) { // wait for a connection Socket s =3D ss.accept(); Worker w =3D null; synchronized (threads) { if (threads.isEmpty()) { Worker ws =3D new Worker(showreceivedpages, = returnredirect, returnfixed, validfixedfilename); ws.setSocket(s); (new Thread(ws, "additional worker")).start(); } else { w =3D (Worker) threads.elementAt(0); threads.removeElementAt(0); w.setSocket(s); } } } } } //##################################################################### // worker class to handle incomming http request from client //##################################################################### class Worker extends upmhttpserver implements HttpConstants, Runnable { = // open 001 final static int BUF_SIZE =3D 2048; // setup value to test for end of line character static final byte[] EOL =3D {(byte)'\r', (byte)'\n' }; = // open 001a close 001a /* buffer to use for requests */ byte[] buf; /* Socket to client we're handling */ private Socket s; Worker(int showreceivedpages, int returnredirect, int returnfixed, = String validfixedfilename) { = // open 002 this.showreceivedpages =3D showreceivedpages; this.returnredirect =3D returnredirect; this.returnfixed =3D returnfixed; this.validfixedfilename =3D validfixedfilename; =20 buf =3D new byte[BUF_SIZE]; s =3D null; = =20 } = // close 002 synchronized void setSocket(Socket s) { = // open 003 this.s =3D s; notify(); } = // close 003 public synchronized void run() { = // open 004 while(true) { = // open 005 if (s =3D=3D null) { = // open 006 /* nothing to do */ try { = // open 007 wait(); } catch (InterruptedException e) { = // close 007 open 008 /* should not happen */ continue; } = // close 008 } = // close 006 try { = // open 009 handleClient(showreceivedpages, returnredirect, = returnfixed, validfixedfilename); } catch (Exception e) { = // close 009 open 010 e.printStackTrace(); } = // close 010 /* go back in wait queue if there's fewer * than numHandler connections. */ s =3D null; Vector pool =3D upmhttpserver.threads; synchronized (pool) { = // open 011 if (pool.size() >=3D upmhttpserver.workers) { = // open 012 /* too many threads, exit this one */ return; } else { = // close 012 open 013 pool.addElement(this); } = // close 013 } = // close 011 } = // close 005 } = // close 004 =20 =20 //##################################################################### // handleClient is actually where the work takes place. This routine // gets work handed off to it from worker //##################################################################### void handleClient(int showreceivedpages, int returnredirect, int = returnfixed, String validfixedfilename) throws IOException { = // open a String verified =3D null; String posting =3D ""; String postingrequest =3D ""; InputStream is =3D new BufferedInputStream(s.getInputStream()); PrintStream ps =3D new PrintStream(s.getOutputStream()); /* only block in read for specified milliseconds before fail = with java.io.InterruptedIOException, * then abandon the connection. */ s.setSoTimeout(upmhttpserver.timeout); s.setTcpNoDelay(true); =20 // clean up buffer from previous for (int i =3D 0; i < BUF_SIZE; i++) { = // open b buf[i] =3D 0; } =20 =20 int nread =3D 0, r =3D 0; =20 outerloop: =20 while (nread < BUF_SIZE) { = // open d r =3D is.read(buf, nread, BUF_SIZE - nread); if (r =3D=3D -1) { /* EOF */ break; } int i =3D 0; nread +=3D r; for (; i < nread; i++) { if (buf[i] =3D=3D (byte)'\n' || buf[i] =3D=3D = (byte)'\r') { /* read one line */ break outerloop; } } =20 } int i =3D 0; for (i =3D 0; i < nread; i++) { = // open k if (buf[i] =3D=3D (byte)' ') { = // open l break; } = // close l } = // close k postingrequest =3D (new String(buf, 0, nread)); try { =20 // open m verified=3DConnectionServer(showreceivedpages, = postingrequest); } catch (java.lang.Exception ex) { p("Java Language Exception " + ex + "\n"); if (keeplogs =3D=3D 1) { log("Java Language Exception " + ex + "\n"); } } // close m open n close n =20 if (returnredirect =3D=3D 1) { ps.print(verified); ps.write(EOL); ps.flush(); } else { if (returnfixed =3D=3D 1) { =20 File f =3D new File(validfixedfilename); if (f.exists()) { InputStream vf =3Dnew BufferedInputStream(new = FileInputStream(f)); // convert read file to string and return try { = // open m int n; while ((n =3D vf.read(buf)) > 0) { ps.write(buf, 0, n); ps.write(EOL); ps.flush(); vf.close(); } } catch (java.lang.Exception e) {p("Java Language Exception " + = e + "\n");if (keeplogs =3D=3D 1) {log("Java Language Exception " + e + = "\n");}}=20 } } } if (keeplogs =3D=3D 1) {log(verified);} s.close(); is.close(); } = // close a =20 //##################################################################### // This routine uses the URL connection method //##################################################################### static String ConnectionServer(int showreceivedpages, String postString) = throws Exception { int lastused =3D 0; StringBuffer s =3D new StringBuffer(200); String redirect =3D ""; String firstredirect =3D null; com.sun.net.ssl.internal.www.protocol.https.Handler hnd =3D new = Handler(); // route one=09 // URL anacomURL =3D new = URL("https://www.anacom.com/order/testaccount/transaction.htm"); // URLConnection connection =3D hnd.openConnection(anacomURL);=20 // route two =20 URL anacomURL =3D new = URL("https://www.anacom.com/order/testaccount/transaction.htm"); URLConnection connection =3D new HttpsURLConnection(anacomURL, hnd); // not used // HttpsClient hc =3D new = HttpsClient(connection.getNewClient(anacomURL));=20 =09 connection.setDoOutput(true); connection.setDoInput(true); connection.setUseCaches(false); =20 connection.setRequestProperty("Content-Type", = "application/x-www-form-urlencoded"); String lengthv =3D postString.length()+" "; connection.setRequestProperty("Content-Length", lengthv); =20 DataOutputStream out =3D new = DataOutputStream(connection.getOutputStream()); if (showreceivedpages =3D=3D 1) { p(postString); } if (keeplogs =3D=3D 1) { log(postString); } out.writeBytes(postString); out.close(); =09 =20 BufferedReader in =3D new BufferedReader(new = InputStreamReader(connection.getInputStream())); String inputLine; while ((inputLine =3D in.readLine()) !=3D null) { s.append(inputLine); = } in.close(); =09 if (s.toString().toLowerCase().indexOf("result") > 0) { firstredirect =3D = s.toString().substring(s.toString().toLowerCase().indexOf("result")+8, = s.toString().toLowerCase().indexOf("")); redirect =3D firstredirect.substring(firstredirect.indexOf("

"), = firstredirect.length());=20 =20 // only allow either HTML or TEXT response file to be saved but // not both. This is for performance and security if (htmlresponse =3D=3D 1 || textresponse =3D=3D 1) { lastused =3D getnumber(); int valnum =3D savelast(lastused); =20 if (htmlresponse =3D=3D 1) { if (keeplogs =3D=3D 1) { log("HTML response output file selected!"); } int valid =3D savehtmlfile(lastused, firstredirect); }=20 if (textresponse =3D=3D 1) { int valid =3D savetextfile(lastused, redirect); } } =09 // display to screen if (showreceivedpages =3D=3D 1) { p(firstredirect); } =20 // send to log file if (keeplogs =3D=3D 1) { log(firstredirect); } } =09 return redirect; =20 } //##################################################################### // This routine uses the raw socket method of connection //##################################################################### /* static String ConnectionSocket(int showreceivedpages, String = postString) throws Exception { int lastused =3D 0; StringBuffer s =3D new StringBuffer(200); String redirect =3D ""; String firstredirect =3D null; =09 try { SSLParams params =3D new SSLParams();=09 params.setDebug(true); SSLCertificate cert =3D new SSLCertificate(); cert.certificateList =3D new Vector(); cert.certificateList.addElement(new X509(new = File("client-cert.der"))); cert.certificateList.addElement(new X509(new File("ca-cert.der"))); cert.privateKey =3D new RSAPrivateKeyPKCS8("test", new = File("enc-client-key.der")); params.setClientCert(cert); String host =3D "209.219.198.67"; int port =3D 443; SSLSocket connection =3D new SSLSocket(host, port, params); =09 if (connection.getServerCert() !=3D null) { if (connection.getServerCert().rootCAvalid()) p("Known CA"); else p("Unknown root CA " + connection.getServerCert().rootCA()); } OutputStream nos =3D connection.getOutputStream(); InputStream nis =3D connection.getInputStream(); // tell the socket they type of posting we are doing String outstr =3D "POST /order/testaccount/transaction.htm = HTTP/1.0\r\n"; nos.write(outstr.getBytes()); =20 outstr =3D "Content-Type: application/x-www-form-urlencoded\r\n"; nos.write(outstr.getBytes()); String lengthv =3D postString.length()+"\r\n"; outstr =3D "Content-Length: "+lengthv; nos.write(outstr.getBytes()); =20 if (showreceivedpages =3D=3D 1) { p(postString); } if (keeplogs =3D=3D 1) { log(postString); } nos.write(postString.getBytes()); =09 String request =3D "GET / HTTP/1.0\r\n\r\n"; nos.write(request.getBytes()); int c; while ((c =3D nis.read()) !=3D -1) { } connection.close(true); } catch (Exception e) { e.printStackTrace(); if (keeplogs =3D=3D 1) { log("Stack Trace Exception printed"); } } if (s.toString().toLowerCase().indexOf("result") > 0) { firstredirect =3D = s.toString().substring(s.toString().toLowerCase().indexOf("result")+8, = s.toString().toLowerCase().indexOf("")); redirect =3D firstredirect.substring(firstredirect.indexOf("

"), = firstredirect.length());=20 =20 // only allow either HTML or TEXT response file to be saved but // not both. This is for performance and security if (htmlresponse =3D=3D 1 || textresponse =3D=3D 1) { lastused =3D getnumber(); int valnum =3D savelast(lastused); =20 if (htmlresponse =3D=3D 1) { if (keeplogs =3D=3D 1) { log("HTML response output file selected!"); } int valid =3D savehtmlfile(lastused, firstredirect); }=20 if (textresponse =3D=3D 1) { int valid =3D savetextfile(lastused, redirect); } } =09 // display to screen if (showreceivedpages =3D=3D 1) { p(firstredirect); } =20 // send to log file if (keeplogs =3D=3D 1) { log(firstredirect); } } =09 return redirect; =20 } */ //##################################################################### // //##################################################################### static int savetextfile(int lastused, String response) { if (keeplogs =3D=3D 1) { log("TEXT response output file selected!"); } try { textout =3D new PrintStream(new BufferedOutputStream( new = FileOutputStream(textdir+lastused+".txt"))); String textfile =3D buildtextfile(response); = =20 textout(textfile); =20 } catch (java.io.IOException e) { p("Java Language IO Exception " + e + "\n"); if (keeplogs =3D=3D 1) { log("Java Language IO Exception " + e + "\n"); } }=20 return 0; } //##################################################################### // //##################################################################### static int savehtmlfile(int lastused, String s) { try { htmlout =3D new PrintStream(new BufferedOutputStream( new = FileOutputStream(htmldir+lastused+".html"))); htmlout(s); } catch (java.io.IOException e) { p("Java Language IO Exception " + e + "\n"); if (keeplogs =3D=3D 1) { log("Java Language IO Exception " + e + "\n"); } }=20 return 0; } //##################################################################### // //##################################################################### static int savelast(int lastused) { try { numout =3D new PrintStream(new BufferedOutputStream( new = FileOutputStream(last_used_response_num))); numout("lastnumberused=3D"+lastused); } catch (java.io.IOException e) { p("Java Language IO Exception " + e + "\n"); if (keeplogs =3D=3D 1) { log("Java Language IO Exception " + e + "\n"); } }=20 return 0; } //##################################################################### // //##################################################################### static int getnumber() throws java.io.IOException { int lastused =3D 0; =20 try { if (keeplogs =3D=3D 1) { log(last_used_response_num + " Read for last number used!"); } File f =3D new File(last_used_response_num); if (f.exists()) { InputStream is =3Dnew BufferedInputStream(new FileInputStream(f)); =20 props.load(is); is.close(); =20 String r =3D props.getProperty("lastnumberused"); if (r !=3D null) { lastused =3D Integer.parseInt(r); if (keeplogs =3D=3D 1) { log("Number Selected :" +lastused); } lastused++; } else {=20 if (keeplogs =3D=3D 1) { log("Invalid number format found in = "+last_used_response_num+" file number 1 selected"); } lastused =3D 1; } } else {=20 if (keeplogs =3D=3D 1) { log(last_used_response_num+" does not exist so number 1 = selected!"); } lastused =3D 1; } } catch (java.io.IOException e) { p("Java Language IOException " + e + "\n"); if (keeplogs =3D=3D 1) { log("Java Language IOException " + e + "\n"); } }=20 return lastused; } //##################################################################### // //##################################################################### static String buildtextfile(String response) { String textfile =3D "The following values were received from upm = billing system!\n"; String[] values =3D breakupresult(response); =20 int i =3D 0; =20 textfile =3D textfile + = "=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D\n"; =20 for (i=3D0; i"); int tc =3D st.countTokens(); String[] s =3D new String[tc]; =20 int x =3D 0; =20 while (st.hasMoreTokens()) { s[x] =3D (st.nextToken()); x++; }=20 =20 return s; } } //##################################################################### // //##################################################################### interface HttpConstants { /** 2XX: generally "OK" */ public static final int HTTP_OK =3D 200; public static final int HTTP_CREATED =3D 201; public static final int HTTP_ACCEPTED =3D 202; public static final int HTTP_NOT_AUTHORITATIVE =3D 203; public static final int HTTP_NO_CONTENT =3D 204; public static final int HTTP_RESET =3D 205; public static final int HTTP_PARTIAL =3D 206; /** 3XX: relocation/redirect */ public static final int HTTP_MULT_CHOICE =3D 300; public static final int HTTP_MOVED_PERM =3D 301; public static final int HTTP_MOVED_TEMP =3D 302; public static final int HTTP_SEE_OTHER =3D 303; public static final int HTTP_NOT_MODIFIED =3D 304; public static final int HTTP_USE_PROXY =3D 305; /** 4XX: client error */ public static final int HTTP_BAD_REQUEST =3D 400; public static final int HTTP_UNAUTHORIZED =3D 401; public static final int HTTP_PAYMENT_REQUIRED =3D 402; public static final int HTTP_FORBIDDEN =3D 403; public static final int HTTP_NOT_FOUND =3D 404; public static final int HTTP_BAD_METHOD =3D 405; public static final int HTTP_NOT_ACCEPTABLE =3D 406; public static final int HTTP_PROXY_AUTH =3D 407; public static final int HTTP_CLIENT_TIMEOUT =3D 408; public static final int HTTP_CONFLICT =3D 409; public static final int HTTP_GONE =3D 410; public static final int HTTP_LENGTH_REQUIRED =3D 411; public static final int HTTP_PRECON_FAILED =3D 412; public static final int HTTP_ENTITY_TOO_LARGE =3D 413; public static final int HTTP_REQ_TOO_LONG =3D 414; public static final int HTTP_UNSUPPORTED_TYPE =3D 415; /** 5XX: server error */ public static final int HTTP_SERVER_ERROR =3D 500; public static final int HTTP_INTERNAL_ERROR =3D 501; public static final int HTTP_BAD_GATEWAY =3D 502; public static final int HTTP_UNAVAILABLE =3D 503; public static final int HTTP_GATEWAY_TIMEOUT =3D 504; public static final int HTTP_VERSION =3D 505; } //##################################################################### ------=_NextPart_000_000C_01BEECF4.302EC760--

- Next message: yang: "question"
- Previous message: Jean Claude COLLART: "Error: Issuer certificate is invalid (-8156)"
- Next in thread: Jeff Nisewanger: "Re: JSSE V1.0 Implementation Problem"