/*
* Copyright 2007 Sun Microsystems, Inc.
*
* This file is part of jVoiceBridge.
*
* jVoiceBridge is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation and distributed hereunder
* to you.
*
* jVoiceBridge is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Sun designates this particular file as subject to the "Classpath"
* exception as provided by Sun in the License file that accompanied this
* code.
*/
package com.sun.voip;
import java.net.InetSocketAddress;
import org.voicebridge.*;
import org.xmpp.jnodes.IChannel;
import com.sun.voip.server.*;
import java.util.*;
/**
* A Class to represent a call participant - a party in a call.
*/
public class CallParticipant {
/**
* parameters used for this call
*/
private int callAnswerTimeout = 0;
private String callAnsweredTreatment = null;
private String callEndTreatment = null;
private String callEstablishedTreatment = null;
private String callId = null;
private String callOwner = null;
private int callTimeout = 0;
private String conferenceId = null;
private String conferenceJoinTreatment = null;
private String conferenceLeaveTreatment = null;
private String conferenceDisplayName = null;
private String displayName = null;
private boolean distributedBridge = false;
private boolean doNotRecord = false;
private boolean dtmfDetection = true;
private boolean dtmfSuppression = true;
private String encryptionKey = null;
private String encryptionAlgorithm = null;
private String firstConferenceMemberTreatment = null;
private boolean forwardDtmfKeys = false;
private String forwardingCallId = null;
private boolean ignoreTelephoneEvents = false;
private String inputTreatment = null;
private boolean isConferenceMuted = false;
private boolean isConferenceSilenced = false;
private boolean isMuted = false;
private boolean isMuteWhisperGroup = false;
private boolean isRecorder = false;
private String mediaPreference = null;
private boolean migrateCall = false;
private boolean mixMinus = true;
private int joinConfirmationTimeout = 0;
private String name = null;
private String toPhoneNumber = null;
private String phoneNumber = null;
private String phoneNumberLocation = null;
private String recordDirectory = null;
private String fromRecordingFile = null;
private String fromRecordingType = null;
private String toRecordingFile = null;
private String toRecordingType = null;
private boolean useConferenceReceiverThread = false;
private String protocol = null;
private String remoteCallId = null;
private String sipProxy = null;
private boolean speexEncode = false;
private String whisperGroupId = null;
private String voipGateway = null;
private boolean voiceDetection = false;
private boolean voiceDetectionWhileMuted = false;
private boolean handleSessionProgress = false;
private String remoteMediaInfo = null;
private ProxyCredentials proxyCredentials = null;
private IChannel channel = null;
private boolean autoAnswer = false;
private long startTimestamp = 0;
private long endTimestamp = 0;
private Map<String, String> headers = new HashMap<String, String>();
private CallParticipant farParty = null;
private CallParticipant handset = null;
private boolean isHeld = false;
/*
* Second party in a two party call or target of migration
*/
private String secondPartyCallEndTreatment = null;
private String secondPartyCallId = null;
private String secondPartyNumber = null;
private String secondPartyName = null;
private int secondPartyTimeout = 0;
private String secondPartyTreatment = null;
private boolean secondPartyVoiceDetection = false;
private String rtmfpSendStream = null;
private String rtmfpRecieveStream = null;
private CallHandler otherCall = null;
/**
* Constructor
*/
public CallParticipant() {
}
/**
* Get/Set proxy credentials
*/
public ProxyCredentials getProxyCredentials()
{
return proxyCredentials;
}
public void setProxyCredentials(ProxyCredentials proxyCredentials)
{
this.proxyCredentials = proxyCredentials;
}
public CallHandler getOtherCall()
{
return otherCall;
}
public void setOtherCall(CallHandler otherCall)
{
this.otherCall = otherCall;
}
public IChannel getChannel()
{
return channel;
}
public void setChannel(IChannel channel)
{
this.channel = channel;
}
public long getStartTimestamp()
{
return startTimestamp;
}
public void setStartTimestamp(long startTimestamp)
{
this.startTimestamp = startTimestamp;
}
public long getEndTimestamp()
{
return endTimestamp;
}
public void setEndTimestamp(long endTimestamp)
{
this.endTimestamp = endTimestamp;
}
public CallParticipant getFarParty()
{
return farParty;
}
public void setFarParty(CallParticipant farParty)
{
this.farParty = farParty;
}
public CallParticipant getHandset()
{
return handset;
}
public void setHandset(CallParticipant handset)
{
this.handset = handset;
}
public Map<String, String> getHeaders()
{
return headers;
}
public void setHeaders(Map<String, String> headers)
{
this.headers = headers;
}
/**
* Get RTMFP send stream name
*/
public String getRtmfpSendStream() {
return rtmfpSendStream;
}
/**
* Get RTMFP recieve stream name
*/
public String getRtmfpRecieveStream() {
return rtmfpRecieveStream;
}
/**
* Get call answer timeout
*/
public int getCallAnswerTimeout() {
return callAnswerTimeout;
}
/**
* Get audio treatment string for call answered
*/
public String getCallAnsweredTreatment() {
return callAnsweredTreatment;
}
/**
* Get audio treatment string for call end
*/
public String getCallEndTreatment() {
return callEndTreatment;
}
/**
* Set RTMFP send stream name
*/
public void setRtmfpSendStream(String rtmfpSendStream) {
this.rtmfpSendStream = rtmfpSendStream;
}
/**
* Set RTMFP recieve stream name
*/
public void setRtmfpRecieveStream(String rtmfpRecieveStream) {
this.rtmfpRecieveStream = rtmfpRecieveStream;
}
/**
* Get audio treatment string for call established
*/
public String getCallEstablishedTreatment() {
return callEstablishedTreatment;
}
/**
* Get call Id. This call Id is used to uniquely identify
* one of our calls. It is not associated with the SIP CallId.
*/
public String getCallId() {
return callId;
}
/**
* Get call Oner. This call owner is used to uniquely identify
* owner of the call.
*/
public String getCallOwner() {
return callOwner;
}
/**
* Get the call timeout value.
*/
public int getCallTimeout() {
return callTimeout;
}
/**
* Get conference id
*/
public String getConferenceId() {
return conferenceId;
}
/**
* Get audio treatment string for joining a conference
*/
public String getConferenceJoinTreatment() {
return conferenceJoinTreatment;
}
/**
* Get audio treatment string for leaving a conference
*/
public String getConferenceLeaveTreatment() {
return conferenceLeaveTreatment;
}
/**
* returns the conference display name
*/
public String getConferenceDisplayName() {
return conferenceDisplayName;
}
/**
* returns the caller id display name
*/
public String getDisplayName() {
return displayName;
}
/**
* returns whether or not this is a call from a distributed bridge
*/
public boolean isDistributedBridge() {
return distributedBridge;
}
/**
* is dtmf detection enabled
*/
public boolean dtmfDetection() {
return dtmfDetection;
}
/**
* is dtmf suppression enabled
*/
public boolean dtmfSuppression() {
return dtmfSuppression;
}
/**
* should telephone events be ignored
*/
public boolean ignoreTelephoneEvents() {
return ignoreTelephoneEvents;
}
public String getInputTreatment() {
return inputTreatment;
}
/**
* encryption key
*/
public String getEncryptionKey() {
return encryptionKey;
}
/**
* encryption algorithm
*/
public String getEncryptionAlgorithm() {
return encryptionAlgorithm;
}
/**
* Get first conference member treatment
*/
public String getFirstConferenceMemberTreatment() {
return firstConferenceMemberTreatment;
}
/**
* Forward dtmf keys to other calls in a whisper group
* Used for ExecMC outgoing calls.
*/
public boolean getForwardDtmfKeys() {
return forwardDtmfKeys;
}
/**
* Get Forwarding callId. This is the id of the call
* which forwards data to this call.
*/
public String getForwardingCallId() {
return forwardingCallId;
}
/**
* Handle SESSION_PROGRESS SIP message
*/
public boolean getHandleSessionProgress() {
return handleSessionProgress;
}
/**
* Get remote media Info for non-signaling call agent
*/
public String getRemoteMediaInfo() {
return remoteMediaInfo;
}
/**
* get join confirmation timeout
*/
public int getJoinConfirmationTimeout() {
return joinConfirmationTimeout;
}
/**
* Is call muted
*/
public boolean isMuted() {
return isMuted;
}
public boolean isHeld() {
return isHeld;
}
/**
* Is the call muted from the whisper group
*/
public boolean isMuteWhisperGroup() {
return isMuteWhisperGroup;
}
/**
* Is conference muted from this call
*/
public boolean isConferenceMuted() {
return isConferenceMuted;
}
/**
* Is main conference silenced from this call
*/
public boolean isConferenceSilenced() {
return isConferenceSilenced;
}
/**
* Is this a recorder
*/
public boolean isRecorder() {
return isRecorder;
}
/**
* Is call auto-answered
*
*/
public boolean isAutoAnswer()
{
return autoAnswer;
}
/**
* Get media preference
*/
public String getMediaPreference() {
return mediaPreference;
}
/**
* Is call being migrated
*/
public boolean migrateCall() {
return migrateCall;
}
/**
* Is mixMinus enabled
*/
public boolean mixMinus() {
return mixMinus;
}
/**
* returns the name of the call participant
* @return the name
*/
public String getName() {
return name;
}
/**
* returns whether or not it's okay to record this call
*/
public boolean doNotRecord() {
return doNotRecord;
}
/**
* returns the phone number of the call participant
* @return the phone number
*/
public String getPhoneNumber() {
return phoneNumber;
}
public String getToPhoneNumber() {
return toPhoneNumber;
}
/**
* returns the phone number location
* @return the phone number location
*/
public String getPhoneNumberLocation() {
return phoneNumberLocation;
}
/**
* returns the record directory
* @return the record directory
*/
public String getRecordDirectory() {
return recordDirectory;
}
/**
* returns path to recording file with data from member.
*/
public String getFromRecordingFile() {
return fromRecordingFile;
}
/**
* returns type of recording.
*/
public String getFromRecordingType() {
return fromRecordingType;
}
/**
* returns path to recording file with data to member.
*/
public String getToRecordingFile() {
return toRecordingFile;
}
/**
* returns type of recording.
*/
public String getToRecordingType() {
return toRecordingType;
}
/**
* returns the signaling protocol, SIP or h.323
*/
public String getProtocol() {
return protocol;
}
/**
* returns the remote callId. This is used for calling from
* one bridge to another.
*/
public String getRemoteCallId() {
return remoteCallId;
}
/**
* returns the Sip proxy
*/
public String getSipProxy() {
return sipProxy;
}
/**
* returns whether or not to Speex encode
*/
public boolean speexEncode() {
return speexEncode;
}
/**
* returns the whisper group this call is initially in
*/
public String getWhisperGroupId() {
return whisperGroupId;
}
/**
* returns voip gateway address
*/
public String getVoIPGateway() {
return voipGateway;
}
/**
* Is this a meeting central softphone it can use the
* conference receiver thread instead of having a separate
* receiver thread.
*/
public boolean useConferenceReceiverThread() {
return useConferenceReceiverThread;
}
/**
* is voice detection enabled
*/
public boolean voiceDetection() {
return voiceDetection;
}
/**
* should voice detection be done even while muted?
*/
public boolean voiceDetectionWhileMuted() {
return voiceDetectionWhileMuted;
}
/**
* Set call answer timeout
*/
public void setCallAnswerTimeout(int callAnswerTimeout) {
this.callAnswerTimeout = callAnswerTimeout;
}
/**
* Set audio treatment string for call answered
*/
public void setCallAnsweredTreatment(String callAnsweredTreatment) {
this.callAnsweredTreatment = callAnsweredTreatment;
}
/**
* Set audio treatment string for call end
*/
public void setCallEndTreatment(String callEndTreatment) {
this.callEndTreatment = callEndTreatment;
}
/**
* Set audio treatment string for call established
*/
public void setCallEstablishedTreatment(String callEstablishedTreatment) {
this.callEstablishedTreatment = callEstablishedTreatment;
}
/**
* Set call Number
*/
public void setCallId(String callId) {
this.callId = callId;
}
/**
* Set call Owner
*/
public void setCallOwner(String callOwner) {
this.callOwner = callOwner;
}
/**
* Set call timeout (seconds)
*/
public void setCallTimeout(int callTimeout) {
this.callTimeout = callTimeout;
}
/**
* Set conference id
*/
public void setConferenceId(String conferenceId) {
this.conferenceId = conferenceId;
}
/**
* Set audio treatment string for joining a conference
*/
public void setConferenceJoinTreatment(String conferenceJoinTreatment) {
this.conferenceJoinTreatment = conferenceJoinTreatment;
}
/**
* Set audio treatment string for leaving a conference
*/
public void setConferenceLeaveTreatment(String conferenceLeaveTreatment) {
this.conferenceLeaveTreatment = conferenceLeaveTreatment;
}
/**
* Set the flag to mute the conference from this call.
*/
public void setConferenceMuted(boolean isConferenceMuted) {
this.isConferenceMuted = isConferenceMuted;
}
/**
* Set the flag to silence the main conference from this call.
*/
public void setConferenceSilenced(boolean isConferenceSilenced) {
this.isConferenceSilenced = isConferenceSilenced;
}
/**
* Set the conference display name
*/
public void setConferenceDisplayName(String conferenceDisplayName) {
this.conferenceDisplayName = conferenceDisplayName;
}
/**
* set the caller id display name
*/
public void setDisplayName(String displayName) {
this.displayName = displayName;
}
/**
* set flag to indicate this is a distributed bridge
*/
public void setDistributedBridge(boolean distributedBridge) {
this.distributedBridge = distributedBridge;
}
/**
* Set dtmf detection flag
*/
public void setDtmfDetection(boolean dtmfDetection) {
this.dtmfDetection = dtmfDetection;
}
/**
* Set dtmf suppression flag
*/
public void setDtmfSuppression(boolean dtmfSuppression) {
this.dtmfSuppression = dtmfSuppression;
}
/**
* Set ignore telephone events flag
*/
public void setIgnoreTelephoneEvents(boolean ignoreTelephoneEvents) {
this.ignoreTelephoneEvents = ignoreTelephoneEvents;
}
public void setInputTreatment(String inputTreatment) {
this.inputTreatment = inputTreatment;
}
/**
* Set encryption key
*/
public void setEncryptionKey(String encryptionKey) {
this.encryptionKey = encryptionKey;
}
/**
* Set encryption algorithm
*/
public void setEncryptionAlgorithm(String encryptionAlgorithm) {
this.encryptionAlgorithm = encryptionAlgorithm;
}
/**
* Set first conference member treatment
*/
public void setFirstConferenceMemberTreatment(
String firstConferenceMemberTreatment) {
this.firstConferenceMemberTreatment =
firstConferenceMemberTreatment;
}
/**
* Set forward dtmf keys
*/
public void setForwardDtmfKeys(boolean forwardDtmfKeys) {
this.forwardDtmfKeys = forwardDtmfKeys;
}
/*
* Set Forwarding callId. This is the id of the call
* which forwards data to this call.
*/
public void setForwardingCallId(String forwardingCallId) {
this.forwardingCallId = forwardingCallId;
}
/**
* set handleSessionProgress
*/
public void setHandleSessionProgress(boolean handleSessionProgress) {
this.handleSessionProgress = handleSessionProgress;
}
/**
* Set remote media info for non-signaling call agent.
*/
public void setRemoteMediaInfo(String remoteMediaInfo) {
this.remoteMediaInfo = remoteMediaInfo;
}
/**
* Set join confirmation timeout
*/
public void setJoinConfirmationTimeout(int joinConfirmationTimeout) {
this.joinConfirmationTimeout = joinConfirmationTimeout;
}
/**
* Set flag to migrate call
*/
public void setMigrateCall(boolean migrateCall) {
this.migrateCall = migrateCall;
}
/**
* Set media preference
*/
public void setMediaPreference(String mediaPreference) {
this.mediaPreference = mediaPreference;
}
/**
* Set flag to enable / disable mix minus
*/
public void setMixMinus(boolean mixMinus) {
this.mixMinus = mixMinus;
}
/**
* Set the flag to mute the conference from this call.
*/
public void setMuted(boolean isMuted) {
this.isMuted = isMuted;
}
public void setHeld(boolean isHeld) {
this.isHeld = isHeld;
}
/**
* Set the flag to mute the this call from the whisper group.
*/
public void setMuteWhisperGroup(boolean isMuteWhisperGroup) {
this.isMuteWhisperGroup = isMuteWhisperGroup;
}
/**
* Set isRecorder
*/
public void setRecorder(boolean isRecorder) {
this.isRecorder = isRecorder;
}
/**
* Set autoAnswer
*/
public void setAutoAnswer(boolean autoAnswer) {
this.autoAnswer = autoAnswer;
}
/**
* Set the name of the call participant
*/
public void setName(String name) {
this.name = name;
}
/**
* Set whether or not it's ok to record this call
*/
public void setDoNotRecord(boolean doNotRecord) {
this.doNotRecord = doNotRecord;
}
/**
* Set the phone number of the call participant
*/
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public void setToPhoneNumber(String phoneNumber) {
this.toPhoneNumber = phoneNumber;
}
/**
* Set the phone number location
*/
public void setPhoneNumberLocation(String phoneNumberLocation) {
this.phoneNumberLocation = phoneNumberLocation;
}
/**
* Set the record directory
*/
public void setRecordDirectory(String recordDirectory) {
this.recordDirectory = recordDirectory;
}
/**
* Sets the recording file path for data from member.
*/
public void setFromRecordingFile(String fromRecordingFile) {
this.fromRecordingFile = fromRecordingFile;
}
/**
* Sets the recording type for data from member.
*/
public void setFromRecordingType(String fromRecordingType) {
this.fromRecordingType = fromRecordingType;
}
/**
* Sets the recording file path for data to member.
*/
public void setToRecordingFile(String toRecordingFile) {
this.toRecordingFile = toRecordingFile;
}
/**
* Sets the recording file type for data to member.
*/
public void setToRecordingType(String toRecordingType) {
this.toRecordingType = toRecordingType;
}
/*
* Sets the signaling protocol
*/
public void setProtocol(String protocol) {
this.protocol = protocol;
}
/*
* Sets the remote call id. This is used for bridge to bridge calls.
*/
public void setRemoteCallId(String remoteCallId) {
this.remoteCallId = remoteCallId;
}
/**
* Sets the Sip proxy
*/
public void setSipProxy(String sipProxy) {
this.sipProxy = sipProxy;
}
/**
* Sets speexEncode flag
*/
public void setSpeexEncode(boolean speexEncode) {
this.speexEncode = speexEncode;
}
/**
* Sets the whisperGroup this call is initially in
*/
public void setWhisperGroupId(String whisperGroupId) {
this.whisperGroupId = whisperGroupId;
}
/**
* Sets the address of the SIP server
*/
public void setVoIPGateway(String voipGateway) {
this.voipGateway = voipGateway;
}
/**
* Is this a meeting central softphone it can use the
* conference receiver thread instead of having a separate
* receiver thread.
*/
public void setUseConferenceReceiverThread(
boolean useConferenceReceiverThread) {
this.useConferenceReceiverThread = true;
}
/**
* set voice detection flag
*/
public void setVoiceDetection(boolean voiceDetection) {
this.voiceDetection = voiceDetection;
}
/**
* set voice detection while muted flag
*/
public void setVoiceDetectionWhileMuted(boolean voiceDetectionWhileMuted) {
this.voiceDetectionWhileMuted = voiceDetectionWhileMuted;
}
/*
* The rest of the call parameters are two party calls
*/
/**
* get second party number
*/
public String getSecondPartyNumber() {
return secondPartyNumber;
}
/**
* get second party name
*/
public String getSecondPartyName() {
return secondPartyName;
}
/**
* get second party timeout
*/
public int getSecondPartyTimeout() {
return secondPartyTimeout;
}
/**
* get second party treatment
*/
public String getSecondPartyTreatment() {
return secondPartyTreatment;
}
/**
* get second party call end treatment
*/
public String getSecondPartyCallEndTreatment() {
return secondPartyCallEndTreatment;
}
/**
* get second party call Id
*/
public String getSecondPartyCallId() {
return secondPartyCallId;
}
/**
* get second party voice detection
*/
public boolean getSecondPartyVoiceDetection() {
return secondPartyVoiceDetection;
}
/**
* Set second party number
*/
public void setSecondPartyNumber(String secondPartyNumber) {
this.secondPartyNumber = secondPartyNumber;
}
/**
* Set second party name
*/
public void setSecondPartyName(String secondPartyName) {
this.secondPartyName = secondPartyName;
}
/**
* Set second party timeout
*/
public void setSecondPartyTimeout(int secondPartyTimeout) {
this.secondPartyTimeout = secondPartyTimeout;
}
/**
* Set second party treatment
*/
public void setSecondPartyTreatment(String secondPartyTreatment) {
this.secondPartyTreatment = secondPartyTreatment;
}
/**
* Set second party call end treatment
*/
public void setSecondPartyCallEndTreatment(
String secondPartyCallEndTreatment) {
this.secondPartyCallEndTreatment = secondPartyCallEndTreatment;
}
/**
* Set second party call Id
*/
public void setSecondPartyCallId(String secondPartyCallId) {
this.secondPartyCallId = secondPartyCallId;
}
/**
* Set second party voice detection
*/
public void setSecondPartyVoiceDetection(
boolean secondPartyVoiceDetection) {
this.secondPartyVoiceDetection = secondPartyVoiceDetection;
}
/**
* Put together the parameters into a request string which can be
* sent to the bridge server to initiate a call.
*/
public String getCallSetupRequest() {
String request = "";
if (callAnswerTimeout != 0) {
request += "callAnswerTimeout=" + callAnswerTimeout + "\r\n";
}
if (callAnsweredTreatment != null) {
request +=
"callAnsweredTreatment=" + callAnsweredTreatment + "\r\n";
}
if (callEndTreatment != null) {
request += "callEndTreatment=" + callEndTreatment + "\r\n";
}
if (callEstablishedTreatment != null) {
request += "callEstablishedTreatment="
+ callEstablishedTreatment + "\r\n";
}
if (callId != null) {
request += "callId=" + callId + "\r\n";
}
if (callTimeout != 0) {
request += "callTimeout=" + callTimeout + "\r\n";
}
if (conferenceId != null) {
request += "conferenceId=" + conferenceId + "\r\n";
}
if (conferenceJoinTreatment != null) {
request += "conferenceJoinTreatment=" + conferenceJoinTreatment
+ "\r\n";
}
if (conferenceLeaveTreatment != null) {
request += "conferenceLeaveTreatment="
+ conferenceLeaveTreatment + "\r\n";
}
if (conferenceDisplayName != null) {
request += "conferenceDisplayName=" + conferenceDisplayName + "\r\n";
}
if (displayName != null) {
request += "displayName=" + displayName + "\r\n";
}
if (distributedBridge == true) {
request += "distributedBridge=true\r\n";
}
if (doNotRecord == true) {
request += "doNotRecord=true\r\n";
}
if (dtmfDetection == true) {
request += "dtmfDetection=true\r\n";
}
if (dtmfSuppression == false) {
request += "dtmfSuppression=false\r\n";
}
if (ignoreTelephoneEvents == true) {
request += "ignoreTelephoneEvents=true\r\n";
}
if (inputTreatment != null) {
request += "inputTreatment=" + inputTreatment + "\r\n";
}
if (encryptionKey != null) {
request += "encryptionKey=" + encryptionKey + "\r\n";
}
if (encryptionAlgorithm != null) {
request += "encryptionAlgorithm=" + encryptionAlgorithm
+ "\r\n";
}
if (firstConferenceMemberTreatment != null) {
request += "firstConferenceMemberTreatment="
+ firstConferenceMemberTreatment + "\r\n";
}
if (forwardDtmfKeys == true) {
request += "forwardDtmfKeys=true\r\n";
}
if (forwardingCallId != null) {
request += "forwardDataFrom=" + forwardingCallId + "\r\n";
}
if (handleSessionProgress == true) {
request += "handleSessionProgress=true\r\n";
}
if (remoteMediaInfo != null) {
request +=
"remoteMediaInfo=" + remoteMediaInfo + "\r\n";
}
if (isMuted == true) {
request += "mute=true\r\n";
}
if (isMuteWhisperGroup == true) {
request += "muteWhisperGroup=true\r\n";
}
if (isConferenceMuted == true) {
request += "muteConference=true\r\n";
}
if (isConferenceSilenced == true) {
request += "SilenceMainConference=true\r\n";
}
if (isRecorder == true) {
request += "recorder=true\r\n";
}
if (joinConfirmationTimeout != 0) {
request += "joinConfirmationTimeout="
+ joinConfirmationTimeout + "\r\n";
}
if (useConferenceReceiverThread == true) {
request += "useConferenceReceiverThread=true\r\n";
}
if (mixMinus == false) {
request += "mixMinus=false\r\n";
}
// decide whether to migrate or just call
if (phoneNumber != null) {
if (migrateCall) {
request += "migrate=" + callId + ":" + phoneNumber + "\r\n";
} else {
request += "phoneNumber=" + phoneNumber + "\r\n";
}
}
if (phoneNumberLocation != null) {
request += "phoneNumberLocation=" + phoneNumberLocation + "\r\n";
}
if (recordDirectory != null) {
request += "recordDirectory=" + recordDirectory + "\r\n";
}
if (fromRecordingFile != null) {
request += "recordFromMember=true:0:" + fromRecordingFile + "\r\n";
}
if (toRecordingFile != null) {
request += "recordToMember=true:0:" + toRecordingFile + "\r\n";
}
if (name != null) {
request += "name=" + name + "\r\n";
}
if (protocol != null) {
request += "protocol=" + protocol + "\r\n";
}
if (remoteCallId != null) {
request += "remoteCallId=" + remoteCallId + "\r\n";
}
if (sipProxy != null) {
request += "sipProxy=" + sipProxy + "\r\n";
}
if (speexEncode == true) {
request += "speexEncode=" + speexEncode + "\r\n";
}
if (whisperGroupId != null) {
request += "whisperGroup=" + whisperGroupId + "\r\n";
}
if (voipGateway != null) {
request += "voipGateway=" + voipGateway + "\r\n";
}
if (voiceDetection == true) {
request += "voiceDetection=true\r\n";
}
if (voiceDetectionWhileMuted == true) {
request += "voiceDetectionWhileMuted=true\r\n";
}
if (secondPartyNumber != null) {
request += "secondPartyNumber=" + secondPartyNumber + "\r\n";
}
if (secondPartyName != null) {
request += "secondPartyName=" + secondPartyName + "\r\n";
}
if (secondPartyTimeout != 0) {
request += "secondPartyTimeout=" + secondPartyTimeout + "\r\n";
}
if (secondPartyCallEndTreatment != null) {
request += "secondPartyCallEndTreatment="
+ secondPartyCallEndTreatment + "\r\n";
}
if (secondPartyCallId != null) {
request += "secondPartyCallId=" + secondPartyCallId + "\r\n";
}
if (secondPartyTreatment != null) {
request += "secondPartyTreatment=" + secondPartyTreatment + "\r\n";
}
if (secondPartyVoiceDetection == true) {
request += "secondPartyVoiceDetection=true\r\n";
}
request += "\r\n";
return request;
}
public String toConsiseString() {
if (phoneNumber == null) {
if (inputTreatment == null) {
return "Anonymous";
}
if (name != null) {
return name + "@" + inputTreatment;
}
return inputTreatment;
}
int end = phoneNumber.indexOf("@");
if (end >= 0) {
if (name == null || name.equals("Anonymous")) {
return phoneNumber;
}
int start = 0;
if (phoneNumber.indexOf("sip:") == 0) {
start = phoneNumber.indexOf(":") + 1;
}
String s = name.replaceAll(" ", "_");
if (s.equals(phoneNumber.substring(start, end))) {
return phoneNumber;
}
}
if (name == null || name.equals("") || name.equals(phoneNumber)) {
return "Anonymous@" + phoneNumber;
}
return name + "@" + phoneNumber;
}
/**
* String representation of this call participant
* @return the string representation
*/
public String toString() {
return callId + "::" + toConsiseString();
}
}