Foonsearch

Hoi RGJ,

Het direct hashen bij het binnenhalen van de file werkt al weer. Ik ga nu wget onder de workerthreads ‘hangen’. De opties die normaliter vanuit de command line worden gegeven nu vanuit de scheduler tabel (uit de ‘cmdLine veld’) vertalen naar de wget source.

Ik zie dat in tegenstelling tot wget FileZilla wel het ftps protocol heeft geïmplementeerd.

De hartelijke groet Jan Marco

Hoi RGJ,

Ik ben bezig om de wget- en installercode onder het workerthreads framework te hangen. De wget/installerroutines weten niet in welke workerthreadslot ze worden aangeroepen, dus in de (wget/installer) routines een (int) variable threadnum in de parameter lijst opgenomen.

Een andere uitdaging is de commandline routine. De installer gebruikt een eigen bedachte routine, daarentegen gebruikt wget de meer standaard (GNU) _getopt_internal_r routine. Ik ben nu aan het uitzoeken hoe het werkt. Ik ga eerst proberen om de opties van de installer in de getopt() routine van wget samen te voegen. Einddoel is om de getopt() routine de inhoud te laten 'parsen’van het CmdLine-veld in de tabel ‘task’ van de database ‘scheduler’.

Een latere variant zou kunnen zijn dat je de ‘wget’ en ‘installer’ als “commando’s” in de installer NSIS bestanden gaat inbouwen. Voordeel is dat je dan beter kan scripten.

Als dit klaar is ga ik proberen om het servergedeelte van ftp(s) uit FileZilla ook onder het workerthread concept te gaan ‘hangen’. Met ftps kan ik goed checken hoe encryptie werkt met certificaten. Hierna ga ik mijn database synchronisatie routines in het concept integeren.

De hartelijke groet Jan Marco

Hoi RGJ,

Ik denk dat het gemakkelijker is om de pointer structuur gelijksoortige als “char **argv” op de strings in het database veld ‘CmdLine’ te plaatsen en hierna gewoon de routine _getopt_internal_r() aan te roepen.

De hartelijke groet Jan Marco

Hoi RGJ,

Andere dag bezig geweest om uit te zoeken hoe je Filezilla client goed kan compileren. Ik wil graag Filezilla client ‘mergen’ met Wget.

De hartelijke groet Jan Marco

Appendix Filezilla client compileren:

  1. geinstalleerd met gnutls-2.9.12.exe (17.565.614 byte groot)
    The first step is create an import library. Start a MSVS Command Prompt, and go to the GnuTLS installation directory:
    C:\Program Files\GnuTLS-2.9.12\bin>lib /def:libgnutls-26.def

  2. geinstalleerd met 14.097.025 wxWidgets-2.8.11.tar.bz2 (14.097.025 bytes groot).

  • Open project file C:\dev\wxWidgets-2.8.11\build\msw\wx.dsw in VS2008.
  • Zet alle Visual studio subprojecten van wxWidgets om in ‘UNICODE’ door de ‘compiler switch’ om te zetten (View → Resource View → FileZilla → Properties → General → Character set → UNICODE). Wel even chechen of alle projecten goed zijn gecompileerd, anders even “build Solution” commando geven.
  1. geinstalleerd met libidn-1.19.tar.gz (3.207.771 bytes groot)
  • Open project file C:\dev\libidn-1.19\win32\libidn.sln in VS2008.
  • Voeg de compiler optie “LIBIDN_STATIC” toe aan de aanwezige “Preprocessor Definitions”.
  • verander dll project in een static link project ((View → Resource View → FileZilla → Properties → General → Configuration type → Static library (.lib))
  • Compilieer libidn project tot de outputfile libidn.lib
  1. Toevoegen van directories aan default VS2008 directories (Tools → Options → Project and Solutions → VC++ Directories:
    → Voeg de volgende “Include files” toe:
    C:\dev\wxWidgets-2.8.11\include
    C:\dev\wxWidgets-2.8.11\lib\vc_lib\mswd
    C:\Program Files\GnuTLS-2.9.12\include
    C:\dev\libidn-1.19\lib
    C:\dev\libidn-1.19\win32\include

→ Voeg de volgende “Library files” toe:
C:\Program Files\GnuTLS-2.9.12\bin
C:\dev\libidn-1.19\win32\Debug
C:\dev\wxWidgets-2.8.11\lib\vc_lib

  1. Voeg de volgende libraries toe aan de al aanwezige libraries (View → Resource View → FileZilla → Properties → Linker → Input → Additional Dependencies):
    wxbase28d.lib
    wxbase28d_net.lib
    wxbase28d_odbc.lib
    wxbase28d_xml.lib
    wxexpatd.lib
    wxjpegd.lib
    wxmsw28d_adv.lib
    wxmsw28d_aui.lib
    wxmsw28d_core.lib
    wxmsw28d_dbgrid.lib
    wxmsw28d_gl.lib
    wxmsw28d_html.lib
    wxmsw28d_media.lib
    wxmsw28d_qa.lib
    wxmsw28d_richtext.lib
    wxmsw28d_xrc.lib
    wxpngd.lib
    wxregexd.lib
    wxtiffd.lib
    wxzlibd.lib

  2. Zet
    extern int idna_to_ascii_8z (const char *input, char **output, int flags);
    extern void idn_free (void *ptr);
    boven routine wxString CControlSocket::ConvertDomainName(wxString domain) in file ´ControlSocket.cpp´ om van de twee ‘not resolved variabelen’ af te komen.

  3. Zet file FileZilla_unicode_dbg.exe naast de orginele file (FileZilla.exe) in de “FileZilla FTP Client” directory, deze directory kan worden verkregen uit het installeren van FileZilla® - Browse Files at SourceForge.net .

Hoi RGJ,

Ik ben momenteel bezig om de FileZillaServer code (38000 regels code) te integreren met wat ik nu al heb. N.B. Ik heb veel conflicten met de openssl-routines die in het mysql client code gedeelte staan.
Hierna http://www.peerblock.com/ en ClamAVNet er in proberen te integreren.

De hartlijke groet Jan Marco

Hoi RGJ,
Het is mij gelukt om de Filezilla server code onder mijn programma te compileren en te linken. Filezilla server gebruikt ook service code, deze code heb ik al uit mysql gehaald. Momenteel ben ik aan het bestuderen hoe deze code werkt. Mogelijk dat ik daar iets van ga gebruiken. Alleen als het beter wordt natuurlijk.

Ook een andere insteek is dat Filezilla server een ‘windows programma’ is en ik voor de demon (=‘service’) programma voor een ‘console windows programma’ ga.

In mijn beeld wordt een ftp server in een workerthread aangeroepen onder de regie van een (job/task) scheduler, die gevoegd wordt vanuit een database (mysql). De scheduler database weer vullen van uit een ‘database browser’ programma (als sqlyog).

De hartelijke groet Jan Marco

Hoi RGJ,
Ik heb de Filezilla server code nu kunnen compileren en uitvoeren onder mijn nieuwe ‘software stack’ van include files en common routines in het demonprogramma(foonsearchd.exe). Het grafische programma (database browser=voipe.exe) werkt ook weer. Alleen is nog niet volledig onder de software stack geintegreerd.

Bij filezilla zijn ze een filter in perl aan het bouwen op de logfiles. Zie ook FileZilla Log Analyzer Now Released! - Page 3 - FileZilla Forums voor de details. M.i. beter is om de log files in Mysql op te slaan en dan een generieke filter in het databasebrowser programma gaan inbouwen.

Mijn vervolgstappen zijn:

  1. Filezilla client goed gaan compileren; Ik heb nog probleem met de tls-library.
  2. De ftp specifieke client/server-GUI-code gaan omhangen in de database browser, dus de grafische multiplatform wxwidgets (http://www.wxwidgets.org/) verwijderen en om te zetten naar ‘plain windows-C’.

De hartelijke groet Jan Marco

P.S. Eerste stap van code integratie is dat de code elkaar niet bijt. Volgende stap is dat je dezelfde routine zou behoren aan te roepen als je dezelfde funtionaliteit wilt gebruiken.

Hoi RGJ,

Ik heb net filezilla cliënt met gnutls kunnen compileren en linken onder mijn header files. Ik krijg nu een “GnuTLS error -68: ASN1 parser: Identifier was not found” foutmelding in het status window van FileZilla client. Enerzijds ben ik ASN1 aan het ‘bestuderen’ (, zie ASN1: http://powerasn.ncottin.net/download/Introduction_To_ASN1.pdf ) anderzijds in de code kijken waar het nu fout gaat.

Ik ben ook begonnen om de source van de cliënt (GUI) van de FileZilla Server onder mijn header files te gaan zetten. Als het werkt dan de niet specifieke (FTP) code van de cliënt en het server gedeelte van FileZilla (naar boven in het project) verplaatsen naar de SQLYog (GUI) cliënt . In het geval dat alles verplaatst is dan de wxWidgets afhankelijkheid er uit gaan halen.

Kortom de Filezillaserver (s)ftp code verplaatsen naar het service programma (foonsearchd.exe) . De ftp(s) client’s van de Filezillacliënt en -server verplaatsen naar één GUI programma (voipe.exe) . N.B. Met de wget code die ik ook al ‘geinclude’ heb, kan ik http(s) documenten bij andere servers gaan ophalen.

De hartelijke groet Jan Marco

Hoi RGJ,

Ik probeer eerst de server/cliënt van ftp, ftps en sftp in het programma werkend te krijgen. FileZilla gebruikt voor de sftp-cliënt het programma psftp.exe van het Putty-project. FileZilla heeft geen sftp server code, dus ben ik aan het kijken naar de server code van KpyM Telnet/SSH Server en http://www.openssh.com .
Verschil tussen ftps en sftp wordt in delphi3000.com aangegeven.

De hartelijk groet Jan Marco

Hoi RGJ,

Ik heb de (ssh-server) demon van KpyM Telnet/SSH Server onder mijn ‘source stack’ geplaatst. De library, die deze ssh-demon (‘kts119c’) gebruikt (namelijk ‘cryptlib’), van cryptlib Encryption Toolkit heb ik er nog niet onder kunnen plaatsen. Ik wil deze migratie de komende tijd gaan doen. Kost alleen wat meer tijd om dat het zoveel files zijn, namelijk een paar honderd. Cryptlib geeft zelf aan dat ze best wel compleet zijn. Zie ook
http://read.pudn.com/downloads137/ebook/583989/cryptlib_brochure(Jan07).pdf
voor hun beweringen.

De code van fzsftp.exe heb ik ook gecompileerd en onder mijn ‘software stack’ gehangen, echter werkt nog niet bij mij. N.B. fzsftp.exe is het programma dat FileZilla cliënt aanroept als het via het sftp-protocol naar een ssh-demon wil communiceren. De code is van het Putty project betrokken.

De hartelijke groet Jan Marco

Hoi RGJ,

In fzsftp.exe zit volgende “case constructies” Coroutines in C In C werkt het wel, echter in CPP krijg ik compiler foutmeldingen. Omdat ik deze code wil integeren met mijn andere CPP code ben ik bezig om het naar een state machine om te zetten. De code is best wel mooi. Simon heeft bijvoorbeeld socket programming (record)structuur in het programma gemaakt…

De hartelijke groet Jan Marco

Geef het stukje code eens en de foutmelding(en) ?

Hoi RGJ,

Geef het stukje code eens en de foutmelding(en) ?

Even terugkoppeling van voorbeeld die ik aan Simon heb gestuurd.

Simon Tatham [anakin@pobox.com] beantwoording (zo 27-2-2011 10:46)van mijn vraag aan hem:

“jan marco alkema” jm.alkema@home.nl wrote:

I want to compile the fzsftp source files from “Compile as C Code
(/TC)” to “Compile as C++ Code (/TP)”. Compile as C Code works, but
Compile as C++ gives the next type of errors: “error C2360:
initialization of ‘e’ is skipped by ‘case’ label
c:\dev\fzsftp\src\cr_remove.c(4648) : see declaration of ‘e’”.

It’s true that there is a way into that switch statement which skips the code that initialises e, but it shouldn’t in principle be harmful, because e is not used by any code reachable from that case label - it’s only ever used by code that enters the block containing e from the very top.

I don’t know why your compiler is giving an error for that code in
C++ mode only. Perhaps C++ makes that construction illegal, whereas
in C it’s merely legal but dangerous so it’s up to the programmer to know what they’re doing? I don’t have a copy of the C++ standard to hand today (and it’s unreadable in any case), so I can’t easily check.

You could probably get rid of the error by putting an extra pair of braces around the initialisation of e and all its uses, but not extending it as far as the crWaitUntilV. I’d do something like this:

if (ssh->mainchan && !ssh->ncmode && *ssh->cfg.environmt) {
    {
        char *e = ssh->cfg.environmt;
        char *var, *varend, *val;

        s->num_env = 0;

        while (*e) {
            var = e;
            while (*e && *e != '\t') e++;
            varend = e;
            if (*e == '\t') e++;
            val = e;
            while (*e) e++;
            e++;

            s->pktout = ssh2_pkt_init(SSH2_MSG_CHANNEL_REQUEST);
            ssh2_pkt_adduint32(s->pktout, ssh->mainchan->remoteid);
            ssh2_pkt_addstring(s->pktout, "env");
            ssh2_pkt_addbool(s->pktout, 1);            /* want reply */
            ssh2_pkt_addstring_start(s->pktout);
            ssh2_pkt_addstring_data(s->pktout, var, varend-var);
            ssh2_pkt_addstring(s->pktout, val);
            ssh2_pkt_send(ssh, s->pktout);

            s->num_env++;
        }

        logeventf(ssh, "Sent %d environment variables", s->num_env);
    }

    s->env_ok = 0;
    s->env_left = s->num_env;

Hoi RGJ,

Op hoofdlijnen heb je m.i. twee varianten voor databasesynchronisatie.

  1. Een file met hashes van de records van een tabel naar de bevriende peer sturen. Ik ga dit met sftp proberen, onderliggend is het programma fzsftp.exe dat ik hiervoor ga gebruiken. Programma wordt momenteel bij mij nog aangestuurd door de FileZilla cliënt.
  2. Database records/queries (UDP packets) sturen naar bevriende peers. Mogelijk goed kijken naar bittorrent/gnunet protocol hoe die dat doen.

Het fzsftp.exe programma is opgebouwd zoals in The OpenSSH Protocol under the Hood | Linux Journal “The OpenSSH Protocol under the Hood” is beschreven. Ik heb nu 5 routines ‘omgevormd’ tot een ’state-machine’. Oorspronkelijk was ook een soort state machine met de state de linenummer in de source code die door de compiler automatisch wordt ‘ingevuld’. Ik heb ssh-connection en ssh-userauth {zijn uitgewerkt in do_ssh2_authconn() in 58 ‘states’} en ssh-transport {uitgewerkt in do_ssh2_transport() in 32 ‘states’} onder handen genomen. Heeft mij wel een paar maanden tijd gekost, maar in het programma zit veel mooie zaken in zoals het uitwissel van keys, etc.

Simon zit er wel wat anders in dan ik. Simon vindt dat ik/anderen moet/en begrijpen wat hij als “source kunstenaar” maakt. Ik prefereer liever simpele code/constructies waar anderen gemakkelijk mee kunnen doorontwikkelen. Meer complex is hopelijk minder fouten—)

Ik ga nu de states in twee procedures nog een keer goed checken, waarna ik ga testen of er verschil zit tussen het resultaat van de ‘oorspronkelijke routine’ en mijn variant.

Ik heb ssh1 er uit gesloopt, zie phwinfo voor het verschil tussen ssh1 en ssh2. De reden is dat ssh1 ook niet in http://www.kpym.com/download/kts119c.zip is geïmplementeerd en ik niet veel zin heb om speciale (verouderde) server omgevingen te gaan configureren om het goed te testen. In mijn beeld moeten wij geen onveilige/verouderde dingen er meer in opnemen, zoals ftp, telnet,ssh1, etc.

De hartelijke groet Jan Marco

Hoi RGJ,

Het is mij gelukt om het fzsftp.exe programma om te zetten naar een normaal state machine, dus zonder compiler fouten in .CPP compilatie. Best wel een zware ‘bevalling’ geweest. Initieel dacht ik binnen twee dagen de code van fzsftp.exe te kunnen integeren, echter heeft mij maanden tijd gekost. Voordeel van huidige vorm is dat het m.i. makkelijk te begrijpen is, dus op den duur minder fouten in zal zitten. N.B. Je kan makkelijk in een file ‘dumpen’ welke state het sftp programma zit.

Ik ga nu kijken hoe filezilla fzsftp.exe aanroept. Hierna de code in filezilla plaatsen en daarna de engine code afsplitsen, dat wil zeggen geen QT, Wxwidgets en boost aanroepen in de code. Ik kan dan de engine code gemakkelijk onder mijn nieuwe GUI (SQLyog code) ‘schuiven’.

De hartelijke groet Jan Marco

Hoi RGJ,

Ik ben nu bezig om de source van KpyM Telnet/SSH Server zo te compileren onder mijn ‘source stack’ dat ik het kpym-programma session.exe krijg. Kpym is de server kant van sftp en is in mijn beeld best compleet.

Het kpym-hoofdprogramma daemon.exe start session.exe op als je een sftp connect gaat maken. In mijn beeld hoef je geen aparte session.exe op je pc hebben staan, maar kan je een session programma (windowsproces) gewoon starten vanuit het hoofdprogramma, netzo als je bij wget doet. In het geval je wget ‘in achtergrond’ laat starten.

N.B. Wat ik bij opensource programma’s geleerd heb is dat je goed moet kijken of je wel alle project gerelateerde dll’s en executabel programma’s kan opbouwen.

De hartelijke groet Jan Marco

RGJ,

Ik ben begonnen om de library van http://www.cs.auckland.ac.nz/~pgut001/cryptlib/ onder mijn source stack te zetten. Deze library gebruikt de sftp server (KpyM Telnet/SSH Server (KTS)). Na de migratie ga ik mijn focussen op het synchroniseren van het telefoonboek. Ik heb m.i. nu alle ingrediënten bij elkaar ‘gesprokkeld’ om de database synchronisatie (van het telefoonboek) te gaan bouwen.

De hartelijke groet Jan Marco

P.S. Een ander project https://www.forge.funambol.org/download/ heeft m.i. wel een leuke (alternatieve) opzet.

Hoi RGJ,

Ik wilde eerst de driehonderd files van ftp://ftp.franken.de/pub/crypt/cryptlib/cl341.zip 1 voor 1 onder mijn sourcestack hangen. Na een paar dagen kwam ik er achter dat dit erg lang gaat duren en dat je na een lange periode pas weet of het nog wel werkt. Beter plan is om session.exe met cryptlib eerst in C te compileren. Hierna alle cryptlib C files in 1 files zetten. Daarna deze file migereren naar .cpp file. Waarna je het gaat integeren met de andere source code.

De hartelijke groet Jan Marco

RGJ,
De library ftp://ftp.franken.de/pub/crypt/cryptlib/cl341.zip is 290.396 source code regels in 1 file. In c werkt het. Ik ben nu bezig om het ook werkend in een cpp file te krijgen. Cpp geeft veel foutmeldingen op niet goede ‘type velden’ en niet goed geinitialiseerde arrays.

De hartelijke groet Jan Marco

Hoi RGJ,

Ik heb de session code nu wel onder mijn source stack zitten, echter session.exe werkt nog niet. Wat mij ‘op het verkeerde been heeft gezet’ was de link file bij session.exe, die wees naar het originele session.exe programma, dus niet naar mijn versie. Het ‘daemon.exe’ programma kijkt dus eerst in deze linkfile voordat hij de overeenkomstige session.exe opstart.

Afgelopen weekend weer session.exe opgebouwd uit de originele code met een oude cl32.dll code (versie 340). Deze werkt niet, maar doet meer dan de versie die ik onder mijn source stack heb staan. Ik ga nu specifiek kijken waar de verschillen in zitten en waar hij precies op stuk loopt. Voordeel is nu dat ik meer ga begrijpen hoe het werkt.

De hartelijke groet Jan Marco