class JVoiceXmlImplementationPlatform implements SpokenInputListener, SynthesizedOutputListener,
        TelephonyListener, ImplementationPlatform, Configurable {

    @Override
    public CallControl getCallControl() throws NoresourceError,
            ConnectionDisconnectHangupEvent {
        synchronized (this) {
            if (hungup) {
                throw new ConnectionDisconnectHangupEvent("caller hung up");
            }
            if (closed) {
                throw new NoresourceError("implementation platform closed");
            }
        }

        // In contrast to SystemOutput and UserInput the CallControl
        // resource may be used concurrently.
        // So we must not have a semaphore to avoid shared use.
        final String type = info.getCallControl();
        synchronized (telephonyPoolLock) {
            if (call == null) {
                final Telephony telephony = getExternalResourceFromPool(
                        telephonyPool, type);
                telephony.addListener(this);
                call = new JVoiceXmlCallControl(telephony);
                LOGGER.info("borrowed call control of type '" + type + "'");
            }

            return call;
        }
    }

      JVoiceXmlImplementationPlatform(
            final KeyedResourcePool<Telephony> telePool,
            final KeyedResourcePool<SynthesizedOutput> synthesizedOutputPool,
            final KeyedResourcePool<SpokenInput> spokenInputPool,
            final ConnectionInformation connectionInformation);
      JVoiceXmlImplementationPlatform(
            final KeyedResourcePool<Telephony> telePool,
            final KeyedResourcePool<SynthesizedOutput> synthesizedOutputPool,
            final KeyedResourcePool<SpokenInput> spokenInputPool,
            final BufferedDtmfInput bufferedCharacterInput,
            final ConnectionInformation connectionInformation);

}