Foonsearch

Hoi RGJ,

Gisteren het selecteren van een geluidskaart aangekoppeld. Het is mij over LAN-verbinding gelukt om 44.1 kHz Mono over te zenden naar een andere peer. N.B. Komende tijd zal capaciteit van WAN verbinding al hoger worden. Applicaties moeten hoogste aan kunnen, echter je moet het gemakkelijk kunnen terugzetten als concrete verbinding het niet aan kan.

Vandaag kijken naar het protocol tussen twee peers. Ik wil de remote geluidskaart kunnen besturen. Denk aan twee opties uit te gaan werken. De directe poort methode en de SAFMQ methode.

Om SAFMQ werkend te krijgen even het voorbeeld safmq.conf file bij safmq.exe kopiëren. Daarnaast de directory C:\var\safmq\queues aanmaken. Hierna kan je test.exe draaien. Bestaat de directory niet dan krijg je EC_FILESYSTEMERROR (Errorcode=12) fout.

Je kan MQ gebruiken voor Skype besturing maar ook voor het verzenden van mails aan andere peers. Denk ook aan dat je aan Funprice alle producten gaat vragen en dan een MQ bericht terugkrijgt met alle producten en actuele prijzen.

In de utilities directory staat ook de cliënt voor SAFMQ namelijk safmqc.exe. In mijn concept ga je de cliënt commando’s aan een tabel MQ hangen in controlgrid. Je gaat dus vanuit Windows MQ aansturen. Gewoon op MQ tabel gaan staan en met rechtermuistoets de MQ-commando gaan uitvoeren.

Je kan natuurlijk ook een Message gaan maken om een nummer op foondump te gaan zoeken. Lijkt mij leuk om uit zoeken hoe de forwarding van MQ werkt met zo’n type Query.

De vriendelijke groet Jan Marco

Appendix A: Test.exe

Test.exe
Durration: 92.834
Rate: 107.719 Messages per second.

Hoi RGJ,

SAFMQ werkt m.i. erg mooi —)

Om een bericht uit de queue te halen:

safmqc --retrieve safmq://admin:@localhost:9000/test

Label: Test Message
Message Class: USER
Message Priority: STANDARD = 0
Timestamp: Fri Feb 03 10:37:56 2006
Message ID: e31071be-eea7-4079-daa9-51d679c31cc1
Recipt ID: 00000000-0000-0000-0000-000000000000
Response Queue:

RGJ, Moet nog beter uitzoeken hoe het werkt. Mogelijk Extra “Label:” = “SQL Message” maken en resultaat naar Response Queue sturen.

De vriendelijke groet Jan Marco

Hoi RGJ,

Ben met de directe besturing van remote geluidskaart bezig. Je kan naar remote geluidskaart gaan luisteren (“babyfoon”). Besturing is ook nodig als je gaande weg op andere sample rate overgaat. Opzich lukt het wel. Wel een beetje bezig om het beter te structureren.

Volgende week de MQ variant SAFMQ Store and Forward Message Queue - CodeProject er in programmeren. Begin eerst om de besturing van de remote in MQ berichtjes te programmeren. In “Skype” zit ook message gedeelte wat m.i. ook erg geknipt is voor MQ. MQ is generiek en je dan daar m.i. alles in doen (foto’s, mails, updates van (foondump) records, hashes van files, etc).

Ik zag ook dat er een Opensource Skype variant is, namelijk http://www.openwengo.org/
Het programma heb ik geïnstalleerd en je moet een account aanmaken om het te kunnen gebruiken. Best wel een leuk programma. Ik zal openwengo ook proberen te gaan compileren. N.B. Openwengo bouwt gewoon Skype na.

Het volgende programma is gemaakt voor instant messages http://www.miranda-im.org/ Mogelijk kan het ook op MQ worden gezet. Ik heb wel vaker zulke programma’s gezien. InstantMesage/MQ lijkt mij de beste variant.

De vriendelijke groet Jan Marco

Hoi RGJ,

Ik zie dat openwengo in hoofdlijn twee protocollen gebruikt, namelijk RTP en SIP.

[quote]oRTP is a LGPL licensed C library implementing the RTP protocol (rfc1889). It is available
for most unix clones (primilarly Linux and HP-UX), and Microsoft Windows.
RFC 1889 - RTP: A Transport Protocol for Real-Time Applications
http://www.faqs.org/rfcs/rfc1889.html

eXosip is a GPL library that extend the capability of
the oSIP library. It aims to implement a simple high
layer API to control the SIP (
http://rfc.net/rfc3261.html
)for sessions establishements
and common extensions.

Once completed, this eXtended library should provide an
API for call management, messaging and presence features.

rfc that are to be implemented:
rfc3261: SIP
rfcxxxx: MESSAGE request.
rfcxxxx: SIMPLE support.

Zie ook http://savannah.nongnu.org/projects/exosip/[/quote]

RTP wordt gebruikt om de geluid- en video verbinding te faciliteren en SIP is het protocol om te bellen.

RTP zal je denk ik altijd wel nodig hebben, want geluid en video is tijdskritsch. M.i. kan SIP beter in MQ verpakt worden ( SAFMQ Store and Forward Message Queue - CodeProject ), want ik zie namelijk proxy en iptunneling. Daarnaast is MQ generiek.

De vriendelijke groet Jan Marco

Hoi RGJ,

Ik heb even een voorbeeld entry in OpenWengo opgezocht:

SIP address: maonchi@213.91.9.210
Status: Online/Offline
Nickname: maonchi
FullName: ANTOINE Manfredi
Country: FRANCE
City: GHISONACCIA

Foondump heeft meer velden. Ik heb mij nog niet zo in het SIP protocol verdiept. Mogelijk hebben de attributen niets met SIP te maken en kan je die zelf gaan invullen. Zelf zou ik ook graag Public Key als attribuut zien.

Sip adres lijkt m.i. een beetje op een email adres. Je vraagt een account aan bij Wengo en dan pas kan je wengo gebruiken, dus lijkt het op het Napster model.

De vriendelijke groet Jan Marco

Hoi RGJ,

Het is mij net gelukt om een deel van openwengo http://openwengo.org/ te compileren zonder de afhankelijkheden van boost en QT. Het videogedeelte heb ik niet meegenomen, want dat moet ik nog verder uitzoeken.

Het audiogedeelte is m.i. voldoende om het te gaan testen.

RGJ, Ik heb eerst de onderkant gecompileerd. Deze komen van Linux achtige projecten en handelen de RFC-protocollen. Hierna een paar dagen op de bovenkant gewerkt. De onderkant meegelinkt daarbij tevens de curllib-library als enige extra library instant gehouden.

Volgende week ga ik beginnen om http://www.codeproject.com/tools/ToDoList2.asp en gridcontrol te mergen. Hierna ‘mijn’ “openwengo-rip” er in proberen te hangen. Je krijgt een tabel (Excel) achtige Wengo-tabel en als je op rechtermuis klikt kan je operaties als ‘bellen’ gaan uitvoeren.

De vriendelijke groet Jan Marco

P.S. Ik zie wel dingen die ook bij Foondump een issue zijn. Denk hierbij aan attributen als mail-adres, verschillende telefoonnummers (thuis/werk), fax-nummer, etc.

Hoi RGJ,

In openwengo stuurt phapi.c SIP en RTP routines aan. Ik denk om naast deze protocollen, (SAF)MQ tussen de peers te positioneren.

Peer_1_Mic/speaker -Phapi <-> RTP/SIP/SAFMQ RTP/SIP/SAFMQ <-> phapi- Peer_2_Mic/speaker

RTP: A Transport Protocol for Real-Time Applications
SIP: Session Initiation Protocol
MQ: Message Queue IBM MQ - Wikipedia

De vriendelijke groet Jan Marco

Hoi RGJ,

Het is mij gelukt om de twee voorbeelden van controlgrid aan de praat te krijgen. Het ene programma crasht wel op XP, echter ga dat programma toch niet stoppen in een ander programma. Volgende week ga ik het andere controlgrid programma mergen met het todolist programma.

Morgen ga ik verder met het poorten van Wengo. Eerst ga ik het aan de praat maken, waarna ik het wengo programma in het todolist programma kan gaan aankoppelen.

De vriendelijke groet Jan Marco

Hoi RGJ,

Gisteren bezig geweest met het kijken naar integratie mogelijkheden van gridcontrol (
http://www.codeproject.com/miscctrl/gridctrl.asp
) en todolist (
http://www.codeproject.com/tools/ToDoList2.asp
).

Lijkt mij dat het wel in een scherm kan. Moet nog beter uitzoeken hoe het mogelijk is.

De vriendelijke groet Jan Marco

Appendix A directory structuur:

audiorip
database
filesystemd
MQ
ntpd
todolist
wengo
wget

Hoi RGJ,

Ik denk momenteel een beetje aan het Excel concept. Je hebt een programma window en daarin zitten (sub)windows met sheets. Een sheets heeft tabbladen. Analogie met MySQL: Sheet is database en tabbladen zijn de tabellen in een database. Als je tabblad ntp kiest kan je de operaties gaan uitvoeren op ntpd. Denk aan starten/stoppen van ntp demon of ntpd starten als service programma, etc. Whitesubscriber is tabblad van ‘sheet’ foondump.

Tabbladen en autofilter in controlgrid gaan maken zou best een mooie toekomstige functionaliteit kunnen zijn.

Ik heb vanmorgen zitten kijken of ik CgridCtrl en CtoDoCtrl class kan integreren. Ik wil todolist in subscherm van hoofdscherm krijgen gelijksoortig als gridcontrol, echter lukt niet zo snel, want todolist werkt op andere methode. Ik ben bezig om http://www.codeproject.com/useritems/DWinLib2BareApp.asp te bestuderen om te leren hoe hoofd/subschermen werkt. Voorbeeld al gecompileerd echter executeren geeft foutmelding als je iets in toolbar aanklikt.

Ik heb maar besloten om van todolist programma uit te gaan en gridcontrol er in op nemen. Todolist werkt dynamisch en is een compleet programma, daarentegen is gridcontrol alleen gespecialiseerd op maken van een grid (grid= Excel achtige tabel vorm scherm).

Controlgrid is een tabel oplossing. Todolist heeft een boomstructuur. Boomstructuur zou best wel iets kunnen zijn. Je laat met verschillende sql statements een boomstructuur. De uitdaging licht er in dat je de relaties op een visuele manier op scherm moet kunnen tonen. Specifiek: Je hebt in todolist een subtask welke onder task is gepositioneerd. Analoog heb je hoofdvestiging met onderliggend subvestigingen.

De vriendelijke groet Jan Marco

Hoi RGJ,

Gisteren naar http://www.codeproject.com/useritems/DWinLib2BareApp.asp gekeken. Ik heb het kunnen compileren en fatale fout gelokaliseerd en code uitgezet dat het niet meer crasht.

Wat ik zag is dat je toolbar operaties (bijvoorbeeld fileopen) in callback-structuur doet en als je later met muis er op gaat staan krijg je WM_COMMAND message en die zal de (file-open-operatie) callback weer gaan aanroepen.

Ben vandaag bezig geweest om complexiteit reductie in ToDoList door te voeren. Filter leuk bedacht echter kan m.i. beter in mysql worden gedaan.

De volgorde was:
ToDoList.cpp → ToDoListDlg.cpp → FilteredToDoCtrl.cpp → ToDoCtrl.cpp

Ik heb het omgezet naar:
Foonsearch.cpp → FoonsearchDlg.cpp → ToDoCtrl.cpp

(, waarbij Foonsearch.cpp = ToDoList.cpp, FoonsearchDlg.cpp = ToDoListDlg.cpp) :

ToDoCtrl.cpp is de class file die in de dockwindow het resultaat moet gaan tonen gelijksoortig als bij gridcontrol wordt gedaan.

Momenteel ben ik bezig om ToDoCtrlMgr.cpp er uit te halen. ToDoCtrlMgr wordt gebruikt om classes van ToDoCtrl.cpp op te slaan. Best veel aan het prutsen om van deze class af te komen. Ik probeer het zo voor te sorteren dat het op dezelfde manier als gridcontrol gaat werken.

De vriendelijke groet Jan Marco

Hoi RGJ,

Todolist is best wel compleet. Ben nu bezig om fprintf in todolistdlg.cpp te zetten. Door deze tracing kan ik het programma beter doorgronden. Volgende weekend ga ik todolist op database zetten. N.B. Ik ga het Todolist programma als kapstok gebruiken om mijn andere programma-tjes aan te sturen.

De vriendelijke groet Jan marco

Hoi RGJ,

‘Todolist programma’ zit precies in wat ik graag wil hebben —)

Ik heb de bovenste edit boxen veranderd in host, database, user en password.
Kost me best wat tijd om te begrijpen hoe het werkt. Todolist is best een goed framework om mee te beginnen.

Todolist gaat wel verder met ontwikkelen en ik kan niet aldoor de laatste source code gaan ‘pakken’.
Todolist gebruikt XML om data op te slaan en ik gebruik een echt database pakket.

M.i. kan je gemakkelijker samenwerken met andere peers door tabellen onderleng te gaan synchroniseren.
N.B. Om een bevriende peer een update van de cdfoon te geven kan je m.i. straks doen door 1 MessageQueue (MQ) berichtje naar deze peer te laten sturen.

Dynamische “Project naam” edit box ga ik veranderen in een SQL executie regel. Deze edit box kan je erg lange regel intoetsen.

De “bovenste edit boxen” zijn beperkt in aantal karakters, wat afhangt van grootte van de edit box.

De opzet voor een tussentabel staat ook in todolist. Ik ga in een tussentabel (in MySQL) zetten welke velden je hebt.
Welke eigenschappen een veld heeft. Ik zag dat bij een veld aangeeft op welke veld je gaat sorteren, als je er op klikt.

Normaliter sorteer je op kolom waarop je klikt. Echter kan dus ook op een ander veld worden uitgevoerd.

Een veld geeft aan wat voor font je gebruikt. D.m.v. tussentabel kunnen ‘andere’ programma’s zien dat een bepaald veld in een tabel een url, (wengo) sip adres, http adres, etc. is.
Ik zal naar Excel gaan kijken wat voor typen je kan definieren.

Je hebt m.i. tabellen waarvan de operaties geheel in het programma zitten. Denk aan hashen van file systeem files, ntp, mq, etc.

Daarnaast heb je tabellen met externe operaties. Bijvoorbeeld Postbank tabel heeft een postbank.dll die automatisch wordt geladen als je de operatie “laadt postbank gegevens” klikt.
Door gebruik te maken van externe dll’s hoeft het hoofdprogramma niet aldoor weer opnieuw gecompileerd te worden.

De vriendelijke groet Jan Marco

Hoi RGJ, Ter Info,

Todolist bestaat in hoofdlijn uit twee control blokken.

  1. static TDCCONTROL TDCCONTROLS[] =
  2. static TDCCOLUMN COLUMNS[] =

ad 1) de (edit) velden waarin je de veld waarden van een record in kan toetsen.

ad 2) het scherm met de velden (kolommen).

Ik ga het proberen dynamisch te maken door middel van een tussentabel.

Even een toekomstige voorbeeld: Je doet een MessageQueue (MQ) berichtje naar Albert Heijn om een enquete formulier. Hierna krijg je formulier terug (records in enquete tabel + tussentabel) en je vult het in en stuurt het (records met antwoord op de enquete vragen) terug naar de MQ manager van Albert Heijn site. In dit voorbeeld verwerkt de Albert Heijn site de resultaten. Mogelijk zou je ook peers kunnen hebben die de functie hebben van enquete sites. Laatste lijkt mij meer een onafhankelijker situatie. N.B. Misschien een beter oplossing stuur het resultaat naar het bedrijf waar het over gaat en een onafhankelijk enquete site.

De vriendelijke groet Jan Marco

Hoi RGJ,

De afgelopende dagen met docking bezig geweest. Voor docking zie ook http://www.codeproject.com/docking/dockwnd.asp

Ik zit te denken aan de volgende velden in hoofdprogramma en sub (docking) schermen.

Adres:
Host:
Database:
Tabel:
User:
Password:
SQL:
Execute:

De laatste is button de rest een edit box. Je kan deze velden in settings scherm wel of niet aanzetten in hoofd en/of subscherm. In een seperate programma ga in docking proberen op te bouwen. Moet nog meer gevoel er bij krijgen hoe het precies werkt.

Ik wil ook beginnen met integreren van safmq en foonsearchd. Eerst safmq op mysql zetten en dan samenvoegen met foonsearchd. Je kan dan met cliënt programma commando’s op foonsearchd uitvoeren.

De vriendelijk groet Jan Marco

Hoi RGJ,

Ben afgelopen dagen met portprogramming bezig geweest. Zie ook:

http://www.codeproject.com/internet/iocp.asp
http://www.codeproject.com/internet/SimpleIOCPApp.asp

Met laatste voorbeeld kan je string naar server sturen. De client haalt resultaat (karakters) op van server. Ik heb de volgende query in send gezet “SELECT * FROM white_subscriber limit 10;”.

In mijn prutswerk zie ik dat de client een paar blokken terugkrijgt. Ik zie dat de volgorde niet gelijk aan hoe het verzonden is geworden.

Ik ga het komend weekend het mergen met wat ik al in foonsearchd bij elkaar heb gesprokkeld.

De vriendelijke groet Jan Marco

Hoi RGJ,

Vandaag begonnen met het strippen van foonsearchd. Ik ga alleen udp en tcp protocol er in laten staan.

Ik ga de volgende records maken/aankoppelen. N.B. Onderstaande records stuur je naar andere peer of je krijgt ze van een andere peer.

Helo
Ping
Pong
Query
QueryResult

Om bestanden en output van (SQL) Query’s over te halen ga ik met het http protocol doen. Ik denk aan http://www.naughter.com/download/w3mfc.zip als server en wget als cliënt.

Als SQL query result in 1 packet kan dan via QueryResult packet, anders in QueryResult een tag met key teruggeven dat je hem kan halen via http protocol met een unieke key.

Message Queue er in programmeren lijkt mij ook wel handig, echter ik wil het eerst goed aan de praat krijgen. MQ zie ik meer als onderdeel van foonsearchd en w3mfc kan je in ander windows proces laten draaien.

Om netwerkkaarten te identificeren is het volgende project m.i. wel handig:
http://www.codeproject.com/internet/NetCnfgVersion2.asp

De vriendelijke groet Jan Marco

Hoi RGJ,

Best leuk om weer met poortprogramming bezig te zijn. Het is mij gisteren gelukt om een Helo udp packet naar een andere peer te sturen. Vandaag met een Ping bezig.

Het protocol bestaat het UDP-packet uit een p2p_HEADER gevolgd door “Ping Record” of “Pong record” of “Helo Record” en afgesloten door een “UDPMessage record”.

Wat mij opvalt is de ‘random’ poortnummer bij het versturen van een UDP-packet naar een andere peer. In mijn huidige voorbeeld 2508, 2525, 2533, 2545, etc. De andere peer ontvangt wel op standaard portnummer=2086.

Het is van gnunet afgeleid. Zie ook http://www.gnunet.org/protocol_p2p_core.php3?xlang=Dutch . Ik zie ook dat ze een fragment record hebben gemaakt als de output groter is dan mtu van het protocol.

RGJ, Ik ga verder met prutsen. Ik wil nog een Query, en Query-result gaan bouwen. Als het resultaat groter is dan mtu dan iets met fragment gaan proberen te programmeren. Eigenlijk wil ik grote bestanden ”/output van query’s” via http laten lopen.

Ik ga ook nog iets bedenken om public ip terug te melden via een pong. Dus je stuurt ping naar peer en krijgt public-ip adres (DNS-naam) van je peer terug via de bijbehorende pong record. Zie ook http://www.codeproject.com/internet/dns_resolver.asp

Op zich kan je complementair met gnunet gaan uitbreiden. Gewoon hogere p2p_HEADER identifiers kiezen als diegene die gnunet gebruikt voor bijvoorbeeld eigen varianten van PING/Pong records.

De vriendelijke groet Jan Marco

P.S. Ik heb al sinds enige tijd foonsearchd–demon draaien en ik heb daarbij al 5271 unieke ip-adressen van het gnunet netwerk verzameld. Sommige dagen krijg je 100 nieuwe ipadressen erbij.

Appendix Record formaten:

typedef struct
{
unsigned short size;
unsigned short requestType;
} p2p_HEADER;

typedef struct
{
unsigned short size;//size of the message, in bytes,
unsigned short isEncrypted;//Is the message encrypted?
int checkSum;//CRC checksum of the plaintext (network byte order)
HostIdentity sender;//(hash of public key)
} UDPMessage;

Hoi RGJ,

Ik heb net een record structuur proberen te fabriceren, zie ook bijlage p2p_PROTO_QUERY.

Door de binnen komende p2p_PROTO_QUERY record zal de verwerkingsthread een “MySQL thread query” afschieten. Het resultaat van de query zet je in blokken in een nog te definieren MySQL output tabel.

De grootte van de output blokken afhankelijk van mtu laten zijn. Ik zal een aparte thread in foonsearchd gaan maken die de “te verzenden blokken” gaat verzenden naar de andere peers.

De vriendelijke groet Jan Marco

Appendix p2p_PROTO_QUERYRESULT/p2p_PROTO_QUERY record:

p2p_HEADER header; //header.requestType=p2p_PROTO_QUERYRESULT/p2p_PROTO_QUERY, header.size= 52 + 20 + LengthIpAddressTo + LengthAddressReturn + LengthMessage + LengthSignature + LengthQUID<mtu;

HostIdentity ReturnTo; //HostIdentity returnTo;
int QueryNumber;
int SequenceNumber;
int TotalSequenceNumber;
char priority; //How important is this request (network byte order)
char importance; //The current rating of this content (in network byte order).
int ttl; //Time to live in cronMILLIS (network byte order)
int returnvalue;
__int64 size; //size message
__int64 offset;
unsigned short LengthMessage; //total length of (fragmented) message
unsigned short LengthIpAddressTo;
unsigned short PortTo;
unsigned short LengthAddressReturn;
unsigned short PortReturn;
unsigned short LengthSignature;
unsigned short LengthQUID;
------variable part-----------------------------------------
char Message[]; //The message that is send to foonsearchd
char IpAddressto[]; //ip to proccess SQL query
char IpAddressReturn[]; //ip where result of SQL query goes to.
char Signature[];
char QUID[];

Hoi RGJ,

Ik zie dat er een project is die UDP filetransfer realiseert, namelijk UDT: “A UDP-based Reliable Data Transfer Library”. Zie ook http://www.codeproject.com/internet/udt.asp

Mogelijk kan ik uit dit project iets halen —)

De vriendelijke groet Jan Marco