]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
reduce stack consumption for AMI and AMI/HTTP requests by nearly 20K in most cases
authorKevin P. Fleming <kpfleming@digium.com>
Fri, 5 Jan 2007 22:16:33 +0000 (22:16 +0000)
committerKevin P. Fleming <kpfleming@digium.com>
Fri, 5 Jan 2007 22:16:33 +0000 (22:16 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@49676 65c4cc65-6c06-0410-ace0-fbb531ad65f3

17 files changed:
apps/app_meetme.c
apps/app_queue.c
apps/app_senddtmf.c
apps/app_setcdruserfield.c
channels/chan_agent.c
channels/chan_iax2.c
channels/chan_sip.c
channels/chan_zap.c
include/asterisk/jabber.h
include/asterisk/manager.h
main/config.c
main/db.c
main/manager.c
res/res_features.c
res/res_jabber.c
res/res_monitor.c
utils/astman.c

index 7a79fca5357b2d8064507757cb37ef18a2858e2d..4ebe61c1c9424dc37ac4d951693ed00faf78706f 100644 (file)
@@ -2751,12 +2751,12 @@ static int admin_exec(struct ast_channel *chan, void *data) {
        return 0;
 }
 
-static int meetmemute(struct mansession *s, struct message *m, int mute)
+static int meetmemute(struct mansession *s, const struct message *m, int mute)
 {
        struct ast_conference *conf;
        struct ast_conf_user *user;
-       char *confid = astman_get_header(m, "Meetme");
-       char *userid = astman_get_header(m, "Usernum");
+       const char *confid = astman_get_header(m, "Meetme");
+       char *userid = ast_strdupa(astman_get_header(m, "Usernum"));
        int userno;
 
        if (ast_strlen_zero(confid)) {
@@ -2812,12 +2812,12 @@ static int meetmemute(struct mansession *s, struct message *m, int mute)
        return 0;
 }
 
-static int action_meetmemute(struct mansession *s, struct message *m)
+static int action_meetmemute(struct mansession *s, const struct message *m)
 {
        return meetmemute(s, m, 1);
 }
 
-static int action_meetmeunmute(struct mansession *s, struct message *m)
+static int action_meetmeunmute(struct mansession *s, const struct message *m)
 {
        return meetmemute(s, m, 0);
 }
index 0a41d2b9dbd5e6571b5e5653f821ca7c3e24fd79..79d2daeb78c966c88cf30060aabc8f67b4bf5f7e 100644 (file)
@@ -401,7 +401,7 @@ struct call_queue {
 
 static AST_LIST_HEAD_STATIC(queues, call_queue);
 
-static int set_member_paused(char *queuename, char *interface, int paused);
+static int set_member_paused(const char *queuename, const char *interface, int paused);
 
 static void rr_dep_warning(void)
 {
@@ -613,7 +613,7 @@ static int statechange_queue(const char *dev, int state, void *ign)
        return 0;
 }
 
-static struct member *create_queue_member(char *interface, const char *membername, int penalty, int paused)
+static struct member *create_queue_member(const char *interface, const char *membername, int penalty, int paused)
 {
        struct member *cur;
        
@@ -686,7 +686,7 @@ static void clear_queue(struct call_queue *q)
        q->wrapuptime = 0;
 }
 
-static int add_to_interfaces(char *interface)
+static int add_to_interfaces(const char *interface)
 {
        struct member_interface *curint;
 
@@ -713,7 +713,7 @@ static int add_to_interfaces(char *interface)
        return 0;
 }
 
-static int interface_exists_global(char *interface)
+static int interface_exists_global(const char *interface)
 {
        struct call_queue *q;
        struct member *mem;
@@ -735,7 +735,7 @@ static int interface_exists_global(char *interface)
        return ret;
 }
 
-static int remove_from_interfaces(char *interface)
+static int remove_from_interfaces(const char *interface)
 {
        struct member_interface *curint;
 
@@ -1100,7 +1100,7 @@ static struct call_queue *find_queue_by_name_rt(const char *queuename, struct as
        return q;
 }
 
-static struct call_queue *load_realtime_queue(char *queuename)
+static struct call_queue *load_realtime_queue(const char *queuename)
 {
        struct ast_variable *queue_vars;
        struct ast_config *member_config = NULL;
@@ -2686,7 +2686,7 @@ static int wait_a_bit(struct queue_ent *qe)
        return ast_waitfordigit(qe->chan, retrywait);
 }
 
-static struct member *interface_exists(struct call_queue *q, char *interface)
+static struct member *interface_exists(struct call_queue *q, const char *interface)
 {
        struct member *mem;
 
@@ -2741,7 +2741,7 @@ static void dump_queue_members(struct call_queue *pm_queue)
                ast_db_del(pm_family, pm_queue->name);
 }
 
-static int remove_from_queue(char *queuename, char *interface)
+static int remove_from_queue(const char *queuename, const char *interface)
 {
        struct call_queue *q;
        struct member *last_member, *look;
@@ -2795,7 +2795,7 @@ static int remove_from_queue(char *queuename, char *interface)
 }
 
 
-static int add_to_queue(char *queuename, char *interface, char *membername, int penalty, int paused, int dump)
+static int add_to_queue(const char *queuename, const char *interface, const char *membername, int penalty, int paused, int dump)
 {
        struct call_queue *q;
        struct member *new_member;
@@ -2846,7 +2846,7 @@ static int add_to_queue(char *queuename, char *interface, char *membername, int
        return res;
 }
 
-static int set_member_paused(char *queuename, char *interface, int paused)
+static int set_member_paused(const char *queuename, const char *interface, int paused)
 {
        int found = 0;
        struct call_queue *q;
@@ -4027,7 +4027,7 @@ static char *complete_queue(const char *line, const char *word, int pos, int sta
 /*!\brief callback to display queues status in manager
    \addtogroup Group_AMI
  */
-static int manager_queues_show( struct mansession *s, struct message *m )
+static int manager_queues_show(struct mansession *s, const struct message *m)
 {
        char *a[] = { "queue", "show" };
 
@@ -4038,13 +4038,13 @@ static int manager_queues_show( struct mansession *s, struct message *m )
 }
 
 /* Dump queue status */
-static int manager_queues_status( struct mansession *s, struct message *m )
+static int manager_queues_status(struct mansession *s, const struct message *m)
 {
        time_t now;
        int pos;
-       char *id = astman_get_header(m,"ActionID");
-       char *queuefilter = astman_get_header(m,"Queue");
-       char *memberfilter = astman_get_header(m,"Member");
+       const char *id = astman_get_header(m,"ActionID");
+       const char *queuefilter = astman_get_header(m,"Queue");
+       const char *memberfilter = astman_get_header(m,"Member");
        char idText[256] = "";
        struct call_queue *q;
        struct queue_ent *qe;
@@ -4128,9 +4128,9 @@ static int manager_queues_status( struct mansession *s, struct message *m )
        return RESULT_SUCCESS;
 }
 
-static int manager_add_queue_member(struct mansession *s, struct message *m)
+static int manager_add_queue_member(struct mansession *s, const struct message *m)
 {
-       char *queuename, *interface, *penalty_s, *paused_s, *membername;
+       const char *queuename, *interface, *penalty_s, *paused_s, *membername;
        int paused, penalty = 0;
 
        queuename = astman_get_header(m, "Queue");
@@ -4181,9 +4181,9 @@ static int manager_add_queue_member(struct mansession *s, struct message *m)
        return 0;
 }
 
-static int manager_remove_queue_member(struct mansession *s, struct message *m)
+static int manager_remove_queue_member(struct mansession *s, const struct message *m)
 {
-       char *queuename, *interface;
+       const char *queuename, *interface;
 
        queuename = astman_get_header(m, "Queue");
        interface = astman_get_header(m, "Interface");
@@ -4212,9 +4212,9 @@ static int manager_remove_queue_member(struct mansession *s, struct message *m)
        return 0;
 }
 
-static int manager_pause_queue_member(struct mansession *s, struct message *m)
+static int manager_pause_queue_member(struct mansession *s, const struct message *m)
 {
-       char *queuename, *interface, *paused_s;
+       const char *queuename, *interface, *paused_s;
        int paused;
 
        interface = astman_get_header(m, "Interface");
index 67cb2d5c147f2391adb0bf0a2981793264973517..96893e22e30cc3efd8bb1b2231aed3581943e1c6 100644 (file)
@@ -94,10 +94,10 @@ static char mandescr_playdtmf[] =
 "      Channel: Channel name to send digit to\n"
 "      Digit: The dtmf digit to play\n";
 
-static int manager_play_dtmf(struct mansession *s, struct message *m)
+static int manager_play_dtmf(struct mansession *s, const struct message *m)
 {
-       char *channel = astman_get_header(m, "Channel");
-       char *digit = astman_get_header(m, "Digit");
+       const char *channel = astman_get_header(m, "Channel");
+       const char *digit = astman_get_header(m, "Digit");
        struct ast_channel *chan = ast_get_channel_by_name_locked(channel);
        
        if (!chan) {
index f6c83f48bc82b5a932fe9fb89c55e6f7a1c771d6..d6a4f2b06e0284564b02fcbba280bddad116b8c1 100644 (file)
@@ -73,12 +73,12 @@ static char *appendcdruserfield_app = "AppendCDRUserField";
 static char *appendcdruserfield_synopsis = "Append to the CDR user field";
 
 
-static int action_setcdruserfield(struct mansession *s, struct message *m)
+static int action_setcdruserfield(struct mansession *s, const struct message *m)
 {
        struct ast_channel *c = NULL;
-       char *userfield = astman_get_header(m, "UserField");
-       char *channel = astman_get_header(m, "Channel");
-       char *append = astman_get_header(m, "Append");
+       const char *userfield = astman_get_header(m, "UserField");
+       const char *channel = astman_get_header(m, "Channel");
+       const char *append = astman_get_header(m, "Append");
 
        if (ast_strlen_zero(channel)) {
                astman_send_error(s, m, "No Channel specified");
index 4d614e945314c0bebb467426a7e6ca9639c41041..484f333330fdde1b2031a714eab6e245ef7d287e 100644 (file)
@@ -1395,9 +1395,9 @@ static force_inline int powerof(unsigned int d)
  * \returns 
  * \sa action_agent_logoff(), action_agent_callback_login(), load_module().
  */
-static int action_agents(struct mansession *s, struct message *m)
+static int action_agents(struct mansession *s, const struct message *m)
 {
-       char *id = astman_get_header(m,"ActionID");
+       const char *id = astman_get_header(m,"ActionID");
        char idText[256] = "";
        char chanbuf[256];
        struct agent_pvt *p;
@@ -1505,7 +1505,7 @@ static void agent_logoff_maintenance(struct agent_pvt *p, char *loginchan, long
 
 }
 
-static int agent_logoff(char *agent, int soft)
+static int agent_logoff(const char *agent, int soft)
 {
        struct agent_pvt *p;
        long logintime;
@@ -1556,10 +1556,10 @@ static int agent_logoff_cmd(int fd, int argc, char **argv)
  * \returns 
  * \sa action_agents(), action_agent_callback_login(), load_module().
  */
-static int action_agent_logoff(struct mansession *s, struct message *m)
+static int action_agent_logoff(struct mansession *s, const struct message *m)
 {
-       char *agent = astman_get_header(m, "Agent");
-       char *soft_s = astman_get_header(m, "Soft"); /* "true" is don't hangup */
+       const char *agent = astman_get_header(m, "Agent");
+       const char *soft_s = astman_get_header(m, "Soft"); /* "true" is don't hangup */
        int soft;
        int ret; /* return value of agent_logoff */
 
@@ -2234,13 +2234,13 @@ static int callback_exec(struct ast_channel *chan, void *data)
  * \returns 
  * \sa action_agents(), action_agent_logoff(), load_module().
  */
-static int action_agent_callback_login(struct mansession *s, struct message *m)
+static int action_agent_callback_login(struct mansession *s, const struct message *m)
 {
-       char *agent = astman_get_header(m, "Agent");
-       char *exten = astman_get_header(m, "Exten");
-       char *context = astman_get_header(m, "Context");
-       char *wrapuptime_s = astman_get_header(m, "WrapupTime");
-       char *ackcall_s = astman_get_header(m, "AckCall");
+       const char *agent = astman_get_header(m, "Agent");
+       const char *exten = astman_get_header(m, "Exten");
+       const char *context = astman_get_header(m, "Context");
+       const char *wrapuptime_s = astman_get_header(m, "WrapupTime");
+       const char *ackcall_s = astman_get_header(m, "AckCall");
        struct agent_pvt *p;
        int login_state = 0;
 
index b1dc0bff292ad40f7fb783ef14be80f0db58cd8c..37fe4df000c81e2f2302fd7dee019309b44307c5 100644 (file)
@@ -4187,7 +4187,7 @@ static int iax2_show_peers(int fd, int argc, char *argv[])
 {
        return __iax2_show_peers(0, fd, NULL, argc, argv);
 }
-static int manager_iax2_show_netstats( struct mansession *s, struct message *m )
+static int manager_iax2_show_netstats(struct mansession *s, const struct message *m)
 {
        ast_cli_netstats(s, -1, 0);
        astman_append(s, "\r\n");
@@ -4220,12 +4220,12 @@ static int iax2_show_firmware(int fd, int argc, char *argv[])
 }
 
 /* JDG: callback to display iax peers in manager */
-static int manager_iax2_show_peers( struct mansession *s, struct message *m )
+static int manager_iax2_show_peers(struct mansession *s, const struct message *m)
 {
        char *a[] = { "iax2", "show", "users" };
        int ret;
-       char *id;
-       id = astman_get_header(m,"ActionID");
+       const char *id = astman_get_header(m,"ActionID");
+
        if (!ast_strlen_zero(id))
                astman_append(s, "ActionID: %s\r\n",id);
        ret = __iax2_show_peers(1, -1, s, 3, a );
index 391dfec6aaf1a003a17e09255b53f45f469faac6..6664fccda08dc783b3fd976e302818aec558ce06 100644 (file)
@@ -1335,8 +1335,7 @@ static char *transfermode2str(enum transfermodes mode) attribute_const;
 static char *nat2str(int nat) attribute_const;
 static int peer_status(struct sip_peer *peer, char *status, int statuslen);
 static int sip_show_users(int fd, int argc, char *argv[]);
-static int _sip_show_peers(int fd, int *total, struct mansession *s, struct message *m, int argc, char *argv[]);
-static int manager_sip_show_peers( struct mansession *s, struct message *m );
+static int _sip_show_peers(int fd, int *total, struct mansession *s, const struct message *m, int argc, const char *argv[]);
 static int sip_show_peers(int fd, int argc, char *argv[]);
 static int sip_show_objects(int fd, int argc, char *argv[]);
 static void  print_group(int fd, ast_group_t group, int crlf);
@@ -1346,10 +1345,8 @@ static void cleanup_stale_contexts(char *new, char *old);
 static void print_codec_to_cli(int fd, struct ast_codec_pref *pref);
 static const char *domain_mode_to_text(const enum domain_mode mode);
 static int sip_show_domains(int fd, int argc, char *argv[]);
-static int _sip_show_peer(int type, int fd, struct mansession *s, struct message *m, int argc, char *argv[]);
-static int manager_sip_show_peer( struct mansession *s, struct message *m);
+static int _sip_show_peer(int type, int fd, struct mansession *s, const struct message *m, int argc, const char *argv[]);
 static int sip_show_peer(int fd, int argc, char *argv[]);
-static int _sip_show_peer(int type, int fd, struct mansession *s, struct message *m, int argc, char *argv[]);
 static int sip_show_user(int fd, int argc, char *argv[]);
 static int sip_show_registry(int fd, int argc, char *argv[]);
 static int sip_show_settings(int fd, int argc, char *argv[]);
@@ -9394,10 +9391,10 @@ static char mandescr_show_peers[] =
 
 /*! \brief  Show SIP peers in the manager API */
 /*    Inspired from chan_iax2 */
-static int manager_sip_show_peers( struct mansession *s, struct message *m )
+static int manager_sip_show_peers(struct mansession *s, const struct message *m)
 {
-       char *id = astman_get_header(m,"ActionID");
-       char *a[] = { "sip", "show", "peers" };
+       const char *id = astman_get_header(m,"ActionID");
+       const char *a[] = {"sip", "show", "peers"};
        char idtext[256] = "";
        int total = 0;
 
@@ -9419,11 +9416,11 @@ static int manager_sip_show_peers( struct mansession *s, struct message *m )
 /*! \brief  CLI Show Peers command */
 static int sip_show_peers(int fd, int argc, char *argv[])
 {
-       return _sip_show_peers(fd, NULL, NULL, NULL, argc, argv);
+       return _sip_show_peers(fd, NULL, NULL, NULL, argc, (const char **) argv);
 }
 
 /*! \brief  _sip_show_peers: Execute sip show peers command */
-static int _sip_show_peers(int fd, int *total, struct mansession *s, struct message *m, int argc, char *argv[])
+static int _sip_show_peers(int fd, int *total, struct mansession *s, const struct message *m, int argc, const char *argv[])
 {
        regex_t regexbuf;
        int havepattern = FALSE;
@@ -9437,7 +9434,7 @@ static int _sip_show_peers(int fd, int *total, struct mansession *s, struct mess
        int peers_mon_offline = 0;
        int peers_unmon_offline = 0;
        int peers_unmon_online = 0;
-       char *id;
+       const char *id;
        char idtext[256] = "";
        int realtimepeers;
 
@@ -9843,11 +9840,11 @@ static char mandescr_show_peer[] =
 "  ActionID: <id>        Optional action ID for this AMI transaction.\n";
 
 /*! \brief Show SIP peers in the manager API  */
-static int manager_sip_show_peer( struct mansession *s, struct message *m)
+static int manager_sip_show_peer(struct mansession *s, const struct message *m)
 {
-       char *id = astman_get_header(m,"ActionID");
-       char *a[4];
-       char *peer;
+       const char *id = astman_get_header(m,"ActionID");
+       const char *a[4];
+       const char *peer;
        int ret;
 
        peer = astman_get_header(m,"Peer");
@@ -9862,7 +9859,7 @@ static int manager_sip_show_peer( struct mansession *s, struct message *m)
 
        if (!ast_strlen_zero(id))
                astman_append(s, "ActionID: %s\r\n",id);
-       ret = _sip_show_peer(1, -1, s, m, 4, a );
+       ret = _sip_show_peer(1, -1, s, m, 4, a);
        astman_append(s, "\r\n\r\n" );
        return ret;
 }
@@ -9872,11 +9869,11 @@ static int manager_sip_show_peer( struct mansession *s, struct message *m)
 /*! \brief Show one peer in detail */
 static int sip_show_peer(int fd, int argc, char *argv[])
 {
-       return _sip_show_peer(0, fd, NULL, NULL, argc, argv);
+       return _sip_show_peer(0, fd, NULL, NULL, argc, (const char **) argv);
 }
 
 /*! \brief Show one peer in detail (main function) */
-static int _sip_show_peer(int type, int fd, struct mansession *s, struct message *m, int argc, char *argv[])
+static int _sip_show_peer(int type, int fd, struct mansession *s, const struct message *m, int argc, const char *argv[])
 {
        char status[30] = "";
        char cbuf[256];
index fd82dc36d0eaed78d15a498b8de293a43e224f3e..fab61b8579c8c29ad4f985087017a455705b4b46 100644 (file)
@@ -9743,7 +9743,7 @@ static int zap_restart_cmd(int fd, int argc, char **argv)
        return RESULT_SUCCESS;
 }
 
-static int action_zaprestart(struct mansession *s, struct message *m)
+static int action_zaprestart(struct mansession *s, const struct message *m)
 {
        if (zap_restart() != 0) {
                astman_send_error(s, m, "Failed rereading zaptel configuration");
@@ -10116,46 +10116,49 @@ static struct zt_pvt *find_channel(int channel)
        return p;
 }
 
-static int action_zapdndon(struct mansession *s, struct message *m)
-{
-        struct zt_pvt *p = NULL;
-        char *channel = astman_get_header(m, "ZapChannel");
-        if (ast_strlen_zero(channel)) {
-                 astman_send_error(s, m, "No channel specified");
-                 return 0;
-        }
-        p = find_channel(atoi(channel));
-        if (!p) {
-                 astman_send_error(s, m, "No such channel");
-                 return 0;
-        }
-        p->dnd = 1;
-        astman_send_ack(s, m, "DND Enabled");
-        return 0;
-}
-
-static int action_zapdndoff(struct mansession *s, struct message *m)
-{
-        struct zt_pvt *p = NULL;
-        char *channel = astman_get_header(m, "ZapChannel");
-        if (ast_strlen_zero(channel)) {
-                 astman_send_error(s, m, "No channel specified");
-                 return 0;
-        }
-        p = find_channel(atoi(channel));
-        if (!p) {
-                 astman_send_error(s, m, "No such channel");
-                 return 0;
-        }
-        p->dnd = 0;
-        astman_send_ack(s, m, "DND Disabled");
-        return 0;
-}
-
-static int action_transfer(struct mansession *s, struct message *m)
+static int action_zapdndon(struct mansession *s, const struct message *m)
 {
        struct zt_pvt *p = NULL;
-       char *channel = astman_get_header(m, "ZapChannel");
+       const char *channel = astman_get_header(m, "ZapChannel");
+
+       if (ast_strlen_zero(channel)) {
+               astman_send_error(s, m, "No channel specified");
+               return 0;
+       }
+       p = find_channel(atoi(channel));
+       if (!p) {
+               astman_send_error(s, m, "No such channel");
+               return 0;
+       }
+       p->dnd = 1;
+       astman_send_ack(s, m, "DND Enabled");
+       return 0;
+}
+
+static int action_zapdndoff(struct mansession *s, const struct message *m)
+{
+       struct zt_pvt *p = NULL;
+       const char *channel = astman_get_header(m, "ZapChannel");
+
+       if (ast_strlen_zero(channel)) {
+               astman_send_error(s, m, "No channel specified");
+               return 0;
+       }
+       p = find_channel(atoi(channel));
+       if (!p) {
+               astman_send_error(s, m, "No such channel");
+               return 0;
+       }
+       p->dnd = 0;
+       astman_send_ack(s, m, "DND Disabled");
+       return 0;
+}
+
+static int action_transfer(struct mansession *s, const struct message *m)
+{
+       struct zt_pvt *p = NULL;
+       const char *channel = astman_get_header(m, "ZapChannel");
+
        if (ast_strlen_zero(channel)) {
                astman_send_error(s, m, "No channel specified");
                return 0;
@@ -10170,10 +10173,11 @@ static int action_transfer(struct mansession *s, struct message *m)
        return 0;
 }
 
-static int action_transferhangup(struct mansession *s, struct message *m)
+static int action_transferhangup(struct mansession *s, const struct message *m)
 {
        struct zt_pvt *p = NULL;
-       char *channel = astman_get_header(m, "ZapChannel");
+       const char *channel = astman_get_header(m, "ZapChannel");
+
        if (ast_strlen_zero(channel)) {
                astman_send_error(s, m, "No channel specified");
                return 0;
@@ -10188,12 +10192,13 @@ static int action_transferhangup(struct mansession *s, struct message *m)
        return 0;
 }
 
-static int action_zapdialoffhook(struct mansession *s, struct message *m)
+static int action_zapdialoffhook(struct mansession *s, const struct message *m)
 {
        struct zt_pvt *p = NULL;
-       char *channel = astman_get_header(m, "ZapChannel");
-       char *number = astman_get_header(m, "Number");
+       const char *channel = astman_get_header(m, "ZapChannel");
+       const char *number = astman_get_header(m, "Number");
        int i;
+
        if (ast_strlen_zero(channel)) {
                astman_send_error(s, m, "No channel specified");
                return 0;
@@ -10219,10 +10224,10 @@ static int action_zapdialoffhook(struct mansession *s, struct message *m)
        return 0;
 }
 
-static int action_zapshowchannels(struct mansession *s, struct message *m)
+static int action_zapshowchannels(struct mansession *s, const struct message *m)
 {
        struct zt_pvt *tmp = NULL;
-       char *id = astman_get_header(m, "ActionID");
+       const char *id = astman_get_header(m, "ActionID");
        char idText[256] = "";
 
        astman_send_ack(s, m, "Zapata channel status will follow");
index 95d18a9a33143acd8222a1dd8537710d287caf67..8d7662f978148ea9b2b6677ca614a5ea64be9384 100644 (file)
@@ -120,14 +120,14 @@ struct aji_client_container{
        ASTOBJ_CONTAINER_COMPONENTS(struct aji_client);
 };
 
-int ast_aji_send(struct aji_client *client, char *address, char *message);
+int ast_aji_send(struct aji_client *client, const char *address, const char *message);
 int ast_aji_disconnect(struct aji_client *client);
 int ast_aji_check_roster(void);
 void ast_aji_increment_mid(char *mid);
 int ast_aji_create_chat(struct aji_client *client,char *room, char *server, char *topic);
 int ast_aji_invite_chat(struct aji_client *client, char *user, char *room, char *message);
 int ast_aji_join_chat(struct aji_client *client,char *room);
-struct aji_client *ast_aji_get_client(char *name);
+struct aji_client *ast_aji_get_client(const char *name);
 struct aji_client_container *ast_aji_get_clients(void);
 
 #endif
index 96326f07c9f34327c24965a50f208c5af554e7d8..cbbe1fb90de9883c51b34f6768b4a635bb607334 100644 (file)
 
 /* Export manager structures */
 #define AST_MAX_MANHEADERS 80
-#define AST_MAX_MANHEADER_LEN 256
 
 struct mansession;
 
 struct message {
-       int hdrcount;
-       char headers[AST_MAX_MANHEADERS][AST_MAX_MANHEADER_LEN];
+       unsigned int hdrcount;
+       const char *headers[AST_MAX_MANHEADERS];
 };
 
 struct manager_action {
@@ -77,7 +76,7 @@ struct manager_action {
        /*! Permission required for action.  EVENT_FLAG_* */
        int authority;
        /*! Function to be called */
-       int (*func)(struct mansession *s, struct message *m);
+       int (*func)(struct mansession *s, const struct message *m);
        /*! For easy linking */
        struct manager_action *next;
 };
@@ -97,7 +96,7 @@ struct manager_action {
 int ast_manager_register2(
        const char *action,
        int authority,
-       int (*func)(struct mansession *s, struct message *m),
+       int (*func)(struct mansession *s, const struct message *m),
        const char *synopsis,
        const char *description);
 
@@ -111,27 +110,23 @@ int ast_manager_unregister( char *action );
        \param event    Event name
        \param contents Contents of event
 */
-int manager_event(int category, const char *event, const char *contents, ...)
-       __attribute__ ((format (printf, 3,4)));
+int __attribute__ ((format (printf, 3,4))) manager_event(int category, const char *event, const char *contents, ...);
 
 /*! Get header from mananger transaction */
-char *astman_get_header(struct message *m, char *var);
+const char *astman_get_header(const struct message *m, char *var);
 
 /*! Get a linked list of the Variable: headers */
-struct ast_variable *astman_get_variables(struct message *m);
+struct ast_variable *astman_get_variables(const struct message *m);
 
 /*! Send error in manager transaction */
-void astman_send_error(struct mansession *s, struct message *m, char *error);
-void astman_send_response(struct mansession *s, struct message *m, char *resp, char *msg);
-void astman_send_ack(struct mansession *s, struct message *m, char *msg);
-
-void astman_append(struct mansession *s, const char *fmt, ...)
-        __attribute__ ((format (printf, 2, 3)));
+void astman_send_error(struct mansession *s, const struct message *m, char *error);
+void astman_send_response(struct mansession *s, const struct message *m, char *resp, char *msg);
+void astman_send_ack(struct mansession *s, const struct message *m, char *msg);
 
+void __attribute__ ((format (printf, 2, 3))) astman_append(struct mansession *s, const char *fmt, ...);
 
 /*! Called by Asterisk initialization */
 int init_manager(void);
-/*! Called by Asterisk initialization */
 int reload_manager(void);
 
 #endif /* _ASTERISK_MANAGER_H */
index f0c4fe0df562d68b6724ae641cebe80de185d381..5639aa9e98a4b54a3a6b7c1d967ee093131988d7 100644 (file)
@@ -855,7 +855,6 @@ static struct ast_config *config_text_file_load(const char *database, const char
                        lineno++;
                        if (fgets(buf, sizeof(buf), f)) {
                                if ( withcomments ) {
-                                       ast_log(LOG_NOTICE, "moo\n");
                                        CB_ADD(lline_buffer);       /* add the current lline buffer to the comment buffer */
                                        lline_buffer[0] = 0;        /* erase the lline buffer */
                                }
index ed6fbc683c4a86c4529e881ad44cba4e7a4567bd..b25cd3cf620caeb3d192bd58b7538aa1ebbd8ba1 100644 (file)
--- a/main/db.c
+++ b/main/db.c
@@ -519,11 +519,11 @@ struct ast_cli_entry cli_database[] = {
        database_deltree_usage },
 };
 
-static int manager_dbput(struct mansession *s, struct message *m)
+static int manager_dbput(struct mansession *s, const struct message *m)
 {
-       char *family = astman_get_header(m, "Family");
-       char *key = astman_get_header(m, "Key");
-       char *val = astman_get_header(m, "Val");
+       const char *family = astman_get_header(m, "Family");
+       const char *key = astman_get_header(m, "Key");
+       const char *val = astman_get_header(m, "Val");
        int res;
 
        if (ast_strlen_zero(family)) {
@@ -539,7 +539,7 @@ static int manager_dbput(struct mansession *s, struct message *m)
                return 0;
        }
 
-       res = ast_db_put(family, key, val);
+       res = ast_db_put(family, key, (char *) val);
        if (res) {
                astman_send_error(s, m, "Failed to update entry");
        } else {
@@ -548,12 +548,12 @@ static int manager_dbput(struct mansession *s, struct message *m)
        return 0;
 }
 
-static int manager_dbget(struct mansession *s, struct message *m)
+static int manager_dbget(struct mansession *s, const struct message *m)
 {
-       char *id = astman_get_header(m,"ActionID");
+       const char *id = astman_get_header(m,"ActionID");
        char idText[256] = "";
-       char *family = astman_get_header(m, "Family");
-       char *key = astman_get_header(m, "Key");
+       const char *family = astman_get_header(m, "Family");
+       const char *key = astman_get_header(m, "Key");
        char tmp[256];
        int res;
 
index c0fa09a470bab5b55b495e917e64b196dbf935b3..2605950076cdb91af76352645b0d95991e71ba0b 100644 (file)
@@ -70,16 +70,16 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #include "asterisk/linkedlists.h"
 
 struct fast_originate_helper {
-       char tech[AST_MAX_MANHEADER_LEN];
-       char data[AST_MAX_MANHEADER_LEN];
+       char tech[AST_MAX_EXTENSION];
+       char data[AST_MAX_EXTENSION];
        int timeout;
        char app[AST_MAX_APP];
-       char appdata[AST_MAX_MANHEADER_LEN];
-       char cid_name[AST_MAX_MANHEADER_LEN];
-       char cid_num[AST_MAX_MANHEADER_LEN];
+       char appdata[AST_MAX_EXTENSION];
+       char cid_name[AST_MAX_EXTENSION];
+       char cid_num[AST_MAX_EXTENSION];
        char context[AST_MAX_CONTEXT];
        char exten[AST_MAX_EXTENSION];
-       char idtext[AST_MAX_MANHEADER_LEN];
+       char idtext[AST_MAX_EXTENSION];
        char account[AST_MAX_ACCOUNT_CODE];
        int priority;
        struct ast_variable *vars;
@@ -160,7 +160,7 @@ struct mansession {
        /*! Authorization for writing */
        int writeperm;
        /*! Buffer */
-       char inbuf[AST_MAX_MANHEADER_LEN];
+       char inbuf[1024];
        int inlen;
        int send_events;
        int displaysystemname;          /*!< Add system name to manager responses and events */
@@ -675,7 +675,7 @@ static void destroy_session(struct mansession *s)
        free_session(s);
 }
 
-char *astman_get_header(struct message *m, char *var)
+const char *astman_get_header(const struct message *m, char *var)
 {
        char cmp[80];
        int x;
@@ -690,7 +690,7 @@ char *astman_get_header(struct message *m, char *var)
        return "";
 }
 
-struct ast_variable *astman_get_variables(struct message *m)
+struct ast_variable *astman_get_variables(const struct message *m)
 {
        int varlen, x, y;
        struct ast_variable *head = NULL, *cur;
@@ -739,9 +739,9 @@ struct ast_variable *astman_get_variables(struct message *m)
    be read until either the current action finishes or get_input() obtains the session
    lock.
  */
-void astman_send_error(struct mansession *s, struct message *m, char *error)
+void astman_send_error(struct mansession *s, const struct message *m, char *error)
 {
-       char *id = astman_get_header(m,"ActionID");
+       const char *id = astman_get_header(m,"ActionID");
 
        astman_append(s, "Response: Error\r\n");
        if (!ast_strlen_zero(id))
@@ -749,9 +749,9 @@ void astman_send_error(struct mansession *s, struct message *m, char *error)
        astman_append(s, "Message: %s\r\n\r\n", error);
 }
 
-void astman_send_response(struct mansession *s, struct message *m, char *resp, char *msg)
+void astman_send_response(struct mansession *s, const struct message *m, char *resp, char *msg)
 {
-       char *id = astman_get_header(m,"ActionID");
+       const char *id = astman_get_header(m,"ActionID");
 
        astman_append(s, "Response: %s\r\n", resp);
        if (!ast_strlen_zero(id))
@@ -762,7 +762,7 @@ void astman_send_response(struct mansession *s, struct message *m, char *resp, c
                astman_append(s, "\r\n");
 }
 
-void astman_send_ack(struct mansession *s, struct message *m, char *msg)
+void astman_send_ack(struct mansession *s, const struct message *m, char *msg)
 {
        astman_send_response(s, m, "Success", msg);
 }
@@ -822,11 +822,11 @@ static int ast_is_number(char *string)
        return ret ? atoi(string) : 0;
 }
 
-static int ast_strings_to_mask(char *string) 
+static int strings_to_mask(const char *string) 
 {
        int x, ret = -1;
        
-       x = ast_is_number(string);
+       x = ast_is_number((char *) string);
 
        if (x)
                ret = x;
@@ -853,9 +853,9 @@ static int ast_strings_to_mask(char *string)
    Rather than braindead on,off this now can also accept a specific int mask value 
    or a ',' delim list of mask strings (the same as manager.conf) -anthm
 */
-static int set_eventmask(struct mansession *s, char *eventmask)
+static int set_eventmask(struct mansession *s, const char *eventmask)
 {
-       int maskint = ast_strings_to_mask(eventmask);
+       int maskint = strings_to_mask(eventmask);
 
        ast_mutex_lock(&s->__lock);
        if (maskint >= 0)       
@@ -865,15 +865,15 @@ static int set_eventmask(struct mansession *s, char *eventmask)
        return maskint;
 }
 
-static int authenticate(struct mansession *s, struct message *m)
+static int authenticate(struct mansession *s, const struct message *m)
 {
        struct ast_config *cfg;
        char *cat;
-       char *user = astman_get_header(m, "Username");
-       char *pass = astman_get_header(m, "Secret");
-       char *authtype = astman_get_header(m, "AuthType");
-       char *key = astman_get_header(m, "Key");
-       char *events = astman_get_header(m, "Events");
+       const char *user = astman_get_header(m, "Username");
+       const char *pass = astman_get_header(m, "Secret");
+       const char *authtype = astman_get_header(m, "AuthType");
+       const char *key = astman_get_header(m, "Key");
+       const char *events = astman_get_header(m, "Events");
        
        cfg = ast_config_load("manager.conf");
        if (!cfg)
@@ -969,7 +969,7 @@ static char mandescr_ping[] =
 "  manager connection open.\n"
 "Variables: NONE\n";
 
-static int action_ping(struct mansession *s, struct message *m)
+static int action_ping(struct mansession *s, const struct message *m)
 {
        astman_send_response(s, m, "Pong", NULL);
        return 0;
@@ -981,16 +981,16 @@ static char mandescr_getconfig[] =
 "Variables:\n"
 "   Filename: Configuration filename (e.g. foo.conf)\n";
 
-static int action_getconfig(struct mansession *s, struct message *m)
+static int action_getconfig(struct mansession *s, const struct message *m)
 {
        struct ast_config *cfg;
-       char *fn = astman_get_header(m, "Filename");
+       const char *fn = astman_get_header(m, "Filename");
        int catcount = 0;
        int lineno = 0;
        char *category=NULL;
        struct ast_variable *v;
        char idText[256] = "";
-       char *id = astman_get_header(m, "ActionID");
+       const char *id = astman_get_header(m, "ActionID");
 
        if (!ast_strlen_zero(id))
                snprintf(idText, sizeof(idText), "ActionID: %s\r\n", id);
@@ -1018,11 +1018,11 @@ static int action_getconfig(struct mansession *s, struct message *m)
 }
 
 
-static void handle_updates(struct mansession *s, struct message *m, struct ast_config *cfg)
+static void handle_updates(struct mansession *s, const struct message *m, struct ast_config *cfg)
 {
        int x;
        char hdr[40];
-       char *action, *cat, *var, *value, *match;
+       const char *action, *cat, *var, *value, *match;
        struct ast_category *category;
        struct ast_variable *v;
        
@@ -1054,13 +1054,13 @@ static void handle_updates(struct mansession *s, struct message *m, struct ast_c
                        }
                } else if (!strcasecmp(action, "delcat")) {
                        if (!ast_strlen_zero(cat))
-                               ast_category_delete(cfg, cat);
+                               ast_category_delete(cfg, (char *) cat);
                } else if (!strcasecmp(action, "update")) {
                        if (!ast_strlen_zero(cat) && !ast_strlen_zero(var) && (category = ast_category_get(cfg, cat)))
-                               ast_variable_update(category, var, value, match);
+                               ast_variable_update(category, (char *) var, (char *) value, (char *) match);
                } else if (!strcasecmp(action, "delete")) {
                        if (!ast_strlen_zero(cat) && !ast_strlen_zero(var) && (category = ast_category_get(cfg, cat)))
-                               ast_variable_delete(category, var, match);
+                               ast_variable_delete(category, (char *) var, (char *) match);
                } else if (!strcasecmp(action, "append")) {
                        if (!ast_strlen_zero(cat) && !ast_strlen_zero(var) && 
                                (category = ast_category_get(cfg, cat)) && 
@@ -1086,15 +1086,15 @@ static char mandescr_updateconfig[] =
 "   Value-XXXXXX:  Value to work on\n"
 "   Match-XXXXXX:  Extra match required to match line\n";
 
-static int action_updateconfig(struct mansession *s, struct message *m)
+static int action_updateconfig(struct mansession *s, const struct message *m)
 {
        struct ast_config *cfg;
-       char *sfn = astman_get_header(m, "SrcFilename");
-       char *dfn = astman_get_header(m, "DstFilename");
+       const char *sfn = astman_get_header(m, "SrcFilename");
+       const char *dfn = astman_get_header(m, "DstFilename");
        int res;
        char idText[256] = "";
-       char *id = astman_get_header(m, "ActionID");
-       char *rld = astman_get_header(m, "Reload");
+       const char *id = astman_get_header(m, "ActionID");
+       const char *rld = astman_get_header(m, "Reload");
 
        if (!ast_strlen_zero(id))
                snprintf(idText, sizeof(idText), "ActionID: %s\r\n", id);
@@ -1131,15 +1131,15 @@ static char mandescr_waitevent[] =
 "Variables: \n"
 "   Timeout: Maximum time to wait for events\n";
 
-static int action_waitevent(struct mansession *s, struct message *m)
+static int action_waitevent(struct mansession *s, const struct message *m)
 {
-       char *timeouts = astman_get_header(m, "Timeout");
+       const char *timeouts = astman_get_header(m, "Timeout");
        int timeout = -1, max;
        int x;
        int needexit = 0;
        time_t now;
        struct eventqent *eqe;
-       char *id = astman_get_header(m,"ActionID");
+       const char *id = astman_get_header(m,"ActionID");
        char idText[256] = "";
 
        if (!ast_strlen_zero(id))
@@ -1218,12 +1218,12 @@ static char mandescr_listcommands[] =
 "  action that is available to the user\n"
 "Variables: NONE\n";
 
-static int action_listcommands(struct mansession *s, struct message *m)
+static int action_listcommands(struct mansession *s, const struct message *m)
 {
        struct manager_action *cur = first_action;
        char idText[256] = "";
        char temp[BUFSIZ];
-       char *id = astman_get_header(m,"ActionID");
+       const char *id = astman_get_header(m,"ActionID");
 
        if (!ast_strlen_zero(id))
                snprintf(idText, sizeof(idText), "ActionID: %s\r\n", id);
@@ -1248,9 +1248,9 @@ static char mandescr_events[] =
 "              'off' if no events should be sent,\n"
 "              'system,call,log' to select which flags events should have to be sent.\n";
 
-static int action_events(struct mansession *s, struct message *m)
+static int action_events(struct mansession *s, const struct message *m)
 {
-       char *mask = astman_get_header(m, "EventMask");
+       const char *mask = astman_get_header(m, "EventMask");
        int res;
 
        res = set_eventmask(s, mask);
@@ -1266,7 +1266,7 @@ static char mandescr_logoff[] =
 "Description: Logoff this manager session\n"
 "Variables: NONE\n";
 
-static int action_logoff(struct mansession *s, struct message *m)
+static int action_logoff(struct mansession *s, const struct message *m)
 {
        astman_send_response(s, m, "Goodbye", "Thanks for all the fish.");
        return -1;
@@ -1277,10 +1277,10 @@ static char mandescr_hangup[] =
 "Variables: \n"
 "      Channel: The channel name to be hungup\n";
 
-static int action_hangup(struct mansession *s, struct message *m)
+static int action_hangup(struct mansession *s, const struct message *m)
 {
        struct ast_channel *c = NULL;
-       char *name = astman_get_header(m, "Channel");
+       const char *name = astman_get_header(m, "Channel");
        if (ast_strlen_zero(name)) {
                astman_send_error(s, m, "No channel specified");
                return 0;
@@ -1303,12 +1303,12 @@ static char mandescr_setvar[] =
 "      *Variable: Variable name\n"
 "      *Value: Value\n";
 
-static int action_setvar(struct mansession *s, struct message *m)
+static int action_setvar(struct mansession *s, const struct message *m)
 {
         struct ast_channel *c = NULL;
-        char *name = astman_get_header(m, "Channel");
-        char *varname = astman_get_header(m, "Variable");
-        char *varval = astman_get_header(m, "Value");
+       const char *name = astman_get_header(m, "Channel");
+       const char *varname = astman_get_header(m, "Variable");
+       const char *varval = astman_get_header(m, "Value");
        
        if (ast_strlen_zero(varname)) {
                astman_send_error(s, m, "No variable specified");
@@ -1345,12 +1345,12 @@ static char mandescr_getvar[] =
 "      *Variable: Variable name\n"
 "      ActionID: Optional Action id for message matching.\n";
 
-static int action_getvar(struct mansession *s, struct message *m)
+static int action_getvar(struct mansession *s, const struct message *m)
 {
        struct ast_channel *c = NULL;
-       char *name = astman_get_header(m, "Channel");
-       char *varname = astman_get_header(m, "Variable");
-       char *id = astman_get_header(m,"ActionID");
+       const char *name = astman_get_header(m, "Channel");
+       const char *varname = astman_get_header(m, "Variable");
+       const char *id = astman_get_header(m,"ActionID");
        char *varval;
        char workspace[1024];
 
@@ -1368,7 +1368,7 @@ static int action_getvar(struct mansession *s, struct message *m)
        }
 
        if (varname[strlen(varname) - 1] == ')') {
-               ast_func_read(c, varname, workspace, sizeof(workspace));
+               ast_func_read(c, (char *) varname, workspace, sizeof(workspace));
        } else {
                pbx_retrieve_variable(c, varname, &varval, workspace, sizeof(workspace), NULL);
        }
@@ -1387,10 +1387,10 @@ static int action_getvar(struct mansession *s, struct message *m)
 
 /*! \brief Manager "status" command to show channels */
 /* Needs documentation... */
-static int action_status(struct mansession *s, struct message *m)
+static int action_status(struct mansession *s, const struct message *m)
 {
-       char *id = astman_get_header(m,"ActionID");
-       char *name = astman_get_header(m,"Channel");
+       const char *id = astman_get_header(m,"ActionID");
+       const char *name = astman_get_header(m,"Channel");
        char idText[256] = "";
        struct ast_channel *c;
        char bridge[256];
@@ -1488,13 +1488,13 @@ static char mandescr_redirect[] =
 "      ActionID: Optional Action id for message matching.\n";
 
 /*! \brief  action_redirect: The redirect manager command */
-static int action_redirect(struct mansession *s, struct message *m)
+static int action_redirect(struct mansession *s, const struct message *m)
 {
-       char *name = astman_get_header(m, "Channel");
-       char *name2 = astman_get_header(m, "ExtraChannel");
-       char *exten = astman_get_header(m, "Exten");
-       char *context = astman_get_header(m, "Context");
-       char *priority = astman_get_header(m, "Priority");
+       const char *name = astman_get_header(m, "Channel");
+       const char *name2 = astman_get_header(m, "ExtraChannel");
+       const char *exten = astman_get_header(m, "Exten");
+       const char *context = astman_get_header(m, "Context");
+       const char *priority = astman_get_header(m, "Priority");
        struct ast_channel *chan, *chan2 = NULL;
        int pi = 0;
        int res;
@@ -1548,10 +1548,10 @@ static char mandescr_command[] =
 "      ActionID: Optional Action id for message matching.\n";
 
 /*! \brief  action_command: Manager command "command" - execute CLI command */
-static int action_command(struct mansession *s, struct message *m)
+static int action_command(struct mansession *s, const struct message *m)
 {
-       char *cmd = astman_get_header(m, "Command");
-       char *id = astman_get_header(m, "ActionID");
+       const char *cmd = astman_get_header(m, "Command");
+       const char *id = astman_get_header(m, "ActionID");
        astman_append(s, "Response: Follows\r\nPrivilege: Command\r\n");
        if (!ast_strlen_zero(id))
                astman_append(s, "ActionID: %s\r\n", id);
@@ -1625,19 +1625,19 @@ static char mandescr_originate[] =
 "      Account: Account code\n"
 "      Async: Set to 'true' for fast origination\n";
 
-static int action_originate(struct mansession *s, struct message *m)
-{
-       char *name = astman_get_header(m, "Channel");
-       char *exten = astman_get_header(m, "Exten");
-       char *context = astman_get_header(m, "Context");
-       char *priority = astman_get_header(m, "Priority");
-       char *timeout = astman_get_header(m, "Timeout");
-       char *callerid = astman_get_header(m, "CallerID");
-       char *account = astman_get_header(m, "Account");
-       char *app = astman_get_header(m, "Application");
-       char *appdata = astman_get_header(m, "Data");
-       char *async = astman_get_header(m, "Async");
-       char *id = astman_get_header(m, "ActionID");
+static int action_originate(struct mansession *s, const struct message *m)
+{
+       const char *name = astman_get_header(m, "Channel");
+       const char *exten = astman_get_header(m, "Exten");
+       const char *context = astman_get_header(m, "Context");
+       const char *priority = astman_get_header(m, "Priority");
+       const char *timeout = astman_get_header(m, "Timeout");
+       const char *callerid = astman_get_header(m, "CallerID");
+       const char *account = astman_get_header(m, "Account");
+       const char *app = astman_get_header(m, "Application");
+       const char *appdata = astman_get_header(m, "Data");
+       const char *async = astman_get_header(m, "Async");
+       const char *id = astman_get_header(m, "ActionID");
        struct ast_variable *vars = astman_get_variables(m);
        char *tech, *data;
        char *l = NULL, *n = NULL;
@@ -1742,10 +1742,10 @@ static char mandescr_mailboxstatus[] =
 "      Waiting: <count>\n"
 "\n";
 
-static int action_mailboxstatus(struct mansession *s, struct message *m)
+static int action_mailboxstatus(struct mansession *s, const struct message *m)
 {
-       char *mailbox = astman_get_header(m, "Mailbox");
-       char *id = astman_get_header(m,"ActionID");
+       const char *mailbox = astman_get_header(m, "Mailbox");
+       const char *id = astman_get_header(m,"ActionID");
        char idText[256] = "";
        int ret;
        if (ast_strlen_zero(mailbox)) {
@@ -1774,10 +1774,10 @@ static char mandescr_mailboxcount[] =
 "      NewMessages: <count>\n"
 "      OldMessages: <count>\n"
 "\n";
-static int action_mailboxcount(struct mansession *s, struct message *m)
+static int action_mailboxcount(struct mansession *s, const struct message *m)
 {
-       char *mailbox = astman_get_header(m, "Mailbox");
-       char *id = astman_get_header(m,"ActionID");
+       const char *mailbox = astman_get_header(m, "Mailbox");
+       const char *id = astman_get_header(m,"ActionID");
        char idText[256] = "";
        int newmsgs = 0, oldmsgs = 0;
        if (ast_strlen_zero(mailbox)) {
@@ -1810,11 +1810,11 @@ static char mandescr_extensionstate[] =
 "Will return an \"Extension Status\" message.\n"
 "The response will include the hint for the extension and the status.\n";
 
-static int action_extensionstate(struct mansession *s, struct message *m)
+static int action_extensionstate(struct mansession *s, const struct message *m)
 {
-       char *exten = astman_get_header(m, "Exten");
-       char *context = astman_get_header(m, "Context");
-       char *id = astman_get_header(m,"ActionID");
+       const char *exten = astman_get_header(m, "Exten");
+       const char *context = astman_get_header(m, "Context");
+       const char *id = astman_get_header(m,"ActionID");
        char idText[256] = "";
        char hint[256] = "";
        int status;
@@ -1847,10 +1847,10 @@ static char mandescr_timeout[] =
 "      *Timeout: Maximum duration of the call (sec)\n"
 "Acknowledges set time with 'Timeout Set' message\n";
 
-static int action_timeout(struct mansession *s, struct message *m)
+static int action_timeout(struct mansession *s, const struct message *m)
 {
        struct ast_channel *c = NULL;
-       char *name = astman_get_header(m, "Channel");
+       const char *name = astman_get_header(m, "Channel");
        int timeout = atoi(astman_get_header(m, "Timeout"));
        if (ast_strlen_zero(name)) {
                astman_send_error(s, m, "No channel specified");
@@ -1901,9 +1901,9 @@ static char mandescr_userevent[] =
 "       Header1: Content1\n"
 "       HeaderN: ContentN\n";
 
-static int action_userevent(struct mansession *s, struct message *m)
+static int action_userevent(struct mansession *s, const struct message *m)
 {
-       char *event = astman_get_header(m, "UserEvent");
+       const char *event = astman_get_header(m, "UserEvent");
        char body[2048] = "";
        int x, bodylen = 0;
        for (x = 0; x < m->hdrcount; x++) {
@@ -1919,11 +1919,11 @@ static int action_userevent(struct mansession *s, struct message *m)
        return 0;
 }
 
-static int process_message(struct mansession *s, struct message *m)
+static int process_message(struct mansession *s, const struct message *m)
 {
        char action[80] = "";
        struct manager_action *tmp = first_action;
-       char *id = astman_get_header(m,"ActionID");
+       const char *id = astman_get_header(m,"ActionID");
        char idText[256] = "";
        int ret = 0;
 
@@ -1939,8 +1939,8 @@ static int process_message(struct mansession *s, struct message *m)
        }
        if (!s->authenticated) {
                if (!strcasecmp(action, "Challenge")) {
-                       char *authtype;
-                       authtype = astman_get_header(m, "AuthType");
+                       const char *authtype = astman_get_header(m, "AuthType");
+
                        if (!strcasecmp(authtype, "MD5")) {
                                if (ast_strlen_zero(s->challenge))
                                        snprintf(s->challenge, sizeof(s->challenge), "%ld", ast_random());
@@ -2050,29 +2050,42 @@ static int get_input(struct mansession *s, char *output)
        return 0;
 }
 
+static int do_message(struct mansession *s)
+{
+       struct message m = { 0 };
+       char header_buf[sizeof(s->inbuf)] = { '\0' };
+       int res;
+
+       for (;;) {
+               res = get_input(s, header_buf);
+               if (res > 0) {
+                       /* Strip trailing \r\n */
+                       if (strlen(header_buf) < 2)
+                               continue;
+                       header_buf[strlen(header_buf) - 2] = '\0';
+                       if (ast_strlen_zero(header_buf))
+                               return process_message(s, &m) ? -1 : 0;
+                       else if (m.hdrcount < (AST_MAX_MANHEADERS - 1))
+                               m.headers[m.hdrcount++] = ast_strdupa(header_buf);
+               } else {
+                       return res;
+               }
+       }
+}
+
 static void *session_do(void *data)
 {
        struct mansession *s = data;
-       struct message m;
        int res;
        
        ast_mutex_lock(&s->__lock);
        astman_append(s, "Asterisk Call Manager/1.0\r\n");
        ast_mutex_unlock(&s->__lock);
-       memset(&m, 0, sizeof(m));
        for (;;) {
-               res = get_input(s, m.headers[m.hdrcount]);
-               if (res > 0) {
-                       /* Strip trailing \r\n */
-                       if (strlen(m.headers[m.hdrcount]) < 2)
-                               continue;
-                       m.headers[m.hdrcount][strlen(m.headers[m.hdrcount]) - 2] = '\0';
-                       if (ast_strlen_zero(m.headers[m.hdrcount])) {
-                               if (process_message(s, &m))
-                                       break;
-                               memset(&m, 0, sizeof(m));
-                       } else if (m.hdrcount < AST_MAX_MANHEADERS - 1)
-                               m.hdrcount++;
+               res = do_message(s);
+               
+               if (res == 0) {
+                       continue;
                } else if (res < 0) {
                        break;
                } else if (s->eventq->next) {
@@ -2339,7 +2352,7 @@ static int ast_manager_register_struct(struct manager_action *act)
 
 /*! \brief register a new command with manager, including online help. This is 
        the preferred way to register a manager command */
-int ast_manager_register2(const char *action, int auth, int (*func)(struct mansession *s, struct message *m), const char *synopsis, const char *description)
+int ast_manager_register2(const char *action, int auth, int (*func)(struct mansession *s, const struct message *m), const char *synopsis, const char *description)
 {
        struct manager_action *cur;
 
@@ -2380,17 +2393,6 @@ static struct mansession *find_session(unsigned long ident)
 }
 
 
-static void vars2msg(struct message *m, struct ast_variable *vars)
-{
-       int x;
-       for (x = 0; vars && (x < AST_MAX_MANHEADERS); x++, vars = vars->next) {
-               if (!vars)
-                       break;
-               m->hdrcount = x + 1;
-               snprintf(m->headers[x], sizeof(m->headers[x]), "%s: %s", vars->name, vars->value);
-       }
-}
-
 enum {
        FORMAT_RAW,
        FORMAT_HTML,
@@ -2408,7 +2410,6 @@ static char *generic_http_callback(int format, struct sockaddr_in *requestor, co
        int blastaway = 0;
        char *c = workspace;
        char *retval = NULL;
-       struct message m;
        struct ast_variable *v;
 
        for (v = params; v; v = v->next) {
@@ -2451,21 +2452,19 @@ static char *generic_http_callback(int format, struct sockaddr_in *requestor, co
                s->sessiontimeout += httptimeout;
        ast_mutex_unlock(&s->__lock);
        
-       memset(&m, 0, sizeof(m));
        if (s) {
+               struct message m = { 0 };
                char tmp[80];
-               ast_build_string(&c, &len, "Content-type: text/%s\r\n", contenttype[format]);
-               sprintf(tmp, "%08lx", s->managerid);
-               ast_build_string(&c, &len, "%s\r\n", ast_http_setcookie("mansession_id", tmp, httptimeout, cookie, sizeof(cookie)));
-               if (format == FORMAT_HTML)
-                       ast_build_string(&c, &len, "<title>Asterisk&trade; Manager Test Interface</title>");
-               vars2msg(&m, params);
-               if (format == FORMAT_XML) {
-                       ast_build_string(&c, &len, "<ajax-response>\n");
-               } else if (format == FORMAT_HTML) {
-                       ast_build_string(&c, &len, "<body bgcolor=\"#ffffff\"><table align=center bgcolor=\"#f1f1f1\" width=\"500\">\r\n");
-                       ast_build_string(&c, &len, "<tr><td colspan=\"2\" bgcolor=\"#f1f1ff\"><h1>&nbsp;&nbsp;Manager Tester</h1></td></tr>\r\n");
+               unsigned int x;
+               size_t hdrlen;
+
+               for (x = 0; params && (x < AST_MAX_MANHEADERS); x++, params = params->next) {
+                       hdrlen = strlen(params->name) + strlen(params->value) + 3;
+                       m.headers[m.hdrcount] = alloca(hdrlen);
+                       snprintf((char *) m.headers[m.hdrcount], hdrlen, "%s: %s", params->name, params->value);
+                       m.hdrcount = x + 1;
                }
+
                if (process_message(s, &m)) {
                        if (s->authenticated) {
                                if (option_verbose > 1) {
@@ -2482,6 +2481,17 @@ static char *generic_http_callback(int format, struct sockaddr_in *requestor, co
                        }
                        s->needdestroy = 1;
                }
+               ast_build_string(&c, &len, "Content-type: text/%s\r\n", contenttype[format]);
+               sprintf(tmp, "%08lx", s->managerid);
+               ast_build_string(&c, &len, "%s\r\n", ast_http_setcookie("mansession_id", tmp, httptimeout, cookie, sizeof(cookie)));
+               if (format == FORMAT_HTML)
+                       ast_build_string(&c, &len, "<title>Asterisk&trade; Manager Interface</title>");
+               if (format == FORMAT_XML) {
+                       ast_build_string(&c, &len, "<ajax-response>\n");
+               } else if (format == FORMAT_HTML) {
+                       ast_build_string(&c, &len, "<body bgcolor=\"#ffffff\"><table align=center bgcolor=\"#f1f1f1\" width=\"500\">\r\n");
+                       ast_build_string(&c, &len, "<tr><td colspan=\"2\" bgcolor=\"#f1f1ff\"><h1>&nbsp;&nbsp;Manager Tester</h1></td></tr>\r\n");
+               }
                if (s->outputstr) {
                        char *tmp;
                        if (format == FORMAT_XML)
index 7bd061157c629f963f13650c7a83d45eefed07e7..22c1d66ca617c0d927711b5197e790b76bb6639c 100644 (file)
@@ -1927,10 +1927,10 @@ static struct ast_cli_entry cli_features[] = {
 };
 
 /*! \brief Dump lot status */
-static int manager_parking_status( struct mansession *s, struct message *m )
+static int manager_parking_status( struct mansession *s, const struct message *m)
 {
        struct parkeduser *cur;
-       char *id = astman_get_header(m,"ActionID");
+       const char *id = astman_get_header(m,"ActionID");
        char idText[256] = "";
 
        if (!ast_strlen_zero(id))
@@ -1974,11 +1974,11 @@ static char mandescr_park[] =
 "      *Channel2: Channel to announce park info to (and return to if timeout)\n"
 "      Timeout: Number of milliseconds to wait before callback.\n";  
 
-static int manager_park(struct mansession *s, struct message *m)
+static int manager_park(struct mansession *s, const struct message *m)
 {
-       char *channel = astman_get_header(m, "Channel");
-       char *channel2 = astman_get_header(m, "Channel2");
-       char *timeout = astman_get_header(m, "Timeout");
+       const char *channel = astman_get_header(m, "Channel");
+       const char *channel2 = astman_get_header(m, "Channel2");
+       const char *timeout = astman_get_header(m, "Timeout");
        char buf[BUFSIZ];
        int to = 0;
        int res = 0;
index 583c44eeb05efb94f127691be56a986135f96d05..43c2073833b49bdd6be656857ceead221b3a1d7a 100644 (file)
@@ -55,7 +55,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #define JABBER_CONFIG "jabber.conf"
 
 /*-- Forward declarations */
-static int manager_jabber_send( struct mansession *s, struct message *m );
 static int aji_highest_bit(int number);
 static void aji_buddy_destroy(struct aji_buddy *obj);
 static void aji_client_destroy(struct aji_client *obj);
@@ -1367,7 +1366,7 @@ static void aji_handle_subscribe(struct aji_client *client, ikspak *pak)
  * \param aji_client struct , reciever, message.
  * \return 1.
  */
-int ast_aji_send(struct aji_client *client, char *address, char *message)
+int ast_aji_send(struct aji_client *client, const char *address, const char *message)
 {
        int res = 0;
        iks *message_packet = NULL;
@@ -2291,7 +2290,7 @@ static int aji_load_config(void)
  * \param void. 
  * \return 1.
  */
-struct aji_client *ast_aji_get_client(char *name)
+struct aji_client *ast_aji_get_client(const char *name)
 {
        struct aji_client *client = NULL;
 
@@ -2314,13 +2313,13 @@ static char mandescr_jabber_send[] =
 "  Message:    Message to be sent to the buddy\n";
 
 /*! \brief  Send a Jabber Message via call from the Manager */
-static int manager_jabber_send( struct mansession *s, struct message *m )
+static int manager_jabber_send(struct mansession *s, const struct message *m)
 {
        struct aji_client *client = NULL;
-       char *id = astman_get_header(m,"ActionID");
-       char *jabber = astman_get_header(m,"Jabber");
-       char *screenname = astman_get_header(m,"ScreenName");
-       char *message = astman_get_header(m,"Message");
+       const char *id = astman_get_header(m,"ActionID");
+       const char *jabber = astman_get_header(m,"Jabber");
+       const char *screenname = astman_get_header(m,"ScreenName");
+       const char *message = astman_get_header(m,"Message");
 
        if (ast_strlen_zero(jabber)) {
                astman_send_error(s, m, "No transport specified");
index 128f4d82f4e7e363778f95196ef290c194c8ce13..a45c3a180ec97dd0f7663db97817f8db665c0951 100644 (file)
@@ -474,13 +474,13 @@ static char start_monitor_action_help[] =
 "                the input and output channels together after the\n"
 "                recording is finished.\n";
 
-static int start_monitor_action(struct mansession *s, struct message *m)
+static int start_monitor_action(struct mansession *s, const struct message *m)
 {
        struct ast_channel *c = NULL;
-       char *name = astman_get_header(m, "Channel");
-       char *fname = astman_get_header(m, "File");
-       char *format = astman_get_header(m, "Format");
-       char *mix = astman_get_header(m, "Mix");
+       const char *name = astman_get_header(m, "Channel");
+       const char *fname = astman_get_header(m, "File");
+       const char *format = astman_get_header(m, "Format");
+       const char *mix = astman_get_header(m, "Mix");
        char *d;
        
        if (ast_strlen_zero(name)) {
@@ -527,10 +527,10 @@ static char stop_monitor_action_help[] =
 "  started 'Monitor' action.  The only parameter is 'Channel', the name\n"
 "  of the channel monitored.\n";
 
-static int stop_monitor_action(struct mansession *s, struct message *m)
+static int stop_monitor_action(struct mansession *s, const struct message *m)
 {
        struct ast_channel *c = NULL;
-       char *name = astman_get_header(m, "Channel");
+       const char *name = astman_get_header(m, "Channel");
        int res;
        if (ast_strlen_zero(name)) {
                astman_send_error(s, m, "No channel specified");
@@ -559,11 +559,11 @@ static char change_monitor_action_help[] =
 "  File        - Required.  Is the new name of the file created in the\n"
 "                monitor spool directory.\n";
 
-static int change_monitor_action(struct mansession *s, struct message *m)
+static int change_monitor_action(struct mansession *s, const struct message *m)
 {
        struct ast_channel *c = NULL;
-       char *name = astman_get_header(m, "Channel");
-       char *fname = astman_get_header(m, "File");
+       const char *name = astman_get_header(m, "Channel");
+       const char *fname = astman_get_header(m, "File");
        if (ast_strlen_zero(name)) {
                astman_send_error(s, m, "No channel specified");
                return 0;
@@ -601,10 +601,10 @@ enum MONITOR_PAUSING_ACTION
        MONITOR_ACTION_UNPAUSE
 };
          
-static int do_pause_or_unpause(struct mansession *s, struct message *m, int action)
+static int do_pause_or_unpause(struct mansession *s, const struct message *m, int action)
 {
        struct ast_channel *c = NULL;
-       char *name = astman_get_header(m, "Channel");
+       const char *name = astman_get_header(m, "Channel");
        
        if (IS_NULL_STRING(name)) {
                astman_send_error(s, m, "No channel specified");
@@ -633,7 +633,7 @@ static char pause_monitor_action_help[] =
        " be used to control this:\n"
        "  Channel     - Required.  Used to specify the channel to record.\n";
 
-static int pause_monitor_action(struct mansession *s, struct message *m)
+static int pause_monitor_action(struct mansession *s, const struct message *m)
 {
        return do_pause_or_unpause(s, m, MONITOR_ACTION_PAUSE);
 }
@@ -644,7 +644,7 @@ static char unpause_monitor_action_help[] =
        "  be used to control this:\n"
        "  Channel     - Required.  Used to specify the channel to record.\n";
 
-static int unpause_monitor_action(struct mansession *s, struct message *m)
+static int unpause_monitor_action(struct mansession *s, const struct message *m)
 {
        return do_pause_or_unpause(s, m, MONITOR_ACTION_UNPAUSE);
 }
index 427b581b28541fcc3433008348fe388345cefaa9..f072dcd5779c6f77a36061b861cb5ac16ef1d35b 100644 (file)
@@ -38,7 +38,6 @@
 #include <stdlib.h>
 
 #include "asterisk/md5.h"
-#include "asterisk/manager.h"
 #include "asterisk/linkedlists.h"
 
 #undef gethostbyname
  */
 #define _NEWT_CAST (void *)
 
+#define DEFAULT_MANAGER_PORT 5038
+
+struct message {
+       unsigned int hdrcount;
+       char headers[MAX_HEADERS][MAX_LEN];
+};
+
 static struct ast_mansession {
        struct sockaddr_in sin;
        int fd;