www.pudn.com > openh323-v1_15_1-src.zip > svcctrl.h


/* 
 * svcctrl.h 
 * 
 * H.225 Service Control protocol handler 
 * 
 * Open H323 Library 
 * 
 * Copyright (c) 2003 Equivalence Pty. Ltd. 
 * 
 * The contents of this file are subject to the Mozilla Public License 
 * Version 1.0 (the "License"); you may not use this file except in 
 * compliance with the License. You may obtain a copy of the License at 
 * http://www.mozilla.org/MPL/ 
 * 
 * Software distributed under the License is distributed on an "AS IS" 
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See 
 * the License for the specific language governing rights and limitations 
 * under the License. 
 * 
 * The Original Code is Open H323 Library. 
 * 
 * The Initial Developer of the Original Code is Equivalence Pty. Ltd. 
 * Contributor(s): ______________________________________. 
 * 
 * $Log: svcctrl.h,v $ 
 * Revision 1.1  2003/04/01 01:07:22  robertj 
 * Split service control handlers from H.225 RAS header. 
 * 
 */ 
 
#ifndef __OPAL_SVCCTRL_H 
#define __OPAL_SVCCTRL_H 
 
#ifdef P_USE_PRAGMA 
#pragma interface 
#endif 
 
 
class H225_ServiceControlDescriptor; 
class H225_ServiceControlIndication; 
class H225_ServiceControlResponse; 
 
class H248_SignalsDescriptor; 
class H248_SignalRequest; 
 
class H323EndPoint; 
class H323Connection; 
 
 
/////////////////////////////////////////////////////////////////////////////// 
 
/**This is a base class for H.323 Service Control Session handling. 
   This implements the service class session management as per Annex K/H.323. 
  */ 
class H323ServiceControlSession : public PObject 
{ 
    PCLASSINFO(H323ServiceControlSession, PObject); 
  public: 
  /**@name Construction */ 
  //@{ 
    /**Create a new handler for a Service Control. 
     */ 
    H323ServiceControlSession(); 
  //@} 
 
  /**@name Operations */ 
  //@{ 
    /**Determine of the session is valid. 
       That is has all of the data it needs to correctly encode a PDU. 
 
       Default behaviour is pure. 
      */ 
    virtual BOOL IsValid() const = 0; 
 
    /**Get identification name for the Control Service. 
       This function separates the dynamic data from the fundamental type of 
       the control service which will cause a new session ID to be generated 
       by the gatekeeper server. 
 
       Default behaviour returns the class name. 
      */ 
    virtual PString GetServiceControlType() const; 
 
    /**Handle a received PDU. 
       Update in the internal state from the received PDU. 
 
       Returns FALSE is PDU is not sutiable for the class type. 
 
       Default behaviour is pure. 
      */ 
    virtual BOOL OnReceivedPDU( 
      const H225_ServiceControlDescriptor & descriptor 
    ) = 0; 
 
    /**Handle a sent PDU. 
       Set the PDU fields from in the internal state. 
 
       Returns FALSE is PDU cannot be created. 
 
       Default behaviour is pure. 
      */ 
    virtual BOOL OnSendingPDU( 
      H225_ServiceControlDescriptor & descriptor 
    ) const = 0; 
 
    enum ChangeType { 
      OpenSession,    // H225_ServiceControlSession_reason::e_open 
      RefreshSession, // H225_ServiceControlSession_reason::e_refresh 
      CloseSession    // H225_ServiceControlSession_reason::e_close 
    }; 
 
    /**Handle a change of the state of the Service Control Session. 
 
       Default behaviour is pure. 
      */ 
    virtual void OnChange( 
      unsigned type, 
      unsigned sessionId, 
      H323EndPoint & endpoint, 
      H323Connection * connection 
    ) const = 0; 
  //@} 
}; 
 
 
/**This class is for H.323 Service Control Session handling for HTTP. 
   This implements the HTTP channel management as per Annex K/H.323. 
  */ 
class H323HTTPServiceControl : public H323ServiceControlSession 
{ 
    PCLASSINFO(H323HTTPServiceControl, H323ServiceControlSession); 
  public: 
  /**@name Construction */ 
  //@{ 
    /**Create a new handler for a Service Control. 
     */ 
    H323HTTPServiceControl( 
      const PString & url 
    ); 
 
    /**Create a new handler for a Service Control, initialise to PDU. 
     */ 
    H323HTTPServiceControl( 
      const H225_ServiceControlDescriptor & contents 
    ); 
  //@} 
 
  /**@name Operations */ 
  //@{ 
    /**Determine of the session is valid. 
       That is has all of the data it needs to correctly encode a PDU. 
 
       Default behaviour returns TRUE if url is not an empty string. 
      */ 
    virtual BOOL IsValid() const; 
 
    /**Get identification name for the Control Service. 
       This function separates the dynamic data from the fundamental type of 
       the control service which will cause a new session ID to be generated 
       by the gatekeeper server. 
 
       Default behaviour returns the class name. 
      */ 
    virtual PString GetServiceControlType() const; 
 
    /**Handle a received PDU. 
       Update in the internal state from the received PDU. 
 
       Default behaviour gets the contents for an e_url. 
      */ 
    virtual BOOL OnReceivedPDU( 
      const H225_ServiceControlDescriptor & contents 
    ); 
 
    /**Handle a sent PDU. 
       Set the PDU fields from in the internal state. 
 
       Default behaviour sets the contents to an e_url. 
      */ 
    virtual BOOL OnSendingPDU( 
      H225_ServiceControlDescriptor & contents 
    ) const; 
 
    /**Handle a change of the state of the Service Control Session. 
 
       Default behaviour calls endpoint.OnHTTPServiceControl(). 
      */ 
    virtual void OnChange( 
      unsigned type, 
      unsigned sessionId, 
      H323EndPoint & endpoint, 
      H323Connection * connection 
    ) const; 
  //@} 
 
  protected: 
    PString url; 
}; 
 
 
/**This is a base class for H.323 Service Control Session handling for H.248. 
  */ 
class H323H248ServiceControl : public H323ServiceControlSession 
{ 
    PCLASSINFO(H323H248ServiceControl, H323ServiceControlSession); 
  public: 
  /**@name Construction */ 
  //@{ 
    /**Create a new handler for a Service Control. 
     */ 
    H323H248ServiceControl(); 
 
    /**Create a new handler for a Service Control, initialise to PDU. 
     */ 
    H323H248ServiceControl( 
      const H225_ServiceControlDescriptor & contents 
    ); 
  //@} 
 
  /**@name Operations */ 
  //@{ 
    /**Handle a received PDU. 
       Update in the internal state from the received PDU. 
 
       Default behaviour converts to pdu to H248_SignalsDescriptor and calls 
       that version of OnReceivedPDU(). 
      */ 
    virtual BOOL OnReceivedPDU( 
      const H225_ServiceControlDescriptor & contents 
    ); 
 
    /**Handle a sent PDU. 
       Set the PDU fields from in the internal state. 
 
       Default behaviour calls the H248_SignalsDescriptor version of 
       OnSendingPDU() and converts that to the contents pdu. 
      */ 
    virtual BOOL OnSendingPDU( 
      H225_ServiceControlDescriptor & contents 
    ) const; 
 
    /**Handle a received PDU. 
       Update in the internal state from the received PDU. 
 
       Default behaviour calls the H248_SignalRequest version of 
       OnReceivedPDU() for every element in H248_SignalsDescriptor. 
      */ 
    virtual BOOL OnReceivedPDU( 
      const H248_SignalsDescriptor & descriptor 
    ); 
 
    /**Handle a sent PDU. 
       Set the PDU fields from in the internal state. 
 
       Default behaviour calls the H248_SignalRequest version of 
       OnSendingPDU() and appends it to the H248_SignalsDescriptor. 
      */ 
    virtual BOOL OnSendingPDU( 
      H248_SignalsDescriptor & descriptor 
    ) const; 
 
    /**Handle a received PDU. 
       Update in the internal state from the received PDU. 
 
       Default behaviour is pure. 
      */ 
    virtual BOOL OnReceivedPDU( 
      const H248_SignalRequest & request 
    ) = 0; 
 
    /**Handle a sent PDU. 
       Set the PDU fields from in the internal state. 
 
       Default behaviour is pure. 
      */ 
    virtual BOOL OnSendingPDU( 
      H248_SignalRequest & request 
    ) const = 0; 
  //@} 
}; 
 
 
/**This class is for H.323 Service Control Session handling for call credit. 
  */ 
class H323CallCreditServiceControl : public H323ServiceControlSession 
{ 
    PCLASSINFO(H323CallCreditServiceControl, H323ServiceControlSession); 
  public: 
  /**@name Construction */ 
  //@{ 
    /**Create a new handler for a Service Control. 
     */ 
    H323CallCreditServiceControl( 
      const PString & amount, 
      BOOL mode, 
      unsigned duration = 0 
    ); 
 
    /**Create a new handler for a Service Control, initialise to PDU. 
     */ 
    H323CallCreditServiceControl( 
      const H225_ServiceControlDescriptor & contents 
    ); 
  //@} 
 
  /**@name Operations */ 
  //@{ 
    /**Determine of the session is valid. 
       That is has all of the data it needs to correctly encode a PDU. 
 
       Default behaviour returns TRUE if amount or duration is set. 
      */ 
    virtual BOOL IsValid() const; 
 
    /**Handle a received PDU. 
       Update in the internal state from the received PDU. 
 
       Default behaviour gets the contents for an e_callCreditServiceControl. 
      */ 
    virtual BOOL OnReceivedPDU( 
      const H225_ServiceControlDescriptor & contents 
    ); 
 
    /**Handle a sent PDU. 
       Set the PDU fields from in the internal state. 
 
       Default behaviour sets the contents to an e_callCreditServiceControl. 
      */ 
    virtual BOOL OnSendingPDU( 
      H225_ServiceControlDescriptor & contents 
    ) const; 
 
    /**Handle a change of the state of the Service Control Session. 
 
       Default behaviour calls endpoint.OnCallCreditServiceControl() and 
       optionally connection->SetEnforceDurationLimit(). 
      */ 
    virtual void OnChange( 
      unsigned type, 
      unsigned sessionId, 
      H323EndPoint & endpoint, 
      H323Connection * connection 
    ) const; 
  //@} 
 
  protected: 
    PString  amount; 
    BOOL     mode; 
    unsigned durationLimit; 
}; 
 
 
#endif // __OPAL_SVCCTRL_H 
 
 
/////////////////////////////////////////////////////////////////////////////