public Vector<TSConnection> consult(TSConnection termconn, String address,
			CSTAPrivate reqPriv) throws TsapiPrivilegeViolationException,
			TsapiInvalidArgumentException, TsapiInvalidStateException,
			TsapiResourceUnavailableException, TsapiMethodNotSupportedException {
		if (this.provider.getCapabilities().getConsultationCall() == 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");
		}

		boolean otherCallUpdate = termconn.getTSCall().updateObject();
		if ((otherCallUpdate) && (termconn.getTSCall().state != 33)) {
			throw new TsapiInvalidStateException(3, 0,
					TsapiCreateObject.getTsapiObject(termconn.getTSCall(),
							false), 1, this.state, "other call not active");
		}

		if ((otherCallUpdate) && (termconn.getCallControlTermConnState() != 98)
				&& (termconn.getCallControlTermConnState() != 103)) {
			throw new TsapiInvalidStateException(3, 0,
					TsapiCreateObject.getTsapiObject(termconn, false), 5,
					this.state, "terminal connection not talking");
		}

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

		}

		MakeCallConfHandler handler = new MakeCallConfHandler(this,
				termconn.getTSDevice(), address, 14);
		try {
			this.provider.tsapi.consultationCall(termconn.getConnID(), address,
					reqPriv, handler);
		} catch (TsapiInvalidStateException 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(),
						"consultationCall failure");
			}
			throw new TsapiPlatformException(4, 0, "consultationCall failure");
		}

		if (this.handOffCall != null) {
			return this.handOffCall.consultFinish(termconn, address,
					handler.newCall);
		}

		return consultFinish(termconn, address, handler.newCall);
	}