Example #1
0
UByte voice_callUser(PPIDType called, PPIDType caller)
{
    ApplicationInstanceType *applicationInstanceData;

    if (QuickData[called].EmptyMarker == 0) {
        SignalType * signal;
        NewSignal(sizeof(SignalType), (void**) &signal);

        PPID2PMID((PMIDType *) signal->Address, called);

        applicationInstanceData = getApplicationInstance(signal->Address);

        if (applicationInstanceData->state == idle) {
            applicationInstanceData->state = incommingcall;
            applicationInstanceData->connectedTo = caller;

            SendSignal((SignalType*) signal, APP_CC_PROCESS_ID, APP_CC_PRIMITIVE, APPCCSetupReq);

            /*setup the outgoing side of the call:*/
            {
                PMIDType pmid;
                char tmp[13];
                UByte sum = called;

                PPID2PMID(&pmid, caller);

                applicationInstanceData = getApplicationInstance(pmid);
                applicationInstanceData->connectedTo = called;

                memset(tmp, 0, 12);
                tmp[0] = sum + '0';
                handleConnectPrim(pmid, applicationInstanceData);
                /*{
                 AudioLineCtrlReqType *AudioLineCtrlReq;
                 NewSignal(sizeof(AudioLineCtrlReqType), (void **) &AudioLineCtrlReq);
                 AudioLineCtrlReq->TheSignal.Address[0] = 0x0F;
                 AudioLineCtrlReq->TheSignal.Address[1] = 0;//MeInstance->Mcei;
                 AudioLineCtrlReq->Lid = sum;
                 _memcpy(AudioLineCtrlReq->Pmid,pmid,3);
                 AudioLineCtrlReq->option = 3;
                 PrintStatus(0, "\r\napp: send AUDIOLINECTRL_req to mac layer");

                 SendSignal((SignalType*)AudioLineCtrlReq, CCF_PROCESS_ID, CCF_PRIMITIVE, AUDIOLINECTRL_req);
                 }*/
            }

            return 1;
        } else {
            DeleteBuffer(signal);
            PrintStatus(0, "\r\nnumber found, but user allready active.\n");
            return 2;
        }
    } else {
        PrintStatus(0, "\r\nnumber not found...");
        return 3;
    }
}
Example #2
0
UByte voice_disConnectUser(PPIDType user)
{
    if (QuickData[user].EmptyMarker == 0) {
        ApplicationInstanceType *applicationInstanceData;
        PMIDType pmid;

        PPID2PMID((PMIDType *) pmid, user);
        applicationInstanceData = getApplicationInstance(pmid);

        if (applicationInstanceData->state == connected) {
            SignalType *CcReleasePrim;
            UByte Data[2] = { 0x2e, 00 };

            NewSignal(sizeof(SignalType) + 2, (void **) &CcReleasePrim);
            memcpy(CcReleasePrim->Address, pmid, 3);
            CcReleasePrim->Address[3] = 0x00;
            _memcpy(getCcReleasePrimTypeIE(CcReleasePrim), Data, 2);
            SendSignal((SignalType *) CcReleasePrim, IWU_PROCESS_ID, IWU_PRIMITIVE, CC_RELEASE_prim);
            applicationInstanceData->state = idle;
            return 0;
        } else {
            return 2;
        }
    } else {
        return 3;
    }
}
Example #3
0
UByte voice_updateDisplay(PPIDType user, char * display)
{
    SignalType *ccinfoSignal;
    ApplicationInstanceType *applicationInstanceData;
    PPID2PMID(&tmpPmid, user);
    applicationInstanceData = getApplicationInstance(tmpPmid);

    if (user != 0xffff && applicationInstanceData != NULL) {
        NewSignal(sizeof(SignalType) + 14, (void**) &ccinfoSignal);

        memcpy(ccinfoSignal->Address, tmpPmid, 3); /*pmid in address field*/
        getSignalData(ccinfoSignal)[0] = 0x01; /*info element offset*/
        getSignalData(ccinfoSignal)[1] = 0x28;
        getSignalData(ccinfoSignal)[2] = 0x02 + strlen(display);
        getSignalData(ccinfoSignal)[3] = 0x04;
        getSignalData(ccinfoSignal)[4] = 0x0C;

        memcpy(getSignalData(ccinfoSignal) + 5, display, strlen(display)); /*multidisplay, iwutoiwu, signal*/

        SendSignal(ccinfoSignal, APP_CC_PROCESS_ID, APP_CC_PRIMITIVE, APPCCInfoReq);
        return 1;
    }
    return 0;
}
Example #4
0
int	IFCBuilder::getOwnerHistoryInstance()
{
	if	(!ifcBuildOwnerHistoryInstance) {
		ifcBuildOwnerHistoryInstance = sdaiCreateInstanceBN(model, "IFCOWNERHISTORY");

		sdaiPutAttrBN(ifcBuildOwnerHistoryInstance, "OwningUser", sdaiINSTANCE, (void*) getPersonAndOrganizationInstance());
		sdaiPutAttrBN(ifcBuildOwnerHistoryInstance, "OwningApplication", sdaiINSTANCE, (void*) getApplicationInstance());
		sdaiPutAttrBN(ifcBuildOwnerHistoryInstance, "ChangeAction", sdaiENUM, "ADDED");
		sdaiPutAttrBN(ifcBuildOwnerHistoryInstance, "CreationDate", sdaiINTEGER, (void*) getTimeStamp());
	}

	return	ifcBuildOwnerHistoryInstance;
}
Example #5
0
ApplicationInstanceType * getApplicationInstanceData(PPIDType ppid)
{
    PMIDType pmid;
    PPID2PMID(&pmid, ppid);
    return getApplicationInstance(pmid);
}
Example #6
0
void ApplicationSignalHandler_FP(SignalType * TheSignal)
{
    ApplicationInstanceType * applicationInstanceData;

    if (common_signalHander(TheSignal)) {
        return;
    }

    if (TheSignal->Event == INITIALIZE_EVENT) {
        InitializeTreeTop(&applicationTree, sizeof(PMIDType));
        DeleteBuffer(TheSignal);
        fp_system_init();
        return;
    }

    applicationInstanceData = getApplicationInstance(TheSignal->Address);

    switch (TheSignal->Event)
    {
        case APPLICATION_PRIMITIVE:
        {
            switch (TheSignal->SubEvent)
            {
                case APPCCSetupInd:
                {
                    handleAPPCCSetupInd(TheSignal, applicationInstanceData);
                }
                break;
                case APPCCInfoInd:
                {
                    handleAPPCCInfoInd(TheSignal, applicationInstanceData);
                }
                break;
                case APPCCAbnormal:
                {
                    if (applicationInstanceData) {
                        PrintStatus(0, "abnormal release in application, user found");
                        handleReleasePrim(TheSignal, applicationInstanceData);
                    } else {
                        _sprintf_(StatusString, "abnormal %x %x %x %x", TheSignal->Address[0], TheSignal->Address[1], TheSignal->Address[2], TheSignal->Address[3]);
                        PrintStatus(0, StatusString);
                    }
                }
                break;

                case 0x86:
                {
                    UByte * data = getSignalData(TheSignal);
                    fp_module2module_ack_received(PMID2PPID(TheSignal->Address), &data[1]);
                }
                break;

                case SS_MSF_prim:
                {
                    UByte *messageData;
                    UByte DestinationIdLenght;
                    UByte *DestinationId;
                    UByte DisplaytextLength;
                    UByte *DisplayText;
                    UByte CallBackNumberLength;
                    UByte *CallBackNumber;
                    UByte SSAAAD[SSAAADLength];
                    int index, count;
                    APPMSFind* appMSFind = (APPMSFind*) TheSignal;
                    char* tmp;
                    index = 0;
                    messageData = getAPPMSFindIE(appMSFind);

                    DestinationIdLenght = messageData[index++];
                    DestinationId = (UByte*) mem_malloc(DestinationIdLenght + 1, 0x42);

                    for (count = 0; count < DestinationIdLenght; count++) {
                        DestinationId[count] = messageData[index++];
                    }
                    DestinationId[count] = '\0';

                    DisplaytextLength = messageData[index++];
                    DisplayText = (UByte*) mem_malloc(DisplaytextLength + 1, 0x42);

                    for (count = 0; count < DisplaytextLength; count++) {
                        DisplayText[count] = messageData[index++];
                    }
                    DisplayText[count] = '\0';

                    CallBackNumberLength = messageData[index++];
                    CallBackNumber = (UByte*) mem_malloc(CallBackNumberLength + 1, 0x42);

                    for (count = 0; count < CallBackNumberLength; count++) {
                        CallBackNumber[count] = messageData[index++];
                    }
                    CallBackNumber[count] = '\0';

                    memcpy(&SSAAAD[0], &messageData[index], SSAAADLength);
                    tmp = StatusString;
                    tmp = StringPrint(tmp, "MSF: [");
                    tmp = StringPrint(tmp, (char*) DisplayText);
                    tmp = StringPrint(tmp, "] from [");
                    tmp = StringPrint(tmp, (char*) CallBackNumber);
                    tmp = StringPrint(tmp, "] to [");
                    tmp = StringPrint(tmp, (char*) DestinationId);
                    tmp = StringPrint(tmp, "]");
                    PrintStatus(0, StatusString);

                    if (strlen((char*) DisplayText) == 1) {
                        if ((DisplayText[0] >= '0') && (DisplayText[0] <= '9')) {
                            char * ptr = StringPrint(StatusString, "Dialing: ");
                            UByte receiver = DisplayText[0] - '0';
                            ptr = StrPrintHexByte(ptr, receiver);
                            PrintStatus(0, StatusString);
                            /*callUser((char*) DisplayText, 0, "Call from FP");*/
                        }
                    }

                    msf_outgMessageIndReceived(PMID2PPID(TheSignal->Address), SSAAAD[0], SSAAAD[1], SSAAAD[2], SSAAAD[3], SSAAAD[4], SSAAAD[5], (char*) DestinationId, (char*) DisplayText, PMID2PPID(TheSignal->Address));
                    mem_free(DestinationId);
                    mem_free(DisplayText);
                    mem_free(CallBackNumber);
                }
                break;
            }
        }
        break;

        case IWU_PRIMITIVE:
        {
            switch (TheSignal->SubEvent)
            {
                case CC_ALERTING_prim:
                {
                    if (applicationInstanceData != NULL) {
                        voice_incommingCallAlerting(PMID2PPID(applicationInstanceData->pmid), applicationInstanceData->connectedTo);
                    }
                    PrintStatus(0, "Application: alerting....\n");
                }
                break;
                case CC_CONNECT_prim:
                {
                    extern void setupvoice(PPIDType a, PPIDType b);
                    setupvoice(PMID2PPID(applicationInstanceData->pmid), applicationInstanceData->connectedTo);

                    PrintStatus(0, "fp_application: CC_CONNECT_prim");

                    handleConnectPrim(TheSignal->Address, applicationInstanceData);
                    voice_callConnected(PMID2PPID(applicationInstanceData->pmid), applicationInstanceData->connectedTo);
                }
                break;
                case CC_RELEASE_prim:
                {
                    ApplicationInstanceType * wasConnectedTo;
                    PPID2PMID(&tmpPmid, applicationInstanceData->connectedTo);
                    wasConnectedTo = getApplicationInstance(tmpPmid);
                    wasConnectedTo->connectedTo = 0xffff;
                    voice_callDisconnected(PMID2PPID(applicationInstanceData->pmid), applicationInstanceData->connectedTo, 0x00);
                    handleReleasePrim(TheSignal, applicationInstanceData);
                }
                break;
            };

        }
        break;

        case APP_SS_PRIMITIVE:
        {
            switch (TheSignal->SubEvent)
            {
                case SIO_MSF_SETUP_req: /*from serial / ip*/
                {

                }
                break;

                case SIO_MSF_SETUP_ind: /*from pp*/
                {
                    applicationInstanceData->msfState = msf_session_requested_from_pp;
                    msf_msfsetupIndReceived(PMID2PPID(TheSignal->Address), (char*) getSignalData(TheSignal));
                }
                break;

                case SIO_MSF_CONNECT_res:
                {
                    /*SioMsfConnectResType *SioMsfConnectRes = (SioMsfConnectResType *) TheSignal;*/
                }
                break;

                case SIO_MSF_CONNECT_cfm:
                {
                    msf_connectCfmReceived(PMID2PPID(TheSignal->Address));
                }
                break;

                case SIO_MSF_INFO_ind:
                {
                    msf_infoIndReceived(PMID2PPID(TheSignal->Address), getSignalData(TheSignal)[0]);
                }
                break;

                case SIO_MSF_INFO_req:
                {
                    /*SioMsfInfoReqType *SioMsfInfoReq = (SioMsfInfoReqType *) TheSignal;*/
                }
                break;

                case SIO_MSF_RELEASE_req:
                {
                    /*SioMsfReleaseReqType *SioMsfReleaseReq = (SioMsfReleaseReqType *) TheSignal;*/
                }
                break;

                case SIO_MSF_RELEASE_ind:
                {
                    applicationInstanceData->msfState = msf_idle;
                    msf_releaseIndReceived(PMID2PPID(applicationInstanceData->pmid), getSignalData(TheSignal)[0]);
                }
                break;

                case SIO_MSF_OUTG_MESSAGE_ind:
                {
                }
                break;

                case SIO_PP_STATUS_req:
                {
                    /*SioPpStatusReadReqType *SioPpStatusReq = (SioPpStatusReadReqType *) TheSignal;*/
                    /*int i = 0;*/
                }
                break;

                case SIO_PP_STATUS_ind:
                {
                    SioPpStatusIndType *SioPpStatusInd;
                    SioPpStatusInd = (SioPpStatusIndType*) TheSignal;
                    msf_ppstatus_ind_received(PMID2PPID(applicationInstanceData->pmid), SioPpStatusInd->StatusType, getSioPpStatusIndTypeIE(SioPpStatusInd), SioPpStatusInd->SignalHeader.SignalLength
                            - offsetof(SioPpStatusIndType,StatusType) - 1);
                }
                break;
            }
        }
        break;

        case TIME_OUT_EVENT:
        {
            TimerType * timerPtr = (TimerType*) TheSignal;
            PMIDType pmid;
            UByte dataLength = TheSignal->SignalLength - timerSize();

            PPID2PMID(&pmid, (PPIDType) -1);

            if (memcmp(TheSignal->Address, pmid, sizeof(PMIDType)) != 0) {
                getApplicationInstance(TheSignal->Address)->timer = NULL;
            }

            fp_general_timeout(PMID2PPID(TheSignal->Address), TheSignal->SubEvent, getTimerData(timerPtr), dataLength);
        }
        break;
    };
    DeleteBuffer(TheSignal);
}