Passa al contenuto principale

7. Aggiornamento di un'allocazione

Una transazione Refresh può essere utilizzata per (a) aggiornare un'allocazione esistente e aggiornare il suo tempo alla scadenza o (b) eliminare un'allocazione esistente.

Se un client desidera continuare a utilizzare un'allocazione, allora il client deve aggiornare l'allocazione prima che scada. Si suggerisce che il client aggiorni l'allocazione circa 1 minuto prima che scada. Se il client non desidera più utilizzare l'allocazione, allora dovrebbe eliminarla esplicitamente. Il client può aggiornare un'allocazione in qualsiasi momento per altri motivi.

7.1. Invio di una richiesta Refresh

Se il client desidera eliminare immediatamente un'allocazione esistente, include un attributo LIFETIME con un valore di 0. Tutte le altre forme della richiesta aggiornano l'allocazione.

La transazione Refresh aggiorna il timer tempo alla scadenza di un'allocazione. Se il client desidera che il server imposti il timer tempo alla scadenza su qualcosa di diverso dalla durata predefinita, include un attributo LIFETIME con il valore richiesto. Il server calcola quindi il nuovo valore di tempo alla scadenza nello stesso modo in cui lo fa per una transazione Allocate, con l'eccezione che una durata richiesta di 0 fa sì che il server elimini immediatamente l'allocazione.

7.2. Ricezione di una richiesta Refresh

Quando il server riceve una richiesta Refresh, la elabora come da sezione 4 più le regole specifiche menzionate qui.

Il server calcola un valore chiamato "durata desiderata" come segue: se la richiesta contiene un attributo LIFETIME e il valore dell'attributo è zero, allora la "durata desiderata" è zero. Altrimenti, se la richiesta contiene un attributo LIFETIME, allora il server calcola il minimo tra la durata richiesta dal client e la durata massima consentita dal server. Se questo valore calcolato è maggiore della durata predefinita, allora la "durata desiderata" è il valore calcolato. Altrimenti, la "durata desiderata" è la durata predefinita.

L'elaborazione successiva dipende dal valore della "durata desiderata":

  • Se la "durata desiderata" è zero, allora la richiesta ha successo e l'allocazione viene eliminata.

  • Se la "durata desiderata" è diversa da zero, allora la richiesta ha successo e il tempo alla scadenza dell'allocazione viene impostato sulla "durata desiderata".

Se la richiesta ha successo, allora il server invia una risposta di successo contenente:

  • Un attributo LIFETIME contenente il valore corrente del timer tempo alla scadenza.

NOTA: Il server non ha bisogno di fare nulla di speciale per implementare l'idempotenza delle richieste Refresh su UDP utilizzando "l'approccio stack senza stato". Le richieste Refresh ritrasmesse con una "durata desiderata" diversa da zero aggiorneranno semplicemente l'allocazione. Una richiesta Refresh ritrasmessa con una "durata desiderata" zero causerà una risposta 437 (Allocation Mismatch) se l'allocazione è già stata eliminata, ma il client tratterà questo come equivalente a una risposta di successo (vedere sotto).

7.3. Ricezione di una risposta Refresh

Se il client riceve una risposta di successo a una richiesta Refresh con una durata diversa da zero, allora aggiorna la sua copia della struttura dati dell'allocazione con il valore di tempo alla scadenza contenuto nella risposta.

Se il client riceve una risposta di errore 437 (Allocation Mismatch) a una richiesta di eliminazione di un'allocazione, allora l'allocazione non esiste più e dovrebbe considerare la sua richiesta come effettivamente riuscita.