Blame netwerk/protocol/ftp/nsFtpControlConnection.h

Packit f0b94e
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
Packit f0b94e
/* vim:set et ts=4 sts=4 sw=4 cin: */
Packit f0b94e
/* This Source Code Form is subject to the terms of the Mozilla Public
Packit f0b94e
 * License, v. 2.0. If a copy of the MPL was not distributed with this
Packit f0b94e
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
Packit f0b94e
Packit f0b94e
#ifndef nsFtpControlConnection_h___
Packit f0b94e
#define nsFtpControlConnection_h___
Packit f0b94e
Packit f0b94e
#include "nsCOMPtr.h"
Packit f0b94e
Packit f0b94e
#include "nsISocketTransport.h"
Packit f0b94e
#include "nsIAsyncInputStream.h"
Packit f0b94e
#include "nsAutoPtr.h"
Packit f0b94e
#include "nsString.h"
Packit f0b94e
#include "mozilla/Attributes.h"
Packit f0b94e
Packit f0b94e
class nsIOutputStream;
Packit f0b94e
class nsIProxyInfo;
Packit f0b94e
class nsITransportEventSink;
Packit f0b94e
Packit f0b94e
class nsFtpControlConnectionListener : public nsISupports {
Packit f0b94e
 public:
Packit f0b94e
  /**
Packit f0b94e
   * Called when a chunk of data arrives on the control connection.
Packit f0b94e
   * @param data
Packit f0b94e
   *        The new data or null if an error occurred.
Packit f0b94e
   * @param dataLen
Packit f0b94e
   *        The data length in bytes.
Packit f0b94e
   */
Packit f0b94e
  virtual void OnControlDataAvailable(const char* data, uint32_t dataLen) = 0;
Packit f0b94e
Packit f0b94e
  /**
Packit f0b94e
   * Called when an error occurs on the control connection.
Packit f0b94e
   * @param status
Packit f0b94e
   *        A failure code providing more info about the error.
Packit f0b94e
   */
Packit f0b94e
  virtual void OnControlError(nsresult status) = 0;
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
class nsFtpControlConnection final : public nsIInputStreamCallback {
Packit f0b94e
  ~nsFtpControlConnection();
Packit f0b94e
Packit f0b94e
 public:
Packit f0b94e
  NS_DECL_ISUPPORTS
Packit f0b94e
  NS_DECL_NSIINPUTSTREAMCALLBACK
Packit f0b94e
Packit f0b94e
  nsFtpControlConnection(const nsACString& host, uint32_t port);
Packit f0b94e
Packit f0b94e
  nsresult Connect(nsIProxyInfo* proxyInfo, nsITransportEventSink* eventSink);
Packit f0b94e
  nsresult Disconnect(nsresult status);
Packit f0b94e
  nsresult Write(const nsACString& command);
Packit f0b94e
Packit f0b94e
  bool IsAlive();
Packit f0b94e
Packit f0b94e
  nsITransport* Transport() { return mSocket; }
Packit f0b94e
Packit f0b94e
  /**
Packit f0b94e
   * Call this function to be notified asynchronously when there is data
Packit f0b94e
   * available for the socket.  The listener passed to this method replaces
Packit f0b94e
   * any existing listener, and the listener can be null to disconnect the
Packit f0b94e
   * previous listener.
Packit f0b94e
   */
Packit f0b94e
  nsresult WaitData(nsFtpControlConnectionListener* listener);
Packit f0b94e
Packit f0b94e
  uint32_t mServerType;  // what kind of server is it.
Packit f0b94e
  nsString mPassword;
Packit f0b94e
  int32_t mSuspendedWrite;
Packit f0b94e
  nsCString mPwd;
Packit f0b94e
  uint32_t mSessionId;
Packit f0b94e
  bool mUseUTF8;
Packit f0b94e
Packit f0b94e
 private:
Packit f0b94e
  nsCString mHost;
Packit f0b94e
  uint32_t mPort;
Packit f0b94e
Packit f0b94e
  nsCOMPtr<nsISocketTransport> mSocket;
Packit f0b94e
  nsCOMPtr<nsIOutputStream> mSocketOutput;
Packit f0b94e
  nsCOMPtr<nsIAsyncInputStream> mSocketInput;
Packit f0b94e
Packit f0b94e
  RefPtr<nsFtpControlConnectionListener> mListener;
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
#endif