//$ Original protocol //$ global protocol HandleDNSRequest(role Handler, role Regional) { //$ rec QueryResolution { //$ FindNearestZone(DomainName) from Handler to Regional; //$ choice at Regional { //$ ZoneResponse(ZonePID) from Regional to Handler; //$ Handler initiates GetZoneData(Handler, new Data); //$ continue QueryResolution; //$ } or { //$ InvalidZone() from Regional to Handler; //$ } //$ } //$ } //$ global protocol GetZoneData(role Handler, role Data) { //$ ZoneDataRequest() from Handler to Data; //$ ZoneDataResponse(RRTree) from Data to Handler; //$ } //$ Modified protocol global protocol HandleDNSRequest(role Handler, role Regional, role Data) { rec QueryResolution { FindNearestZone(DomainName) from Handler to Regional; choice at Regional { ZoneResponse(ZonePID) from Regional to Handler; ZoneDataRequest() from Handler to Data; ZoneDataResponse(RRTree) from Data to Handler; continue QueryResolution; } or { InvalidZone() from Regional to Handler; InvalidZone() from Handler to Data; Received() from Data to Handler } } }