/** This function tells the h.323 stack to either answer or deny an incoming call */ int h323_answering_call(const char *token, int busy) { const PString currentToken(token); H323Connection * connection; connection = endPoint->FindConnectionWithLock(currentToken); if (!connection) { cout << "No connection found for " << token << endl; return -1; } if (!busy) { if (h323debug) { cout << "\tAnswering call " << token << endl; } connection->AnsweringCall(H323Connection::AnswerCallNow); } else { if (h323debug) { cout << "\tdenying call " << token << endl; } connection->AnsweringCall(H323Connection::AnswerCallDenied); } connection->Unlock(); return 0; }
void MyH323EndPoint::OnConnectionEstablished(H323Connection & connection, const PString & estCallToken) { if (h323debug) { cout << "\t=-= In OnConnectionEstablished for call " << connection.GetCallReference() << endl; cout << "\t\t-- Connection Established with \"" << connection.GetRemotePartyName() << "\"" << endl; } on_connection_established(connection.GetCallReference(), (const char *)connection.GetCallToken()); }
void InputTonePlugin::sendTone( char tone ) { if( !endPoint ) return; H323Connection *c = endPoint->FindConnectionWithLock( currentCallToken.latin1() ); if( !c ) return; c->SendUserInputTone(tone); c->Unlock(); }
void MyH323EndPoint::SendUserTone(const PString &token, char tone) { H323Connection *connection = NULL; connection = FindConnectionWithLock(token); if (connection != NULL) { connection->SendUserInputTone(tone, 500); connection->Unlock(); } }
/* Send Progress PDU to H.323 caller */ int h323_send_progress(const char *token) { const PString currentToken(token); H323Connection * connection; connection = endPoint->FindConnectionWithLock(currentToken); if (!connection) { cout << "No connection found for " << token << endl; return -1; } connection->AnsweringCall(H323Connection::AnswerCallDeferredWithMedia); connection->Unlock(); return 0; }
H323Connection::AnswerCallResponse CMfcEndPoint::OnAnswerCall(H323Connection & connection, const PString &caller, const H323SignalPDU &, H323SignalPDU &) { m_dialog->m_token = connection.GetCallToken(); m_dialog->m_caller.SetWindowText(caller + " is calling."); m_dialog->m_answer.EnableWindow(); m_dialog->m_refuse.EnableWindow(); m_dialog->m_call.EnableWindow(false); return H323Connection::AnswerCallPending; }
void CMfcEndPoint::OnConnectionEstablished(H323Connection & connection, const PString & token) { m_dialog->m_token = token; m_dialog->m_call.EnableWindow(false); m_dialog->m_answer.EnableWindow(false); m_dialog->m_refuse.EnableWindow(false); m_dialog->m_hangup.EnableWindow(); m_dialog->m_caller.SetWindowText("In call with " + connection.GetRemotePartyName()); }
/* Send Alerting PDU to H.323 caller */ int h323_send_alerting(const char *token) { const PString currentToken(token); H323Connection * connection; if (h323debug) { cout << "\tSending alerting\n" << endl; } connection = endPoint->FindConnectionWithLock(currentToken); if (!connection) { cout << "No connection found for " << token << endl; return -1; } connection->AnsweringCall(H323Connection::AnswerCallPending); connection->Unlock(); return 0; }
void CMyPhoneEndPoint::OnConnectionEstablished(H323Connection & connection, const PString & token) { m_dialog->m_token = token; CString goodName = (LPCTSTR)connection.GetRemotePartyName(); // store last number in combobox if(!connection.HadAnsweredCall()) { m_dialog->PhoneBookAddCall(1, CString((LPCTSTR)connection.GetRemotePartyName()), m_dialog->GetSimpleAdr(CString((LPCTSTR)connection.GetRemotePartyAddress()))); m_dialog->StoreDestonation(goodName /*(const char *)connection.GetRemotePartyName()*/); } else { // store in Address Book m_dialog->PhoneBookAddCall(2, CString((LPCTSTR)connection.GetRemotePartyName()), m_dialog->GetSimpleAdr(CString((LPCTSTR)connection.GetRemotePartyAddress()))); if(m_dialog->autoAddInAddr) m_dialog->StoreDestonation(goodName /*(const char *)connection.GetRemotePartyName()*/, TRUE); } m_dialog->OnConnectionEstablished(m_dialog->FindContactName(connection) /*(const char *)connection.GetRemotePartyName()*/); }
void CMyPhoneEndPoint::OnRTPStatistics(const H323Connection & connection, const RTP_Session & session) const { // Lock mutex if(!(((CMyPhoneEndPoint *)this)->m_StatLock.Lock(10))) return; // Reset statistic m_stat.ibSent = m_stat.ibRcvd =0; // Getting Audio statistic part RTP_Session * asession = connection.GetSession(RTP_Session::DefaultAudioSessionID); if (asession != NULL) { int abSent=0, abRcvd=0; // If not sending or receiving Audio, memory read error happens. try{ abSent = asession->GetOctetsSent(); } catch(...) {abSent = 0;} try{ abRcvd = asession->GetOctetsReceived(); } catch(...) {abRcvd = 0;} m_stat.ibSent = abSent; m_stat.ibRcvd = abRcvd; } // Getting Video statistic part RTP_Session * vsession = connection.GetSession(RTP_Session::DefaultVideoSessionID); if (vsession != NULL) { int vbSent=0, vbRcvd=0; // If not sending or receiving Vidio // mamory read error happends. try{ vbSent = vsession->GetOctetsSent(); } catch(...) {vbSent = 0;} try{ vbRcvd = vsession->GetOctetsReceived(); } catch(...) {vbRcvd = 0;} m_stat.ibSent += vbSent; m_stat.ibRcvd += vbRcvd; } m_stat.iDelay = connection.GetRoundTripDelay().GetInterval(); m_stat.iSecs = (PTime() - connection.GetConnectionStartTime()).GetSeconds(); // // Release mutex ((CMyPhoneEndPoint *)this)->m_StatLock.Unlock(); }
void CMyPhoneEndPoint::OnConnectionCleared(H323Connection & connection, const PString & clearedCallToken) { if(connection.GetCallEndReason()==H323Connection::EndedByRemoteBusy) m_dialog->OutputStatusStr((LPCTSTR)LoadStringLang(IDS_CALLBUSYSTR), S_SYSTEM, m_dialog->FindContactName(connection)); // clearing statistic m_stat.iSecs=0; m_stat.ibSent=0; m_stat.ibRcvd=0; m_stat.iDelay=0; // UI change m_dialog->OnConnectionCleared(m_dialog->FindContactName(connection)); }
void OnTimeout() { PTimeInterval duration = PTime() - con->GetConnectionStartTime(); int rest = duration.GetSeconds(); int hour, min, sec; hour = rest / 3600; rest = rest % 3600; min = rest / 60; rest = rest % 60; sec = rest; char buf[9]; if( hour ) sprintf(buf, "%02d:%02d:%02d", hour, min, sec ); else sprintf(buf, "%02d:%02d", min, sec ); ancaInfo->set( CALL_DURATION, buf ); }
/** OnConnectionCleared callback function is called upon the dropping of an established * H323 connection. */ void MyH323EndPoint::OnConnectionCleared(H323Connection & connection, const PString & clearedCallToken) { PString remoteName = connection.GetRemotePartyName(); switch (connection.GetCallEndReason()) { case H323Connection::EndedByCallForwarded: if (h323debug) { cout << "-- " << remoteName << " has forwarded the call" << endl; } break; case H323Connection::EndedByRemoteUser: if (h323debug) { cout << "-- " << remoteName << " has cleared the call" << endl; } break; case H323Connection::EndedByCallerAbort: if (h323debug) { cout << "-- " << remoteName << " has stopped calling" << endl; } break; case H323Connection::EndedByRefusal: if (h323debug) { cout << "-- " << remoteName << " did not accept your call" << endl; } break; case H323Connection::EndedByRemoteBusy: if (h323debug) { cout << "-- " << remoteName << " was busy" << endl; } break; case H323Connection::EndedByRemoteCongestion: if (h323debug) { cout << "-- Congested link to " << remoteName << endl; } break; case H323Connection::EndedByNoAnswer: if (h323debug) { cout << "-- " << remoteName << " did not answer your call" << endl; } break; case H323Connection::EndedByTransportFail: if (h323debug) { cout << "-- Call with " << remoteName << " ended abnormally" << endl; } break; case H323Connection::EndedByCapabilityExchange: if (h323debug) { cout << "-- Could not find common codec with " << remoteName << endl; } break; case H323Connection::EndedByNoAccept: if (h323debug) { cout << "-- Did not accept incoming call from " << remoteName << endl; } break; case H323Connection::EndedByAnswerDenied: if (h323debug) { cout << "-- Refused incoming call from " << remoteName << endl; } break; case H323Connection::EndedByNoUser: if (h323debug) { cout << "-- Remote endpoint could not find user: "******"-- Call to " << remoteName << " aborted, insufficient bandwidth." << endl; } break; case H323Connection::EndedByUnreachable: if (h323debug) { cout << "-- " << remoteName << " could not be reached." << endl; } break; case H323Connection::EndedByHostOffline: if (h323debug) { cout << "-- " << remoteName << " is not online." << endl; } break; case H323Connection::EndedByNoEndPoint: if (h323debug) { cout << "-- No phone running for " << remoteName << endl; } break; case H323Connection::EndedByConnectFail: if (h323debug) { cout << "-- Transport error calling " << remoteName << endl; } break; default: if (h323debug) cout << " -- Call with " << remoteName << " completed (" << connection.GetCallEndReason() << ")" << endl; } if (connection.IsEstablished()) { if (h323debug) { cout << "\t-- Call duration " << setprecision(0) << setw(5) << (PTime() - connection.GetConnectionStartTime()) << endl; } } /* Invoke the PBX application registered callback */ on_connection_cleared(connection.GetCallReference(), clearedCallToken); return; }
/** OnConnectionCleared callback function is called upon the dropping of an established * H323 connection. */ void MyH323EndPoint::OnConnectionCleared(H323Connection & connection, const PString & clearedCallToken) { PString remoteName; call_details_t cd; PIPSocket::Address Ip; WORD sourcePort; remoteName = connection.GetRemotePartyName(); cd.call_reference = connection.GetCallReference(); cd.call_token = strdup((const char *)clearedCallToken); cd.call_source_aliases = strdup((const char *)connection.GetRemotePartyName()); connection.GetSignallingChannel()->GetRemoteAddress().GetIpAndPort(Ip, sourcePort); cd.sourceIp = strdup((const char *)Ip.AsString()); /* Convert complex strings */ char *s; if ((s = strchr(cd.call_source_aliases, ' ')) != NULL) *s = '\0'; switch (connection.GetCallEndReason()) { case H323Connection::EndedByCallForwarded : if (h323debug) cout << " -- " << remoteName << " has forwarded the call" << endl; break; case H323Connection::EndedByRemoteUser : if (h323debug) cout << " -- " << remoteName << " has cleared the call" << endl; break; case H323Connection::EndedByCallerAbort : if (h323debug) cout << " -- " << remoteName << " has stopped calling" << endl; break; case H323Connection::EndedByRefusal : if (h323debug) cout << " -- " << remoteName << " did not accept your call" << endl; break; case H323Connection::EndedByRemoteBusy : if (h323debug) cout << " -- " << remoteName << " was busy" << endl; break; case H323Connection::EndedByRemoteCongestion : if (h323debug) cout << " -- Congested link to " << remoteName << endl; break; case H323Connection::EndedByNoAnswer : if (h323debug) cout << " -- " << remoteName << " did not answer your call" << endl; break; case H323Connection::EndedByTransportFail : if (h323debug) cout << " -- Call with " << remoteName << " ended abnormally" << endl; break; case H323Connection::EndedByCapabilityExchange : if (h323debug) cout << " -- Could not find common codec with " << remoteName << endl; break; case H323Connection::EndedByNoAccept : if (h323debug) cout << " -- Did not accept incoming call from " << remoteName << endl; break; case H323Connection::EndedByAnswerDenied : if (h323debug) cout << " -- Refused incoming call from " << remoteName << endl; break; case H323Connection::EndedByNoUser : if (h323debug) cout << " -- Remote endpoint could not find user: "******" -- Call to " << remoteName << " aborted, insufficient bandwidth." << endl; break; case H323Connection::EndedByUnreachable : if (h323debug) cout << " -- " << remoteName << " could not be reached." << endl; break; case H323Connection::EndedByHostOffline : if (h323debug) cout << " -- " << remoteName << " is not online." << endl; break; case H323Connection::EndedByNoEndPoint : if (h323debug) cout << " -- No phone running for " << remoteName << endl; break; case H323Connection::EndedByConnectFail : if (h323debug) cout << " -- Transport error calling " << remoteName << endl; break; default : if (h323debug) cout << " -- Call with " << remoteName << " completed (" << connection.GetCallEndReason() << ")" << endl; } if(connection.IsEstablished()) if (h323debug) cout << " -- Call duration " << setprecision(0) << setw(5) << (PTime() - connection.GetConnectionStartTime()) << endl; /* Invoke the PBX application registered callback */ on_connection_cleared(cd); return; }