]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Add IAX2/SIP register events to system (bug #2117)
authorMark Spencer <markster@digium.com>
Thu, 16 Sep 2004 16:18:53 +0000 (16:18 +0000)
committerMark Spencer <markster@digium.com>
Thu, 16 Sep 2004 16:18:53 +0000 (16:18 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3792 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_iax2.c
channels/chan_sip.c

index b0888a96b879962e7ee9c83ec6a95a9dc6971ea5..e91018955e4c75076bfde8428b6a46527e9c72f6 100755 (executable)
@@ -4152,6 +4152,7 @@ static int iax2_ack_registry(struct iax_ies *ies, struct sockaddr_in *sin, int c
                        snprintf(msgstatus, sizeof(msgstatus), " with no messages waiting\n");
                snprintf(ourip, sizeof(ourip), "%s:%d", ast_inet_ntoa(iabuf, sizeof(iabuf), reg->us.sin_addr), ntohs(reg->us.sin_port));
                ast_verbose(VERBOSE_PREFIX_3 "Registered to '%s', who sees us as %s%s\n", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr), ourip, msgstatus);
+               manager_event(EVENT_FLAG_SYSTEM, "Registry", "Channel: IAX2\r\nDomain: %s\r\nStatus: Registered\r\n", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr));
        }
        reg->regstate = REG_STATE_REGISTERED;
        return 0;
@@ -4319,11 +4320,13 @@ static int update_registry(char *name, struct sockaddr_in *sin, int callno, char
                                if  (option_verbose > 2)
                                ast_verbose(VERBOSE_PREFIX_3 "Registered '%s' (%s) at %s:%d\n", p->name, 
                                        iaxs[callno]->state & IAX_STATE_AUTHENTICATED ? "AUTHENTICATED" : "UNAUTHENTICATED", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr), ntohs(sin->sin_port));
+                               manager_event(EVENT_FLAG_SYSTEM, "PeerStatus", "Peer: IAX2/%s\r\nPeerStatus: Registered\r\n", p->name);+                               manager_event(EVENT_FLAG_SYSTEM, "PeerStatus", "Peer: IAX2/%s\r\nPeerStatus: Registered\r\n", p->name);
                                register_peer_exten(p, 1);
                        } else {
                                if  (option_verbose > 2)
                                ast_verbose(VERBOSE_PREFIX_3 "Unregistered '%s' (%s)\n", p->name, 
                                        iaxs[callno]->state & IAX_STATE_AUTHENTICATED ? "AUTHENTICATED" : "UNAUTHENTICATED");
+                               manager_event(EVENT_FLAG_SYSTEM, "PeerStatus", "Peer: IAX2/%s\r\nPeerStatus: Unregistered\r\n", p->name);
                                register_peer_exten(p, 0);
                                ast_db_del("IAX/Registry", p->name);
                        }
@@ -5499,9 +5502,11 @@ retryowner2:
                                        if ((peer->lastms < 0)  || (peer->lastms > peer->maxms)) {
                                                if (iaxs[fr.callno]->pingtime <= peer->maxms)
                                                        ast_log(LOG_NOTICE, "Peer '%s' is now REACHABLE!\n", peer->name);
+                                                       manager_event(EVENT_FLAG_SYSTEM, "PeerStatus", "Peer: IAX2/%s\r\nPeerStatus: Reachable\r\nTime: %d\r\n", peer->name,iaxs[fr.callno]->pingtime); 
                                        } else if ((peer->lastms > 0) && (peer->lastms <= peer->maxms)) {
                                                if (iaxs[fr.callno]->pingtime > peer->maxms)
                                                        ast_log(LOG_NOTICE, "Peer '%s' is now TOO LAGGED (%d ms)!\n", peer->name, iaxs[fr.callno]->pingtime);
+                                                       manager_event(EVENT_FLAG_SYSTEM, "PeerStatus", "Peer: IAX2/%s\r\nPeerStatus: Lagged\r\nTime: %d\r\n", peer->name,iaxs[fr.callno]->pingtime); 
                                        }
                                        peer->lastms = iaxs[fr.callno]->pingtime;
                                        if (peer->pokeexpire > -1)
@@ -5694,8 +5699,10 @@ retryowner2:
                                break;
                        case IAX_COMMAND_REGREJ:
                                if (iaxs[fr.callno]->reg) {
-                                       if (authdebug)
+                                       if (authdebug) {
                                                ast_log(LOG_NOTICE, "Registration of '%s' rejected: %s\n", iaxs[fr.callno]->reg->username, ies.cause ? ies.cause : "<unknown>");
+                                               manager_event(EVENT_FLAG_SYSTEM, "Registry", "Channel: IAX2\r\nUsername: %s\r\nStatus: Rejected\r\nCause: %s\r\n", iaxs[fr.callno]->reg->username, ies.cause ? ies.cause : "<unknown>");
+                                       }
                                        iaxs[fr.callno]->reg->regstate = REG_STATE_REJECTED;
                                }
                                /* Send ack immediately, before we destroy */
@@ -5996,8 +6003,10 @@ static int iax2_poke_noanswer(void *data)
 {
        struct iax2_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_SYSTEM, "PeerStatus", "Peer: IAX2/%s\r\nPeerStatus: Unreachable\r\nTime: %d\r\n", peer->name,peer->lastms);
+       }
        if (peer->callno > 0)
                iax2_destroy(peer->callno);
        peer->callno = 0;
index a271f20c5f42476a3e5ab12c6076bfe80c0b5d69..c2595f082f1692a363d427f74dabc3075d43ad38 100755 (executable)
@@ -28,6 +28,7 @@
 #include <asterisk/io.h>
 #include <asterisk/rtp.h>
 #include <asterisk/acl.h>
+#include <asterisk/manager.h>
 #include <asterisk/callerid.h>
 #include <asterisk/cli.h>
 #include <asterisk/md5.h>
@@ -4019,6 +4020,7 @@ static int sip_reg_timeout(void *data)
                p->needdestroy = 1;
        }
        r->regstate=REG_STATE_UNREGISTERED;
+       manager_event(EVENT_FLAG_SYSTEM, "Registry", "Channel: SIP\r\nDomain: %s\r\nStatus: %s\r\n", r->hostname, regstate2str(r->regstate));
        r->timeout = -1;
        res=transmit_register(r, "REGISTER", NULL, NULL);
        ast_mutex_unlock(&regl.lock);
@@ -4271,6 +4273,7 @@ static int expire_register(void *data)
        struct sip_peer *p = data;
        memset(&p->addr, 0, sizeof(p->addr));
        ast_db_del("SIP/Registry", p->name);
+       manager_event(EVENT_FLAG_SYSTEM, "PeerStatus", "Peer: SIP/%s\r\nPeerStatus: Unregistered\r\nCause: Expired\r\n", p->name);
        register_peer_exten(p, 0);
        p->expire = -1;
        ast_device_state_changed("SIP/%s", p->name);
@@ -4395,6 +4398,7 @@ static int parse_contact(struct sip_pvt *pvt, struct sip_peer *p, struct sip_req
                p->lastms = 0;
                if (option_verbose > 2)
                        ast_verbose(VERBOSE_PREFIX_3 "Unregistered SIP '%s'\n", p->name);
+                       manager_event(EVENT_FLAG_SYSTEM, "PeerStatus", "Peer: SIP/%s\r\nPeerStatus: Unregistered\r\n", p->name);
                return 0;
        }
        strncpy(p->fullcontact, c, sizeof(p->fullcontact) - 1);
@@ -4455,6 +4459,7 @@ static int parse_contact(struct sip_pvt *pvt, struct sip_peer *p, struct sip_req
        pvt->expiry = expiry;
        snprintf(data, sizeof(data), "%s:%d:%d:%s:%s", ast_inet_ntoa(iabuf, sizeof(iabuf), p->addr.sin_addr), ntohs(p->addr.sin_port), expiry, p->username, p->fullcontact);
        ast_db_put("SIP/Registry", p->name, data);
+       manager_event(EVENT_FLAG_SYSTEM, "PeerStatus", "Peer: SIP/%s\r\nPeerStatus: Registered\r\n", p->name);
        if (inaddrcmp(&p->addr, &oldsin)) {
                sip_poke_peer(p);
                if (option_verbose > 2)
@@ -4849,6 +4854,7 @@ static int register_verify(struct sip_pvt *p, struct sockaddr_in *sin, struct si
                                ast_log(LOG_WARNING, "Failed to parse contact info\n");
                        } else {
                                /* Say OK and ask subsystem to retransmit msg counter */
+                               manager_event(EVENT_FLAG_SYSTEM, "PeerStatus", "Peer: SIP/%s\r\nPeerStatus: Registered\r\n", peer->name);
                                transmit_response_with_date(p, "200 OK", req);
                                peer->lastmsgssent = -1;
                                res = 0;
@@ -6559,6 +6565,7 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_
                   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 +
@@ -6569,19 +6576,27 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_
                                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_SYSTEM, "PeerStatus", "Peer: SIP/%s\r\nPeerStatus: Lagged\r\nTime: %d\r\n", peer->name, pingtime);
+                               } else {
+                                       manager_event(EVENT_FLAG_SYSTEM, "PeerStatus", "Peer: SIP/%s\r\nPeerStatus: Reachable\r\nTime: %d\r\n", peer->name, pingtime);
+                               }
+                       }
 
                        if (peer->pokeexpire > -1)
                                ast_sched_del(sched, peer->pokeexpire);
@@ -6669,6 +6684,7 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_
                                r=p->registry;
                                if (r) {
                                        r->regstate=REG_STATE_REGISTERED;
+                                       manager_event(EVENT_FLAG_SYSTEM, "Registry", "Channel: SIP\r\nDomain: %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);
@@ -7817,8 +7833,10 @@ static int sip_poke_noanswer(void *data)
        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_SYSTEM, "PeerStatus", "Peer: SIP/%s\r\nPeerStatus: Unreachable\r\nTime: %d\r\n", peer->name, -1);
+       }
        if (peer->call)
                sip_destroy(peer->call);
        peer->call = NULL;