int CallHoldCommand::execute(int argc, char* argv[])
{
	int commandStatus = CommandProcessor::COMMAND_FAILED;
	if(argc == 2)
	{
		if(sipxCallHold(atoi(argv[1])) == SIPX_RESULT_SUCCESS)
		{
			printf("Call with ID: %d is on hold.\n", atoi(argv[1]));
		}
		else
		{
			printf("Invalid argument.\n");
			commandStatus = CommandProcessor::COMMAND_BAD_SYNTAX;
		}
	}
	else
	{
		UtlString usage;
        getUsage(argv[0], &usage);
        printf("%s", usage.data());
        commandStatus = CommandProcessor::COMMAND_BAD_SYNTAX;
	}
	return commandStatus;
}
Exemple #2
0
bool SIPX_CALLING_CONVENTION AutoAnswerCallbackHolder(SIPX_EVENT_CATEGORY category, 
                                                        void* pInfo, 
                                                        void* pUserData)
{
    if (category == EVENT_CATEGORY_CALLSTATE)
    {
        SIPX_CALLSTATE_INFO* pCallInfo = (SIPX_CALLSTATE_INFO*) pInfo;

        if (g_hAutoAnswerCallbackCallHolder == 0)
        {
            g_hAutoAnswerCallbackCallHolder = pCallInfo->hCall;
        }
        else if (g_hAutoAnswerCallbackCallHolder != pCallInfo->hCall)
        {
            g_hAutoAnswerCallbackCallOtherHolder = pCallInfo->hCall ;
        }
        g_hAutoAnswerCallbackLineHolder = pCallInfo->hLine;
        
        
        // If we have user data verify the line url against it
        if (pUserData)
        {
            char szBuffer[500] ; 
            size_t nBuffer ;

            if (strlen((const char*) pUserData))
            {
                if (pCallInfo->hLine)  // hLine can be 0, and therefore, sipxLineGetURI should fail)
                {
                    CPPUNIT_ASSERT_EQUAL(sipxLineGetURI(pCallInfo->hLine, szBuffer, sizeof(szBuffer), nBuffer), SIPX_RESULT_SUCCESS) ;
                }
            }
        }

        switch(pCallInfo->event)
        {
            case CALLSTATE_OFFERING:
                sipxCallAccept(pCallInfo->hCall) ;
                break ;
            case CALLSTATE_ALERTING:
                {
                    // printf("%d Alerting\n", GetTickCount()) ;
                    int delay = rand() % 500 ;
                    OsTask::delay(delay) ;
                    // printf("%d Answering\n", GetTickCount()) ;
                    sipxCallAnswer(pCallInfo->hCall) ;                    
                    delay = rand() % 500 ;
                    OsTask::delay(delay) ;
                    // printf("%d Holding\n", GetTickCount()) ;
                    sipxCallHold(pCallInfo->hCall, true) ;                   
                }
                break ;
            case CALLSTATE_DISCONNECTED:
                {
                    // printf("%d Dropping\n", GetTickCount()) ;
                    SIPX_CALL hDestroy = pCallInfo->hCall ;
                    sipxCallDestroy(hDestroy) ; 
                }
                break ;
            default:
                break ;
        }
    }     
    
    return true;
}