]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Correctly track the hookstate
authorTilghman Lesher <tilghman@meg.abyt.es>
Sun, 25 Jan 2009 23:44:01 +0000 (23:44 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Sun, 25 Jan 2009 23:44:01 +0000 (23:44 +0000)
(closes issue #13686)
 Reported by: itiliti
 Patches:
       20081013__bug13686.diff.txt uploaded by Corydon76 (license 14)

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

channels/chan_oss.c

index ac62f2005a70f04040c334d8cfe156a0faaac241..73297f4efd27245865f963a935dc42c47d7c076f 100644 (file)
@@ -336,9 +336,9 @@ struct chan_oss_pvt {
        int total_blocks;                       /* total blocks in the output device */
        int sounddev;
        enum { M_UNSET, M_FULL, M_READ, M_WRITE } duplex;
-       int autoanswer;
-       int autohangup;
-       int hookstate;
+       int autoanswer;             /*!< Boolean: whether to answer the immediately upon calling */
+       int autohangup;             /*!< Boolean: whether to hangup the call when the remote end hangs up */
+       int hookstate;              /*!< Boolean: 1 if offhook; 0 if onhook */
        char *mixer_cmd;                        /* initial command to issue to the mixer */
        unsigned int queuesize;         /* max fragments in queue */
        unsigned int frags;                     /* parameter for SETFRAGMENT */
@@ -367,8 +367,8 @@ struct chan_oss_pvt {
        char ext[AST_MAX_EXTENSION];
        char ctx[AST_MAX_CONTEXT];
        char language[MAX_LANGUAGE];
-       char cid_name[256];                     /*XXX */
-       char cid_num[256];                      /*XXX */
+       char cid_name[256];         /*!< Initial CallerID name */
+       char cid_num[256];          /*!< Initial CallerID number  */
        char mohinterpret[MAX_MUSICCLASS];
 
        /* buffers used in oss_write */
@@ -401,8 +401,7 @@ static char *oss_active;     /* the active device */
 
 static int setformat(struct chan_oss_pvt *o, int mode);
 
-static struct ast_channel *oss_request(const char *type, int format, void *data
-, int *cause);
+static struct ast_channel *oss_request(const char *type, int format, void *data, int *cause);
 static int oss_digit_begin(struct ast_channel *c, char digit);
 static int oss_digit_end(struct ast_channel *c, char digit, unsigned int duration);
 static int oss_text(struct ast_channel *c, const char *text);
@@ -808,6 +807,7 @@ static int oss_call(struct ast_channel *c, char *dest, int timeout)
                f.frametype = AST_FRAME_CONTROL;
                f.subclass = AST_CONTROL_ANSWER;
                ast_queue_frame(c, &f);
+               o->hookstate = 1;
        } else {
                ast_verbose("<< Type 'answer' to answer, or use 'autoanswer' for future calls >> \n");
                f.frametype = AST_FRAME_CONTROL;
@@ -833,6 +833,7 @@ static int oss_answer(struct ast_channel *c)
        ast_setstate(c, AST_STATE_UP);
        o->cursound = -1;
        o->nosound = 0;
+       o->hookstate = 1;
        return 0;
 }
 
@@ -1028,8 +1029,6 @@ static struct ast_channel *oss_new(struct chan_oss_pvt *o, char *ext, char *ctx,
                        ast_log(LOG_WARNING, "Unable to start PBX on %s\n", c->name);
                        ast_hangup(c);
                        o->owner = c = NULL;
-                       /* XXX what about the channel itself ? */
-                       /* XXX what about usecnt ? */
                }
        }
 
@@ -1296,7 +1295,7 @@ static int console_flash_deprecated(int fd, int argc, char *argv[])
                return RESULT_FAILURE;
        }
        o->hookstate = 0;
-       if (o->owner) /* XXX must be true, right ? */
+       if (o->owner)
                ast_queue_frame(o->owner, &f);
        return RESULT_SUCCESS;
 }
@@ -1315,7 +1314,7 @@ static int console_flash(int fd, int argc, char *argv[])
                return RESULT_FAILURE;
        }
        o->hookstate = 0;
-       if (o->owner)                           /* XXX must be true, right ? */
+       if (o->owner)
                ast_queue_frame(o->owner, &f);
        return RESULT_SUCCESS;
 }
@@ -1888,7 +1887,7 @@ static int unload_module(void)
                }
                if (o->owner)
                        ast_softhangup(o->owner, AST_SOFTHANGUP_APPUNLOAD);
-               if (o->owner)                   /* XXX how ??? */
+               if (o->owner)
                        return -1;
                /* XXX what about the thread ? */
                /* XXX what about the memory allocated ? */