Example #1
0
        public void negotiateProtocolClient(BAsyncResultIF <Boolean> asyncResult)
        {
            if (log.isDebugEnabled())
            {
                log.debug("negotiateProtocolClient(");
            }

            ByteBuffer buf  = ByteBuffer.allocate(BNegotiate.NEGOTIATE_MAX_SIZE);
            BNegotiate nego = new BNegotiate(apiDesc);

            nego.write(buf);
            buf.flip();

            BAsyncResultIF <BMessage> outerResult = new MyNegoAsyncResult(this, asyncResult);

            if (log.isDebugEnabled())
            {
                log.debug("wire.send");
            }
            BMessageHeader header = new BMessageHeader();

            header.messageId = wire.makeMessageId();
            BMessage msg = new BMessage(header, buf, null);

            wire.send(msg, outerResult);
            if (log.isDebugEnabled())
            {
                log.debug(")negotiateProtocolClient");
            }
        }
Example #2
0
        public BMessageHeader createResponse()
        {
            BMessageHeader hdr = new BMessageHeader(this);

            hdr.flags |= FLAG_RESPONSE;
            return(hdr);
        }
Example #3
0
        public BInput(BTransport transport, BMessageHeader responseHeader, BRegistry registry)
        {
            this.header = responseHeader;
		    this.transport = transport;
		    this.registry = registry;
            this.idMap = transport.getApiDesc().uniqueObjects ? null : new Dictionary<int, Object>();
        }
Example #4
0
 public BInput(BTransport transport, BMessageHeader responseHeader, BRegistry registry)
 {
     this.header    = responseHeader;
     this.transport = transport;
     this.registry  = registry;
     this.idMap     = transport.getApiDesc().uniqueObjects ? null : new Dictionary <int, Object>();
 }
Example #5
0
 public override BOutput getResponse(BTransport transport, BMessageHeader requestHeader)
 {
     if (negotiatedByteOrder == ByteOrder.UNDEFINED)
     {
         throw new BException(BExceptionC.INTERNAL, "Protocol object can only be used for input.");
     }
     return(new BOutputS(transport, requestHeader));
 }
Example #6
0
 public BOutput(BTransport transport, BRegistry registry, int streamHeaderMagic, int negotiatedBypsVersion, long negotiatedVersion, ByteOrder negotiatedByteOrder)
 {
     this.objMap           = transport.getApiDesc().uniqueObjects ? null : new BObjMap();
     this.header           = new BMessageHeader(streamHeaderMagic, negotiatedBypsVersion, negotiatedVersion, negotiatedByteOrder, transport.getWire().makeMessageId());
     this.header.targetId  = transport.getTargetId();
     this.header.sessionId = transport.getSessionId();
     this.transport        = transport;
     this.registry         = registry;
     this.streams          = null;
 }
Example #7
0
 public BOutput(BTransport transport, BRegistry registry, BMessageHeader requestHeader)
 {
     this.objMap           = transport.getApiDesc().uniqueObjects ? null : new BObjMap();
     this.header           = requestHeader;
     this.header.targetId  = transport.getTargetId();
     this.header.sessionId = transport.getSessionId();
     this.transport        = transport;
     this.registry         = registry;
     this.streams          = null;
 }
Example #8
0
 public BOutput(BTransport transport, BRegistry registry, BMessageHeader requestHeader)
 {
     this.objMap = transport.getApiDesc().uniqueObjects ? null : new BObjMap();
     this.header = requestHeader;
     this.header.targetId = transport.getTargetId();
     this.header.sessionId = transport.getSessionId();
     this.transport = transport;
     this.registry = registry;
     this.streams = null;
 }
Example #9
0
 public BOutput(BTransport transport, BRegistry registry, int streamHeaderMagic, int negotiatedBypsVersion, long negotiatedVersion, ByteOrder negotiatedByteOrder)
 {
     this.objMap = transport.getApiDesc().uniqueObjects ? null : new BObjMap();
     this.header = new BMessageHeader(streamHeaderMagic, negotiatedBypsVersion, negotiatedVersion, negotiatedByteOrder, transport.getWire().makeMessageId());
     this.header.targetId = transport.getTargetId();
     this.header.sessionId = transport.getSessionId();
     this.transport = transport;
     this.registry = registry;
     this.streams = null;
 }
Example #10
0
        public BInput getInput(BMessageHeader header, ByteBuffer buf)
        {
            // header is null in the test cases that check the serialization.
            if (header == null)
            {
                header = new BMessageHeader();
                header.read(buf);
            }

            return(protocol.getInput(this, header, buf));
        }
Example #11
0
 public BMessageHeader(BMessageHeader rhs)
 {
     this.magic     = rhs.magic;
     this.bversion  = rhs.bversion;
     this.version   = rhs.version;
     this.byteOrder = rhs.byteOrder;
     this.error     = rhs.error;
     this.flags     = rhs.flags;
     this.messageId = rhs.messageId;
     this.targetId  = rhs.targetId;
     this.sessionId = rhs.sessionId;
 }
Example #12
0
 public BMessageHeader(BMessageHeader rhs)
 {
     this.magic = rhs.magic;
     this.bversion = rhs.bversion;
     this.version = rhs.version;
     this.byteOrder = rhs.byteOrder;
     this.error = rhs.error;
     this.flags = rhs.flags;
     this.messageId = rhs.messageId;
     this.targetId = rhs.targetId;
     this.sessionId = rhs.sessionId;
 }
Example #13
0
            public void setAsyncResult(ByteBuffer buf, Exception ex)
            {
                if (log.isDebugEnabled())
                {
                    log.debug("setAsyncResult" + this + "(buf=" + buf + ", ex=" + ex);
                }
                if (Interlocked.Increment(ref isOpen) == 1)
                {
                    try
                    {
                        if (ex == null && buf != null && buf.remaining() != 0)
                        {
                            BMessageHeader header = new BMessageHeader();

                            bool nego = BNegotiate.isNegotiateMessage(buf);
                            if (nego)
                            {
                                BNegotiate negoResponse = new BNegotiate();
                                negoResponse.read(buf);

                                header.messageId = messageId;

                                BTransport utransport = wire.getClientUtilityRequests().getTransport();
                                utransport.applyNegotiate(negoResponse);
                            }
                            else
                            {
                                header.read(buf);
                            }

                            BMessage msg = buf != null ? new BMessage(header, buf, null) : null;
                            if (log.isDebugEnabled())
                            {
                                log.debug("asyncResult.set");
                            }
                            asyncResult.setAsyncResult(msg, ex);
                        }
                        else
                        {
                            asyncResult.setAsyncResult(null, ex);
                        }
                    }
                    catch (Exception e)
                    {
                        asyncResult.setAsyncResult(null, e);
                    }
                }
                if (log.isDebugEnabled())
                {
                    log.debug(")setAsyncResult");
                }
            }
Example #14
0
        private void internalSend(BMessage msg, BAsyncResultIF<BMessage> asyncResult)
        {
		    ByteBuffer obuf = ByteBuffer.allocate(msg.buf.remaining());
		    obuf.put(msg.buf);
		    obuf.flip();

            putStreams(msg.streams, asyncResult);

            BMessageHeader header = new BMessageHeader();
            header.read(obuf);
            BMessage omsg = new BMessage(header, obuf, null);
            asyncResult.setAsyncResult(omsg, null);
        }
Example #15
0
 public BOutput getResponse(BMessageHeader requestHeader)
 {
     lock (this)
     {
         if (protocol == null)
         {
             throw new BException(BExceptionC.INTERNAL, "No protocol negotiated.");
         }
         BMessageHeader responseHeader = requestHeader.createResponse();
         BOutput        bout           = protocol.getResponse(this, responseHeader);
         return(bout);
     }
 }
Example #16
0
        private void internalSend(BMessage msg, BAsyncResultIF <BMessage> asyncResult)
        {
            ByteBuffer obuf = ByteBuffer.allocate(msg.buf.remaining());

            obuf.put(msg.buf);
            obuf.flip();

            putStreams(msg.streams, asyncResult);

            BMessageHeader header = new BMessageHeader();

            header.read(obuf);
            BMessage omsg = new BMessage(header, obuf, null);

            asyncResult.setAsyncResult(omsg, null);
        }
Example #17
0
        private BProtocol detectProtocolFromInputBuffer(ByteBuffer buf)
        {
            BProtocol ret = null;

            // Read the first 4 bytes to detect the protocol.
            int magic = BMessageHeader.detectProtocol(buf);

            if (magic == BMessageHeader.MAGIC_BINARY_STREAM)
            {
                // Version, ByteOrder wird in BInput gelesen
                ret = new BProtocolS(apiDesc);
            }

            if (ret == null)
            {
                throw new BException(BExceptionC.CORRUPT, "Invalid protocol.");
            }

            return(ret);
        }
Example #18
0
 public BInputS(BTransport transport, BMessageHeader responseHeader, ByteBuffer buf)
     : base(transport, responseHeader, buf, transport.getApiDesc().getRegistry(BBinaryModel.MEDIUM))
 {
 }
Example #19
0
 public abstract BInput getInput(BTransport transport, BMessageHeader responseHeader, ByteBuffer buf);
Example #20
0
 public abstract BOutput getResponse(BTransport transport, BMessageHeader requestHeader);
Example #21
0
	    public BInputBin(BTransport transport, BMessageHeader responseHeader, ByteBuffer buf, BRegistry registry) 
		    : base(transport, responseHeader, registry)
        {
		    this.bbuf = (BBufferBin)BBuffer.create(BBinaryModel.MEDIUM, buf);
	    }
Example #22
0
        public override BInput getInput(BTransport transport, BMessageHeader responseHeader, ByteBuffer buf)
        {
		    return new BInputS(transport, responseHeader, buf);
	    }
Example #23
0
        public void negotiateProtocolClient(BAsyncResultIF <Boolean> asyncResult)
        {
            if (log.isDebugEnabled())
            {
                log.debug("negotiateProtocolClient(");
            }
            if (log.isDebugEnabled())
            {
                log.debug("negotiateActive=" + negotiateActive);
            }

            // Check that we do not run into recursive authentication requests.
            lock (asyncResultsWaitingForAuthentication)
            {
                // Already have an active negotiation request?
                if (negotiateActive)
                {
                    // Are there threads waiting?
                    if (asyncResultsWaitingForAuthentication.Count != 0)
                    {
                        // Most likely slow or recursive authentication
                        BException ex = new BException(BExceptionC.FORBIDDEN,
                                                       "Authentication procedure failed. Server returned 401 for every request. "
                                                       + "A common reason for this error is slow authentication handling.");
                        // ... or calling a function that requires authentication in BAuthentication.authenticate() - see. TestRemoteWithAuthentication.testAuthenticateBlocksRecursion
                        asyncResult.setAsyncResult(false, ex);
                        return;
                    }
                    else
                    {
                        // Correction: if no threads are waiting then there cannot be an aktive negotiation request.
                        negotiateActive = true;
                    }
                }
                else
                {
                    // Now, this is the active negotiation request.
                    negotiateActive = true;
                }
            }


            ByteBuffer buf  = ByteBuffer.allocate(BNegotiate.NEGOTIATE_MAX_SIZE);
            BNegotiate nego = new BNegotiate(apiDesc);

            nego.write(buf);
            buf.flip();

            BAsyncResultIF <BMessage> outerResult = new MyNegoAsyncResult(this, asyncResult);

            if (log.isDebugEnabled())
            {
                log.debug("wire.send");
            }
            BMessageHeader header = new BMessageHeader();

            header.messageId = wire.makeMessageId();
            BMessage msg = new BMessage(header, buf, null);

            wire.send(msg, outerResult);
            if (log.isDebugEnabled())
            {
                log.debug(")negotiateProtocolClient");
            }
        }
Example #24
0
        public void internalSend(RequestToCancel request)
        {
            if (log.isDebugEnabled())
            {
                log.debug("internalSend(" + request);
            }
            ByteBuffer requestDataBuffer = request.buf;

            bool isNegotiate = BNegotiate.isNegotiateMessage(requestDataBuffer);
            bool isJson      = isNegotiate || BMessageHeader.detectProtocol(requestDataBuffer) == BMessageHeader.MAGIC_JSON;

            String destUrl = url;

            // Negotiate?
            if (isNegotiate)
            {
                // Send a GET request and pass the negotate string as parameter

                String negoStr = Encoding.UTF8.GetString(requestDataBuffer.array(), requestDataBuffer.position(), requestDataBuffer.remaining());
                negoStr = System.Uri.EscapeDataString(negoStr);

                destUrl = makeUrl(getServletPathForNegotiationAndAuthentication(),
                                  new String[] { "negotiate", negoStr });
            }

            // Reverse request (long-poll) ?
            else if (request.requestDirection == ERequestDirection.REVERSE)
            {
                destUrl = makeUrl(getServletPathForReverseRequest(), null);
            }

            HttpWebRequest conn = (HttpWebRequest)HttpWebRequest.Create(destUrl);

            request.setConnection(conn);
            conn.Method = isNegotiate ? "GET" : "POST";
            conn.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

            // Content-Type for POST request
            if (!isNegotiate)
            {
                conn.ContentType = isJson ? "application/json" : "application/byps";
            }

            conn.Accept = "application/json, application/byps, text/plain, text/html";

            // BYPS-36: Accept GZIP for both, json and byps
            conn.Headers.Add("Accept-Encoding", "gzip");

            applySession(conn);

            IAsyncResult asyncResult = null;

            if (isNegotiate)
            {
                asyncResult = conn.BeginGetResponse(new AsyncCallback(this.getResponseCallback), request);
            }
            else
            {
                asyncResult = conn.BeginGetRequestStream(new AsyncCallback(this.getRequestStreamCallback), request);
            }

            request.startTimeoutWatcher(conn, asyncResult, request.timeoutMillisRequest);

            if (log.isDebugEnabled())
            {
                log.debug(")internalSend");
            }
        }
Example #25
0
 public BMessage(BMessageHeader header, ByteBuffer buf, List <BContentStream> streams)
 {
     this.header  = header;
     this.buf     = buf;
     this.streams = streams;
 }
Example #26
0
 public BInputS(BTransport transport, BMessageHeader responseHeader, ByteBuffer buf)
     : base(transport, responseHeader, buf, transport.getApiDesc().getRegistry(BBinaryModel.MEDIUM))
 {
 }
Example #27
0
 public override BInput getInput(BTransport transport, BMessageHeader responseHeader, ByteBuffer buf)
 {
     return(new BInputS(transport, responseHeader, buf));
 }
Example #28
0
 public BInputBin(BTransport transport, BMessageHeader responseHeader, ByteBuffer buf, BRegistry registry)
     : base(transport, responseHeader, registry)
 {
     this.bbuf = (BBufferBin)BBuffer.create(BBinaryModel.MEDIUM, buf);
 }
Example #29
0
 public BMessageHeader createResponse()
 {
     BMessageHeader hdr = new BMessageHeader(this);
     hdr.flags |= FLAG_RESPONSE;
     return hdr;
 }
Example #30
0
        public BMessage(BMessageHeader header, ByteBuffer buf, List<BContentStream> streams)
        {
            this.header = header;
		    this.buf = buf;
		    this.streams = streams;
	    }
Example #31
0
	    public BOutputBin(BTransport transport, BMessageHeader requestHeader)
            : base(transport, transport.getApiDesc().getRegistry(BBinaryModel.MEDIUM), requestHeader)
        {
            this.bbuf = (BBufferBin)BBuffer.create(BBinaryModel.MEDIUM, null);
	    }
Example #32
0
 public BOutputS(BTransport transport, BMessageHeader requestHeader)
     : base(transport, requestHeader)
 {
 }
Example #33
0
        public override BOutput getResponse(BTransport transport, BMessageHeader requestHeader)
        {
            if (negotiatedByteOrder == ByteOrder.UNDEFINED) throw new BException(BExceptionC.INTERNAL, "Protocol object can only be used for input.");
		    return new BOutputS(transport, requestHeader);
	    }
Example #34
0
	    public abstract BOutput getResponse(BTransport transport, BMessageHeader requestHeader) ;
Example #35
0
 public BOutputS(BTransport transport, BMessageHeader requestHeader)
     : base(transport, requestHeader)
 {
 }
Example #36
0
 public abstract BInput getInput(BTransport transport, BMessageHeader responseHeader, ByteBuffer buf);
Example #37
0
 public BOutputBin(BTransport transport, BMessageHeader requestHeader)
     : base(transport, transport.getApiDesc().getRegistry(BBinaryModel.MEDIUM), requestHeader)
 {
     this.bbuf = (BBufferBin)BBuffer.create(BBinaryModel.MEDIUM, null);
 }