content: /*
   * Copyright (C) 2015 Actor LLC. <https://actor.im>
   */
  
  package im.actor.runtime.mtproto;
  
  import com.google.j2objc.annotations.ObjectiveCName;
  import com.google.j2objc.annotations.Property;
  
  import org.jetbrains.annotations.NotNull;
  import org.jetbrains.annotations.Nullable;
  
  import java.io.IOException;
  
  import im.actor.runtime.bser.Bser;
  import im.actor.runtime.bser.BserObject;
  import im.actor.runtime.bser.BserValues;
  import im.actor.runtime.bser.BserWriter;
  
  public class ConnectionEndpoint extends BserObject {
  
      public static final int TYPE_TCP = 0;
      public static final int TYPE_TCP_TLS = 1;
      public static final int TYPE_WS = 2;
      public static final int TYPE_WS_TLS = 3;
  
      @NotNull
      @Property("readonly, nonatomic")
      private String host;
      @Nullable
      @Property("readonly, nonatomic")
      private String knownIp;
      @Property("readonly, nonatomic")
      private int port;
      @Property("readonly, nonatomic")
      private int type;
  
      public ConnectionEndpoint() {
      }
  
      @ObjectiveCName("initWithHost:withPort:withKnownIp:withType:")
      public ConnectionEndpoint(@NotNull String host, int port, @Nullable String knownIp, int type) {
          this.host = host;
          this.port = port;
          this.type = type;
          this.knownIp = knownIp;
      }
  
      public int getType() {
          return type;
      }
  
      @NotNull
      public String getHost() {
          return host;
      }
  
      public int getPort() {
          return port;
      }
  
      @Nullable
      public String getKnownIp() {
          return knownIp;
      }
  
      @Override
      public boolean equals(Object o) {
          if (this == o) return true;
          if (o == null || getClass() != o.getClass()) return false;
  
          ConnectionEndpoint that = (ConnectionEndpoint) o;
  
          if (port != that.port) return false;
          if (type != that.type) return false;
          if (!host.equals(that.host)) return false;
          return !(knownIp != null ? !knownIp.equals(that.knownIp) : that.knownIp != null);
  
      }
  
      public static ConnectionEndpoint fromBytes(byte[] data) throws IOException {
          return Bser.parse(new ConnectionEndpoint(), data);
      }
  
      @Override
      public void parse(BserValues values) throws IOException {
          host = values.getString(1);
          knownIp = values.optString(2);
          port = values.getInt(3);
          type = values.getInt(4);
      }
  
      @Override
      public void serialize(BserWriter writer) throws IOException {
          writer.writeString(1, host);
          if (knownIp != null) {
              writer.writeString(2, knownIp);
          }
          writer.writeInt(3, port);
          writer.writeInt(4, type);
      }
  }
  