Development/Tutorials/Debugging/Debugging IOSlaves/Debugging kio fish: Difference between revisions

From KDE TechBase
(Replaced content with link to Community WIki.)
 
(8 intermediate revisions by one other user not shown)
Line 1: Line 1:
This page is a starting point for debugging kio_fish. Please also read [[Development/Tutorials/Debugging/Debugging_IOSlaves|how to debug IO slaves generically]].
Moved to the [https://community.kde.org/Guidelines_and_HOWTOs/Debugging/Debugging_IOSlaves/Debugging_kio_fish Community wiki].
 
= Bugs =
Interesting bugs to get into the topic
* [http://bugs.kde.org/show_bug.cgi?id=147948 copying via fish stalls]
* [http://bugs.kde.org/show_bug.cgi?id=145123 fish protocol dies unexpectedly]
 
= Overview =
When you point your konqueror to fish://''user''@''target'', [http://websvn.kde.org/trunk/KDE/kdebase/runtime/kioslave/fish/fish.cpp?view=log the fish kioslave] opens a process that calls the executable ssh. If a password is needed, this question is passed on to you (search for "password" in fish.cpp). Then a [http://websvn.kde.org/trunk/KDE/kdebase/runtime/kioslave/fish/fish.pl?view=log perl script] is copied over to the target host and executed there. On the target host, the file is named .fishsrv.pl. This perl script is compiled into your binary kio_fish.o. If you want to change it sustainably, you will have to change fish.pl in your source dir and then compile and install the directory [http://websvn.kde.org/trunk/KDE/kdebase/runtime/kioslave/fish/ kioslave/fish].
 
The perl script, running on the target computer, is (t)here to execute fish commands like LIST, STAT, WRITE and APPEND. They are sent from fish.cpp running on the source computer.
 
= Test case =
If you want a test case to get some debugging output from kio_fish, get a fresh checkout of kdebase. There you find a test case in runtime/kioslave/fish/tests. [[User:Tstaerk|I]] had the problem that the STOR commands from the fish kioslave were not logged as long as I had localhost as target computer. When I changed it to my local address (192.168.0.7), it worked.
 
= Logging =
You may want to switch on logging for fish.cpp and for fish.pl.
 
In this example, we want to log the output of fish.cpp to /tmp/debugfish. As described at [[Development/Tutorials/Debugging/Debugging_IOSlaves|Debugging_IOSlaves]], change your kdebugrc, e.g. like that:
cat >> $(kde4-config --path config | sed "s/.*://")kdebugrc << EOF
[7127]
InfoOutput=0
InfoFilename=/tmp/debugfish
EOF
 
In this example, we want to log the output of fish.pl to /tmp/kio_fish.debug.log so we change the 14th line of fish.pl to
open(DEBUG,">>/tmp/kio_fish.debug.log");
and uncomment all the lines containing DEBUG.
 
= Manually testing fish =
To test fish manually, call ~/.fishsrv.pl. The fish server will ask you in friendly words (it says ### 100) to transmit its own code, followed by a line __END__. Transmit it. Then the fish server is ready to talk with you (it says ### 200). You can have a conversation like this:
itchy:~ # (echo __END__; cat)| cat .fishsrv.pl -  | perl .fishsrv.pl
### 100 transfer fish server
### 200
#VER
VER 0.0.3 copy lscount lslinks lsmime exec stat
### 200
#WRITE 0 6 /tmp/file1
### 100
123456
### 200
itchy:~ # cat /tmp/file1
123456itchy:~ #
 
== The WRITE command ==
Example:
#WRITE 0 6 /tmp/file1
Syntax:
#WRITE ''start'' ''end'' ''file''
Reads the ''end''-''start'' bytes from STDIN and writes them into file ''file'' starting at position ''start'' ending at position ''end''.

Latest revision as of 11:50, 28 April 2019

Moved to the Community wiki.