<html><head></head><body><div style="font-family: Verdana;font-size: 12.0px;"><div>
<div>Maybe I wasn't clear enough. On what you describe we can basically agree - until your "and so on". </div>

<div> </div>

<div>To make it a bit clearer I have attached a picture to this mail showing the process.</div>

<div> </div>

<div>Until "Response to KDE via device.sendPacket()" we both agree on what is going on. On the debugger in Android studio the next of<br/>
my breakpoints kicking in is in createFileSystemView(). That breakpoint is reached without me doing any additional input. It overwrites a method<br/>
of the apache sshd-core package. What I wanted to ask, is the following:</div>

<div> </div>

<div>a) Where in the code is the piece that triggers that invocation the first time?<br/>
b) Could it be that after KDE has received the inital response via device.sendPacket() that it does not communicate to KDE connect on the phone anymore<br/>
but that it opens a ssh connection to the sshd server running in the background?</div>

<div> </div>

<div>The point is, that if my assumption in b) is correct then we need to tell Apache sshd that there are Android specifics in reading a filesystem, e.g.<br/>
special handling of .android_secure. Either that is possible by overwriting some more methods, or a newer version of sshd-core is handling this better. For example<br/>
if I use Termux on my phone and list the directory of my SD card, then I simply get a permission denied for .android_secure. If neither works, then I <br/>
would assume that doing this via ssh is the wrong way.</div>

<div> </div>

<div>I wonder if with some overwriting of methods we can change in SftpSubsystem the process() method for SSH_FXP_READDIR, that is the one causing the issue<br/>
with the .android_secure directory</div>

<div> 
<div name="quote" style="margin:10px 5px 5px 10px; padding: 10px 0 10px 10px; border-left:2px solid #C3D9E5; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">
<div style="margin:0 0 10px 0;"><b>Gesendet:</b> Sonntag, 15. April 2018 um 21:52 Uhr<br/>
<b>Von:</b> "Andy Holmes" <andrew.g.r.holmes@gmail.com><br/>
<b>An:</b> kdeconnect@kde.org<br/>
<b>Betreff:</b> Re: Re: Troubleshoot SD-card access issue</div>

<div name="quoted-content">I'm not quite sure which debugger you're referring to, or what exactly<br/>
you mean by entry point, but here's a rundown of what happens:<br/>
<br/>
1) Desktop sends 'startBrowsing' packet as described above<br/>
2) Android app receives packet:<br/>
<a href="https://github.com/KDE/kdeconnect-android/blob/master/src/org/kde/kdeconnect/Plugins/SftpPlugin/SftpPlugin.java#L67" target="_blank">https://github.com/KDE/kdeconnect-android/blob/master/src/org/kde/kdeconnect/Plugins/SftpPlugin/SftpPlugin.java#L67</a><br/>
a) if the server has not already started, it is started, a<br/>
password is generated and a port opened:<br/>
<a href="https://github.com/KDE/kdeconnect-android/blob/master/src/org/kde/kdeconnect/Plugins/SftpPlugin/SimpleSftpServer.java#L104" target="_blank">https://github.com/KDE/kdeconnect-android/blob/master/src/org/kde/kdeconnect/Plugins/SftpPlugin/SimpleSftpServer.java#L104</a><br/>
b) Plugin reads password/port from server (regardless of whether<br/>
this is the first request) into the packet:<br/>
<a href="https://github.com/KDE/kdeconnect-android/blob/master/src/org/kde/kdeconnect/Plugins/SftpPlugin/SftpPlugin.java#L72-L75" target="_blank">https://github.com/KDE/kdeconnect-android/blob/master/src/org/kde/kdeconnect/Plugins/SftpPlugin/SftpPlugin.java#L72-L75</a><br/>
c) Paths are determined and attached to the packet:<br/>
<a href="https://github.com/KDE/kdeconnect-android/blob/master/src/org/kde/kdeconnect/Plugins/SftpPlugin/SftpPlugin.java#L84-L122" target="_blank">https://github.com/KDE/kdeconnect-android/blob/master/src/org/kde/kdeconnect/Plugins/SftpPlugin/SftpPlugin.java#L84-L122</a><br/>
d) Android app sends response packet to Desktop:<br/>
<a href="https://github.com/KDE/kdeconnect-android/blob/master/src/org/kde/kdeconnect/Plugins/SftpPlugin/SftpPlugin.java#L124" target="_blank">https://github.com/KDE/kdeconnect-android/blob/master/src/org/kde/kdeconnect/Plugins/SftpPlugin/SftpPlugin.java#L124</a><br/>
3) Desktop receives response packet:<br/>
<a href="https://github.com/KDE/kdeconnect-kde/blob/master/plugins/sftp/sftpplugin.cpp#L128-L151" target="_blank">https://github.com/KDE/kdeconnect-kde/blob/master/plugins/sftp/sftpplugin.cpp#L128-L151</a><br/>
<br/>
And so on...I'm a bit unclear on exactly what you're asking, but you<br/>
can follow the process fairly easily (I don't even know C++ or Java<br/>
myself). Basically the Desktop tells the Android app it wants to<br/>
browse. The android app start a ssh server and responds with the<br/>
connect information. The desktop starts a sshfs process using that<br/>
information, and that's it.<br/>
<br/>
As far as the SSH server goes it should all be in:<br/>
<br/>
<a href="https://github.com/KDE/kdeconnect-android/blob/master/src/org/kde/kdeconnect/Plugins/SftpPlugin/SimpleSftpServer.java" target="_blank">https://github.com/KDE/kdeconnect-android/blob/master/src/org/kde/kdeconnect/Plugins/SftpPlugin/SimpleSftpServer.java</a><br/>
<br/>
Regards,<br/>
Andy<br/>
<br/>
On Sun, Apr 15, 2018 at 10:45 AM, <karl-heinz-1950@web.de> wrote:<br/>
> Thanks, a good start.<br/>
><br/>
>> Question 2: I am looking for the piece of code which is executed first on the phone when I click on that device in Dolphin. I assume it is somewhere in the Apache sshd. In other words, who is the first person touching that JSON?<br/>
><br/>
>> Packet being handled (after being routed to the plugin):<br/>
>> <a href="https://github.com/KDE/kdeconnect-android/blob/master/src/org/kde/kdeconnect/Plugins/SftpPlugin/SftpPlugin.java#L65" target="_blank">https://github.com/KDE/kdeconnect-android/blob/master/src/org/kde/kdeconnect/Plugins/SftpPlugin/SftpPlugin.java#L65</a><br/>
><br/>
> You refer to method onPacketReceived. If I haven't made a mistake I would claim that the onPacketReceived method is only called when I click the very first time in Dolphin on the device. When I navigate back to my home drive (or any other PC local drive) and then go back to the phone device in Dolphin I don't see that onPacketReceived is being called again. I see in the debugger that all kind of other code is being executed, so the second time the directories are being displayed in Dolphin it is not taken from some local cache in KDE.<br/>
><br/>
> I assume that means there must be an earlier entry point in the android app. Should the kde connect app receive the same JSON message with startBrowsing true in the second access?<br/>
><br/>
></div>
</div>
</div>
</div></div></body></html>