[
https://issues.apache.org/jira/browse/PROTON-1718?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16301860#comment-16301860
]
Tim Taylor commented on PROTON-1718:
------------------------------------
Actually, after doing some digging, I suspect that I don't need to submit a PR
to achieve this functionality. If I understand the Sasl APIs correctly,
I should be able to use the combination of send(...)/recv(...)/pending() to
manually send inits, wait for challenges, receive those challenges,
and send my custom responses to meet the challenges. I can't seem to make it
work, however.
I can successfully send the init frame and am given a challenge frame in
response. I can read that challenge frame just fine and can expose
it to my application just fine. However, when I try to send a response to that
first challenge, the frame I am trying to send is never written.
It is saved as the challenge response, but it is never processed beyond that.
Is the below code expected to work?
Sasl sasl = transport.sasl();
sasl.client();
sasl.setMechanisms("<custom sasl mechanism>");
//send init message, wait for response
sasl.send(<init payload>, 0, <init payload length>);
waitForSaslBuffer(sasl);
//receive first challenge, send first challenge response, wait for second
challenge
byte[] firstChallengeBytes = retrieveChallengeData(sasl);
sasl.send(<challenge response payload>, 0, <challenge response payload length>);
waitForSaslBuffer(sasl);
//receive second challenge, send second challenge response
byte[] secondChallengeBytes = retrieveChallengeData(sasl);
sasl.send(<challenge response 2 payload>, 0, <challenge response 2 payload>);
...
private void waitForSaslBuffer(Sasl sasl)
{
while (sasl.pending() == 0)
{
Thread.sleep(1000);
}
}
private byte[] retrieveChallengeData(Sasl sasl)
{
byte[] saslChallengeBytes = new byte[sasl.pending()];
sasl.recv(saslChallengeBytes, 0, sasl.pending());
return saslChallengeBytes;
}
> (Proton-J) Custom Sasl
> ----------------------
>
> Key: PROTON-1718
> URL: https://issues.apache.org/jira/browse/PROTON-1718
> Project: Qpid Proton
> Issue Type: Improvement
> Components: proton-j
> Affects Versions: proton-j-0.24.0
> Reporter: Tim Taylor
> Labels: features
>
> I would like to be able to provide a custom SASL implementation for Proton-j
> to use instead of being forced to use the default SaslImpl.java
> implementation.
> Ideally, code like below would be possible
> private class CustomSasl implements org.apache.qpid.proton.engine.Sasl
> {
> ...
> }
> ...
> ...
> //transport.sasl(...) saves the provided sasl implementation and uses it
> internally
> Sasl sasl = transport.sasl(new CustomSasl());
> Do you currently have a workaround that would allow me to use Proton-J this
> way?
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]