Index: asterisk/channels/chan_sip.c =================================================================== RCS file: /usr/cvsroot/asterisk/channels/chan_sip.c,v retrieving revision 1.460 diff -u -r1.460 chan_sip.c --- asterisk/channels/chan_sip.c 22 Jul 2004 23:16:40 -0000 1.460 +++ asterisk/channels/chan_sip.c 23 Jul 2004 01:12:25 -0000 @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -3919,6 +3920,7 @@ p->needdestroy = 1; } r->regstate=REG_STATE_UNREGISTERED; + manager_event(EVENT_FLAG_CALL, "SIPRegistry", "Domain: %s\r\nStatus: %s\r\n", r->hostname, regstate2str(r->regstate)); r->timeout = -1; res=transmit_register(r, "REGISTER", NULL, NULL); ast_mutex_unlock(®l.lock); @@ -4246,6 +4248,7 @@ p->lastms = 0; if (option_verbose > 2) ast_verbose(VERBOSE_PREFIX_3 "Unregistered SIP '%s'\n", p->name); + manager_event(EVENT_FLAG_CALL, "SIPPeerRegistration", "Peername: %s\r\nStatus: Offline\r\n", p->name); return 0; } /* Make sure it's a SIP URL */ @@ -4690,6 +4693,7 @@ ast_log(LOG_WARNING, "Failed to parse contact info\n"); } else { /* Say OK and ask subsystem to retransmit msg counter */ + manager_event(EVENT_FLAG_CALL, "SIPPeerRegistration", "Peername: %s\r\nStatus: Registered\r\n", peer->name); transmit_response_with_date(p, "200 OK", req); peer->lastmsgssent = -1; res = 0; @@ -6384,6 +6388,7 @@ need to hang around for something more "difinitive" */ if (resp != 100) { int statechanged = 0; + int newstate = 0; peer = p->peerpoke; gettimeofday(&tv, NULL); pingtime = (tv.tv_sec - peer->ps.tv_sec) * 1000 + @@ -6394,19 +6399,27 @@ if (pingtime <= peer->maxms) { ast_log(LOG_NOTICE, "Peer '%s' is now REACHABLE!\n", peer->name); statechanged = 1; + newstate = 1; } } else if ((peer->lastms > 0) && (peer->lastms <= peer->maxms)) { if (pingtime > peer->maxms) { ast_log(LOG_NOTICE, "Peer '%s' is now TOO LAGGED!\n", peer->name); statechanged = 1; + newstate = 2; } } if (!peer->lastms) statechanged = 1; peer->lastms = pingtime; peer->call = NULL; - if (statechanged) - ast_device_state_changed("SIP/%s", peer->name); + if (statechanged) { + ast_device_state_changed("SIP/%s", peer->name); + if (newstate == 2) { + manager_event(EVENT_FLAG_CALL, "SIPPeerStatus", "Peer: %s\r\nStatus: %s\r\nTime: %d\r\n", peer->name, "lagged", pingtime); + } else { + manager_event(EVENT_FLAG_CALL, "SIPPeerStatus", "Peer: %s\r\nStatus: %s\r\nTime: %d\r\n", peer->name, "reachable", pingtime); + } + } if (peer->pokeexpire > -1) ast_sched_del(sched, peer->pokeexpire); @@ -6495,6 +6508,7 @@ r=p->registry; if (r) { r->regstate=REG_STATE_REGISTERED; + manager_event(EVENT_FLAG_CALL, "SIPRegistry", "Domain: %s\r\nStatus: %s\r\n", r->hostname, regstate2str(r->regstate)); ast_log(LOG_DEBUG, "Registration successful\n"); if (r->timeout > -1) { ast_log(LOG_DEBUG, "Cancelling timeout %d\n", r->timeout); @@ -7636,8 +7650,10 @@ struct sip_peer *peer = data; peer->pokeexpire = -1; - if (peer->lastms > -1) + if (peer->lastms > -1) { ast_log(LOG_NOTICE, "Peer '%s' is now UNREACHABLE!\n", peer->name); + manager_event(EVENT_FLAG_CALL, "SIPPeerStatus", "Peer: %s\r\nStatus: %s\r\nTime: %d\r\n", peer->name, "unreachable", -1); + } if (peer->call) sip_destroy(peer->call); peer->call = NULL;