/*******************************************************************************
*                              Openwave Systems.                               *
*                            Device Products Group                             *
*                               Shinjuku, Tokyo                                *
****************************************************************************//**
   @file
   このヘッダーファイルはDEVICE: および FILE: で指示されるKDDI拡張サービスを
   統一的に管理するためにOEMが提供するインターフェースを定義しています。
   OEMはこのヘッダーファイルを変更することはできません。

*//*
   REVISION HISTORY:
   Date:       Who:               Email:
      - Details:
--------------------------------------------------------------------------------
   15 Nov 2004 kawa               yoshihiro.kawaguchi@openwave.com
      - Initial version

*******************************************************************************/
/*******************************************************************************
*                  Copyright (c) Openwave Systems 1995-2004                    *
*                            All rights reserved.                              *
*                                                                              *
*     THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF Openwave Systems Inc.     *
*               The copyright notice above does not evidence any               *
*              actual or intended publication of such source code.             *
*******************************************************************************/

#ifndef _IOMBDEV_H
#define _IOMBDEV_H


/*==============================================================================

	INCLUDES

==============================================================================*/
#ifndef PREPROCESSING_ONLY //don't include these if we're only preprocessing & not compiling
#include "aee.h"	// for size_t, etc
#include "aeestdlib.h"	// for size_t, etc
#include "aeeinterface.h"
#endif //ndef PREPROCESSING_ONLY


/*==============================================================================

	DEFINES

==============================================================================*/


/*==============================================================================

	TYPES

==============================================================================*/
#ifndef PREPROCESSING_ONLY //don't include these if we're only preprocessing & not compiling

/** @ingroup grp_internalservice
 IOMBDEV_InternalServiceから返される起動タイプの定義
*/
typedef enum {
	keAPP_STANDALONE,		///< アプリ遷移なし, ブラウザー自身で処理する。
	keAPP_NORMAL,			///< アプリ遷移（通常起動）, ブラウザから他アプリに遷移する。
	keAPP_CHAINEND,			///< アプリ遷移（通常起動＋連鎖終了）, ブラウザから他アプリに遷移する。
	keAPP_REFERENCE,		///< アプリ遷移（参照起動）, ブラウザーから他のアプリに遷移する。遷移後アプリがＵＲＬを生成しブラウザーに戻る。
	keAPP_BACKGROUND		///< バックグランドアプリ起動, ブラウザー中にバックグランドアプリを起動する。
} teOMBDEVServiceTypes;

/** @ingroup grp_internalservice
 IOMBDEV_InternalServicBackground()で登録されるコールバック関数の定義
@PARAMETERS
 @param[in] pvUser IOMBDEV_InternalServiceBackground()で引渡された任意のUser dataのポインタ。
 @param[in] iStatus 終了通知のステータスコード、0:正常終了 0以外：エラー終了（特に規定なし）。
 @param[in] pvReqparam Browser起動パラメータへのポインタであり、OEMはKCPTYPE_APPCOMMBASE＋
 ブラウザ情報表示要求構造（STR_BROWSER_SET）を引渡す。起動の必要がない場合はNULLを設定する。
 @param[in] iReqparamsize  Browser起動パラメータ pvReqparam のバイト数。起動の必要がない場合
 は0を設定する。
@RETURNS
 @retval TRUE 正常終了
 @retval FALSE エラー終了（特別なエラー処理は不要）

*/
typedef boolean (*tpfoNotifyResult)(  void *pvUser, int iStatus, void *pvReqparam, int iReqparamsize );

/** @ingroup grp_download_anything
 IOMBDEV_DLValidateContextから返されるステータスの定義
*/
typedef enum {
	keDLVC_Accept,				///< 対象データは受信可能である。
	keDLVC_InvalidFileType,		///< 対象データは未対応である。
	keDLVC_InvalidFileSize,		///< 対象データはサイズオーバーである。
} teOMBDEVDLValidateStatus;

/** @ingroup grp_plugin
 IOMBDEV_PluginRedrawSequenceから返されるステータスの定義
*/
typedef enum {
	kePluginRS_NoRedraw,		///< 特別な再描画処理は行わない。
	kePluginRS_RedrawByUrlMoveWhenStopped, ///< 停止した際に現在のURLが変化している場合は再描画する。
	kePluginRS_Reserved 		///< 予約値。使用不可。
} teOMBDEVPluginRedrawSequence;


#endif //ndef PREPROCESSING_ONLY

/*==============================================================================

	INTERFACE

==============================================================================*/
#ifndef PREPROCESSING_ONLY //don't define if we're only pre-processing to expand the macros

/** @ingroup grp_lifecycle
 IOMBDEVクラスのインスタンス構造定義。 クラスID @ref AEECLSID_IOMBDEV で
 ISHELL_CreateInstanceによりインスタンス生成した場合に返される。
 @code
 #include iombdev.bid
 #include iombdev.h

 tsIOMBDEV *psIOMBDEV = NULL;
 if((SUCCESS == ISHELL_CreateInstance(psShell, AEECLSID_IOMBDEV, (void**)&psIOMBDEV)) && psIOMBDEV)
 {


   // release the interface when finisheed
   IOMBV6_Release(psIOMBVDEV);
   psIOMBDEV = NULL;
 }
@endcode

*/
typedef struct stIOMBDEV tsIOMBDEV;

#ifndef DOXYGEN_SHOULD_SKIP_THIS //make doxygen ignore this block of code
///仮想関数テーブルの定義
AEEINTERFACE( IOMBDEV )
{
   //declare our virtual functions using macro expansion
   #define FUNCTION( RETURNS, NAME )   RETURNS (*NAME)(
   #define NO_PARAM                    void
   #define FIRST_PARAM( TYPE, NAME )   TYPE NAME
   #define NEXT_PARAM( TYPE, NAME )    , TYPE NAME
   #define END_FUNCTION                );
   #include "iombdev.m"
};
#endif //ndef DOXYGEN_SHOULD_SKIP_THIS

#endif //ndef PREPROCESSING_ONLY

/*==============================================================================

	VIRTUAL FUNCTION ACCESSORS

==============================================================================*/
#ifndef PREPROCESSING_ONLY //don't define if we're only pre-processing to expand the macros

/** @ingroup grp_lifecycle
 @ref AddRef 関数のラッパー定義。 このマクロはこの関数のアプレットからの呼出しを
 容易にする。
*/
#define IOMBDEV_AddRef( psIOMBDEV ) \
	AEEGETPVTBL( (psIOMBDEV), IOMBDEV )->lwIOMBDEV_AddRef( psIOMBDEV )

/** @ingroup grp_lifecycle
 @ref Release 関数のラッパー定義。 このマクロはこの関数のアプレットからの呼出しを
 容易にする。
*/
#define IOMBDEV_Release( psIOMBDEV ) \
	AEEGETPVTBL( (psIOMBDEV), IOMBDEV )->lwIOMBDEV_Release( psIOMBDEV )

/** @ingroup grp_internalservice
 @ref InternalService 関数のラッパー定義。 このマクロはこの関数のアプレットからの
 呼出しを容易にする。
*/
#define IOMBDEV_InternalService( psIOMBDEV, kcpURL, kpcCallingUrl, pcSchema, piSchemalen, pvReqparam, piReqparamsize, peTypes ) \
	AEEGETPVTBL( (psIOMBDEV), IOMBDEV )->InternalService( psIOMBDEV, kcpURL, kpcCallingUrl, pcSchema, piSchemalen, pvReqparam, piReqparamsize, peTypes )

/** @ingroup grp_internalservice
 @ref InternalServiceGetURL 関数のラッパー定義。 このマクロはこの関数のアプレットからの
 呼出しを容易にする。
*/
#define IOMBDEV_InternalServiceGetURL( psIOMBDEV, kpcRequesturl, pvReference, pvReqparam, piReqparamsize ) \
	AEEGETPVTBL( (psIOMBDEV), IOMBDEV )->InternalServiceGetURL( psIOMBDEV, kpcRequesturl, pvReference, pvReqparam, piReqparamsize )

/** @ingroup grp_internalservice
 @ref InternalServiceRelease 関数のラッパー定義。 このマクロはこの関数のアプレットからの
 呼出しを容易にする。
*/
#define IOMBDEV_InternalServiceRelease( psIOMBDEV, pvReqparam ) \
	AEEGETPVTBL( (psIOMBDEV), IOMBDEV )->InternalServiceRelease( psIOMBDEV, pvReqparam )

/** @ingroup grp_internalservice
 @ref InternalServiceBackground 関数のラッパー定義。 このマクロはこの関数のアプレットからの
 呼出しを容易にする。
*/
#define IOMBDEV_InternalServiceBackground( psIOMBDEV, pvBgparam, pfoNotifyResult, pvUser ) \
	AEEGETPVTBL( (psIOMBDEV), IOMBDEV )->InternalServiceBackground( psIOMBDEV, pvBgparam, pfoNotifyResult, pvUser )

/** @ingroup grp_internalservice
 @ref CancelBackground 関数のラッパー定義。 このマクロはこの関数のアプレットからの
 呼出しを容易にする。
*/
#define IOMBDEV_CancelBackground( psIOMBDEV ) \
	AEEGETPVTBL( (psIOMBDEV), IOMBDEV )->CancelBackground( psIOMBDEV )

/** @ingroup grp_internalservicefile
 @ref InternalServiceFile 関数のラッパー定義。 このマクロはこの関数のアプレットからの
 呼出しを容易にする。
*/
#define IOMBDEV_InternalServiceFile( psIOMBDEV, kpcUrl, kppcContentType, pcBuf, pwBuflen, kpcCallingUrl ) \
	AEEGETPVTBL( (psIOMBDEV), IOMBDEV )->InternalServiceFile( psIOMBDEV, kpcUrl, kppcContentType, pcBuf, pwBuflen, kpcCallingUrl )

/** @ingroup grp_download_anything
 @ref eDLValidateContext 関数のラッパー定義。 このマクロはこの関数のアプレットからの
 呼出しを容易にする。
*/
#define IOMBDEV_DLValidateContext( psIOMBDEV, kpszFileName, kpszFileType, dwFileSize ) \
	AEEGETPVTBL( (psIOMBDEV), IOMBDEV )->eDLValidateContext( kpszFileName, kpszFileType, dwFileSize )

/** @ingroup grp_download_anything
 @ref kpczDLAcceptContext 関数のラッパー定義。 このマクロはこの関数のアプレットからの
 呼出しを容易にする。
*/
#define IOMBDEV_DLAcceptContext( psIOMBDEV, kpszFileType, dwFileSize ) \
	AEEGETPVTBL( (psIOMBDEV), IOMBDEV )->kpczDLAcceptContext( kpszFileType, dwFileSize )

/** @ingroup grp_saveas
 @ref oSaveAsValidateData 関数のラッパー定義。 このマクロはこの関数のアプレットからの
 呼出しを容易にする。
*/
#define IOMBDEV_SaveAsValidateData( psIOMBDEV, pvBuffer, dwSize, kpczExt ) \
	AEEGETPVTBL( (psIOMBDEV), IOMBDEV )->oSaveAsValidateData( pvBuffer, dwSize, kpczExt )

/** @ingroup grp_plugin
 @ref ePluginRedrawSequence 関数のラッパー定義。 このマクロはこの関数のアプレットからの
 呼出しを容易にする。
*/
#define IOMBDEV_PluginRedrawSequence( psIOMBDEV, lwClsID ) \
	AEEGETPVTBL( (psIOMBDEV), IOMBDEV )->ePluginRedrawSequence( lwClsID )

#endif //ndef PREPROCESSING_ONLY

/*==============================================================================

	GLOBAL VARIABLE DECLARATIONS

==============================================================================*/


/*==============================================================================

	FUNCTION DECLARATIONS

==============================================================================*/


#endif /* _IOMBDEV_H */



