Foonsearch

Hoi RGJ,

Weer een stap verder met mijn gedachte.

Ik heb magic-mail in \gui gekopieerd en daarna nog een keer in de pop3d subdirectory.
Ik ga de magic-mail programma in de pop3d directory de (gewone) pop3 mailboxen uitlezen en de mails enqueue-en naar de queues die je hebt opgegeven. N.B. De eindsituatie wordt het uitlezen van de pop3 accounts onderdeel van foonsearchd.c en de rest onderdeel van het gui hoofdprogramma.

De magic-mail programma in \gui directory ga ik de mail queues uitlezen die je hebt opgegeven. Het tonen van de mails op scherm is nog niet er mooi gemaakt. Omdat een (“safMQ”) queue generiek is kan je ook andere queues (nieuws, agenda, etc) straks makkelijk gaan uitlezen. In het hoofdprogramma ook de queues op de remote peer aan kunnen maken.

RGJ, Ik werk nu een specifiek geval uit om straks iets generieks te kunnen maken.

De vriendelijke groet Jan Marco

P.S. Bovenstaande komt neer op het maken van een postbus op een remote peer en daarna het uitlezen van de berichten op de postbussen die je hebt “aangemaakt”.

Appendix Map \gui

1: About
2: debug
3: foonsearchd
4: fs
5: HLP
6: htmlhelp
7: ntpd
8: pop3d
9: RES
10: safmq

Ad 1) About vind ik altijd moeilijk, zit altijd in een programma.

Ad 4) De MQ commando-line client heb ik een “fs” directory gedaan. Mijn bedoeling is om "fs [options] " command-line commando’s te gaan maken.

Ad 5/6) Mogelijk kan je beter een help in een Wiki achtige tool gaan bouwen.

Ad 7) Ntpd gaat als het in de juiste gestripte vorm is naar foonsearchd.c

Ad 8 ) Ik ben nu bezig om mails van een mail box te lezen en deze te gaan enqueue-en in een mail queue.

Ad 10) Een tijdelijke directory waar de safmq server in staat. Ik ga de safmq server in foonsearchd.c inbouwen. Mijn bedoeling is om per safmq client commando om te gaan zetten. Als alle SafMQ commando gepoort zijn dan kan het programma weg worden gegooid.

Hoi RGJ,

Ik zie in Magic Mail http://mmm3.sourceforge.net/ weinig MIME code, dus even een andere project gevonden, namelijk http://www.codeproject.com/internet/mimecpp.asp

Ik ga deze even inbouwen om mails te decoderen. Mimecpp werkt m.i. wel ingeheugen. Grote berichten mogelijk iets op filesysteem er tussen bouwen.

De vriendelijke groet Jan Marco

Hoi RGJ,

De voordelen van een database: Zie ook http://www.codeproject.com/gen/design/DatabaseMailQueue.asp

[quote]Advantages of using a database:

Transactional integrity
Concurrency control
Failure recovery
Scalable
Easy to code
Statistics/Reporting
Batching[/quote]
Het project heeft het niet zo uitgewerkt. Lijkt mij wel een goed opsomming van de voordelen.

Ik zie dat Magic Mail de MIME commando wel decodeert in Mailbox.cpp. Je hebt per mail een adresruimte. De zaken worden via Mime gescheiden. Voor de query(Result) adresruimte heb ik ook een afscheiding nodig. Mogelijk Mime constuctie of iets anders bedenken. Nadeel van Mime is de 64 karakter conversie (overhead) bij het overzenden van een file.

In Magic Mail heb je ook de Recieve() constructie (“MFC”) net zoals ze bij FileZilla gebruiken. Als het straks goed werkt ga ik het voor demon gedeelte naar tcp poortprogramming terugzetten zoals ik ook in Foonsearchd.c “gebruik”. Kan je m.i. ook makkelijk omzetten naar Linux.

De vriendelijke groet Jan Marco

Hoi RGJ,

“Mijn” dns naam 123456-a.ensch1.ov.home.nl en ipnummer “00.11.222.33” zal in Subscriber moeten staan. Pop3d source kijkt of hij hem kan vinden in Subscriber, zoniet dan stuur je een mailtje naar de afzender om het te laten opnemen.

Ik ben al een paar dagen bezig. Je gaat eerst met een “List” commando lezen hoeveel maitjes je hebt en hoe groot ze zijn. Hierna ga je ze ophalen en in blobveld zetten. Hierna ga je ze mogelijk in een file op filesysteem verwerken door info er uit te halen en in een andere tabel onder te brengen. Hierna gaat een andere thread ze enqueu-en naar (remote) mail queue.

In appendix A staat een voorbeeld mailtje. Je moet op de vetgedrukte woorden gaan scannen. Je kan de weg ook opslaan waar mailtje langs is gegaan via de “Recieved: From” keywords. Deze in een subtabel er onderhangen. Wel wie het verstuurd heeft en de ontvanger van het mailtje in de hoofdtabel ook opnemen. Eigenlijk heel veel extra info opslaan, echter alleen de relevante belangrijke info gaan enqueue-en. Als later details wilt weten dan in de “pop3d tabel” gaan zoeken.

De spam-ers zullen m.i. geen valide ipnummers/dns-hostname gaan opnemen in Subscriber.

De vriendelijke groet Jan Marco

Appendix A: voorbeeld mail bericht:
Return-Path: jm.alkema@home.nl
Original-Recipient: rfc822;jm.alkema@worldonline.nl
Received: from mail-mx-00.tiscali.nl (195.241.79.167) by mail-7-nl.tiscali.it (7.3.116) id 44EA99D100B98628 for jm.alkema@worldonline.nl; Sun, 10 Sep 2006 11:00:11 +0200
Received: from [213.51.146.201] (helo=smtpq2.tilbu1.nb.home.nl) by mail-mx-00.tiscali.nl with esmtp (Tiscali http://www.tiscali.nl) id 1GMLAh-0000GQ-7q for jm.alkema@worldonline.nl; Sun, 10 Sep 2006 11:00:11 +0200
Received: from [213.51.146.188] (port=54785 helo=smtp3.tilbu1.nb.home.nl) by smtpq2.tilbu1.nb.home.nl with esmtp (Exim 4.30) id 1GMLAg-0007TX-Tk for jm.alkema@worldonline.nl; Sun, 10 Sep 2006 11:00:10 +0200
Received: from 123456-a.ensch1.ov.home.nl ([00.11.222.33]:1253 helo=acer9d3d1aeb8d) by smtp3.tilbu1.nb.home.nl with smtp (Exim 4.30) id 1GMLAf-0006Ut-DB for jm.alkema@worldonline.nl; Sun, 10 Sep 2006 11:00:09 +0200
From: “jan marco alkema” jm.alkema@home.nl
To: jm.alkema@worldonline.nl
Subject: FW: http://www.flitspaal.nl mailinglijst van 06-09-2006
Date: Sun, 10 Sep 2006 11:00:05 +0200
Message-ID: NIEAIKGCKHMHHGEIOCMCKENNCFAA.jm.alkema@home.nl
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary=“----=_NextPart_000_0000_01C6D4C8.45D1C180”
X-Priority: 3 (Normal)
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0) Importance: Normal
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2962
X-AtHome-MailScanner-Information: Neem contact op met support@home.nl voor meer informatie
X-AtHome-MailScanner: Found to be clean This is a multi-part message in MIME format.

------=_NextPart_000_0000_01C6D4C8.45D1C180
Content-Type: text/plain; charset=“iso-8859-1”
Content-Transfer-Encoding: 7bit

Bericht 1

------=_NextPart_000_0000_01C6D4C8.45D1C180
Content-Type: text/html; charset=“iso-8859-1”
Content-Transfer-Encoding: quoted-printable

Bericht 2

------=_NextPart_000_0000_01C6D4C8.45D1C180–

Hoi RGJ,

[quote]mysql> select lastname from white_subscriber s,geo_postalcoords p where p.postalcode=s.postalcode and wgs84_lat > 52.220 and wgs84_lat <= 52.24070418 and wgs84_lon > 6.89261733 and wgs84_lon <= 7.0;

8194 rows in set (1 min 13.49 sec)[/quote]
Duurt bij mij 3 minuten en 25 seconden.

Levert nu 8643 records op en kost 8 minuten door gebruik te maken van een dubbele-index op de gps-coordinaten.

Ik ga nog wel uitzoeken waarom het zoeken op de gedenormaliseerde gps-coordinaten zolang duurt.

De vriendelijke groet Jan Marco

Hoi RGJ,

De send to pop3-server sequence van Magic Mail:

[quote]USER mailaccount
PASS password
NOOP
UIDL
LIST
TOP 9 0
.
.
TOP 1 0
RETR 9
QUIT[/quote]

Ik zie dat er ook een project is die een simpele constructie heeft gemaakt om naar pop3 te gaan, namelijk http://web6.codeproject.com/internet/spamkiller.asp?df=100
Hij crasht bij mij nog wel. Aankomend weekend er even naar kijken waar het fout gaat.

Waarom ‘tunneling’ van mail?

  1. spam-ers tegengaan.
  2. testen van de Queue-techniek.
  3. Op messages (mailtjes) zou je ook actie kunnen zetten, als akkoord, geweigerd, gelezen, etc. N.B. Gaat eigenlijk richting transacties. Ingaan op een aanbod o.i.d.
  4. De bedoeling is dat je in het concept gaat werken en dan worden bijvoorbeeld alle mails automatisch ge-encrypt

De vriendelijke groet Jan Marco

Hoi RGJ,

Ben weer stapje verder. Ik ga ook een pop3server maken. Lijkt mij niet al te moeilijk. Kan dan gewoon met outlook kijken of het goed werkt. Dus voor mij wordt de opbouw in eerste instantie:
pop3.worldonline.nl → pop3d → database → pop3server → outlook.

Ander punt is dat ik vandaag google earth heb gezien. Je kan je huis goed zien op de foto. In Amerika kan je ook restaurant, benzine station, geldautomaten op de foto zien. Lijkt mij wel een mooie integratie mogelijk met onze info. Zie ook Google Maps Deconstructed | CFIS en http://www.codeproject.com/useritems/googlemap.asp

De vriendelijke groet Jan Marco

P.S. Vanweekend ook met het GUI programma van Magic Mail verder om te leren hoe het werkt. Morgen neem ik mijn laptop weer mee naar het werk om s’morgen een uurtje naar Wengo (Voice over Ip programma) te gaan kijken. Het duurt bij mij vaak wel even voordat ik door heb hoe het werkt.

Hoi RGJ,

Vanavond ga ik weer verder met Wengo. Phapi.c ga ik renamen naar phone.c. Phapi.c roept routines aan die oorspronkelijk van Linux platform komen. Deze (sip) routines kan je makkelijk compileren in Visual Studio.

Daarnaast hebben ze bij Wengo classes gemaakt aan de bovenkant veel met een grafische interface (qt?). Deze interface/library komt m.i. oorspronkelijk ook uit linux. Ik ga de logica van bovenliggende classes naar phone.c 'poorten. N.B. phone.c gewoon met een main() er in programmeren.

De vriendelijke groet Jan Marco

Hoi RGJ,

Ik zag vanmorgen ook dat Wengo http (poort 80) gebruikt. Mogelijk om info van de rootserver te gaan halen. Ik wil deze verbinding het liefst poorten in het foonsearchd.c queue techniek. Je hebt straks geen 1 rootserver maar (in principe) miljoenen rootservers.

Ik ga nu even verder met Voice over IP (wengo) om straks de queue techniek beter te kunnen programmeren.

De vriendelijke groet Jan Marco

Hoi RGJ,

Ik zie dat Wengo naar je browser gaat als je een http request doet naar de wengo server. Ik heb natuurlijk wget source om naar andere server te gaan. Met wget krijg je geen afhankelijkheid met het Explorer programma.

Nu zit ik er zo in dat ik geen koppeling naar de wengo server wil hebben als dat mogelijk is natuurlijk.

Momenteel ben ik bezig met het weggooien van de Wengo specifieke files. Ik wil alleen het bellen stuk overhouden. Voor de gui ga ik het project van todolist gebruiken aangevuld met het controlgrid project.

De vriendelijke groet Jan Marco

Hoi RGJ,

In “Wengo” heb ik nog een 6-tal “curl dependencies”:
curl_easy_cleanup
curl_easy_getinfo
curl_easy_perform
curl_easy_setopt
curl_easy_init
curl_easy_get_sock

Momenteel bezig om bovenstaande specifieke procedures uit de curl distributie te halen en te injecteren in de source. Je moet m.i. controle over het gehele programma hebben, dus geen kleine uitstapje naar libcurl.dll gaan maken. Vooralsnog gebruik in alleen maar libeay32.dll en ssleay32.dll’s. Ik weet dat er een hoop standaard Windows dll’s worden aangeroepen.

De volgende standaard dependencies houd ik momenteel over:

Ws2_32.lib lib\libmysql.lib Winmm.lib .\wengobasis\wengobasis.lib Iphlpapi.lib

Ik zag dat er twee stunnels in zijn geprogrammeerd. De ene in de Wengobasis.

Men gebruikt ook URLDownloadToFile Microsoft Learn: Build skills that open doors in your career om een file van de wengo server te downloaden.
De vervolgrichting is dat ik de code al meer ga aanzetten en de specifieke wengo server code er uit ga halen en ga vervangen door MQ achtige technieken.

De vriendelijke groet Jan Marco

Hoi RGJ,

De afgelopen weekend geheel bezig geweest met de source code van libcurl.dll. Ik heb nu 1 file (curl.c 26555 source regels), echter het laden van de openssl routines moet ik nog ‘aankoppelen’. De opbouw is dat je naar telnet, ftp(s), http(s) gaat via de procedure CreateConnection(). Ik zie veel ftp code in verhouding tot de andere protocollen. N.B. Ik geloof niet dat Wengo de ftp protocol gebruikt.

Wat ik geleerd heb van libcurl is dat ze de dns-aanroepen cash-en. De code lijkt denk ik veel op wget. Mogelijk in de toekomst gaan integeren en in MySQL onderbrengen. Enerzijds kan je de record structuur proberen om te zetten naar een tabel in MySQL anderzijds zou je de debug/error/warning/info teksten in MySQL kunnen onderbrengen. Je stelt dan applicatie in op een bepaald land en krijgt dan de teksten die bij het land (staal) horen.

Ik probeer het wel eerst met Wengo aan de praat te krijgen. Ik denk niet dat http proxy het zal overleven. Ik kan natuurlijk niet in de toekomst kijken, wat het beste is.

Eerst probeer ik de Wengo-rip zo te compileren dat ik geen fouten meer krijg. Hierna code aan gaan zetten dat hij de proxy gaat gebruiken en het SIP-protocol. Omdat ik twee stunnels zag zou het best kunnen zijn dat het SIP protocol ook op bepaalde portnummer werkt, dus een soort servertje is. In begin wil ik eerst kijken hoe het werkt. Mijn intentie is natuurlijk om niet te veel poorten open te zetten naar internet. Als SIP in foonsearchd.c protocol zou passen zou ik erg blij van worden. Mogelijk eerst een ‘tunneling’ gaan maken. Dus het zetten van SIP queries/queryresults in Foonsearchd.c queries/queryresults formaat.

Het geluidsgedeelte ken ik al wel, ze gebruiken namelijk portaudio --)

De vriendelijke groet Jan Marco

Hoi RGJ,

Ntpd draait al een paar dagen. Ik heb op 19 Sep 18:21:31 even 1 seconden time verzet. Hij gaat dan aldoor tijd weer aanpassen. Zie bijgevoegde appendix. In ntpd zit ook een driftfile concept. Ik geloof dat dit een file is dat aangeeft de drift (verschil) ten opzichte van verschillende timeservers. Stel dat er een halve seconden verschil zou zitten tussen tijd met Timeserver A in Amsterdam en Timeserver B in Arizona. Als mijn pc gaat synchroniseren tussen deze timeservers gaat hij aldoor een halve seconden verspringen. M.i. zou je de GPS coordinaten mee moeten nemen waar de timeserver staat en de pc die je op tijd wil synchroniseren.

RGJ, Ik ga vandaag nog opzoek naar andere timeservers. Programma moet natuurlijk niet alleen met de 3 timeservers in Arizona (zelfde universiteit) werken.

De vriendelijke groet Jan Marco

P.S. Wat ook goed is van Ntpd is dat hij minder logregels gaat produceren als tijd niet hoeft te worden gesynchroniseerd.

Appendix A:

19 Sep 18:21:31 ntpd[3656]: time reset -0.890755 s
19 Sep 18:21:31 ntpd[3656]: frequency error -683 PPM exceeds tolerance 500 PPM
19 Sep 18:25:49 ntpd[3656]: synchronized to 128.196.133.233, stratum 2
19 Sep 18:34:24 ntpd[3656]: synchronized to 128.196.120.37, stratum 2
19 Sep 18:40:56 ntpd[3656]: synchronized to 128.196.133.233, stratum 2
19 Sep 18:45:12 ntpd[3656]: synchronized to 128.196.120.37, stratum 2
19 Sep 18:46:18 ntpd[3656]: time reset +0.561877 s
19 Sep 18:50:46 ntpd[3656]: synchronized to 128.196.120.37, stratum 2
19 Sep 19:00:22 ntpd[3656]: synchronized to 128.196.133.233, stratum 2
19 Sep 19:15:38 ntpd[3656]: synchronized to 128.196.120.37, stratum 2
19 Sep 19:23:09 ntpd[3656]: time reset +0.197282 s
19 Sep 19:27:34 ntpd[3656]: synchronized to 128.196.120.37, stratum 2
19 Sep 19:41:34 ntpd[3656]: synchronized to 128.196.132.177, stratum 2
19 Sep 19:46:57 ntpd[3656]: synchronized to 128.196.120.37, stratum 2
19 Sep 20:08:23 ntpd[3656]: synchronized to 128.196.133.233, stratum 2
19 Sep 20:19:04 ntpd[3656]: synchronized to 128.196.120.37, stratum 2
19 Sep 21:29:34 ntpd[3656]: time reset +0.171847 s
19 Sep 21:33:58 ntpd[3656]: synchronized to 128.196.132.177, stratum 2
19 Sep 21:42:32 ntpd[3656]: synchronized to 128.196.120.37, stratum 2
19 Sep 22:22:18 ntpd[3656]: synchronized to 128.196.133.233, stratum 2
19 Sep 22:47:52 ntpd[3656]: synchronized to 128.196.120.37, stratum 2
19 Sep 23:05:59 ntpd[3656]: synchronized to 128.196.133.233, stratum 2
19 Sep 23:30:48 ntpd[3656]: synchronized to 128.196.120.37, stratum 2
20 Sep 01:30:21 ntpd[3656]: synchronized to 128.196.133.233, stratum 2
20 Sep 01:31:09 ntpd[3656]: time reset +0.135719 s
20 Sep 01:35:26 ntpd[3656]: synchronized to 128.196.120.37, stratum 2
20 Sep 01:45:10 ntpd[3656]: synchronized to 128.196.133.233, stratum 2
20 Sep 02:02:19 ntpd[3656]: synchronized to 128.196.120.37, stratum 2
20 Sep 03:12:41 ntpd[3656]: time reset +0.200518 s
20 Sep 03:16:59 ntpd[3656]: synchronized to 128.196.132.177, stratum 2
20 Sep 03:23:31 ntpd[3656]: synchronized to 128.196.120.37, stratum 2
20 Sep 03:37:41 ntpd[3656]: synchronized to 128.196.132.177, stratum 2
20 Sep 03:52:27 ntpd[3656]: synchronized to 128.196.133.233, stratum 2
20 Sep 04:03:02 ntpd[3656]: synchronized to 128.196.120.37, stratum 2
20 Sep 04:03:21 ntpd[3656]: time reset -0.206200 s
20 Sep 04:11:09 ntpd[3656]: synchronized to 128.196.120.37, stratum 2
20 Sep 05:26:44 ntpd[3656]: synchronized to 128.196.133.233, stratum 2
20 Sep 05:30:26 ntpd[3656]: time reset -0.132204 s
20 Sep 05:34:52 ntpd[3656]: synchronized to 128.196.133.233, stratum 2
20 Sep 05:51:12 ntpd[3656]: time reset -0.359534 s
20 Sep 05:55:48 ntpd[3656]: synchronized to 128.196.133.233, stratum 2
20 Sep 06:03:18 ntpd[3656]: synchronized to 128.196.132.177, stratum 2
20 Sep 06:06:35 ntpd[3656]: synchronized to 128.196.120.37, stratum 2
20 Sep 06:09:39 ntpd[3656]: synchronized to 128.196.133.233, stratum 2
20 Sep 06:09:47 ntpd[3656]: time reset +0.765138 s
20 Sep 06:14:14 ntpd[3656]: synchronized to 128.196.120.37, stratum 2
20 Sep 06:22:51 ntpd[3656]: synchronized to 128.196.133.233, stratum 2

De ‘drift’ is het verschil tussen je systeemklok en de NTP tijd.

Hoi RGJ,

Bedankt voor jouw correctie/aanvulling --)

Op Windows is het mij nog niet gelukt om de drift file aan te zetten. Ik heb alleen geprobeerd met de opties in command line/ntp config file. Nog niet naar de driftcode gekeken. Einddoel is drift file ook in MySQL op te nemen.

De vriendelijke groet Jan Marco

Hoi RGJ,

Ik ben momenteel bezig om de logica uit Wengo te gaan halen. De GUI programmering ga ik niet gebruiken behalve de logica op hoofdlijn. Ik probeer zo snel mogelijk Voice over Ip aan de praat te krijgen. Hierna verder met queue techniek programmeren, waarna ga ik naar de GUI ‘kijken’.

Heb je dat klaar kan je een online agenda er aan gaan koppelen. De kapper gaat zijn vrienden (lees klanten) in Subscriber aanklikken. De vrienden kunnen dan alleen in de agenda van de kapper kijken voor een afspraak. Guests (lees nieuwe klanten van de kapper) kunnen ook wel connectie met de online agenda maken, echter kunnen een andere beperkte view zien. Je wilt m.i. als kapper niet dat andere kappers (lees concurrenten) gaan kijken hoeveel klanten je hebt. Een kapper levert ook diensten (soort onzichtbare product) en dat kan je natuurlijk ook in een product database er bij koppelen. Je kan als klant direct zien wat het gaat kosten.

De onderkant gebruikt Wengo Linux projecten. Ik heb daar naar gekeken en deze code kan ik best goed gebruiken. Er zit code in om de “best interface” te kunnen bepalen. In eXosip_guess_ip_for_via gaat men connecten naar ip adres “217.12.3.11” (www2.vip.ukl.yahoo.com) om “best interface” op je local peer te kunnen bepalen. Uit een andere project heb ik al eens code gehaald om de interfaces tabel te vullen in MySQL. Doel om dit in MySQL te zetten is om de generieke databasebrowser het te laten tonen en procedures te kunnen starten vanuit deze browser die specifiek voor deze interfaces zijn. Denk aan uitzetten van interface, etc. Eigenlijk ‘sprokkel’ je de code bij elkaar om iets moois te maken.

De vriendelijke groet Jan Marco

Hoi RGJ,

In Wengo source die ik nu aan het testen ben is 15000 regels, valt dus mee. De curl afhankelijk vraagt hij momenteel niet om.

Momenteel zit ik te prusten om de tunnel in Wengo aan de praat te krijgen. Ik zie dat hij in stunInitServer() vier sockets opent. Moet nog uitzoeken hoe het werkt.

Voor voice compressie kan je ook http://www.speex.org/ gaan gebruiken. In Speex: A free codec for free speech worden de verschillende met andere compressie technieken aangeven.

Als het straks werkt ga ik Wengo rename naar “phone”. Ik ben tevens bezig om de source naar standaard c (.c) om te zetten i.p.v. (.cpp). Want de demons moet je met standaard c gaan maken om ze gemakkelijk te kunnen poorten naar bijvoorbeeld Linux. Daarentegen mag de GUI mag wel met zoveel mogelijk windows afhankelijke code worden gemaakt.

De vriendelijke groet Jan Marco

Hoi RGJ,

In wengo-0.00.zip heb ik alle source die nodig is voor de Wengo rip gestopt. Het laden van de openssl procedures heb ik net klaar.

Ik wil Voip eerst aan de praat krijgen en hierna de curl afhankelijkheid er uit halen. Hoe de tunnel werkt moet ik ook nog uitzoeken. Ik hoop volgend weekend het werkend te hebben.

De vriendelijke groet Jan Marco

Hoi RGJ,

Ik zag dat XP standaard ntp heeft aanstaan. Op gezette tijden wordt het gesynchroniseerd met time.windows.com. Ik heb getest met goed gevolgd dat “mijn” ntp programma ook werkt met de timeserver van microsoft. Ik kan uit het ntp programma nog veel zaken gaan halen die ik nog mis in foonsearchd.c. In een configuratie optie in MySQL kan je straks aangeven of je wel of niet de ntp time thread laat opstarten.

User Defined Function (UDF) Zie ook MySQL User Defined Functions - CodeProject

UDF zijn dus door de gebruiker ingebouwde functies in MySQL.

Richard, Misschien heb jij er een beter beeld bij. Je weet dat ik een programmatje heb gemaakt om een mysql query naar een andere peer te sturen en het resultaat weer terug te laten sturen. Het programmatje gebruikt veel mysql om het voor mekaar te krijgen.

Puzzeltje waar ik momenteel aan denk zou je niet de netwerkquery concept in User Defined Functions kunnen gaan bouwen. Je gaat dan foonsearchd.c code in deze UDF gaan inbouwen. Ik zie voor mij dat je een andere type select definieert die op alle peers die de tabel hebben de query gaan uitvoeren en het totale resultaat komt dan op het scherm te zien welke de query heeft afgevuurd.

Nadeel wat ik zelf zie is dat foonsearchd.c wel meer database typen (Oracle, DB2, Sybase, MSSQL, etc.) zou kunnen gebruiken, echter als je het in mysql gaat onderhangen kan je haast geen andere database meer gaan gebruiken.

De vriendelijke groet Jan Marco

Hoi RGJ,

Vandaag weer verder met het GUI programma en Wengo programma. Voor het GUI programma heb ik todolist als voorbeeld gebruikt. Zie ook http://www.codeproject.com/tools/ToDoList2.asp Ik heb even twee tabellen in MySQL aangemaakt, namelijk ‘todolist’ en ‘todolistjob’. De bedoeling is dat je deze twee tabellen inleest en dan het GUI programma de juiste velden op het scherm zet. Ik denk dat ik een tussen tabel nodig heb. Einddoel is een generieke database browser concept. Afhankelijk van welk database/tabel je inlaadt kan je andere programmatjes opstarten. Op subscriber zet je VoiceOverIp (Wengo) bellen programmatje.

Ik probeer eerst een veld aan de praat te krijgen. Todolist heeft een dynamisch structuur. Dynamisch structuur wordt gemapt op een class.

In void CToDoCtrl::DoDataExchange(CDataExchange* pDX) wordt bijvoorbeeld m_cbCategory (CAutoComboBox) gemapt aan IDC_CATEGORY met DDX_Control(pDX, IDC_CATEGORY, m_cbCategory);

Ik lees dat DDX_Control alleen in DoDataExchange de link maakt. Je wilt eerst een tabel kiezen en dan afhankelijke van de velden de dynamische structuur met velden opbouwen. Hierna in DoDataExchange de koppeling van de te tonen velden met de classes gaan maken. Dus voordat je class CToDoCtrl aanroept dan zal de tabel in MySQL al hebben moeten selecteren en weten uit hoeveel en welke type velden het bestaat. Dan dynamisch structuur genereren en dan kan je m.i. in CToDoCtrl::DoDataExchange() de map MySQL-veld met de overeenkomstig GUI format class gaan maken.

Even anders uitgelegd. Normaliter maak je statisch voor een veld een combobox aan in Visualstudio. Omdat ik niet vooraf in het programma vast wil programmeren welk type veld een mysqlveld is, ga ik bij het browsen op de tabel pas kijken welk type het veld is en dan dynamisch een AutoComboBox aanmaken als het een ComboBox veld is. AutoComboBox is een “eigengemaakte” Combobox. Het zal wel Combobox eigenschapppen overerven, echter heb hier nog niet zo naar gekeken.

Je zal wel denken waarom doe je zo moeilijk. Ik wil voorkomen dat ik voor elk tabel nieuwe classes moet gaan programmeren die veel source gelijk heeft aan andere tabellen. Of het gaat lukken wat ik wil weet ik nu natuurlijk nog niet.

De vriendelijke groet Jan Marco