mpstthree 0.1.17

A library implementing Multiparty Session Types for 2 or more participants
Documentation
//$ 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
        }
    }
}