diff options
author | Michiel van Baak <michiel@vanbaak.info> | 2008-05-22 16:29:54 +0000 |
---|---|---|
committer | Michiel van Baak <michiel@vanbaak.info> | 2008-05-22 16:29:54 +0000 |
commit | f1e9371da8b502999b9aec1db7f68635395a7b6a (patch) | |
tree | bcbbf4eda53cdb8257bbc7add4616e01e31b1ae2 /channels/chan_iax2.c | |
parent | 2c7760e6262c97afc19037890242299421d62157 (diff) |
- revert change to ast_queue_hangup and create ast_queue_hangup_with_cause
- make data member of the ast_frame struct a named union instead of a void
Recently the ast_queue_hangup function got a new parameter, the hangupcause
Feedback came in that this is no good and that instead a new function should be created.
This I did.
The hangupcause was stored in the seqno member of the ast_frame struct. This is not very
elegant, and since there's already a data member that one should be used.
Problem is, this member was a void *.
Now it's a named union so it can hold a pointer, an uint32 and there's a padding in case someone
wants to store another type in there in the future.
This commit is so massive, because all ast_frame.data uses have to be
altered to ast_frame.data.data
Thanks russellb and kpfleming for the feedback.
(closes issue #12674)
Reported by: mvanbaak
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@117802 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels/chan_iax2.c')
-rw-r--r-- | channels/chan_iax2.c | 38 |
1 files changed, 19 insertions, 19 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 24cab65ba..5d4a4e084 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -1783,7 +1783,7 @@ static int iax2_queue_hangup(int callno) usleep(1); ast_mutex_lock(&iaxsl[callno]); } else { - ast_queue_hangup(iaxs[callno]->owner, -1); + ast_queue_hangup(iaxs[callno]->owner); ast_channel_unlock(iaxs[callno]->owner); break; } @@ -2244,7 +2244,7 @@ retry: /* If there's an owner, prod it to give up */ /* It is ok to use ast_queue_hangup() here instead of iax2_queue_hangup() * because we already hold the owner channel lock. */ - ast_queue_hangup(owner, -1); + ast_queue_hangup(owner); } if (pvt->peercallno) { @@ -2312,7 +2312,7 @@ static void __attempt_transmit(const void *data) ast_log(LOG_WARNING, "Max retries exceeded to host %s on %s (type = %d, subclass = %d, ts=%d, seqno=%d)\n", ast_inet_ntoa(iaxs[f->callno]->addr.sin_addr),iaxs[f->callno]->owner->name , f->af.frametype, f->af.subclass, f->ts, f->oseqno); iaxs[callno]->error = ETIMEDOUT; if (iaxs[callno]->owner) { - struct ast_frame fr = { AST_FRAME_CONTROL, AST_CONTROL_HANGUP, .seqno = AST_CAUSE_DESTINATION_OUT_OF_ORDER }; + struct ast_frame fr = { AST_FRAME_CONTROL, AST_CONTROL_HANGUP, .data.uint32 = AST_CAUSE_DESTINATION_OUT_OF_ORDER }; /* Hangup the fd */ iax2_queue_frame(callno, &fr); /* XXX */ /* Remember, owner could disappear */ @@ -3030,7 +3030,7 @@ static int iax2_sendtext(struct ast_channel *c, const char *text) static int iax2_sendimage(struct ast_channel *c, struct ast_frame *img) { - return send_command_locked(PTR_TO_CALLNO(c->tech_pvt), AST_FRAME_IMAGE, img->subclass, 0, img->data, img->datalen, -1); + return send_command_locked(PTR_TO_CALLNO(c->tech_pvt), AST_FRAME_IMAGE, img->subclass, 0, img->data.ptr, img->datalen, -1); } static int iax2_sendhtml(struct ast_channel *c, int subclass, const char *data, int datalen) @@ -4418,7 +4418,7 @@ static int iax2_trunk_queue(struct chan_iax2_pvt *pvt, struct iax_frame *fr) tpeer->trunkdatalen += sizeof(struct ast_iax2_meta_trunk_entry); } /* Copy actual trunk data */ - memcpy(ptr, f->data, f->datalen); + memcpy(ptr, f->data.ptr, f->datalen); tpeer->trunkdatalen += f->datalen; tpeer->calls++; @@ -4698,7 +4698,7 @@ static int iax2_send(struct chan_iax2_pvt *pvt, struct ast_frame *f, unsigned in else fr->oseqno = pvt->oseqno++; fr->iseqno = pvt->iseqno; - fh = (struct ast_iax2_full_hdr *)(fr->af.data - sizeof(struct ast_iax2_full_hdr)); + fh = (struct ast_iax2_full_hdr *)(fr->af.data.ptr - sizeof(struct ast_iax2_full_hdr)); fh->scallno = htons(fr->callno | IAX_FLAG_FULL); fh->ts = htonl(fr->ts); fh->oseqno = fr->oseqno; @@ -4763,7 +4763,7 @@ static int iax2_send(struct chan_iax2_pvt *pvt, struct ast_frame *f, unsigned in /* Video frame have no sequence number */ fr->oseqno = -1; fr->iseqno = -1; - vh = (struct ast_iax2_video_hdr *)(fr->af.data - sizeof(struct ast_iax2_video_hdr)); + vh = (struct ast_iax2_video_hdr *)(fr->af.data.ptr - sizeof(struct ast_iax2_video_hdr)); vh->zeros = 0; vh->callno = htons(0x8000 | fr->callno); vh->ts = htons((fr->ts & 0x7FFF) | (fr->af.subclass & 0x1 ? 0x8000 : 0)); @@ -4779,7 +4779,7 @@ static int iax2_send(struct chan_iax2_pvt *pvt, struct ast_frame *f, unsigned in fr->oseqno = -1; fr->iseqno = -1; /* Mini frame will do */ - mh = (struct ast_iax2_mini_hdr *)(fr->af.data - sizeof(struct ast_iax2_mini_hdr)); + mh = (struct ast_iax2_mini_hdr *)(fr->af.data.ptr - sizeof(struct ast_iax2_mini_hdr)); mh->callno = htons(fr->callno); mh->ts = htons(fr->ts & 0xFFFF); fr->datalen = fr->af.datalen + sizeof(struct ast_iax2_mini_hdr); @@ -5666,7 +5666,7 @@ static int __send_command(struct chan_iax2_pvt *i, char type, int command, unsig f.subclass = command; f.datalen = datalen; f.src = __FUNCTION__; - f.data = (void *) data; + f.data.ptr = (void *) data; return iax2_send(i, &f, ts, seqno, now, transfer, final, media); } @@ -7810,9 +7810,9 @@ static int socket_process_meta(int packet_len, struct ast_iax2_meta_hdr *meta, s f.datalen = len; if (f.datalen >= 0) { if (f.datalen) - f.data = ptr; + f.data.ptr = ptr; else - f.data = NULL; + f.data.ptr = NULL; if (trunked_ts) fr->ts = (iaxs[fr->callno]->last & 0xFFFF0000L) | (trunked_ts & 0xffff); else @@ -8217,15 +8217,15 @@ static int socket_process(struct iax2_thread *thread) ast_mutex_unlock(&iaxsl[fr->callno]); return 1; } - f.data = NULL; + f.data.ptr = NULL; f.datalen = 0; } else - f.data = thread->buf + sizeof(*fh); + f.data.ptr = thread->buf + sizeof(*fh); } else { if (f.frametype == AST_FRAME_IAX) - f.data = NULL; + f.data.ptr = NULL; else - f.data = empty; + f.data.ptr = empty; memset(&ies, 0, sizeof(ies)); } @@ -9421,9 +9421,9 @@ retryowner2: } f.datalen = res - sizeof(*vh); if (f.datalen) - f.data = thread->buf + sizeof(*vh); + f.data.ptr = thread->buf + sizeof(*vh); else - f.data = NULL; + f.data.ptr = NULL; #ifdef IAXTESTS if (test_resync) { fr->ts = (iaxs[fr->callno]->last & 0xFFFF8000L) | ((ntohs(vh->ts) + test_resync) & 0x7fff); @@ -9448,9 +9448,9 @@ retryowner2: return 1; } if (f.datalen) - f.data = thread->buf + sizeof(*mh); + f.data.ptr = thread->buf + sizeof(*mh); else - f.data = NULL; + f.data.ptr = NULL; #ifdef IAXTESTS if (test_resync) { fr->ts = (iaxs[fr->callno]->last & 0xFFFF0000L) | ((ntohs(mh->ts) + test_resync) & 0xffff); |