anchor.diff:    String stunServer;
     int stunServerPort;
   
  -  Map<StunTransactionID, Completer<StunHeader>> cash = {};
  +  Map<StunTransactionID, Completer<StunClientSendHeaderResult>> cash = {};
     net.TetUdpSocket _udp = null;
   
     StunClient(this.builder, this.stunServer, this.stunServerPort, {this.address: "0.0.0.0", this.port: 0}) {
  
positive.code:   Future test001() async {
      StunHeader header = new StunHeader(StunHeader.bindingRequest);
      header.attributes.add(new StunChangeRequestAttribute(false, false));
      StunHeader response = await sendHeader(header);
      StunAddressAttribute mappedAddress = response.getAttribute([StunAttribute.mappedAddress]);
      StunAddressAttribute changedAddress = response.getAttribute([StunAttribute.changedAddress]);
      StunAddressAttribute sourceAddress = response.getAttribute([StunAttribute.sourceAddress]);
      StunErrorCodeAttribute errorCode = response.getAttribute([StunAttribute.errorCode]);
      //
      if(errorCode != null) {
        print("# error 01 # ${response}");
        return ;
      }
  
      if(mappedAddress == null){// || changedAddress == null) {
        print("# error 02 # ${response}");
        return;
      }
  
negative.code: //Port Restricted Cone
  //Symmetric
  
  class StunClientSendHeaderResult {
    String address;
    int port;
    StunHeader header;
    StunClientSendHeaderResult(this.address, this.port, this.header) {}
  }
  
  class StunClient {
    net.TetSocketBuilder builder;
    String address;
  