content: package im.actor.runtime.webrtc;
  
  import com.google.j2objc.annotations.ObjectiveCName;
  
  import org.jetbrains.annotations.NotNull;
  
  import im.actor.runtime.actors.messages.Void;
  import im.actor.runtime.function.Closable;
  import im.actor.runtime.function.CountedReference;
  import im.actor.runtime.promise.Promise;
  
  /**
   * WebRTC peer connection
   */
  public interface WebRTCPeerConnection {
  
      /**
       * Adding Callback for events from peer connection
       *
       * @param callback callback for adding
       */
      @ObjectiveCName("addCallback:")
      void addCallback(@NotNull WebRTCPeerConnectionCallback callback);
  
      /**
       * Remove Callback for events from peer connection
       *
       * @param callback callback for adding
       */
      @ObjectiveCName("removeCallback:")
      void removeCallback(@NotNull WebRTCPeerConnectionCallback callback);
  
      /**
       * Adding Remote Candidate
       *
       * @param index index of candidate
       * @param id    id of candidate
       * @param sdp   candidate SDP
       */
      @ObjectiveCName("addCandidateWithIndex:withId:withSDP:")
      void addCandidate(int index, @NotNull String id, @NotNull String sdp);
  
      /**
       * Adding Own Stream
       *
       * @param stream added stream
       */
      @ObjectiveCName("addOwnStream:")
      void addOwnStream(@NotNull CountedReference<WebRTCMediaStream> stream);
  
  
      /**
       * Removing Own Stream
       *
       * @param stream removed stream
       */
      @ObjectiveCName("removeOwnStream:")
      void removeOwnStream(@NotNull CountedReference<WebRTCMediaStream> stream);
  
      /**
       * Setting Local Description
       *
       * @param description description to set
       * @return Promise of set description. MUST be same as argument.
       */
      @NotNull
      @ObjectiveCName("setLocalDescription:")
      Promise<WebRTCSessionDescription> setLocalDescription(@NotNull WebRTCSessionDescription description);
  
      /**
       * Setting Remote Description
       *
       * @param description description to set
       * @return Promise of set description. MUST be same as argument.
       */
      @NotNull
      @ObjectiveCName("setRemoteDescription:")
      Promise<WebRTCSessionDescription> setRemoteDescription(@NotNull WebRTCSessionDescription description);
  
      /**
       * Create Offer
       *
       * @return Promise of created offer
       */
      @NotNull
      @ObjectiveCName("creteOffer")
      Promise<WebRTCSessionDescription> createOffer();
  
      /**
       * Create Answer
       *
       * @return Promise of created answer
       */
      @NotNull
      @ObjectiveCName("createAnswer")
      Promise<WebRTCSessionDescription> createAnswer();
  
      /**
       * Closing peer connection
       */
      @ObjectiveCName("close")
      void close();
  }
  