Review Board 1.7.16


IAX2: refactor nativebridge transfer.

Review Request #2602 - Created June 8, 2013 and submitted

Alec Davis
1.8 to trunk
Reviewers
asterisk-dev
Asterisk
remove triple checking of iaxs[fr->callno]->transferring

reduce indentation.

I've done this as 2 step, so that reviewers are confident nothing breaks.

 

Diff revision 3 (Latest)

1 2 3
1 2 3

  1. branches/11/channels/chan_iax2.c: Loading...
branches/11/channels/chan_iax2.c
Revision 391036 New Change
[20] 11517 lines
[+20] [+] immediatedial:
11518
						send_command(iaxs[iaxs[fr->callno]->bridgecallno], AST_FRAME_IAX, IAX_COMMAND_TXREJ, 0, NULL, 0, -1);
11518
						send_command(iaxs[iaxs[fr->callno]->bridgecallno], AST_FRAME_IAX, IAX_COMMAND_TXREJ, 0, NULL, 0, -1);
11519
					}
11519
					}
11520
				}
11520
				}
11521
				break;
11521
				break;
11522
			case IAX_COMMAND_TXREADY:
11522
			case IAX_COMMAND_TXREADY:
11523
				if ((iaxs[fr->callno]->transferring == TRANSFER_BEGIN) ||
11523
				if (iaxs[fr->callno]->transferring == TRANSFER_BEGIN) {
11524
				    (iaxs[fr->callno]->transferring == TRANSFER_MBEGIN)) {

   
11525
					if (iaxs[fr->callno]->transferring == TRANSFER_MBEGIN)

   
11526
						iaxs[fr->callno]->transferring = TRANSFER_MREADY;

   
11527
					else

   
11528
						iaxs[fr->callno]->transferring = TRANSFER_READY;
11524
					iaxs[fr->callno]->transferring = TRANSFER_READY;

    
   
11525
				} else if (iaxs[fr->callno]->transferring == TRANSFER_MBEGIN) {

    
   
11526
					iaxs[fr->callno]->transferring = TRANSFER_MREADY;

    
   
11527
				} else {

    
   
11528
					break;

    
   
11529
				}
11529
					ast_verb(3, "Channel '%s' ready to transfer\n", iaxs[fr->callno]->owner ? ast_channel_name(iaxs[fr->callno]->owner) : "<Unknown>");
11530
				ast_verb(3, "Channel '%s' ready to transfer\n", iaxs[fr->callno]->owner ? ast_channel_name(iaxs[fr->callno]->owner) : "<Unknown>");
11530
					if (iaxs[fr->callno]->bridgecallno) {
11531

   
11531
						if ((iaxs[iaxs[fr->callno]->bridgecallno]->transferring == TRANSFER_READY) ||
11532
				if (!iaxs[fr->callno]->bridgecallno) {
11532
						    (iaxs[iaxs[fr->callno]->bridgecallno]->transferring == TRANSFER_MREADY)) {
11533
					break;
11533
							/* They're both ready, now release them. */
11534
				}

    
   
11535

   

    
   
11536
				if (!(iaxs[iaxs[fr->callno]->bridgecallno]->transferring == TRANSFER_READY) &&

    
   
11537
				    !(iaxs[iaxs[fr->callno]->bridgecallno]->transferring == TRANSFER_MREADY)) {

    
   
11538
					break;

    
   
11539
				}

    
   
11540
				/* Both sides are ready */

    
   
11541

   

    
   
11542
				/* XXX what isn't checked here is that both sides match transfer types. */

    
   
11543

   
11534
							if (iaxs[fr->callno]->transferring == TRANSFER_MREADY) {
11544
				if (iaxs[fr->callno]->transferring == TRANSFER_MREADY) {
11535
								ast_verb(3, "Attempting media bridge of %s and %s\n", iaxs[fr->callno]->owner ? ast_channel_name(iaxs[fr->callno]->owner) : "<Unknown>",
11545
					ast_verb(3, "Attempting media bridge of %s and %s\n", iaxs[fr->callno]->owner ? ast_channel_name(iaxs[fr->callno]->owner) : "<Unknown>",
11536
										iaxs[iaxs[fr->callno]->bridgecallno]->owner ? ast_channel_name(iaxs[iaxs[fr->callno]->bridgecallno]->owner) : "<Unknown>");
11546
							iaxs[iaxs[fr->callno]->bridgecallno]->owner ? ast_channel_name(iaxs[iaxs[fr->callno]->bridgecallno]->owner) : "<Unknown>");
11537

    
   
11547

   
11538
								iaxs[iaxs[fr->callno]->bridgecallno]->transferring = TRANSFER_MEDIA;
11548
					iaxs[iaxs[fr->callno]->bridgecallno]->transferring = TRANSFER_MEDIA;
11539
								iaxs[fr->callno]->transferring = TRANSFER_MEDIA;
11549
					iaxs[fr->callno]->transferring = TRANSFER_MEDIA;
11540

    
   
11550

   
11541
								memset(&ied0, 0, sizeof(ied0));
11551
					memset(&ied0, 0, sizeof(ied0));
11542
								memset(&ied1, 0, sizeof(ied1));
11552
					memset(&ied1, 0, sizeof(ied1));
11543
								iax_ie_append_short(&ied0, IAX_IE_CALLNO, iaxs[iaxs[fr->callno]->bridgecallno]->peercallno);
11553
					iax_ie_append_short(&ied0, IAX_IE_CALLNO, iaxs[iaxs[fr->callno]->bridgecallno]->peercallno);
11544
								iax_ie_append_short(&ied1, IAX_IE_CALLNO, iaxs[fr->callno]->peercallno);
11554
					iax_ie_append_short(&ied1, IAX_IE_CALLNO, iaxs[fr->callno]->peercallno);
11545
								send_command(iaxs[fr->callno], AST_FRAME_IAX, IAX_COMMAND_TXMEDIA, 0, ied0.buf, ied0.pos, -1);
11555
					send_command(iaxs[fr->callno], AST_FRAME_IAX, IAX_COMMAND_TXMEDIA, 0, ied0.buf, ied0.pos, -1);
11546
								send_command(iaxs[iaxs[fr->callno]->bridgecallno], AST_FRAME_IAX, IAX_COMMAND_TXMEDIA, 0, ied1.buf, ied1.pos, -1);
11556
					send_command(iaxs[iaxs[fr->callno]->bridgecallno], AST_FRAME_IAX, IAX_COMMAND_TXMEDIA, 0, ied1.buf, ied1.pos, -1);

    
   
11557

   
11547
							} else {
11558
				} else {
11548
								ast_verb(3, "Releasing %s and %s\n", iaxs[fr->callno]->owner ? ast_channel_name(iaxs[fr->callno]->owner) : "<Unknown>",
11559
					ast_verb(3, "Releasing %s and %s\n", iaxs[fr->callno]->owner ? ast_channel_name(iaxs[fr->callno]->owner) : "<Unknown>",
11549
										iaxs[iaxs[fr->callno]->bridgecallno]->owner ? ast_channel_name(iaxs[iaxs[fr->callno]->bridgecallno]->owner) : "<Unknown>");
11560
							iaxs[iaxs[fr->callno]->bridgecallno]->owner ? ast_channel_name(iaxs[iaxs[fr->callno]->bridgecallno]->owner) : "<Unknown>");
11550

    
   
11561

   
11551
								iaxs[iaxs[fr->callno]->bridgecallno]->transferring = TRANSFER_RELEASED;
11562
					iaxs[iaxs[fr->callno]->bridgecallno]->transferring = TRANSFER_RELEASED;
[+20] [20] 10 lines
[+20] immediatedial:
11562
								iax_ie_append_short(&ied0, IAX_IE_CALLNO, iaxs[iaxs[fr->callno]->bridgecallno]->peercallno);
11573
					iax_ie_append_short(&ied0, IAX_IE_CALLNO, iaxs[iaxs[fr->callno]->bridgecallno]->peercallno);
11563
								iax_ie_append_short(&ied1, IAX_IE_CALLNO, iaxs[fr->callno]->peercallno);
11574
					iax_ie_append_short(&ied1, IAX_IE_CALLNO, iaxs[fr->callno]->peercallno);
11564
								send_command(iaxs[fr->callno], AST_FRAME_IAX, IAX_COMMAND_TXREL, 0, ied0.buf, ied0.pos, -1);
11575
					send_command(iaxs[fr->callno], AST_FRAME_IAX, IAX_COMMAND_TXREL, 0, ied0.buf, ied0.pos, -1);
11565
								send_command(iaxs[iaxs[fr->callno]->bridgecallno], AST_FRAME_IAX, IAX_COMMAND_TXREL, 0, ied1.buf, ied1.pos, -1);
11576
					send_command(iaxs[iaxs[fr->callno]->bridgecallno], AST_FRAME_IAX, IAX_COMMAND_TXREL, 0, ied1.buf, ied1.pos, -1);
11566
							}
11577
				}
11567

    
   

   
11568
						}

   
11569
					}

   
11570
				}

   
11571
				break;
11578
				break;
11572
			case IAX_COMMAND_TXREQ:
11579
			case IAX_COMMAND_TXREQ:
11573
				try_transfer(iaxs[fr->callno], &ies);
11580
				try_transfer(iaxs[fr->callno], &ies);
11574
				break;
11581
				break;
11575
			case IAX_COMMAND_TXCNT:
11582
			case IAX_COMMAND_TXCNT:
[+20] [20] 3489 lines
  1. branches/11/channels/chan_iax2.c: Loading...

https://reviewboard.asterisk.org/ runs on a server provided by Digium, Inc. and uses bandwidth donated to the open source Asterisk community by API Digital Communications in Huntsville, AL USA.
Please report problems with this site to asteriskteam@digium.com.