private void FireSTUNSecondaryResponseOutTraceEvent(IPEndPoint localEndPoint, IPEndPoint toEndPoint, STUNMessage stunMessage) { try { if (STUNSecondaryResponseOutTraceEvent != null) { STUNSecondaryResponseOutTraceEvent(localEndPoint, toEndPoint, stunMessage); } } catch (Exception excp) { logger.Error("Exception FireSTUNSecondaryResponseOutTraceEvent. " + excp.Message); } }
public void STUNPrimaryReceived(IPEndPoint localEndPoint, IPEndPoint receivedEndPoint, byte[] buffer, int bufferLength) { try { //Console.WriteLine("\n=> received from " + IPSocketAddress.GetSocketString(receivedEndPoint) + " on " + IPSocketAddress.GetSocketString(receivedOnEndPoint)); //Console.WriteLine(Utility.PrintBuffer(buffer)); STUNMessage stunRequest = STUNMessage.ParseSTUNMessage(buffer, bufferLength); //Console.WriteLine(stunRequest.ToString()); FireSTUNPrimaryRequestInTraceEvent(localEndPoint, receivedEndPoint, stunRequest); STUNMessage stunResponse = GetResponse(receivedEndPoint, stunRequest, true); byte[] stunResponseBuffer = stunResponse.ToByteBuffer(); bool changeAddress = false; bool changePort = false; foreach (STUNAttribute attr in stunRequest.Attributes) { if (attr.AttributeType == STUNAttributeTypesEnum.ChangeRequest) { STUNChangeRequestAttribute changeReqAttr = (STUNChangeRequestAttribute)attr; changeAddress = changeReqAttr.ChangeAddress; changePort = changeReqAttr.ChangePort; break; } } if (!changeAddress) { if (!changePort) { //Console.WriteLine("<= sending to " + IPSocketAddress.GetSocketString(receivedEndPoint) + " from " + IPSocketAddress.GetSocketString(m_primaryEndPoint)); m_primarySend(receivedEndPoint, stunResponseBuffer); FireSTUNPrimaryResponseOutTraceEvent(m_primaryEndPoint, receivedEndPoint, stunResponse); } else { //Console.WriteLine("<= sending to " + IPSocketAddress.GetSocketString(receivedEndPoint) + " from " + IPSocketAddress.GetSocketString(m_primaryDiffPortEndPoint)); m_primaryDiffPortSocket.Send(stunResponseBuffer, stunResponseBuffer.Length, receivedEndPoint); FireSTUNPrimaryResponseOutTraceEvent(m_primaryDiffPortEndPoint, receivedEndPoint, stunResponse); } } else { if (!changePort) { //Console.WriteLine("<= sending to " + IPSocketAddress.GetSocketString(receivedEndPoint) + " from " + IPSocketAddress.GetSocketString(m_secondaryEndPoint)); m_secondarySend(receivedEndPoint, stunResponseBuffer); FireSTUNSecondaryResponseOutTraceEvent(m_secondaryEndPoint, receivedEndPoint, stunResponse); } else { //Console.WriteLine("<= sending to " + IPSocketAddress.GetSocketString(receivedEndPoint) + " from " + IPSocketAddress.GetSocketString(m_secondaryDiffPortEndPoint)); m_secondaryDiffPortSocket.Send(stunResponseBuffer, stunResponseBuffer.Length, receivedEndPoint); FireSTUNSecondaryResponseOutTraceEvent(m_secondaryDiffPortEndPoint, receivedEndPoint, stunResponse); } } } catch (Exception excp) { logger.Debug("Exception STUNPrimaryReceived. " + excp.Message); } }
private void FireSTUNPrimaryRequestInTraceEvent(IPEndPoint localEndPoint, IPEndPoint fromEndPoint, STUNMessage stunMessage) { try { if (STUNPrimaryRequestInTraceEvent != null) { STUNPrimaryRequestInTraceEvent(localEndPoint, fromEndPoint, stunMessage); } } catch (Exception excp) { logger.Error("Exception FireSTUNPrimaryRequestInTraceEvent. " + excp.Message); } }