From 5c627eba2b9161e985e9749955746ba61f992dc0 Mon Sep 17 00:00:00 2001 From: Gregory Nietsky Date: Mon, 25 Jul 2011 09:39:54 +0000 Subject: [PATCH] Remove lastmsgssent from sip it has not been working since 1.6 Clean up the return values to be consistant not currently used Add doxygen returns MWI Event is sent on Register (closes issue ASTERISK-17866) Reported by: one47 Tested by: irroot, mvanbaak Review: https://reviewboard.asterisk.org/r/1172/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@329391 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 37 +++++++++++++++++-------------------- channels/sip/include/sip.h | 1 - 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index a0b9cb037a..47e3fe78e9 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -14588,24 +14588,21 @@ static enum check_auth_result register_verify(struct sip_pvt *p, struct ast_sock } else { /* We have a successful registration attempt with proper authentication, - now, update the peer */ + now, update the peer */ switch (parse_register_contact(p, peer, req)) { case PARSE_REGISTER_DENIED: ast_log(LOG_WARNING, "Registration denied because of contact ACL\n"); transmit_response_with_date(p, "603 Denied", req); - peer->lastmsgssent = -1; res = 0; break; case PARSE_REGISTER_FAILED: ast_log(LOG_WARNING, "Failed to parse contact info\n"); transmit_response_with_date(p, "400 Bad Request", req); - peer->lastmsgssent = -1; res = 0; break; case PARSE_REGISTER_QUERY: ast_string_field_set(p, fullcontact, peer->fullcontact); transmit_response_with_date(p, "200 OK", req); - peer->lastmsgssent = -1; res = 0; break; case PARSE_REGISTER_UPDATE: @@ -14613,8 +14610,6 @@ static enum check_auth_result register_verify(struct sip_pvt *p, struct ast_sock update_peer(peer, p->expiry); /* Say OK and ask subsystem to retransmit msg counter */ transmit_response_with_date(p, "200 OK", req); - if (!ast_test_flag((&peer->flags[1]), SIP_PAGE2_SUBSCRIBEMWIONLY)) - peer->lastmsgssent = -1; res = 0; break; } @@ -14639,19 +14634,16 @@ static enum check_auth_result register_verify(struct sip_pvt *p, struct ast_sock case PARSE_REGISTER_DENIED: ast_log(LOG_WARNING, "Registration denied because of contact ACL\n"); transmit_response_with_date(p, "403 Forbidden (ACL)", req); - peer->lastmsgssent = -1; res = 0; break; case PARSE_REGISTER_FAILED: ast_log(LOG_WARNING, "Failed to parse contact info\n"); transmit_response_with_date(p, "400 Bad Request", req); - peer->lastmsgssent = -1; res = 0; break; case PARSE_REGISTER_QUERY: ast_string_field_set(p, fullcontact, peer->fullcontact); transmit_response_with_date(p, "200 OK", req); - peer->lastmsgssent = -1; res = 0; break; case PARSE_REGISTER_UPDATE: @@ -14659,7 +14651,6 @@ static enum check_auth_result register_verify(struct sip_pvt *p, struct ast_sock /* Say OK and ask subsystem to retransmit msg counter */ transmit_response_with_date(p, "200 OK", req); manager_event(EVENT_FLAG_SYSTEM, "PeerStatus", "ChannelType: SIP\r\nPeer: SIP/%s\r\nPeerStatus: Registered\r\nAddress: %s\r\n", peer->name, ast_sockaddr_stringify(addr)); - peer->lastmsgssent = -1; res = 0; break; } @@ -14675,6 +14666,7 @@ static enum check_auth_result register_verify(struct sip_pvt *p, struct ast_sock sched_yield(); } if (!res) { + sip_send_mwi_to_peer(peer, NULL, 0); ast_devstate_changed(AST_DEVICE_UNKNOWN, "SIP/%s", peer->name); } if (res < 0) { @@ -17337,7 +17329,6 @@ static char *_sip_show_peer(int type, int fd, struct mansession *s, const struct ast_cli(fd, " MOH Suggest : %s\n", peer->mohsuggest); ast_cli(fd, " Mailbox : %s\n", mailbox_str->str); ast_cli(fd, " VM Extension : %s\n", peer->vmexten); - ast_cli(fd, " LastMsgsSent : %d/%d\n", (peer->lastmsgssent & 0x7fff0000) >> 16, peer->lastmsgssent & 0xffff); ast_cli(fd, " Call limit : %d\n", peer->call_limit); ast_cli(fd, " Max forwards : %d\n", peer->maxforwards); if (peer->busy_level) @@ -17452,7 +17443,6 @@ static char *_sip_show_peer(int type, int fd, struct mansession *s, const struct astman_append(s, "VoiceMailbox: %s\r\n", mailbox_str->str); astman_append(s, "TransferMode: %s\r\n", transfermode2str(peer->allowtransfer)); astman_append(s, "Maxforwards: %d\r\n", peer->maxforwards); - astman_append(s, "LastMsgsSent: %d\r\n", peer->lastmsgssent); astman_append(s, "Maxforwards: %d\r\n", peer->maxforwards); astman_append(s, "Call-limit: %d\r\n", peer->call_limit); astman_append(s, "Busy-level: %d\r\n", peer->busy_level); @@ -25527,19 +25517,23 @@ static int get_cached_mwi(struct sip_peer *peer, int *new, int *old) return in_cache; } -/*! \brief Send message waiting indication to alert peer that they've got voicemail */ +/*! \brief Send message waiting indication to alert peer that they've got voicemail + * \returns -1 on failure, 0 on success + */ static int sip_send_mwi_to_peer(struct sip_peer *peer, const struct ast_event *event, int cache_only) { /* Called with peerl lock, but releases it */ struct sip_pvt *p; int newmsgs = 0, oldmsgs = 0; - if (ast_test_flag((&peer->flags[1]), SIP_PAGE2_SUBSCRIBEMWIONLY) && !peer->mwipvt) - return 0; + if (ast_test_flag((&peer->flags[1]), SIP_PAGE2_SUBSCRIBEMWIONLY) && !peer->mwipvt) { + return -1; + } /* Do we have an IP address? If not, skip this peer */ - if (ast_sockaddr_isnull(&peer->addr) && ast_sockaddr_isnull(&peer->defaddr)) - return 0; + if (ast_sockaddr_isnull(&peer->addr) && ast_sockaddr_isnull(&peer->defaddr)) { + return -1; + } if (event) { newmsgs = ast_event_get_ie_uint(event, AST_EVENT_IE_NEWMSGS); @@ -25548,9 +25542,13 @@ static int sip_send_mwi_to_peer(struct sip_peer *peer, const struct ast_event *e /* Fall back to manually checking the mailbox */ struct ast_str *mailbox_str = ast_str_alloca(512); peer_mailboxes_to_str(&mailbox_str, peer); + /* if there is no mailbox do nothing */ + if (ast_strlen_zero(mailbox_str->str)) { + return -1; + } ast_app_inboxcount(mailbox_str->str, &newmsgs, &oldmsgs); } - + if (peer->mwipvt) { /* Base message on subscription */ p = dialog_ref(peer->mwipvt, "sip_send_mwi_to_peer: Setting dialog ptr p from peer->mwipvt-- should this be done?"); @@ -25568,7 +25566,7 @@ static int sip_send_mwi_to_peer(struct sip_peer *peer, const struct ast_event *e dialog_unlink_all(p, TRUE, TRUE); dialog_unref(p, "unref dialog p just created via sip_alloc"); /* sip_destroy(p); */ - return 0; + return -1; } /* Recalculate our side, and recalculate Call ID */ ast_sip_ouraddrfor(&p->sa, &p->ourip, p); @@ -27147,7 +27145,6 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, str /* Note that our peer HAS had its reference count increased */ if (firstpass) { - peer->lastmsgssent = -1; oldha = peer->ha; peer->ha = NULL; olddirectmediaha = peer->directmediaha; diff --git a/channels/sip/include/sip.h b/channels/sip/include/sip.h index f5cf93d2bf..e44a50685c 100644 --- a/channels/sip/include/sip.h +++ b/channels/sip/include/sip.h @@ -1226,7 +1226,6 @@ struct sip_peer { int maxforwards; /*!< SIP Loop prevention */ enum transfermodes allowtransfer; /*! SIP Refer restriction scheme */ struct ast_codec_pref prefs; /*!< codec prefs */ - int lastmsgssent; unsigned int sipoptions; /*!< Supported SIP options */ struct ast_flags flags[3]; /*!< SIP_ flags */