]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 77788 via svnmerge from
authorRussell Bryant <russell@russellbryant.com>
Mon, 30 Jul 2007 19:18:24 +0000 (19:18 +0000)
committerRussell Bryant <russell@russellbryant.com>
Mon, 30 Jul 2007 19:18:24 +0000 (19:18 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r77788 | russell | 2007-07-30 14:13:31 -0500 (Mon, 30 Jul 2007) | 10 lines

(closes issue #10279)
Reported by: seanbright
Patches:
      res_agi.carefulwrite.1.4.07252007.patch uploaded by seanbright (license 71)
      res_agi.carefulwrite.trunk.07252007.patch uploaded by seanbright (license 71)

Allow the "agi_network: yes" line to be printed out in the AGI debug output.
Also, allow partial writes to be handled when writing out this line just like
it is for all of the others.

........

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@77789 65c4cc65-6c06-0410-ace0-fbb531ad65f3

include/asterisk/agi.h
res/res_agi.c

index 584ddfe036bfe526cf27001f7fc67d08f9177d5c..4be6565dcd805601c6657f0696ceb9c20fa2b70f 100644 (file)
@@ -51,7 +51,7 @@ typedef struct agi_command {
        AST_LIST_ENTRY(agi_command) list;
 } agi_command;
 
-void ast_agi_fdprintf(int fd, char *fmt, ...);
+int ast_agi_fdprintf(int fd, char *fmt, ...);
 int ast_agi_register(struct ast_module *mod, agi_command *cmd);
 int ast_agi_unregister(struct ast_module *mod, agi_command *cmd);
 void ast_agi_register_multiple(struct ast_module *mod, agi_command *cmd, int len);
index 003cefac5065106040d78287d5ad96b4c4e2f793..023d8d1316ce9e87b77d69152732f7d5190ca5ff 100644 (file)
@@ -115,7 +115,7 @@ enum agi_result {
 
 static agi_command *find_command(char *cmds[], int exact);
 
-void ast_agi_fdprintf(int fd, char *fmt, ...)
+int ast_agi_fdprintf(int fd, char *fmt, ...)
 {
        char *stuff;
        int res = 0;
@@ -127,13 +127,15 @@ void ast_agi_fdprintf(int fd, char *fmt, ...)
 
        if (res == -1) {
                ast_log(LOG_ERROR, "Out of memory\n");
-               return;
+               return -1;
        }
 
        if (agidebug)
                ast_verbose("AGI Tx >> %s", stuff);
        ast_carefulwrite(fd, stuff, strlen(stuff), 100);
        ast_free(stuff);
+
+       return res;
 }
 
 /* launch_netscript: The fastagi handler.
@@ -205,8 +207,8 @@ static enum agi_result launch_netscript(char *agiurl, char *argv[], int *fds, in
                        return AGI_RESULT_FAILURE;
                }
        }
-       /* XXX in theory should check for partial writes... */
-       while (write(s, "agi_network: yes\n", strlen("agi_network: yes\n")) < 0) {
+
+       if (ast_agi_fdprintf(s, "agi_network: yes\n") < 0) {
                if (errno != EINTR) {
                        ast_log(LOG_WARNING, "Connect to '%s' failed: %s\n", agiurl, strerror(errno));
                        close(s);