Foonsearch

Hoi RGJ,

De versie foonsearchd-0.16.zip “compileert en werkt” op Linux en compileert op Windows met Microsoft Visual Studio 2002 C.

Op Windows start het wel op echter in runtime nog fout. Ik weet dat ik het lezen van de public key van de peer nog moet omzetten naar MySQL. Deze staat nu nog in een file-tje.

De logica van semaphore/threads moet nog meer uit http://sources.redhat.com/pthreads-win32/ gehaald worden.

Ik wil eerst proberen het te kunnen opstarten en de openssl dll’s te gaan laden.

De vriendelijke groet Jan Marco

Hoi RGJ,

De openssl calls worden nu (in versie foonsearchd-0.17.zip) uit libeay32.dll geladen. Ga nu verder met het aan de praat krijgen op Windows.

De vriendelijke groet Jan Marco

Hoi RGJ,

Versie foonsearchd-0.18.zip maakt de directory structuur aan op Windows. Het geeft zelf log status in MySQL. De keyfile wordt aangemaakt en als je tweede keer opstart pakt hij de key uit deze keyfile weer.

Het gaat alleen kapot op de Windows semaphore code. Deze moet ik nog complementeren.

De vriendelijke groet Jan Marco

Hoi RGJ,

Ben bezig om code van http://sources.redhat.com/pthreads-win32/ er in te zetten. Best wel een leuke uitdaging om Windows gelijk aan Linux proberen te krijgen. Net een tekening gemaakt van de recordstructuren. Het is wel een beetje zoek de tien verschillen. Zal nog wel een tijdje duren voordat ik begrijp hoe het moet.

De vriendelijke groet Jan Marco

Hoi RGJ,

http://www.pvbrowser.org/pvbrowser/sf/manual/rllib/html/rlwthread_8h-source.html
typedef struct
{
int __detachstate;
int __schedpolicy;
struct __sched_param __schedparam;
int __inheritsched;
int __scope;
size_t __guardsize;
int __stackaddr_set;
void *__stackaddr;
size_t __stacksize;
} pthread_attr_t;

pthread_attr_t is dus een record van bovenstaande formaat.

http://sources.redhat.com/pthreads-win32/

struct pthread_attr_t_
{
unsigned long valid;
void stackaddr;
size_t stacksize;
int detachstate;
struct sched_param param;
int inheritsched;
int contentionscope;
#if HAVE_SIGSET_T
sigset_t sigmask;
#endif /
HAVE_SIGSET_T */
};

typedef struct pthread_attr_t_ * pthread_attr_t;

Dus een pthread_attr_t is een pointer naar een pthread_attr_t_ structuur.

Mijn port van pthread_attr_t:

typedef struct pthread_attr_t_
{
unsigned long valid;
void *stackaddr;
size_t stacksize;
int detachstate;
struct sched_param param;
int inheritsched;
int contentionscope;
#if HAVE_SIGSET_T
sigset_t sigmask;
#endif // HAVE_SIGSET_T
} pthread_attr_t;

Bij mij is pthread_attr_t is een record structuur. Ik krijg best wel port problemen doordat ik van een record uitga en http://sources.redhat.com/pthreads-win32/ van een pointer naar een record structuur.

RGJ, Voor mij is belangrijk om dicht bij de POSIX (openstandaard, Linux?) te blijven. Weet jij welke interpretatie het POSIX formaat is?.

De vriendelijke groet Jan Marco

Status:

Ik denk dat ik alle relevante http://sources.redhat.com/pthreads-win32/ code in deze versie heb gezet. Het werkt op Windows nog niet. Ik hoop (volgend weekend) het werkend op Windows te hebben.

Aandachtspunten:

  1. De source kan je op Linux en op Windows (Visualstudio (2002)) compileren. De bedoeling is om een platform onafhankelijke peer te krijgen.

  2. Werking: Op Linux worden binnenkomende berichten in MySQL gedaan. Een aparte thread verwerkt deze berichten weer. Best mooi om te zien. Op Windows zal hetzelfde worden gerealiseerd. Ik gebruik om het transparant te houden de Linux (POSIX) procedures thread/semaphore routines zoveel mogelijk.

De vriendelijke groet Jan Marco

Hoi RGJ,

Best wel een uitdaging om mutex code op Windows goed werkend te krijgen.

pthread_cond_wait() werk nog niet goed. Ik heb alle threads zoveel mogelijk uitgezet. Op linux blijft hij mooi wachten (0 % CPU utilization) en op Windows raast hij door met 100 % CPU utilization.

Begin er wel iets meer van te begrijpen. Als deze “generieke” code straks werkt kan je sneller portable (demon) source code samenstellen --)

De vriendelijke groet Jan Marco

Hoi RGJ,

Ik denk dat mutex werkt.

Ik heb even twee mutexen achter elkaar gezet en hij blijft gewoon wachten --)

MUTEX_LOCK(&logMutex);

MUTEX_LOCK(&logMutex);

Ik zal even via de ingebouwde cron een MUTEX_UNLOCK aanroepen bijvoorbeeld 50 seconden in de toekomst.

Ik heb best wel wat geleerd van de code. Sommige delen begrijp ik nog niet zoals de thread self aanroepen. Voordeel om een voorbeeld te gebruiken is dat je sneller tot de diepte in de techniek komt,

De vriendelijke groet Jan Marco

Hoi RGJ,

In versie 0.23 doet “conditional wait” het ook. Als je control-C doet gaat hij afsluiten. Moet nog wel meer uitzoeken of hij het echt goed doet in alle omstandigheden.

Ik ga nu de messagepack-binnen-haal-treads en verwerk tread weer aanzetten. De create thread aanroep crashte, dus even uitzoeken waar de fout zit,

De vriendelijke groet Jan Marco

Hoi RGJ,

De threads doen nu ook wat. Ik zie dat “port 2090 tcp incoming” ook werkt.

Nu ga ik uitzoeken wat wel en (nog) niet werkt. Ik zal public adres even moeten veranderen en via mijn firewall door laten routeren op mijn Windows PC,

De vriendelijke groet Jan Marco

Hoi RGJ,

gnunet heeft een win32 versie uitgebracht:

http://ovmj.org/GNUnet/download/win/Setup-0.6.6.exe

Als achtergrond info kan je een beetje zien hoe het werkt.

Ik heb uit gnunet een (groot) deel van de code gehaald die ik op Linux en Windows werkend ga maken.

De vriendelijke groet Jan Marco

Hoi RGJ,

Op windows krijg ik nu ook UDP packets binnen. Het verwerken van deze messagepacks gaat nog wel fout. Ik heb al wel 7 messagepacks kunnen verwerken.

Als bovenstaande fout er uit is dan doet hij op Linux ongeveer hetzelfde als op Windows.

Hierna gaan “connecten” naar andere peers met een sql berichtje. Ik ga voor deze sql berichtje gewoon beginnen met een kopie van een Helo bericht.

De vriendelijke groet Jan Marco

Hoi RGJ,

Deze versie werkt UDP op Linux en Windows. Linux geeft wel “CRC errors” bij de messagespacks. TCP thread staat wel aan, echter ik heb de code uitgezet, want hij crasht ergens.

De vriendelijke groet Jan Marco

Appendix Voorbeelden:

mysql> select messagepackSN, senderidentity_asci,senderip senderip,status from messagepack;
±--------------±---------------------------------±----------------±-----------+
| messagepackSN | senderidentity_asci | senderip | status |
±--------------±---------------------------------±----------------±-----------+
| 0 | MBVHTLK4DROE4O8H78QNQKS808M0VCK1 | 69.152.74.65 | proccessed |
| 1 | MBVHTLK4DROE4O8H78QNQKS808M0VCK1 | 69.152.74.65 | CRC_error |
| 2 | 7IFMNBOJ4OITDKEHNNM6E54J3ABJOHHG | 130.208.220.221 | CRC_error |
| 3 | AS2D0QVC5JS7RSHLS24FJ6TE78TL8VLD | 12.203.252.90 | CRC_error |
| 4 | MBVHTLK4DROE4O8H78QNQKS808M0VCK1 | 69.152.74.65 | proccessed |
| 5 | MBVHTLK4DROE4O8H78QNQKS808M0VCK1 | 69.152.74.65 | proccessed |
| 6 | 3597HH3RS7BGMP3K93SF6FFNOFT2031I | 68.62.125.217 | proccessed |
| 7 | AS2D0QVC5JS7RSHLS24FJ6TE78TL8VLD | 12.203.252.90 | CRC_error |
| 8 | MBVHTLK4DROE4O8H78QNQKS808M0VCK1 | 69.152.74.65 | proccessed |
| 9 | MBVHTLK4DROE4O8H78QNQKS808M0VCK1 | 69.152.74.65 | proccessed |
| 10 | 7IFMNBOJ4OITDKEHNNM6E54J3ABJOHHG | 130.208.220.221 | CRC_error |

ysql> select header_asci,senderip,senderport,protocol from helo;
±---------------------------------±----------------±-----------±---------+
| header_asci | senderip | senderport | protocol |
±---------------------------------±----------------±-----------±---------+
| MBVHTLK4DROE4O8H78QNQKS808M0VCK1 | 69.152.74.65 | 2086 | 17 |
| 3597HH3RS7BGMP3K93SF6FFNOFT2031I | 192.168.1.101 | 2086 | 17 |
| 3597HH3RS7BGMP3K93SF6FFNOFT2031I | 192.168.1.101 | 2086 | 6 |
| 7IFMNBOJ4OITDKEHNNM6E54J3ABJOHHG | 130.208.220.221 | 2086 | 6 |
| GN1MLHC6UBONIJC7CH0MF9CSK5HSAQ3V | 192.168.0.100 | 2086 | 6 |
| GN1MLHC6UBONIJC7CH0MF9CSK5HSAQ3V | 192.168.0.100 | 2086 | 17 |

Hoi RGJ,

UDP + TCP crashen niet meer.

Ik ga nu bezig om de database (helo en messagepack) in Filezilla client aan te koppelen.

De vriendelijke groet Jan Marco

Hoi RGJ,

Met filesystem-0.01.zip worden op Windows alle “C:” files in Mysql tabel “locate” gezet. Op Linux worden alle files van /usr in locate gezet.

In de Linux variant zit nog wel een fout namelijk de “symbolic link” files gaat hij cursief fout op.

De vriendelijke groet Jan Marco

Hoi RGJ,

Foonsearch (linux) heeft al een week gedraaid en 123617 messagepacks binnengehaald.

Ik zal de decryptie nog moeten aanzetten als een messagepack is ge-encrypted. Even de juiste sleutel van de peer in mysql erbij zoeken.

Even ter beeldvorming een sql messagepack berichtje kan een mailtje, file, jpg fileje, vraag voor een foondumptabel, etc. zijn. Eigenlijk wil je voordat je een messagepack verstuurt hem zippen en mogelijk hierna encrypten. Ontvangende peer in omgekeerde volgorde deze bewerking laten uitvoeren.

Ik heb net filesystem-0.02.zip op mijn ftp server gezet. Werkt wel mooi. Hij gaat alle files van c:\tmp\filesystem in mysql zetten.

Met select * from file where pathfileindex = 8; kan ik bij mij heel snel alle files van c:\tmp\filesystem\old3 laten zien. Het is mijn bedoeling om dit nu te gaan implementeren in filezilla source. Je browst straks in gepatchte filezilla op virtuele filesystems --)

De vriendelijke groet Jan Marco

Appendix A: Snelle (mysql) koppeling tussen de files en directory maken:

CREATE TABLE dir (
dirSN BIGINT(10),
pathdir VARCHAR(255),
pathdirpref VARCHAR(255)
);

Jan Marco / RGJ

Hele tijd is het stil geweest rond foonsearch / RING etc

Is er al enige progressie en indien zo, kan ik iets doen inzake testen van een applicatie.

bvd

Germ

Hoi Germ,

Hele tijd is het stil geweest rond foonsearch / RING etc

Het kost mij best veel tijd om de nieuwe technieken operationeel te krijgen. Hierna zullen deze technieken ook nog moeten gaan samenwerken —)

Is er al enige progressie en indien zo, kan ik iets doen inzake testen van een applicatie.

Ik ben vorige week begonnen met het prutsen aan de filezilla source code. Het is m.i. erg belangrijk om een mooie interface te hebben. Ik moet me nog wel wat inleren op het MFC programmeren. Het is wel iets anders wat ik goed ken.

Ik denk momenteel aan drie windows.

  1. file/database selectie scherm. Denk hierbij aan “Local site” van filezilla scherm. Je kan hierin op de drives/directories gaan browsen en onderaan wil ik graag een database icoon hebben. Op database icoon ik je dan op database en tabel gaan selecteren (“browsen”).

  2. Als je op het database icoon klikt kan je in het tweede selectiescherm op records gaan zoeken. Het resultaat wordt in output screen getoond. Je kan dit als het zoekscherm van Megafoon zien. Eigenlijk is 1) een speciale variant van 2). Als je naar de oude cdfoon kijkt had die 25 directories en 366 files. Als je bijvoorbeeld 5 miljoen files in 1 directory zou hebben dan is het zoeken niet zo gemakkelijk bij 1). Dan zou je met 2) moeten gaan zoeken.

  3. Output screen. Hier komt het zoekresultaat van 1) en 2) te
    staan. De kolommen zullen m.i. dynamisch aangemaakt moeten worden. Elke tabel heeft namelijk andere veldnamen.

Mogelijke visualisatie.

Germ, Jij hebt met het programma filesystem je filesysteem in MySQL staan. Het filesystem programma draait in de achtergrond met lage cpu utilization. Ook de icons van de drives zullen in mysql moeten worden opgeslagen. N.B. Momenteel ben ik bezig om uit te zoeken hoe dat laatste moet.

Ik zie in scherm 1) staat een computer met de naam “germ”. Als ik op germ klik kan ik op “jouw” (A:, C:, D:, E: ) filesysteem browsen, doordat ik de directories en filenamen, hashes en icons van jouw drives heb overgehaald uit jouw mysql server d.m.v. foonsearchd. N.B. Ook alle removeable disks (CDROM/DVD) die je hebt kan je allemaal in MySQL opslaan.

Onder filesysteem zal een database icoon komen met de naam “mysql”. Klik ik op mysql dan zie ik onder andere “foondump2004”. Klik ik op foondump2004 dan kan ik in de foondump tabellen gaan zoeken. Ik kan ook een file bij jou zoeken door in de tabel ‘file’ gaan zoeken in het zoekscherm 2).

Germ, Je snapt natuurlijk wel dat je ook op alle te benaderen peer’s of peers die je selecteert met de muis in scherm 1), of groepen van peer gelijktijd kan gaan zoeken,

De vriendelijke groet Jan Marco

P.S. In het MFC programma zal je ook nieuwe (foondump) records moeten kunnen opvoeren. Indien ze er opstaan zullen ze ook te benaderen kunnen zijn door de andere peers.

Hoi RGJ,

Ik zie dat mysql twee interessante producten heeft, namelijk query browser en administrator:

http://www.mysql.com/products/query-browser/

http://www.mysql.com/products/administrator/

Ik denk dat uit beide programma’s wel ideeën gehaald kunnen worden die je kan poorten in eigen programma. M.i. geven deze programma wel de denkrichting aan.

Ik zie dat beide in pascal zijn geschreven en niet in C. Ook wordt veel XML gebruikt. RGJ, Ik kan mij nog herinneren dat jij redelijk positief over XML bent. Ik denk dat XML het beste kan gebruiken als je een interface met de buitenwereld wilt hebben. Ik heb liever een SQL koppeling. De XML code in de files lijkt mij erg onderhoudsgevoelig.

Ik ben bezig om:

  1. de computer icon’s als root maken en daaronder de drive/maps te zetten. Best veel aan het prutsen om het werkend te krijgen. Ik denk aan om gelaagdheid in de peers (computer icons) aan te brengen. Je zet de publieke peers allemaal op dezelfde hoogte. Als je op mijn publieke peer (redbull) klikt dan klapt het open en zie je drie locale pc’s. Op deze lokale pc’s kan je weer het filesystem gaan “browsen”. N.B. Je browst alleen op het filesysteem zonder dat je de files kan bekijken. Je weet alleen wat de hash van de file is.

  2. De icons computer, A:, C:, E: in MySQl opslaan in het filesystem programma. In het programma foonsearch ze weer uit MySQL lezen.

  3. Als je een cdrom er in doet zal het filesystem programma deze cdrom/dvd moeten gaan scannen. RGJ, Kan op je zien wanneer een nieuwe cdrom er is gedaan? Aanhangen op een of andere procedure?

De vriendelijke groet Jan Marco

Antwoord op 3)
http://www.developersdex.com/csharp/message.asp?p=1111&r=3868698