//$ 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
}
}
}