public Vector<TSConnection> connect(TSDevice device, String destAddress,
			CSTAPrivate reqPriv) throws TsapiPrivilegeViolationException,
			TsapiInvalidArgumentException, TsapiInvalidPartyException,
			TsapiInvalidStateException, TsapiResourceUnavailableException,
			TsapiMethodNotSupportedException {
		if (this.provider.getCapabilities().getMakeCall() == 0) {
			throw new TsapiMethodNotSupportedException(4, 0,
					"unsupported by driver");
		}

		if (this.state != 32) {
			throw new TsapiInvalidStateException(3, 0,
					TsapiCreateObject.getTsapiObject(this, false), 1,
					this.state, "call not idle");
		}

		String devName = device.getName();

		if (((this.provider.getCapabilities().getSnapshotCallReq() == 0) || (this.monitorPending))
				&& (this.internalDeviceMonitor == null)) {
			try {
				device.addToCallsWaitingForConnectPostConditions(this);
				this.internalDeviceMonitor = device.setInternalMonitor(this);
			} catch (TsapiUnableToSendException tue) {
				device.removeFromCallsWaitingForConnectPostConditions(this);
				throw tue;
			} catch (Exception e) {
				log.error(e.getMessage(), e);
			}
		}

		MakeCallConfHandler handler = new MakeCallConfHandler(this, device,
				destAddress, 24);
		try {
			if (this.provider.getDeviceExt(destAddress) == 1) {
				recordVDNDomainEntry(destAddress);

				TSDevice tsDevice = this.provider.createDevice(destAddress);

				tsDevice.addToCallsWaitingForConnectPostConditions(this);
				tsDevice.setMonitor(false, true);
			}
			this.provider.tsapi
					.makeCall(devName, destAddress, reqPriv, handler);
			log.info("TSCall.connect: finished makeCall for Call ID "
					+ this.callID);
		} catch (TsapiInvalidStateException e) {
			throw e;
		} catch (TsapiInvalidPartyException e) {
			throw e;
		} catch (TsapiInvalidArgumentException e) {
			throw e;
		} catch (TsapiPrivilegeViolationException e) {
			throw e;
		} catch (TsapiResourceUnavailableException e) {
			throw e;
		} catch (TsapiPlatformException e) {
			throw e;
		} catch (Exception e) {
			if ((e instanceof ITsapiException)) {
				throw new TsapiPlatformException(
						((ITsapiException) e).getErrorType(),
						((ITsapiException) e).getErrorCode(),
						"makeCall failure");
			}
			throw new TsapiPlatformException(4, 0, "makeCall failure");
		}

		log.info("TSCall.connect: about to call connectFinish() for callID "
				+ this.callID);
		if (this.handOffCall != null) {
			return this.handOffCall.connectFinish(device, destAddress,
					handler.newCall);
		}

		return connectFinish(device, destAddress, handler.newCall);
	}