From 60d1a090e412ca48c925d6711be6f9f3b722d494 Mon Sep 17 00:00:00 2001 From: kpfleming Date: Tue, 3 May 2005 03:22:14 +0000 Subject: simplify argument parsing in sip_prune_realtime don't force register expiration when pruning realtime peers provide feedback for successful single item prune operations git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5558 f38db490-d61c-443f-a65b-d21fe96a405b --- channels/chan_sip.c | 98 ++++++++++++++++++++++++++--------------------------- 1 file changed, 48 insertions(+), 50 deletions(-) (limited to 'channels/chan_sip.c') diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 717fa5a3c..314068cd8 100755 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -6490,61 +6490,62 @@ static int sip_prune_realtime(int fd, int argc, char *argv[]) int prunepeer = 0; int multi = 0; char *name = NULL; - int more; regex_t regexbuf; - if ((argc < 4) || (argc > 6)) - return RESULT_SHOWUSAGE; - - more = 1; - if (!strcasecmp(argv[3], "user")) { - if (argc > 4) - pruneuser = 1; - else + switch (argc) { + case 4: + if (!strcasecmp(argv[3], "user")) return RESULT_SHOWUSAGE; - } else if (!strcasecmp(argv[3], "peer")) { - if (argc > 4) - prunepeer = 1; - else + if (!strcasecmp(argv[3], "peer")) return RESULT_SHOWUSAGE; - } else if (!strcasecmp(argv[3], "like")) { - if (argc == 5) { + if (!strcasecmp(argv[3], "like")) + return RESULT_SHOWUSAGE; + if (!strcasecmp(argv[3], "all")) { multi = 1; - name = argv[4]; pruneuser = prunepeer = 1; - more = 0; - } else + } else { + pruneuser = prunepeer = 1; + name = argv[3]; + } + break; + case 5: + if (!strcasecmp(argv[4], "like")) + return RESULT_SHOWUSAGE; + if (!strcasecmp(argv[3], "all")) return RESULT_SHOWUSAGE; - } else if (!strcasecmp(argv[3], "all")) { - if (argc == 4) { + if (!strcasecmp(argv[3], "like")) { multi = 1; + name = argv[4]; pruneuser = prunepeer = 1; - more = 0; - } else - return RESULT_SHOWUSAGE; - } else if (argc == 4) { - more = 0; - pruneuser = prunepeer = 1; - name = argv[3]; - } else - return RESULT_SHOWUSAGE; - - if (more) { - if (!strcasecmp(argv[4], "like")) { - if (argc == 6) { + } else if (!strcasecmp(argv[3], "user")) { + pruneuser = 1; + if (!strcasecmp(argv[4], "all")) multi = 1; - name = argv[5]; - } else - return RESULT_SHOWUSAGE; - } else if (!strcasecmp(argv[4], "all")) { - if (argc == 5) + else + name = argv[4]; + } else if (!strcasecmp(argv[3], "peer")) { + prunepeer = 1; + if (!strcasecmp(argv[4], "all")) multi = 1; else - return RESULT_SHOWUSAGE; - } else if (argc == 5) - name = argv[4]; - else + name = argv[4]; + } else + return RESULT_SHOWUSAGE; + break; + case 6: + if (strcasecmp(argv[4], "like")) return RESULT_SHOWUSAGE; + if (!strcasecmp(argv[3], "user")) { + pruneuser = 1; + name = argv[5]; + } else if (!strcasecmp(argv[3], "peer")) { + prunepeer = 1; + name = argv[5]; + } else + return RESULT_SHOWUSAGE; + break; + default: + return RESULT_SHOWUSAGE; } if (multi && name) { @@ -6564,7 +6565,6 @@ static int sip_prune_realtime(int fd, int argc, char *argv[]) continue; }; if (ast_test_flag((&iterator->flags_page2), SIP_PAGE2_RTCACHEFRIENDS)) { - expire_register(iterator); ASTOBJ_MARK(iterator); pruned++; } @@ -6603,12 +6603,11 @@ static int sip_prune_realtime(int fd, int argc, char *argv[]) } else { if (prunepeer) { if ((peer = ASTOBJ_CONTAINER_FIND_UNLINK(&peerl, name))) { - if (ast_test_flag(&peer->flags_page2, SIP_PAGE2_RTCACHEFRIENDS)) - expire_register(peer); - else { + if (!ast_test_flag((&peer->flags_page2), SIP_PAGE2_RTCACHEFRIENDS)) { ast_cli(fd, "Peer '%s' is not a Realtime peer, cannot be pruned.\n", name); ASTOBJ_CONTAINER_LINK(&peerl, peer); - } + } else + ast_cli(fd, "Peer '%s' pruned.\n", name); ASTOBJ_UNREF(peer, sip_destroy_peer); } else ast_cli(fd, "Peer '%s' not found.\n", name); @@ -6618,7 +6617,8 @@ static int sip_prune_realtime(int fd, int argc, char *argv[]) if (!ast_test_flag((&user->flags_page2), SIP_PAGE2_RTCACHEFRIENDS)) { ast_cli(fd, "User '%s' is not a Realtime user, cannot be pruned.\n", name); ASTOBJ_CONTAINER_LINK(&userl, user); - } + } else + ast_cli(fd, "User '%s' pruned.\n", name); ASTOBJ_UNREF(user, sip_destroy_user); } else ast_cli(fd, "User '%s' not found.\n", name); @@ -6684,8 +6684,6 @@ static int _sip_show_peer(int type, int fd, struct mansession *s, struct message struct sip_auth *auth; int x = 0, codec = 0, load_realtime = 0; - if (argc < 4) - if (argc < 4) return RESULT_SHOWUSAGE; -- cgit v1.2.3