summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Nietsky <gregory@distrotech.co.za>2011-07-25 09:39:54 +0000
committerGregory Nietsky <gregory@distrotech.co.za>2011-07-25 09:39:54 +0000
commit5c627eba2b9161e985e9749955746ba61f992dc0 (patch)
treec24d0588bc253bbc6b2c224170a166f1ffd13e4e
parentc0f592df46463564c83578ff6c610e4fae9bce5b (diff)
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
-rw-r--r--channels/chan_sip.c37
-rw-r--r--channels/sip/include/sip.h1
2 files changed, 17 insertions, 21 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index a0b9cb037..47e3fe78e 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 f5cf93d2b..e44a50685 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 */