public TSConnection transfer(String xferDestAddress, CSTAPrivate reqPriv)
			throws TsapiPrivilegeViolationException,
			TsapiInvalidArgumentException, TsapiInvalidPartyException,
			TsapiInvalidStateException, TsapiResourceUnavailableException,
			TsapiMethodNotSupportedException {
		if (this.provider.getCapabilities().getTransferCall() == 0) {
			throw new TsapiMethodNotSupportedException(4, 0,
					"transfer unsupported by driver");
		}

		if (!this.provider.getTsapiCallCapabilities()
				.canTransfer((String) null)) {
			throw new TsapiMethodNotSupportedException(4, 0,
					"transfer(String) unsupported by driver");
		}

		boolean thisCallUpdate = updateObject();

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

		if (!this.xferEnable) {
			throw new TsapiInvalidStateException(3, 0,
					TsapiCreateObject.getTsapiObject(this, false), 1,
					this.state, "transfer disabled");
		}

		TSConnection activeTermConn = this.xferController;

		if (activeTermConn == null) {
			throw new TsapiInvalidArgumentException(3, 0,
					"transfer(String) with null TransferController not supported");
		}

		if ((thisCallUpdate)
				&& (activeTermConn.getCallControlTermConnState() != 98)
				&& (activeTermConn.getCallControlTermConnState() != 103)) {
			throw new TsapiInvalidStateException(
					3,
					0,
					TsapiCreateObject.getTsapiObject(this, false),
					2,
					this.state,
					"transfer controller terminal connection not in valid state (TALKING or UNKNOWN)");
		}

		setConnection_wait_limit(1);

		LucentSingleStepTransferCall sst = new LucentSingleStepTransferCall(
				activeTermConn.getConnID(), xferDestAddress);

		ConfXferConfHandler handler = new ConfXferConfHandler(this, null, 90);
		try {
			this.provider.sendPrivateData(sst.makeTsapiPrivate(), handler);
		} 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(),
						"transfer(String) failure");
			}
			throw new TsapiPlatformException(4, 0, "transfer(String) failure: "
					+ e);
		}

		return this.provider.getConnection(handler.newCall);
	}