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"); } }
public BMessageHeader createResponse() { BMessageHeader hdr = new BMessageHeader(this); hdr.flags |= FLAG_RESPONSE; return(hdr); }
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>(); }
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>(); }
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)); }
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; }
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; }
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)); }
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; }
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"); } }
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); }
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); } }
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); }
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); }
public BInputS(BTransport transport, BMessageHeader responseHeader, ByteBuffer buf) : base(transport, responseHeader, buf, transport.getApiDesc().getRegistry(BBinaryModel.MEDIUM)) { }
public abstract BInput getInput(BTransport transport, BMessageHeader responseHeader, ByteBuffer buf);
public abstract BOutput getResponse(BTransport transport, BMessageHeader requestHeader);
public BInputBin(BTransport transport, BMessageHeader responseHeader, ByteBuffer buf, BRegistry registry) : base(transport, responseHeader, registry) { this.bbuf = (BBufferBin)BBuffer.create(BBinaryModel.MEDIUM, buf); }
public override BInput getInput(BTransport transport, BMessageHeader responseHeader, ByteBuffer buf) { return new BInputS(transport, responseHeader, buf); }
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"); } }
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"); } }
public BMessage(BMessageHeader header, ByteBuffer buf, List <BContentStream> streams) { this.header = header; this.buf = buf; this.streams = streams; }
public override BInput getInput(BTransport transport, BMessageHeader responseHeader, ByteBuffer buf) { return(new BInputS(transport, responseHeader, buf)); }
public BMessageHeader createResponse() { BMessageHeader hdr = new BMessageHeader(this); hdr.flags |= FLAG_RESPONSE; return hdr; }
public BMessage(BMessageHeader header, ByteBuffer buf, List<BContentStream> streams) { this.header = header; this.buf = buf; this.streams = streams; }
public BOutputBin(BTransport transport, BMessageHeader requestHeader) : base(transport, transport.getApiDesc().getRegistry(BBinaryModel.MEDIUM), requestHeader) { this.bbuf = (BBufferBin)BBuffer.create(BBinaryModel.MEDIUM, null); }
public BOutputS(BTransport transport, BMessageHeader requestHeader) : base(transport, requestHeader) { }
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); }
public abstract BOutput getResponse(BTransport transport, BMessageHeader requestHeader) ;