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