|  | @@ -760,6 +760,29 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          try{
 | 
	
		
			
				|  |  |              SIPDialog dialog = (SIPDialog) SerializeUtils.deSerialize(dialogByteArray);
 | 
	
		
			
				|  |  | +            SipStack sipStack;
 | 
	
		
			
				|  |  | +            if ("TCP".equals(platform.getTransport())) {
 | 
	
		
			
				|  |  | +                sipStack = tcpSipProvider.getSipStack();
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                sipStack = udpSipProvider.getSipStack();
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            SIPDialog sipDialog = ((SipStackImpl) sipStack).putDialog(dialog);
 | 
	
		
			
				|  |  | +            if (dialog != sipDialog) {
 | 
	
		
			
				|  |  | +                dialog = sipDialog;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if ("TCP".equals(platform.getTransport())) {
 | 
	
		
			
				|  |  | +                dialog.setSipProvider(tcpSipProvider);
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                dialog.setSipProvider(udpSipProvider);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            Field sipStackField = SIPDialog.class.getDeclaredField("sipStack");
 | 
	
		
			
				|  |  | +            sipStackField.setAccessible(true);
 | 
	
		
			
				|  |  | +            sipStackField.set(dialog, sipStack);
 | 
	
		
			
				|  |  | +            Field eventListenersField = SIPDialog.class.getDeclaredField("eventListeners");
 | 
	
		
			
				|  |  | +            eventListenersField.setAccessible(true);
 | 
	
		
			
				|  |  | +            eventListenersField.set(dialog, new HashSet<>());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              SIPRequest messageRequest = (SIPRequest)dialog.createRequest(Request.MESSAGE);
 | 
	
		
			
				|  |  |              String characterSet = platform.getCharacterSet();
 | 
	
		
			
				|  |  |              StringBuffer mediaStatusXml = new StringBuffer(200);
 | 
	
	
		
			
				|  | @@ -775,20 +798,23 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
 | 
	
		
			
				|  |  |              SipURI sipURI = (SipURI) messageRequest.getRequestURI();
 | 
	
		
			
				|  |  |              sipURI.setHost(platform.getServerIP());
 | 
	
		
			
				|  |  |              sipURI.setPort(platform.getServerPort());
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            ClientTransaction transaction = null;
 | 
	
		
			
				|  |  | +            ClientTransaction clientTransaction;
 | 
	
		
			
				|  |  |              if ("TCP".equals(platform.getTransport())) {
 | 
	
		
			
				|  |  | -                transaction = tcpSipProvider.getNewClientTransaction(messageRequest);
 | 
	
		
			
				|  |  | -            } else if ("UDP".equals(platform.getTransport())) {
 | 
	
		
			
				|  |  | -                transaction = udpSipProvider.getNewClientTransaction(messageRequest);
 | 
	
		
			
				|  |  | +                clientTransaction = tcpSipProvider.getNewClientTransaction(messageRequest);
 | 
	
		
			
				|  |  | +            }else {
 | 
	
		
			
				|  |  | +                clientTransaction = udpSipProvider.getNewClientTransaction(messageRequest);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            transaction.sendRequest();
 | 
	
		
			
				|  |  | +            dialog.sendRequest(clientTransaction);
 | 
	
		
			
				|  |  |          } catch (SipException e) {
 | 
	
		
			
				|  |  |              e.printStackTrace();
 | 
	
		
			
				|  |  |              return false;
 | 
	
		
			
				|  |  |          } catch (ParseException e) {
 | 
	
		
			
				|  |  |              e.printStackTrace();
 | 
	
		
			
				|  |  |              return false;
 | 
	
		
			
				|  |  | +        } catch (NoSuchFieldException e) {
 | 
	
		
			
				|  |  | +            throw new RuntimeException(e);
 | 
	
		
			
				|  |  | +        } catch (IllegalAccessException e) {
 | 
	
		
			
				|  |  | +            throw new RuntimeException(e);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          return true;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -811,13 +837,22 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
 | 
	
		
			
				|  |  |              byte[] dialogByteArray = sendRtpItem.getDialog();
 | 
	
		
			
				|  |  |              if (dialogByteArray != null) {
 | 
	
		
			
				|  |  |                  SIPDialog dialog = (SIPDialog) SerializeUtils.deSerialize(dialogByteArray);
 | 
	
		
			
				|  |  | -                SipStack sipStack = udpSipProvider.getSipStack();
 | 
	
		
			
				|  |  | +                SipStack sipStack;
 | 
	
		
			
				|  |  | +                if ("TCP".equals(platform.getTransport())) {
 | 
	
		
			
				|  |  | +                    sipStack = tcpSipProvider.getSipStack();
 | 
	
		
			
				|  |  | +                } else {
 | 
	
		
			
				|  |  | +                    sipStack = udpSipProvider.getSipStack();
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |                  SIPDialog sipDialog = ((SipStackImpl) sipStack).putDialog(dialog);
 | 
	
		
			
				|  |  |                  if (dialog != sipDialog) {
 | 
	
		
			
				|  |  |                      dialog = sipDialog;
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |                  try {
 | 
	
		
			
				|  |  | -                    dialog.setSipProvider(udpSipProvider);
 | 
	
		
			
				|  |  | +                    if ("TCP".equals(platform.getTransport())) {
 | 
	
		
			
				|  |  | +                        dialog.setSipProvider(tcpSipProvider);
 | 
	
		
			
				|  |  | +                    } else {
 | 
	
		
			
				|  |  | +                        dialog.setSipProvider(udpSipProvider);
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  |                      Field sipStackField = SIPDialog.class.getDeclaredField("sipStack");
 | 
	
		
			
				|  |  |                      sipStackField.setAccessible(true);
 | 
	
		
			
				|  |  |                      sipStackField.set(dialog, sipStack);
 | 
	
	
		
			
				|  | @@ -825,17 +860,15 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
 | 
	
		
			
				|  |  |                      eventListenersField.setAccessible(true);
 | 
	
		
			
				|  |  |                      eventListenersField.set(dialog, new HashSet<>());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                    byte[] transactionByteArray = sendRtpItem.getTransaction();
 | 
	
		
			
				|  |  | -                    ClientTransaction clientTransaction = (ClientTransaction) SerializeUtils.deSerialize(transactionByteArray);
 | 
	
		
			
				|  |  |                      Request byeRequest = dialog.createRequest(Request.BYE);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                      SipURI byeURI = (SipURI) byeRequest.getRequestURI();
 | 
	
		
			
				|  |  | -                    SIPRequest request = (SIPRequest) clientTransaction.getRequest();
 | 
	
		
			
				|  |  | -                    byeURI.setHost(request.getRemoteAddress().getHostAddress());
 | 
	
		
			
				|  |  | -                    byeURI.setPort(request.getRemotePort());
 | 
	
		
			
				|  |  | +                    byeURI.setHost(platform.getServerIP());
 | 
	
		
			
				|  |  | +                    byeURI.setPort(platform.getServerPort());
 | 
	
		
			
				|  |  | +                    ClientTransaction clientTransaction;
 | 
	
		
			
				|  |  |                      if ("TCP".equals(platform.getTransport())) {
 | 
	
		
			
				|  |  |                          clientTransaction = tcpSipProvider.getNewClientTransaction(byeRequest);
 | 
	
		
			
				|  |  | -                    } else if ("UDP".equals(platform.getTransport())) {
 | 
	
		
			
				|  |  | +                    } else {
 | 
	
		
			
				|  |  |                          clientTransaction = udpSipProvider.getNewClientTransaction(byeRequest);
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                      dialog.sendRequest(clientTransaction);
 |