Jetty
  1. Jetty
  2. JETTY-483

org.mortbay.jetty.EofException thrown when handshake between BayeuxClient and servlet based on SSL

    Details

    • Type: Bug Bug
    • Status: Resolved Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 6.1.6rc1
    • Fix Version/s: 7.0.0pre4, 6.1.12.rc2
    • Component/s: Bayeux
    • Labels:
      None
    • Environment:
      Winxp
    • Number of attachments :
      1

      Description

      I always meet this problem. Actually, when I use Http , not Https, and SelectChannelConnector , it is no problem to publish event from server to client or request from client to server. But when I start a servlet with SslSelectChannelConnector and then start client to connect it , the "WARN: Handshake:org.mortbay.jetty.EofException" always thrown. Maybe it is not a bug for Bayeux, but could u tell me how to resolve it?
      The fllowing is the output of console:
      [main] : CometdSSLClient------Beginning to start Client...
      2007-12-19 10:32:38.746::INFO: Logging to STDERR via org.mortbay.log.StdErrLog
      [main] : CometdSSLClient------Start BayeuxClient:null
      [main] : CometdSSLClient------Start Client successfully!
      [main] : CometdSSLClient------clientPublish toChannel:/noticiation/tier3 data:

      {"user":"test","action":"register_client"}

      msgId:0
      2007-12-19 10:32:38.011::WARN: Handshake:org.mortbay.jetty.EofException
      org.mortbay.jetty.EofException
      at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:303)
      at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:205)
      at org.mortbay.jetty.client.HttpConnection.handle(HttpConnection.java:238)
      at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
      at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450)
      The below is a part of my sourcecodes in client and servlet, and I have attched the BayeuxClient.java in attachment.
      Server side:
      ...
      public void startCometdSSLServlet() {
      try {
      Logger.log(Logger.LOG_NORMAL, "Beginning to start CometdSSLServlet...");
      String sUserDir = System.getProperty("user.dir");
      Server server = new Server();

      SelectChannelConnector connector;
      if (_sslEnabled.equalsIgnoreCase("Y"))

      { //the connector is for SSL connection connector = new SslSelectChannelConnector(); ((SslSelectChannelConnector)connector).setKeystore(_sKeystore); ((SslSelectChannelConnector)connector).setPassword(_sPwd); ((SslSelectChannelConnector)connector).setKeyPassword(_sKeyPwd); ((SslSelectChannelConnector)connector).setNeedClientAuth(_sEnableClientAuth.equals("Y") ? true : false); //((SslSelectChannelConnector)connector).setPort(_sPort); }

      else

      { connector = new SelectChannelConnector(); }


      connector.setPort(_sPort);
      server.addConnector(connector);
      //System.setProperty("javax.net.ssl.trustStore", _sKeystore);

      Context context = new Context(server, "/", Context.NO_SECURITY | Context.NO_SESSIONS);
      context.setResourceBase(sUserDir + "/myweb/");

      ContinuationCometdServlet cometd_servlet = new ContinuationCometdServlet();
      ServletHolder cometd_holder = new ServletHolder(cometd_servlet);
      //cometd_holder.setInitParameter("filters","/WEB-INF/filters.json");
      cometd_holder.setInitParameter("timeout", "240000");
      cometd_holder.setInitParameter("interval", "0");
      cometd_holder.setInitParameter("multiFrameInterval", "1500");
      //cometd_holder.setInitParameter("JSONCommented","true");
      //context.addServlet(cometd_holder, "/cometd/*");
      context.addServlet(cometd_holder, "/myweb/*");
      context.addServlet("servlet.DefaultHttpServlet", "/");

      _listener = new BayeuxCometdStartupListener();
      context.addEventListener(_listener);
      server.start();

      AbstractBayeux bayeux = cometd_servlet.getBayeux();
      bayeux.setSecurityPolicy(new AbstractBayeux.DefaultPolicy() {
      public boolean canHandshake(Map message) {
      System.err.println("BayeuxServlet-------------------canHandshake(Message)");
      // if (_testHandshakeFailure < 0)

      { // _testHandshakeFailure++; // return false; // }

      return true;
      }
      });
      Logger.log(Logger.LOG_NORMAL, "CometdSSLServlet start successfully!");
      } catch (Exception ex)

      { Logger.log(Logger.LOG_ERR, "CometdSSLServlet starts error!"); ex.printStackTrace(); }

      }

      public void pushEvent(Map<String, Object> msg)

      { _listener.pushDebugEvent(msg); }

      public static void main(String[] args) {
      CometdSSLServlet cometServlet = CometdSSLServlet.getInstance();
      cometServlet.startCometdSSLServlet();
      int i = 0;
      while (true) {
      try

      { Map<String, Object> msg = new HashMap<String, Object>(); msg.put("eventId", "" + i); msg.put("eventType", "system"); msg.put("content", "test" + i); cometServlet.pushEvent(msg); i++; Thread.sleep(5000); }

      catch (InterruptedException ex)

      { ex.printStackTrace(); }

      }
      }
      ...

      client side:
      .....
      private void start() {
      Logger.log(Logger.LOG_NORMAL, "CometdSSLClient------Beginning to start Client...");
      try {
      try

      { startHttpClient(); }

      catch (Exception ex)

      { Logger.log(Logger.LOG_ERR, "CometdSSLClient------Start HttpClient error"); ex.printStackTrace(); }

      startBayeuxClient();
      } catch (IOException ex)

      { Logger.log(Logger.LOG_ERR, "CometdSSLClient------Start BayeuxClient error"); ex.printStackTrace(); }

      Logger.log(Logger.LOG_NORMAL, "CometdSSLClient------Start Client successfully!");
      }

      private void startHttpClient() throws Exception

      { _httpClient = new HttpClient(); _httpClient.setConnectorType(HttpClient.CONNECTOR_SELECT_CHANNEL); _httpClient.setMaxConnectionsPerAddress(MAX_CONNECTION_PERADDRESS); BoundedThreadPool pool = new BoundedThreadPool(); pool.setMaxThreads(MAX_THREAD); //pool.setDaemon(true); pool.setName("COMETDCLIENT_HREADPOOL"); _httpClient.setThreadPool(pool); _httpClient.start(); }

      private void startBayeuxClient() throws IOException {
      _bClient = new BayeuxClient(_httpClient, _address, _uri, _isHttps);
      Listener listener = new Listener() {

      public void deliver(Client fromClient, Client toClient, Map<String, Object> msg) {
      Logger.log(Logger.LOG_DEBUG, "CometdSSLClient------------Get Time:" + (new Date()));
      Logger.log(Logger.LOG_DEBUG, "CometdSSLClient------------FromClient:" + fromClient + " toClient:" + toClient.getId() + " Message:" + msg);
      Object data = (Object) msg.get(AbstractBayeux.DATA_FIELD);
      //filtered the "/meta/channel" connection information and only keep "/service/channel" and "/notification/channel" message.
      if (data != null)

      { //Event event = EventConstructor.constructEvent(msg); //dispatch Event to every components registered in the event dispatcher via different event filter. //dispatch(event); }

      }

      public void removed(String clientId, boolean timeout) {
      }
      };
      _bClient.setListener(listener);
      _bClient.subscribe(Configurator.CLIENT_NOTIFICATIONCHANNEL);
      _bClient.start();
      Logger.log(Logger.LOG_NORMAL, "CometdSSLClient------Start BayeuxClient:" + _bClient.getId());
      }

      private void clientPublish(String toChannel, JSON.Literal jsonMsg, String msgId) {
      synchronized (_bClient)

      { Logger.log(Logger.LOG_DEBUG, "CometdSSLClient------clientPublish toChannel:" + toChannel + " data:" + jsonMsg + " msgId:" + msgId); _bClient.publish(toChannel, jsonMsg, msgId); }

      }

      /**

      • @param clientType
      • please see CometdConfigurator.CLIENT_NOTIFICATION, CometdConfigurator.CLIENT_SERVICE
      • */
        public void registerClient(String clientType)

        Unknown macro: { // TODO }

      public static void main(String[] args) {
      CometdSSLClient sslClient = CometdSSLClient.getInstance();
      sslClient.start();
      sslClient.registerClient(Configurator.CLIENT_NOTIFICATIONCHANNEL);
      }
      ......

        Activity

        Hide
        scg added a comment -

        The Servlet output as below:

        init:
        deps-jar:
        Deleted 13 out of date files in 0 seconds
        Compiling 4 source files to C:\SCG\Jetty\jetty-6.1.6rc1\jetty-6.1.6rc1\contrib\cometd\demo\src\main\build\classes
        Note: C:\SCG\Jetty\jetty-6.1.6rc1\jetty-6.1.6rc1\contrib\cometd\demo\src\main\java\client\BayeuxClient.java uses unchecked or unsafe operations.
        Note: Recompile with -Xlint:unchecked for details.
        compile:
        [main] : CometdSSLServlet userdir=C:\SCG\Jetty\jetty-6.1.6rc1\jetty-6.1.6rc1\contrib\cometd\demo\src\main
        [main] : Beginning to start CometdSSLServlet...
        2007-12-19 15:22:12.686::INFO: Logging to STDERR via org.mortbay.log.StdErrLog
        2007-12-19 15:22:12.764::INFO: jetty-6.1.6rc1
        2007-12-19 15:22:12.029::INFO: Started SslSelectChannelConnector@0.0.0.0:8443
        [main] : CometdSSLServlet start successfully!

        Show
        scg added a comment - The Servlet output as below: init: deps-jar: Deleted 13 out of date files in 0 seconds Compiling 4 source files to C:\SCG\Jetty\jetty-6.1.6rc1\jetty-6.1.6rc1\contrib\cometd\demo\src\main\build\classes Note: C:\SCG\Jetty\jetty-6.1.6rc1\jetty-6.1.6rc1\contrib\cometd\demo\src\main\java\client\BayeuxClient.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. compile: [main] : CometdSSLServlet userdir=C:\SCG\Jetty\jetty-6.1.6rc1\jetty-6.1.6rc1\contrib\cometd\demo\src\main [main] : Beginning to start CometdSSLServlet... 2007-12-19 15:22:12.686::INFO: Logging to STDERR via org.mortbay.log.StdErrLog 2007-12-19 15:22:12.764::INFO: jetty-6.1.6rc1 2007-12-19 15:22:12.029::INFO: Started SslSelectChannelConnector@0.0.0.0:8443 [main] : CometdSSLServlet start successfully!
        Greg Wilkins made changes -
        Field Original Value New Value
        Assignee Greg Wilkins [ gregw ]
        Hide
        Greg Wilkins added a comment -

        There has been a lot of development on this since 6.1.6rc1

        can you try the very latest in https://gregw@svn.codehaus.org/jetty/jetty/trunk
        or the more stable in https://gregw@svn.codehaus.org/jetty/jetty/branches/jetty-6.1

        thanks

        Show
        Greg Wilkins added a comment - There has been a lot of development on this since 6.1.6rc1 can you try the very latest in https://gregw@svn.codehaus.org/jetty/jetty/trunk or the more stable in https://gregw@svn.codehaus.org/jetty/jetty/branches/jetty-6.1 thanks
        Hide
        scg added a comment -

        Hi, Greg
        Happy new year! I have tried jetty6.1.7 , downloading from this link: http://dist.codehaus.org/jetty/jetty-6.1.7/. But the EofException was still existing. Could u have any other idea, thanks a lot.

        Client Console:
        Compiling 2 source files to C:\SCG\Jetty\jetty-6.1.7\CometdServlet\build\classes
        compile:
        [main] : CometdSSLClient------Beginning to start Client...
        2008-01-02 13:48:37.170::INFO: Logging to STDERR via org.mortbay.log.StdErrLog
        [main] : CometdSSLClient------Start BayeuxClient:null
        [main] : CometdSSLClient------Start Client successfully!
        [main] : CometdSSLClient------clientPublish toChannel:/noticiation/tier3 data:

        {"user":"test","action":"register_client"}

        msgId:0
        2008-01-02 13:48:37.389::WARN: Handshake:org.mortbay.jetty.EofException
        EXPIRED HttpExchange@4395216=POST//localhost:8443/t3web/handshake#8

        Server console:
        Compiling 1 source file to C:\SCG\Jetty\jetty-6.1.7\CometdServlet\build\classes
        compile:
        [main] : CometdSSLServlet userdir=C:\SCG\Jetty\jetty-6.1.7\CometdServlet
        [main] : Beginning to start CometdSSLServlet...
        2008-01-02 13:38:49.695::INFO: Logging to STDERR via org.mortbay.log.StdErrLog
        2008-01-02 13:38:50.789::INFO: jetty-6.1.7
        2008-01-02 13:38:50.164::INFO: Started SslSelectChannelConnector@0.0.0.0:8443
        [main] : CometdSSLServlet start successfully!

        Show
        scg added a comment - Hi, Greg Happy new year! I have tried jetty6.1.7 , downloading from this link: http://dist.codehaus.org/jetty/jetty-6.1.7/ . But the EofException was still existing. Could u have any other idea, thanks a lot. Client Console: Compiling 2 source files to C:\SCG\Jetty\jetty-6.1.7\CometdServlet\build\classes compile: [main] : CometdSSLClient------Beginning to start Client... 2008-01-02 13:48:37.170::INFO: Logging to STDERR via org.mortbay.log.StdErrLog [main] : CometdSSLClient------Start BayeuxClient:null [main] : CometdSSLClient------Start Client successfully! [main] : CometdSSLClient------clientPublish toChannel:/noticiation/tier3 data: {"user":"test","action":"register_client"} msgId:0 2008-01-02 13:48:37.389::WARN: Handshake:org.mortbay.jetty.EofException EXPIRED HttpExchange@4395216=POST//localhost:8443/t3web/handshake#8 Server console: Compiling 1 source file to C:\SCG\Jetty\jetty-6.1.7\CometdServlet\build\classes compile: [main] : CometdSSLServlet userdir=C:\SCG\Jetty\jetty-6.1.7\CometdServlet [main] : Beginning to start CometdSSLServlet... 2008-01-02 13:38:49.695::INFO: Logging to STDERR via org.mortbay.log.StdErrLog 2008-01-02 13:38:50.789::INFO: jetty-6.1.7 2008-01-02 13:38:50.164::INFO: Started SslSelectChannelConnector@0.0.0.0:8443 [main] : CometdSSLServlet start successfully!
        Hide
        scg added a comment -

        Hi, Greg
        I have tried serveral times about this issue. But it is still existing. I really don't know what the reason is and my job has been blocked on it. Could u give me some good advices for this issue.
        Thanks a lot

        Show
        scg added a comment - Hi, Greg I have tried serveral times about this issue. But it is still existing. I really don't know what the reason is and my job has been blocked on it. Could u give me some good advices for this issue. Thanks a lot
        Hide
        Greg Wilkins added a comment -

        Hi SCG,

        I think I misunderstood your issue. You are having problems with the Bayeux client because I don't think SSL
        is yet supported in the underlying HttpClient. Is that the reason you have updated the BayeuxClient class?

        Anyway, this should not be too hard to support as all the infrastructure is there for the server side. But I'm not sure when I would get time to look at this as we are stupidly busy at the moment. I will look later today and estimate exactly what is involved. Note that if this is for a commercial project, then you could talk to webtide to get one of our developers allocated to it sooner - but we will support it eventually either way.

        Show
        Greg Wilkins added a comment - Hi SCG, I think I misunderstood your issue. You are having problems with the Bayeux client because I don't think SSL is yet supported in the underlying HttpClient. Is that the reason you have updated the BayeuxClient class? Anyway, this should not be too hard to support as all the infrastructure is there for the server side. But I'm not sure when I would get time to look at this as we are stupidly busy at the moment. I will look later today and estimate exactly what is involved. Note that if this is for a commercial project, then you could talk to webtide to get one of our developers allocated to it sooner - but we will support it eventually either way.
        Hide
        Greg Wilkins added a comment -

        There is indeed a little bit of work to be done to make the HttpClient work with SSL.

        It is just the code to create a client side SSL endpoint and then I think the rest of the code
        will work.

        I'm checking in a bit of a skeleton for this now... at least a place holder for where the
        code needs to go. I will work on this in my limited free time, but if this is a priority then contact webtide.

        Show
        Greg Wilkins added a comment - There is indeed a little bit of work to be done to make the HttpClient work with SSL. It is just the code to create a client side SSL endpoint and then I think the rest of the code will work. I'm checking in a bit of a skeleton for this now... at least a place holder for where the code needs to go. I will work on this in my limited free time, but if this is a priority then contact webtide.
        Hide
        scg added a comment -

        Hi, Greg
        Thanks for your reply. Actually, I debuged into the Jetty codes, and found that the HttpClient also has a SSL option to support for https protocol and get SslHttpChannelEndPoint via HttpDestination , though the HttpClient still has only two kinds of connector types — HttpClient.CONNECTOR_SELECT_CHANNEL and HttpClient.CONNECTOR_SOCKET (Actually I used HttpClient.CONNECTOR_SELECT_CHANNEL). The SSL option depends on HttpExchange.getScheme(). So when I updated the BayeuxClient class with jetty-6.1.7 package and added a boolean variable( boolean _isHttps) to set SchemeBuffer of HttpExchange to be https. But the handshake (its super class is HttpExchange) will still throw the EofException.

        I also think the problem of this issue probably is in the client side, but I really confused how to resolve it. It's very appreciated that if you could help to fix it.
        Thanks a lot.

        The below part source codes is from HttpClient.class (ssl option is int the send(HttpExchange exchange) method):

        public class HttpClient extends AbstractBuffers
        {
        public static final int CONNECTOR_SOCKET=0;
        public static final int CONNECTOR_SELECT_CHANNEL=2;

        private int _connectorType=CONNECTOR_SOCKET;
        private boolean _useDirectBuffers=true;
        private int _maxConnectionsPerAddress=32;
        private Map<InetSocketAddress, HttpDestination> _destinations=new HashMap<InetSocketAddress, HttpDestination>();
        ThreadPool _threadPool;
        Connector _connector;
        private long _idleTimeout=20000;
        private long _timeout=320000;
        private int _soTimeout = 10000;
        private Timeout _timeoutQ = new Timeout();

        /* ------------------------------------------------------------------------------- */
        public void send(HttpExchange exchange) throws IOException

        { boolean ssl=HttpSchemes.HTTPS_BUFFER.equalsIgnoreCase(exchange.getScheme()); exchange.setStatus(HttpExchange.STATUS_WAITING_FOR_CONNECTION); HttpDestination destination=getDestination(exchange.getAddress(),ssl); destination.send(exchange); }

        ....
        }

        The below part source codes is from BayeuxClient.class (I added _isHttps flag to setScheme(HttpSchemes.HTTPS_BUFFER)):

        private class Exchange extends HttpExchange.ContentExchange
        {
        Object[] _responses;
        int _connectFailures;

        Exchange(String info)

        { setMethod("POST"); if (_isHttps) setScheme(HttpSchemes.HTTPS_BUFFER); else setScheme(HttpSchemes.HTTP_BUFFER); setAddress(_address); setURI(_uri+"/"+info); setRequestContentType(_formEncoded?"application/x-www-form-urlencoded;charset=utf-8":"text/json;charset=utf-8"); }

        ...
        }

        private class Handshake extends Exchange
        {
        final static String handshake="[

        {"+"\"channel\":\"/meta/handshake\","+"\"version\":\"0.9\","+"\"minimumVersion\":\"0.9\""+"}

        ]";

        Handshake()
        {
        super("handshake");
        setMessage(handshake);

        try

        { customize(this); _client.send(this); }

        catch (IOException e)

        { // TODO handle better e.printStackTrace(); }

        }

        /* ------------------------------------------------------------ */
        /* (non-Javadoc)

        • @see org.mortbay.jetty.client.HttpExchange#onException(java.lang.Throwable)
          */
          protected void onException(Throwable ex) { Log.warn("Handshake:"+ex); Log.debug(ex); }

          ...
          }

        Show
        scg added a comment - Hi, Greg Thanks for your reply. Actually, I debuged into the Jetty codes, and found that the HttpClient also has a SSL option to support for https protocol and get SslHttpChannelEndPoint via HttpDestination , though the HttpClient still has only two kinds of connector types — HttpClient.CONNECTOR_SELECT_CHANNEL and HttpClient.CONNECTOR_SOCKET (Actually I used HttpClient.CONNECTOR_SELECT_CHANNEL). The SSL option depends on HttpExchange.getScheme(). So when I updated the BayeuxClient class with jetty-6.1.7 package and added a boolean variable( boolean _isHttps) to set SchemeBuffer of HttpExchange to be https. But the handshake (its super class is HttpExchange) will still throw the EofException. I also think the problem of this issue probably is in the client side, but I really confused how to resolve it. It's very appreciated that if you could help to fix it. Thanks a lot. The below part source codes is from HttpClient.class (ssl option is int the send(HttpExchange exchange) method): public class HttpClient extends AbstractBuffers { public static final int CONNECTOR_SOCKET=0; public static final int CONNECTOR_SELECT_CHANNEL=2; private int _connectorType=CONNECTOR_SOCKET; private boolean _useDirectBuffers=true; private int _maxConnectionsPerAddress=32; private Map<InetSocketAddress, HttpDestination> _destinations=new HashMap<InetSocketAddress, HttpDestination>(); ThreadPool _threadPool; Connector _connector; private long _idleTimeout=20000; private long _timeout=320000; private int _soTimeout = 10000; private Timeout _timeoutQ = new Timeout(); /* ------------------------------------------------------------------------------- */ public void send(HttpExchange exchange) throws IOException { boolean ssl=HttpSchemes.HTTPS_BUFFER.equalsIgnoreCase(exchange.getScheme()); exchange.setStatus(HttpExchange.STATUS_WAITING_FOR_CONNECTION); HttpDestination destination=getDestination(exchange.getAddress(),ssl); destination.send(exchange); } .... } The below part source codes is from BayeuxClient.class (I added _isHttps flag to setScheme(HttpSchemes.HTTPS_BUFFER)): private class Exchange extends HttpExchange.ContentExchange { Object[] _responses; int _connectFailures; Exchange(String info) { setMethod("POST"); if (_isHttps) setScheme(HttpSchemes.HTTPS_BUFFER); else setScheme(HttpSchemes.HTTP_BUFFER); setAddress(_address); setURI(_uri+"/"+info); setRequestContentType(_formEncoded?"application/x-www-form-urlencoded;charset=utf-8":"text/json;charset=utf-8"); } ... } private class Handshake extends Exchange { final static String handshake="[ {"+"\"channel\":\"/meta/handshake\","+"\"version\":\"0.9\","+"\"minimumVersion\":\"0.9\""+"} ]"; Handshake() { super("handshake"); setMessage(handshake); try { customize(this); _client.send(this); } catch (IOException e) { // TODO handle better e.printStackTrace(); } } /* ------------------------------------------------------------ */ /* (non-Javadoc) @see org.mortbay.jetty.client.HttpExchange#onException(java.lang.Throwable) */ protected void onException(Throwable ex) { Log.warn("Handshake:"+ex); Log.debug(ex); } ... }
        Hide
        Greg Wilkins added a comment -

        Can you send me the actual diffs of the classes you have changed.

        thanks

        Show
        Greg Wilkins added a comment - Can you send me the actual diffs of the classes you have changed. thanks
        Hide
        scg added a comment -

        Hi, Greg
        I have sent you the modified BayeuxClient and original one in your mail box. Actually, I only modified the file a little bit. In the BayeuxClient constructor method, I added a boolean parameter - isHttps and defined a gloable parameter _isHttps, and then set HttpExchange.ContentExchange setScheme() to be HttpSchemes.HTTPS_BUFFER instead of HttpSchemes.HTTP_BUFFER in according to the _isHttps value.
        In my first post , I attached the client side codes about how to create&start the client , subscribe my event channel for pushing the event data from server to client, and publish message from cleint to server.

        BTW, as my fist post said, if based on http protocol , all of these are running normally.

        Thanks a lot.

        Show
        scg added a comment - Hi, Greg I have sent you the modified BayeuxClient and original one in your mail box. Actually, I only modified the file a little bit. In the BayeuxClient constructor method, I added a boolean parameter - isHttps and defined a gloable parameter _isHttps, and then set HttpExchange.ContentExchange setScheme() to be HttpSchemes.HTTPS_BUFFER instead of HttpSchemes.HTTP_BUFFER in according to the _isHttps value. In my first post , I attached the client side codes about how to create&start the client , subscribe my event channel for pushing the event data from server to client, and publish message from cleint to server. BTW, as my fist post said, if based on http protocol , all of these are running normally. Thanks a lot.
        Hide
        Greg Wilkins added a comment -

        Up for grabs

        Show
        Greg Wilkins added a comment - Up for grabs
        Greg Wilkins made changes -
        Assignee Greg Wilkins [ gregw ]
        Hide
        Greg Wilkins added a comment -

        This has been fixed in Jetty 7.
        We hope to back port this to jetty 6 soon.

        Show
        Greg Wilkins added a comment - This has been fixed in Jetty 7. We hope to back port this to jetty 6 soon.
        Greg Wilkins made changes -
        Assignee Greg Wilkins [ gregw ]
        Greg Wilkins made changes -
        Fix Version/s 6.1.12 [ 14380 ]
        Fix Version/s 7.0.0pre3 [ 14417 ]
        Jesse McConnell made changes -
        Fix Version/s 7.0.0pre3 [ 14417 ]
        Fix Version/s 7.0.0pre4 [ 14494 ]
        Hide
        Greg Wilkins added a comment -

        I believe this is now backported to jetty-6

        Show
        Greg Wilkins added a comment - I believe this is now backported to jetty-6
        Greg Wilkins made changes -
        Status Open [ 1 ] Resolved [ 5 ]
        Resolution Fixed [ 1 ]
        Greg Wilkins made changes -
        Fix Version/s 6.1.12 [ 14380 ]
        Fix Version/s 6.1.12.rc2 [ 14574 ]

          People

          • Assignee:
            Greg Wilkins
            Reporter:
            scg
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: