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; }
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; }