package kr.co.icontrols.callengine.engine; import android.content.Context; import android.util.Log; import com.util.LogUtil; import java.util.Timer; import kr.co.icontrols.wallpadcall.declare.DataClasses.MultiCallInfo; import kr.co.icontrols.wallpadcall.declare.Declare; import kr.co.icontrols.wallpadcall.declare.Declare.DEVICENAME; import kr.co.icontrols.wallpadcall.declare.Global; import kr.co.icontrols.wallpadcall.declare.Global.ConfigValues; public class CallManager { static String TAG = "CallManager"; boolean bLOG = true; private void LOG(String log) { if (bLOG) Log.v(TAG, log); } boolean bLOG_DEBUG = false; private void LOG_DEBUG(String log) { if (bLOG_DEBUG) Log.d(TAG, log); } boolean bLOG_INFO = true; private void LOG_INFO(String log) { if (bLOG_INFO) Log.i(TAG, log); } Context mContext; // 통화주체를 다루는 enum public enum CALLOWNER { NONE, WALLPAD, SUB_WALLPAD, KITCHEN_TV_01, KITCHEN_TV_02, KITCHEN_TV_03, KITCHEN_TV_04, KITCHEN_TV_05, KITCHEN_TV_06, KITCHEN_TV_07, KITCHEN_TV_08, KITCHEN_TV_09, KITCHEN_TV_10, BATH_PHONE_01, BATH_PHONE_02, BATH_PHONE_03, BATH_PHONE_04, BATH_PHONE_05, BATH_PHONE_06, BATH_PHONE_07, BATH_PHONE_08, BATH_PHONE_09, BATH_PHONE_10, BATH_TV_01, BATH_TV_02, BATH_TV_03, BATH_TV_04, BATH_TV_05, BATH_TV_06, BATH_TV_07, BATH_TV_08, BATH_TV_09, BATH_TV_10, UNIVERSAL_DEVICE, MOBILE, ERROR; public static CALLOWNER getCALLOWNER(String value) { try { if (value.equals(NONE.toString())) { return NONE; } else if (value.equals(WALLPAD.toString())) { return WALLPAD; } else if (value.equals(SUB_WALLPAD.toString())) { return SUB_WALLPAD; } else if (value.equals(KITCHEN_TV_01.toString())) { return KITCHEN_TV_01; } else if (value.equals(KITCHEN_TV_02.toString())) { return KITCHEN_TV_02; } else if (value.equals(KITCHEN_TV_03.toString())) { return KITCHEN_TV_03; } else if (value.equals(KITCHEN_TV_04.toString())) { return KITCHEN_TV_04; } else if (value.equals(KITCHEN_TV_05.toString())) { return KITCHEN_TV_05; } else if (value.equals(KITCHEN_TV_06.toString())) { return KITCHEN_TV_06; } else if (value.equals(KITCHEN_TV_07.toString())) { return KITCHEN_TV_07; } else if (value.equals(KITCHEN_TV_08.toString())) { return KITCHEN_TV_08; } else if (value.equals(KITCHEN_TV_09.toString())) { return KITCHEN_TV_09; } else if (value.equals(KITCHEN_TV_10.toString())) { return KITCHEN_TV_10; } else if (value.equals(BATH_PHONE_01.toString())) { return BATH_PHONE_01; } else if (value.equals(BATH_PHONE_02.toString())) { return BATH_PHONE_02; } else if (value.equals(BATH_PHONE_03.toString())) { return BATH_PHONE_03; } else if (value.equals(BATH_PHONE_04.toString())) { return BATH_PHONE_04; } else if (value.equals(BATH_PHONE_05.toString())) { return BATH_PHONE_05; } else if (value.equals(BATH_PHONE_06.toString())) { return BATH_PHONE_06; } else if (value.equals(BATH_PHONE_07.toString())) { return BATH_PHONE_07; } else if (value.equals(BATH_PHONE_08.toString())) { return BATH_PHONE_08; } else if (value.equals(BATH_PHONE_09.toString())) { return BATH_PHONE_09; } else if (value.equals(BATH_PHONE_10.toString())) { return BATH_PHONE_10; } else if (value.equals(BATH_TV_01.toString())) { return BATH_TV_01; } else if (value.equals(BATH_TV_02.toString())) { return BATH_TV_02; } else if (value.equals(BATH_TV_03.toString())) { return BATH_TV_03; } else if (value.equals(BATH_TV_04.toString())) { return BATH_TV_04; } else if (value.equals(BATH_TV_05.toString())) { return BATH_TV_05; } else if (value.equals(BATH_TV_06.toString())) { return BATH_TV_06; } else if (value.equals(BATH_TV_07.toString())) { return BATH_TV_07; } else if (value.equals(BATH_TV_08.toString())) { return BATH_TV_08; } else if (value.equals(BATH_TV_09.toString())) { return BATH_TV_09; } else if (value.equals(BATH_TV_10.toString())) { return BATH_TV_10; } else if (value.equals(UNIVERSAL_DEVICE.toString())) { return UNIVERSAL_DEVICE; } else if (value.equals(MOBILE.toString())) { return MOBILE; } else if (value.equals(ERROR.toString())) { return ERROR; } else { return null; } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return null; } catch (Exception e) { Log.e(TAG, "[Exception] getCALLOWNER()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return null; } } } // 통화패스를 다루는 enum public enum CALLPATH { NORMAL, FRONT, FRONT_VOICE, MOIP, MOIP_IHN750_RESIDENCE, MOIP_V40_RESIDENCE, MOIP_IHND101_LOBBY, MOIP_IHND101_GUARD, MOIP_IHN1010_LOBBY, MOIP_IHN1010_GUARD, PSTN, PSTN_MIC, PSTN_SPEAKER, PSTN_ARS, ANALOG, SUBPHONE_FRONT, SUBPHONE_MOIP, SUBPHONE_PSTN, SUBPHONE_ANALOG, DOORMUSIC, // 현관초인종 DTMF, // DTMF 톤 PhoneOut SUBWALLPAD, // 서브월패드와 통화할 경우 메인월패드 통화패스 SUB_FRONT_SUBWALLPAD, // 서브월패드일때 현관 통화패스 SUB_MOIP_SUBWALLPAD, // 서브월패드일때 MoIP 통화패스 DOOR_RELIEFCALL, // 현관통화 안심통화 DOOR_REMOTECALL, // 현관통화 방문객원격통화 NONE, ERROR } // 통화상태정보를 다루는 enum public enum CALLTYPE { NONE, FRONT, // FRONT_RECORD, // 현관 거동수상자 영상 녹화 // FRONT_TAKEPIC, // 현관 거동수상자 사진 촬영 RESIDENCE, RENTRESIDENCE, LOBBY, GUARD, PSTN, IHUB, HISTORY_CALL, HISTORY_VISITORPIC, ERROR; public static CALLTYPE getCALLTYPE(String value) { try { if (value.equals(NONE.toString())) { return NONE; } else if (value.equals(FRONT.toString())) { return FRONT; } // else if (value.equals(FRONT_RECORD.toString())) { // return FRONT_RECORD; // } // else if (value.equals(FRONT_TAKEPIC.toString())) { // return FRONT_TAKEPIC; // } else if (value.equals(RESIDENCE.toString())) { return RESIDENCE; } else if (value.equals(LOBBY.toString())) { return LOBBY; } else if (value.equals(GUARD.toString())) { return GUARD; } else if (value.equals(PSTN.toString())) { return PSTN; } else if (value.equals(IHUB.toString())) { return IHUB; } else if (value.equals(HISTORY_CALL.toString())) { return HISTORY_CALL; } else if (value.equals(HISTORY_VISITORPIC.toString())) { return HISTORY_VISITORPIC; } else if (value.equals(ERROR.toString())) { return ERROR; } else { return null; } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return null; } catch (Exception e) { Log.e(TAG, "[Exception] getCALLTYPE()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return null; } } } public enum CALLSTATUS { IDLE, // 대기중 TRYING_CALL, // 통화가능여부 확인중 WAITNG_INVITE_ACK, // 호출에 대한 응답 대기중 CALLING, // 호출중 CALLED, // 호출수신중 TALKING, // 통화중 REJECT, // 거절 BUSY, // 통화중 거절 FORWARD, // 착신전환 CANCEL, // 호출 취소 END, // 종료 TIMEOUT_1STCALL, // 1st Call Timeout TIMEOUT_2NDCALL, // 2nd Call Timeout TIMEOUT_3RDCALL, // 3rd Call Timeout CALLERID, // CALLERID DOOR_OPEN, // 문열림 요청 PSTN_RING, // ARS 동작을 위해, Ring 카운트를 한다. RECORDING, // 거동수상자 영상 녹화중 TAKINGPIC, // 거동수상자 사진 촬영중 HOMEVIEW; // 방문객원격통화 홈뷰어 public static CALLSTATUS getCALLSTATUS(String value) { try { if (value.equals(IDLE.toString())) { return IDLE; } else if (value.equals(TRYING_CALL.toString())) { return TRYING_CALL; } else if (value.equals(WAITNG_INVITE_ACK.toString())) { return WAITNG_INVITE_ACK; } else if (value.equals(CALLING.toString())) { return CALLING; } else if (value.equals(CALLED.toString())) { return CALLED; } else if (value.equals(TALKING.toString())) { return TALKING; } else if (value.equals(REJECT.toString())) { return REJECT; } else if (value.equals(BUSY.toString())) { return BUSY; } else if (value.equals(FORWARD.toString())) { return FORWARD; } else if (value.equals(CANCEL.toString())) { return CANCEL; } else if (value.equals(END.toString())) { return END; } else if (value.equals(TIMEOUT_1STCALL.toString())) { return TIMEOUT_1STCALL; } else if (value.equals(TIMEOUT_2NDCALL.toString())) { return TIMEOUT_2NDCALL; } else if (value.equals(TIMEOUT_3RDCALL.toString())) { return TIMEOUT_3RDCALL; } else if (value.equals(CALLERID.toString())) { return CALLERID; } else if (value.equals(DOOR_OPEN.toString())) { return DOOR_OPEN; } else if (value.equals(PSTN_RING.toString())) { return PSTN_RING; } else if (value.equals(RECORDING.toString())) { return RECORDING; } else if (value.equals(TAKINGPIC.toString())) { return TAKINGPIC; } else if (value.equals(HOMEVIEW.toString())) { return HOMEVIEW; } else { return null; } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return null; } catch (Exception e) { Log.e(TAG, "[Exception] getCALLSTATUS()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return null; } } } public void setCallManagerContext(Context context) { mContext = context; } public class CallInfo { private CALLOWNER eCallOwner = CALLOWNER.NONE; public void setCallOwner(CALLOWNER eCallowner) { LOG_INFO("[setCallOwner] eCallOwner [" + eCallowner + "]"); eCallOwner = eCallowner; } public CALLOWNER getCallOwner() { return eCallOwner; } protected Status mStatus = new Status(); protected class Status { CALLSTATUS FRONT = CALLSTATUS.IDLE; CALLSTATUS LOBBY = CALLSTATUS.IDLE; CALLSTATUS GUARD = CALLSTATUS.IDLE; CALLSTATUS RESI = CALLSTATUS.IDLE; CALLSTATUS IHUB = CALLSTATUS.IDLE; CALLSTATUS PSTN = CALLSTATUS.IDLE; } public void setCallStatus(CALLTYPE eType, CALLSTATUS eStatus) { LOG_INFO("[setCallStatus] eType [" + eType + "], eStatus [" + eStatus + "]"); if (eType == CALLTYPE.FRONT) mStatus.FRONT = eStatus; else if (eType == CALLTYPE.LOBBY) mStatus.LOBBY = eStatus; else if (eType == CALLTYPE.GUARD) mStatus.GUARD = eStatus; else if (eType == CALLTYPE.RESIDENCE) mStatus.RESI = eStatus; else if (eType == CALLTYPE.IHUB) mStatus.IHUB = eStatus; else if (eType == CALLTYPE.PSTN) mStatus.PSTN = eStatus; } public CALLSTATUS getFRONT() { return mStatus.FRONT; } public CALLSTATUS getLOBBY() { return mStatus.LOBBY; } public CALLSTATUS getGUARD() { return mStatus.GUARD; } public CALLSTATUS getRESI() { return mStatus.RESI; } public CALLSTATUS getIHUB() { return mStatus.IHUB; } public CALLSTATUS getPSTN() { return mStatus.PSTN; } public int IDLECNT_MAX = 6; public int getIDLECnt() { int nIdleCnt = 0; if (mStatus.FRONT == CALLSTATUS.IDLE) nIdleCnt++; if (mStatus.LOBBY == CALLSTATUS.IDLE) nIdleCnt++; if (mStatus.RESI == CALLSTATUS.IDLE) nIdleCnt++; if (mStatus.GUARD == CALLSTATUS.IDLE) nIdleCnt++; if (mStatus.IHUB == CALLSTATUS.IDLE) nIdleCnt++; if (mStatus.PSTN == CALLSTATUS.IDLE) nIdleCnt++; LOG_INFO("[getIDLECnt] nIdleCnt = " + nIdleCnt); return nIdleCnt; } public int getCallingCnt() { int nCallingCnt = 0; if (mStatus.FRONT == CALLSTATUS.CALLING) nCallingCnt++; if (mStatus.LOBBY == CALLSTATUS.CALLING) nCallingCnt++; if (mStatus.GUARD == CALLSTATUS.CALLING) nCallingCnt++; if (mStatus.RESI == CALLSTATUS.CALLING || mStatus.RESI == CALLSTATUS.HOMEVIEW) nCallingCnt++; if (mStatus.IHUB == CALLSTATUS.CALLING) nCallingCnt++; if (mStatus.PSTN == CALLSTATUS.CALLING) nCallingCnt++; LOG_INFO("[getCallingCnt] nCallingCnt = " + nCallingCnt); return nCallingCnt; } public int getCalledCnt() { int nCalledCnt = 0; if (mStatus.FRONT == CALLSTATUS.CALLED) nCalledCnt++; if (mStatus.LOBBY == CALLSTATUS.CALLED) nCalledCnt++; if (mStatus.GUARD == CALLSTATUS.CALLED) nCalledCnt++; if (mStatus.RESI == CALLSTATUS.CALLED) nCalledCnt++; if (mStatus.IHUB == CALLSTATUS.CALLED) nCalledCnt++; if (mStatus.PSTN == CALLSTATUS.CALLED) nCalledCnt++; LOG_INFO("[getCalledCnt] nCalledCnt = " + nCalledCnt); return nCalledCnt; } public int getTalkingCnt() { int nTalkingCnt = 0; if (mStatus.FRONT == CALLSTATUS.TALKING) nTalkingCnt++; if (mStatus.LOBBY == CALLSTATUS.TALKING) nTalkingCnt++; if (mStatus.GUARD == CALLSTATUS.TALKING) nTalkingCnt++; if (mStatus.RESI == CALLSTATUS.TALKING) nTalkingCnt++; if (mStatus.IHUB == CALLSTATUS.TALKING) nTalkingCnt++; if (mStatus.PSTN == CALLSTATUS.TALKING) nTalkingCnt++; LOG_INFO("[getTalkingCnt] nTalkingCnt = " + nTalkingCnt); return nTalkingCnt; } public CALLTYPE getCallingType() { CALLTYPE eRemoteType = CALLTYPE.NONE; if (getCallingCnt() > 1) { eRemoteType = CALLTYPE.ERROR; } else { if (mStatus.FRONT == CALLSTATUS.CALLING) eRemoteType = CALLTYPE.FRONT; else if (mStatus.LOBBY == CALLSTATUS.CALLING) eRemoteType = CALLTYPE.LOBBY; else if (mStatus.GUARD == CALLSTATUS.CALLING) eRemoteType = CALLTYPE.GUARD; else if (mStatus.RESI == CALLSTATUS.CALLING) eRemoteType = CALLTYPE.RESIDENCE; else if (mStatus.IHUB == CALLSTATUS.CALLING) eRemoteType = CALLTYPE.IHUB; else if (mStatus.PSTN == CALLSTATUS.CALLING) eRemoteType = CALLTYPE.PSTN; else eRemoteType = CALLTYPE.NONE; } LOG_INFO("[getCallingType] eRemoteType = " + eRemoteType); return eRemoteType; } public CALLTYPE getCalledType() { CALLTYPE eRemoteType = CALLTYPE.NONE; if (getCalledCnt() > 1) { eRemoteType = CALLTYPE.ERROR; } else { if (mStatus.FRONT == CALLSTATUS.CALLED) eRemoteType = CALLTYPE.FRONT; else if (mStatus.LOBBY == CALLSTATUS.CALLED) eRemoteType = CALLTYPE.LOBBY; else if (mStatus.GUARD == CALLSTATUS.CALLED) eRemoteType = CALLTYPE.GUARD; else if (mStatus.RESI == CALLSTATUS.CALLED) eRemoteType = CALLTYPE.RESIDENCE; else if (mStatus.IHUB == CALLSTATUS.CALLED) eRemoteType = CALLTYPE.IHUB; else if (mStatus.PSTN == CALLSTATUS.CALLED) eRemoteType = CALLTYPE.PSTN; else eRemoteType = CALLTYPE.NONE; } LOG_INFO("[getCalledType] eRemoteType = " + eRemoteType); return eRemoteType; } public CALLTYPE getTalkingType() { CALLTYPE eRemoteType = CALLTYPE.NONE; if (getTalkingCnt() > 1) { eRemoteType = CALLTYPE.ERROR; } else { if (mStatus.FRONT == CALLSTATUS.TALKING) eRemoteType = CALLTYPE.FRONT; else if (mStatus.LOBBY == CALLSTATUS.TALKING) eRemoteType = CALLTYPE.LOBBY; else if (mStatus.GUARD == CALLSTATUS.TALKING) eRemoteType = CALLTYPE.GUARD; else if (mStatus.RESI == CALLSTATUS.TALKING) eRemoteType = CALLTYPE.RESIDENCE; else if (mStatus.IHUB == CALLSTATUS.TALKING) eRemoteType = CALLTYPE.IHUB; else if (mStatus.PSTN == CALLSTATUS.TALKING) eRemoteType = CALLTYPE.PSTN; else eRemoteType = CALLTYPE.NONE; } LOG_INFO("[getTalkingType] eRemoteType = " + eRemoteType); return eRemoteType; } public void printCallStatus() { try { LOG_INFO("[printCallStatus] RESI [" + getRESI() + "]"); LOG_INFO("[printCallStatus] LOBBY [" + getLOBBY() + "]"); LOG_INFO("[printCallStatus] GUARD [" + getGUARD() + "]"); LOG_INFO("[printCallStatus] FRONT [" + getFRONT() + "]"); LOG_INFO("[printCallStatus] PSTN [" + getPSTN() + "]"); LOG_INFO("[printCallStatus] IHUB [" + getIHUB() + "]"); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] printCallStatus() : " + e); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } public void resetCallStatus() { mStatus.RESI = CALLSTATUS.IDLE; mStatus.LOBBY = CALLSTATUS.IDLE; mStatus.GUARD = CALLSTATUS.IDLE; mStatus.FRONT = CALLSTATUS.IDLE; mStatus.PSTN = CALLSTATUS.IDLE; mStatus.IHUB = CALLSTATUS.IDLE; } public void resetAllCallInfo() { resetCallStatus(); resetMultiCallInfo(); } // MultiCall 관련 private CALLTYPE eBaseMultiCallType = CALLTYPE.NONE; // 멀티콜이 수신될때의 통화중인 기기정보 private CALLTYPE eMultiCallType = CALLTYPE.NONE; private CALLSTATUS eMultiCallStatus = CALLSTATUS.IDLE; private CALLOWNER eMultiCallOwner = CALLOWNER.NONE; private boolean bMultiCallAccept = false; private boolean bMultiCallPSTNReject = false; private String strMultiCall_ID = ""; // SIPID/CID private String strMultiCall_ID_H = ""; // 동정보 private String strMultiCall_ID_L = ""; // 호/ID 정보 private String strMultiCall_Name = ""; // 기기이름/CID private String strMultiCall_IP = ""; // IP // 국선홀드 관련 private boolean bPSTNCallHold = false; private String strPSTNHoldInfo = ""; public void setPSTNCallHold(boolean bHold, String strHoldInfo) { try { LOG_INFO("[setPSTNCallHold] bHold [" + bHold + "], strHoldInfo [" + strHoldInfo + "]"); bPSTNCallHold = bHold; strPSTNHoldInfo = strHoldInfo; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] setPSTNCallHold(boolean bHold, String strHoldInfo)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } public boolean getPSTNCallHold() { try { return bPSTNCallHold; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return false; } catch (Exception e) { Log.e(TAG, "[Exception] getPSTNCallHold()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return false; } } public String getPSTNCallInfo() { try { return strPSTNHoldInfo; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return null; } catch (Exception e) { Log.e(TAG, "[Exception] getPSTNCallInfo()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return null; } } public void resetPSTNCallHold() { try { bPSTNCallHold = false; strPSTNHoldInfo = null; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] resetPSTNCallHold()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } public void printMultiCallStatus() { try { LOG_INFO("[printMultiCallStatus] eBaseMultiCallType [" + eBaseMultiCallType + "]"); LOG_INFO("[printMultiCallStatus] eMultiCallType [" + eMultiCallType + "]"); LOG_INFO("[printMultiCallStatus] eMultiCallStatus [" + eMultiCallStatus + "]"); LOG_INFO("[printMultiCallStatus] bMultiCallAccept [" + bMultiCallAccept + "]"); LOG_INFO("[printMultiCallStatus] bMultiCallPSTNReject [" + bMultiCallPSTNReject + "]"); LOG_INFO("[printMultiCallStatus] strMultiCall_ID [" + strMultiCall_ID + "]"); LOG_INFO("[printMultiCallStatus] strMultiCall_ID_H [" + strMultiCall_ID_H + "]"); LOG_INFO("[printMultiCallStatus] strMultiCall_ID_L [" + strMultiCall_ID_L + "]"); LOG_INFO("[printMultiCallStatus] strMultiCall_Name [" + strMultiCall_Name + "]"); LOG_INFO("[printMultiCallStatus] strMultiCall_IP [" + strMultiCall_IP + "]"); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] printMultiCallStatus() : " + e); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } public void setMultiCallInfo(CALLTYPE eBaseCall, CALLTYPE eType, CALLSTATUS eStatus, CALLOWNER eCallOwner, boolean bAccept, String sID, String sID_H, String sID_L, String sName, String sIP) { try { LOG_INFO("[setMultiCallInfo] eBaseCall [" + eBaseCall + "], eType [" + eType + "], eStatus [" + eStatus + "], eCallOwner [" + eCallOwner + "], bAccept [" + bAccept + "], sID [" + sID + "], sID_H [" + sID_H + "], sID_L [" + sID_L + "], sName [" + sName + "], sIP [" + sIP + "]"); eBaseMultiCallType = eBaseCall; eMultiCallType = eType; eMultiCallStatus = eStatus; eMultiCallOwner = eCallOwner; bMultiCallAccept = bAccept; strMultiCall_ID = sID; strMultiCall_ID_H = sID_H; strMultiCall_ID_L = sID_L; strMultiCall_Name = sName; strMultiCall_IP = sIP; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] setMultiCallInfo(CALLTYPE eBaseCall, CALLTYPE eType, CALLSTATUS eStatus, CALLOWNER eCallOwner, boolean bAccept, String sID, String sID_H, String sID_L, String sName, String sIP)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } public void setMultiCallInfo(MultiCallInfo Info) { try { Info.printMultiCallInfo(); eBaseMultiCallType = Info.getBaseMultiCallType(); eMultiCallType = Info.getMultiCallType(); eMultiCallStatus = Info.getMultiCallStatus(); eMultiCallOwner = Info.getMultiCallOwner(); bMultiCallAccept = Info.getMultiCallFlag(); strMultiCall_ID = Info.getID(); strMultiCall_ID_H = Info.getID_High(); strMultiCall_ID_L = Info.getID_Low(); strMultiCall_Name = Info.getName(); strMultiCall_IP = Info.getIP(); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] setMultiCallInfo(MultiCallInfo Info)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } public void setMultiCallOwner(CALLOWNER eCallOwner) { try { LOG_INFO("[setMultiCallOwner] eCallOwner [" + eCallOwner + "]"); eMultiCallOwner = eCallOwner; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] setMultiCallOwner(CALLOWNER eCallOwner)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } public void setMultiCallAcceptFlag(boolean bAccept) { try { LOG_INFO("[setMultiCallAcceptFlag] bAccept [" + bAccept + "]"); bMultiCallAccept = bAccept; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] setMultiCallAcceptFlag(String bAccept)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } public void setPSTNRejectFlag(boolean bReject) { try { LOG_INFO("[setPSTNRejectFlag] RESI [" + bReject + "]"); bMultiCallPSTNReject = bReject; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] setPSTNRejectFlag(String bReject)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } public void updateMultiCallName(String sName) { try { LOG_INFO("[updateMultiCallName] sID [" + sName + "]"); strMultiCall_Name = sName; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] updateMultiCallName(String sID)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } public void resetMultiCallInfo() { try { LOG_INFO("[resetMultiCallInfo]"); eBaseMultiCallType = CALLTYPE.NONE; eMultiCallType = CALLTYPE.NONE; eMultiCallStatus = CALLSTATUS.IDLE; bMultiCallAccept = false; bMultiCallPSTNReject = false; strMultiCall_ID = ""; strMultiCall_ID_H = ""; strMultiCall_ID_L = ""; strMultiCall_Name = ""; strMultiCall_IP = ""; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] resetMultiCallInfo()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } public CALLTYPE getBaseMultiCallType() { try { return eBaseMultiCallType; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return CALLTYPE.ERROR; } catch (Exception e) { Log.e(TAG, "[Exception] getBaseMultiCallType()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return CALLTYPE.ERROR; } } public boolean isBaseMultiCallMoIP() { try { CALLTYPE eCallType = getBaseMultiCallType(); if (eCallType == CALLTYPE.LOBBY || eCallType == CALLTYPE.GUARD || eCallType == CALLTYPE.RESIDENCE) return true; else return false; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return false; } catch (Exception e) { Log.e(TAG, "[Exception] isBaseMultiCallMoIP()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return false; } } public CALLTYPE getMultiCallType() { try { return eMultiCallType; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return CALLTYPE.ERROR; } catch (Exception e) { Log.e(TAG, "[Exception] getMultiCallType()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return CALLTYPE.ERROR; } } public CALLSTATUS getMultiCallStatus() { try { return eMultiCallStatus; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return CALLSTATUS.IDLE; } catch (Exception e) { Log.e(TAG, "[Exception] getMultiCallStatus()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return CALLSTATUS.IDLE; } } public CALLOWNER getMultiCallOwner() { try { return eMultiCallOwner; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return CALLOWNER.NONE; } catch (Exception e) { Log.e(TAG, "[Exception] getMultiCallOwner()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return CALLOWNER.NONE; } } public boolean getMultiCallAccept() { try { LOG("[getMultiCallAccept] bMultiCallAccept [" + bMultiCallAccept + "]"); return bMultiCallAccept; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return false; } catch (Exception e) { Log.e(TAG, "[Exception] getMultiCallAccept()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return false; } } public boolean getMultiCallPSTNReject() { try { return bMultiCallPSTNReject; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return false; } catch (Exception e) { Log.e(TAG, "[Exception] getMultiCallPSTNReject()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return false; } } public String getMultiCall_ID() { try { return strMultiCall_ID; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return "ERROR"; } catch (Exception e) { Log.e(TAG, "[Exception] getMultiCall_ID()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return "ERROR"; } } public String getMultiCall_ID_H() { try { return strMultiCall_ID_H; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return "ERROR"; } catch (Exception e) { Log.e(TAG, "[Exception] getMultiCallID_H()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return "ERROR"; } } public String getMultiCall_ID_L() { try { return strMultiCall_ID_L; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return "ERROR"; } catch (Exception e) { Log.e(TAG, "[Exception] getMultiCallID_L()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return "ERROR"; } } public String getMultiCall_Name() { try { return strMultiCall_Name; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return "ERROR"; } catch (Exception e) { Log.e(TAG, "[Exception] getMultiCall_Name()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return "ERROR"; } } public String getMultiCall_IP() { try { return strMultiCall_IP; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return "ERROR"; } catch (Exception e) { Log.e(TAG, "[Exception] getMultiCall_IP()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return "ERROR"; } } } public enum PSTNEVENTTYPE { RINGING, RINGING_END, CID } public enum CALLEVENTTYPE { RECEIVE_CALL, // 호출 수신 (호출 수신) TRYING_CALL, // 호출 시도중 (호출 발신) RECEIVE_CALL_2ND, // 멀티콜 수신 (호출 수신) RECEIVE_CALL_ACK, // 호출응답 수신 (호출 발신) REQUEST_FRONT_MONITORING, // 호출응답 수신 (호출 발신) REQUEST_RESIDENCE_CALL, // 이웃통화 요청 수신 (호출 발신) CONNECT_CALL, // 통화 시작 TERMINATE_CALL, // 통화 종료 CANCEL_CALL, // 호출 취소 CANCEL_CALL_2ND, // 멀티콜 호출 취소 REJECT_CALL, // 호출수신 거절 REJECT_BUSY_CALL, // 통화중 호출수신 거절 FORWARD_CALL, // 착신전환 설정 CALLERID, // Caller ID TIMEOUT_1STCALL, // 1st Call Timeout TIMEOUT_2NDCALL, // 2nd Call Timeout TIMEOUT_3RDCALL, // 3rd Call Timeout MOIP_VIDEO_SET, // MoIP 영상통화 설정 DOOR_OPEN, // 문열림 설정 PSTN_RING, // PSTN ARS동작을 위해, UI에서 Ring을 카운트 하기위한 이벤트 PSTN_DTMF, // PSTN DTMF 수신 DETECT_STRANGER, // 거동수상자 발생 INITIALIZE_ALLCALL, // 초기화 (서브월패드인 경우에만 사용함) RECORD_STOP, NONE; public static CALLEVENTTYPE getCALLEVENTTYPE(String value) { try { if (value.equals(RECEIVE_CALL.toString())) { return RECEIVE_CALL; } else if (value.equals(TRYING_CALL.toString())) { return TRYING_CALL; } else if (value.equals(RECEIVE_CALL_2ND.toString())) { return RECEIVE_CALL_2ND; } else if (value.equals(RECEIVE_CALL_ACK.toString())) { return RECEIVE_CALL_ACK; } else if (value.equals(REQUEST_FRONT_MONITORING.toString())) { return REQUEST_FRONT_MONITORING; } else if (value.equals(CONNECT_CALL.toString())) { return CONNECT_CALL; } else if (value.equals(TERMINATE_CALL.toString())) { return TERMINATE_CALL; } else if (value.equals(CANCEL_CALL.toString())) { return CANCEL_CALL; } else if (value.equals(REJECT_CALL.toString())) { return REJECT_CALL; } else if (value.equals(REJECT_BUSY_CALL.toString())) { return REJECT_BUSY_CALL; } else if (value.equals(FORWARD_CALL.toString())) { return FORWARD_CALL; } else if (value.equals(CALLERID.toString())) { return CALLERID; } else if (value.equals(TIMEOUT_1STCALL.toString())) { return TIMEOUT_1STCALL; } else if (value.equals(TIMEOUT_2NDCALL.toString())) { return TIMEOUT_2NDCALL; } else if (value.equals(TIMEOUT_3RDCALL.toString())) { return TIMEOUT_3RDCALL; } else if (value.equals(MOIP_VIDEO_SET.toString())) { return MOIP_VIDEO_SET; } else if (value.equals(DOOR_OPEN.toString())) { return DOOR_OPEN; } else if (value.equals(PSTN_RING.toString())) { return PSTN_RING; } else if (value.equals(PSTN_DTMF.toString())) { return PSTN_DTMF; } else if (value.equals(DETECT_STRANGER.toString())) { return DETECT_STRANGER; } else if (value.equals(INITIALIZE_ALLCALL.toString())) { return INITIALIZE_ALLCALL; } else if (value.equals(RECORD_STOP.toString())) { return RECORD_STOP; } else if (value.equals(NONE.toString())) { return NONE; } else { return null; } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return null; } catch (Exception e) { Log.e(TAG, "[Exception] getCALLEVENTTYPE()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return null; } } } public String makeSIPID(CALLTYPE eCallType, String strDong, String strHo) { try { LOG_INFO("[makeSIPID] eCallType : " + eCallType + ", strDong : " + strDong + ", strHo : " + strHo); String SIPID = "12345678_Resi_0101_0101_01"; String strDeviceCnt = "01"; String strType = DEVICENAME.strType_Resi; if (eCallType == CALLTYPE.RESIDENCE) strType = DEVICENAME.strType_Resi; else if (eCallType == CALLTYPE.LOBBY) strType = DEVICENAME.strType_Lobby; else if (eCallType == CALLTYPE.GUARD) strType = DEVICENAME.strType_Guard; else if (eCallType == CALLTYPE.IHUB) strType = DEVICENAME.strType_Ihub; else if (eCallType == CALLTYPE.RENTRESIDENCE) strType = DEVICENAME.strType_RentResi; else if (eCallType == CALLTYPE.FRONT) strType = DEVICENAME.strType_Front; SIPID = Global.ZeroPadding_Head(8, Global.getSitecodeString()) + "_" + strType + "_" + Global.ZeroPadding_Head(4, strDong) + "_" + Global.ZeroPadding_Head(4, strHo) + "_" + strDeviceCnt; LOG_INFO("[makeSIPID] SIPID : " + SIPID); return SIPID; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return "ERROR"; } catch (Exception e) { Log.e(TAG, "[Exception] MakeSIPID(...) : " + e); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return "ERROR"; } } public String makeSIPID(String strIPAddress) { try { LOG_INFO("[makeSIPID] strIPAddress : " + strIPAddress); String SIPID = "12345678_Resi_0101_0101_01"; String dong = "101"; String ho = "101"; String strType = DEVICENAME.strType_Resi; String strDeviceCnt = "01"; String[] IP_Parse = strIPAddress.split("\\."); // Log.d(TAG, "[makeSIPID] IP_Parse.length = " + IP_Parse.length); // for (int i = 0; i < IP_Parse.length; i++) // { // Log.d(TAG, "IP_Parse[" + i + "] : " + IP_Parse[i]); // } if (ConfigValues.bIPExpansion) { if (IP_Parse[1].equals("0")) { dong = "100"; } else { dong = Integer.toString(((Integer.parseInt(IP_Parse[0]) * 100) + Integer.parseInt(IP_Parse[1]))); } } else { dong = Integer.toString((((Integer.parseInt(Global.getDongString()) / 100) * 100) + Integer.parseInt(IP_Parse[1]))); } if (IP_Parse[2].equals("128")) { // 경비실폰 strType = DEVICENAME.strType_Guard; ho = IP_Parse[3]; } else if (IP_Parse[2].equals("0")) { // 로비폰 strType = DEVICENAME.strType_Lobby; ho = IP_Parse[3]; } else if (IP_Parse[2].equals("201")) { // 아이허브 strType = DEVICENAME.strType_Ihub; ho = IP_Parse[3]; } else { strType = Declare.DEVICENAME.strType_Resi; ho = IP_Parse[2] + Global.ZeroPadding_Head(2, IP_Parse[3]); if (ConfigValues.bSetRentHouse) strDeviceCnt = "11"; } // Log.d(TAG, "[makeSIPID] dong = " + dong + ", ho = " + ho); SIPID = Global.ZeroPadding_Head(8, Global.getSitecodeString()) + "_" + strType + "_" + Global.ZeroPadding_Head(4, dong) + "_" + Global.ZeroPadding_Head(4, ho) + "_" + strDeviceCnt; LOG_INFO("[makeSIPID] SIPID : " + SIPID); return SIPID; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return "ERROR"; } catch (Exception e) { Log.e(TAG, "[Exception] MakeSIPID(...) : " + e); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return "ERROR"; } } int nSIPPort = 5060; public String makeCallForwarInfo(String strIPAddress) { try { //String strForwardInfo = makeSIPID(strIPAddress) + "@" + strIPAddress + ":" + nSIPPort; String strForwardInfo = strIPAddress + "@" + strIPAddress + ":" + nSIPPort; LOG_INFO("[makeCallForwarInfo] strForwardInfo [" + strForwardInfo + "]"); return strForwardInfo; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return "ERROR"; } catch (Exception e) { Log.e(TAG, "[Exception] makeCallForwarInfo(String strIPAddress)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return "ERROR"; } } public CALLTYPE getCallType(String strIPAddress) { try { LOG("[getCallType] strIPAddress = " + strIPAddress); String[] IP_Parse = strIPAddress.split("\\."); if (IP_Parse[2].equals("128")) return CALLTYPE.GUARD; else if (IP_Parse[2].equals("0")) return CALLTYPE.LOBBY; else if (IP_Parse[2].equals("201")) return CALLTYPE.IHUB; else return CALLTYPE.RESIDENCE; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return CALLTYPE.NONE; } catch (Exception e) { Log.e(TAG, "[getCallType] getCallType(strIPAddress) + e"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return CALLTYPE.NONE; } } public CALLTYPE getTargetID(String strIPAddress) { try { LOG("[getCallType] strIPAddress = " + strIPAddress); String[] IP_Parse = strIPAddress.split("\\."); if (IP_Parse[2].equals("128")) return CALLTYPE.GUARD; else if (IP_Parse[2].equals("0")) return CALLTYPE.LOBBY; else if (IP_Parse[2].equals("201")) return CALLTYPE.IHUB; else return CALLTYPE.RESIDENCE; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return CALLTYPE.NONE; } catch (Exception e) { Log.e(TAG, "[getCallType] getCallType(strIPAddress) + e"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return CALLTYPE.NONE; } } public boolean bTalkTestModeEnable = false; public Timer CallTimer = null; CALLTYPE eCallTypeTimer; public class CTT { // CTT = Call Timeout Table, 단위 Sec public int TIMEOUT_SEC_10 = 10; public int TIMEOUT_SEC_30 = 30; public int TIMEOUT_SEC_60 = 60; public int TIMEOUT_SEC_180 = 180; public int WAITNG_INVITE_ACK = 10; public int CALLING = 30; public int CALLED = 35; public int WAIT_RECORD = 3; // 거동수상자감지 녹화 대기 팝업 public int RESIDENCEnRESIDENCE = 180; public int RESIDENCEnLOBBY = 60; public int RESIDENCEnGUARD = 180; public int RESIDENCEnFRONT = 60; public int LOBBYnGUARD = 60; public int GUARDnGUARD = 180; public int GUARDnIHUB = 180; public int KILLTIMER = -99; public void setTalkTestMode() { RESIDENCEnRESIDENCE = 9999999; RESIDENCEnLOBBY = 999999; RESIDENCEnGUARD = 999999; RESIDENCEnFRONT = 999999; LOBBYnGUARD = 999999; GUARDnGUARD = 999999; GUARDnIHUB = 999999; } public void setTalkNormalMode() { RESIDENCEnRESIDENCE = 180; RESIDENCEnLOBBY = 60; RESIDENCEnGUARD = 180; RESIDENCEnFRONT = 60; LOBBYnGUARD = 60; GUARDnGUARD = 180; GUARDnIHUB = 180; } } }