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 ); }
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(); }
/** 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; }