Q1: Hvor finner jeg oppgaven og hvordan leverer jeg den?
Du kan laste oppgavene ned fra Inspera og du m? levere besvarelsen i Inspera. Selve oppgavene samt testdata, og etter hvert muligens noen filer som retter feil i prekoden finnes du p? github.
Q2: Administrative ting
Q2.1: Jeg kan ikke finne hjemmeeksamen i Inspera. Hva skal jeg gj?re?
Hvis du enten (a) har best?tt oblig 1 eller (b) ha best?tt obligene 1 og 2 i tidligere semestere, skal du ha rett til ? ta hjemmeeksamen i ?r. I tilfelle (a) er feilen antakeligvis v?r feil. Send epost til Jie med henvisning til gruppen din i Devilry (hvem har du levert sammen med etc.). I tilfelle (b) ligger feilen et annet steds. Send epost til studieinfo@ifi.uio.no, som vil pr?ve ? rette opp feilen.
Du kan sette i gang med oppgaven fra Github, men ikke vent med ? sende melding. Det tar tid ? fikse dette.
Q2.2: Hvis jeg st?r i hjemmeeksamen men ikke teorieksamen, kan jeg bruke delresultatet i 2024?
Nei. Hjemmeeksamen og teorieksamen m? best?s i samme semester.
Q2.3: Jeg kan se hjemmeeksamen til tross for styrk i oblig 2. Kan jeg levere besvarelsen?
Ja, men du kan ikke g? opp til teorieksamen, s? innsatsen er bortkastet.
Q3: Uklarheter
Q3.1: M? jeg implementere XMLtoRecord og BinaryToRecord?
Nei, men det er anbefalt. Det er en viktig oppgave ? finne ut om data lest fra en socket utgj?r en ufullstendig Record, en hel Record, eller til og med mer enn en helt Record. Det er anbefalt ? lage egne funksjoner som l?ser denne oppgaven.
Q3.2: M? jeg fylle hvert felt i struct Records ved innlesing?
Nei. Det er viktig for oppgaven at noen informasjonsdeler ikke er inkludert i hverken XML- er bin?r format: dette er viktig i ekte protokoller for spare b?ndbredde og prosesseringtid.
Hvis man mottar en Record fra nettet som mangler (for eksempel) group-informasjon, b?r men bruke "has_group=false;". Verdien av variablen "group" forblir udefinert. Hvis man mottar en Record som inkluderer group-informasjon, skal man sette "has_group=true;" og "group" skal settes til verdien.
Q3.3: Kan jeg forandre parametre og returverdier til funksjonene i connection.[ch]?
Nei, vi vil evaluere implementasjonene med antakelsen at disse forblir uendret. Men dere kan lage egne funksjoner enten i proxy.c eller i ny filer som dere legger til.
Q3.4: Kan min proxy finne ut hvilken type klient det er som kobler seg til?
Delvis.
B?de binSender, xmlSender og anyReceiver sender to bytes rett etter at TCP-forbindelsen til proxy er opprettet. Den f?rste byten er X eller B for type data de sender eller mottar. Den andre byten er en bokstav (A-Z) som indikerer identitet og som brukes for ? velge filnavn.
De informerer ikke om de er sendere eller mottakere, s? proxyen burde ikke antar hverken de ene eller det andre. Det skyldes at den opprinnelige idéen for oppgaven var at hver prosess skulle b?de sende og motta. Ideen ble forkastet for ? redusere omfang av oppgaven.
Q3.5: Kan jeg anta at alle klienter har ulike IDer?
Ja. Du trenger ikke ? h?ndtere situasjonen da flere sendere og mottakere senden den samme byteverdien for ? identifisere seg.
Q3.6: Hva gj?r proxyen hvis mottakeren av en melding ikke finnes?
Proxyen forkaster meldinger hvis mottaker ikke er koblet p? med kjent ID og type. Pass p? at det ikke oppst?r memory leaks.
Meldinger uten gyldig "dest"-felt skal proxyen ogs? forkaste.
Q3.7: Kan min proxy mellomlagre data p? disk?
Oppgaveteksten forbyr det ikke eksplisitt, dessverre. Oppgaven impliserer at proxyen skal videresende meldinger med en gang. Det er ikke hensikten med oppgaven at proxyen skal vente med konvertering og videresending.
Q3.8: Er det greit hvis rekkef?lgen av Records i mottakeren er annerledes enn i expected-filen?
Dette er problematisk. Den mest sannsynlige grunnen for dette er at du ikke h?ndterer alle klienter samtidig, men at du venter p? at en klient blir ferdig f?r du aksepterer den neste forbindelsen. En proxy med hendelsesl?kke burde tillate flere samtidige forbindelser.
Q3.9: Hvordan kan jeg test mottak av flere Records i sammen leseoperasjon, eller mottak av en ufullstendig Record?
Vi utvidet testdata med testene 9, 10 og 11.
Test 9 sender b?de XML og bin?rdata med sleep-tid 0 mellom Records.
Test 10 og 11 utvider situasjonen med en garanti for at minst en Record er fordelt p? flere leseoperasjoner p? login.ifi.uio.no: da er senderen erstattet med programmet "nc" (netcat), som bare sender bytes s? raskt som mulig. Test 10 sender XML, test 11 sender bin?r data.