//******************************************************************************
// COPYRIGHT    : ソニーエリクソン
// DIVISION     :
// AUTHOR       : ソニーエリクソン
// FILENAME     : OEMDSRHTTP.h
//
// @(s) CONTENT : OEMDSRHTTP用ヘッダー
//
// VERSION      : $Revision:$
// HISTORY      : -------- 概要 -----------------------------------------------
// [ PTX-805向け ]
//	Version	UIQ/TRK	OutLine
//	00.10.00			PTX-805 BREW-20050916001 NJK 打田 嘉郎
//						新規作成
//	00.12.00			PTX-804 BREW001-：20050928001 NJK 打田 嘉郎
//						HTTP通信不具合修正
//	00.12.00			PTX-804 BREW002-：20050929001 NJK 打田 嘉郎
//						HTTP通信結果取得処理不具合修正
//	00.17.00			PTX-804 BREW003-：20051004001 NJK 打田 嘉郎
//						IKDDIDSR_SelectNetwork対応
//	00.42.00			PTX-805 BREW004-805TRK799 ：20051027001 NJK 打田 嘉郎
//						音声認識結果XMLファイルが途中で切れている不具合対応
//
//******************************************************************************

#ifndef	_INCLUDE_OEMDSR_HTTP
#define	_INCLUDE_OEMDSR_HTTP

#include "AEE.h"
#include "AEEWeb.h"
#include "IKDDIDSR.h"
#include "AEE_OEM.h"
#include "AEEStdlib.h"
#include "AEESource.h"

#include "ApiBrewApp.h"

// DSR HTTP通信用構造体
typedef struct ST_DSRHTTP ST_DSRHTTP;

struct ST_DSRHTTP
{
	IWeb*					m_pIWeb;							// IWebインタフェースオブジェクトへのポインタ
	IWebResp*				m_pIWebResp;						// IWebRespインタフェースオブジェクトへのポインタ
	IPeek*					pipPostData;						// Post Stream

	KDDIDSRServer			DSRServerInfo;						// 音声認識サーバ情報

	char				*	XMLData;							// 音声キャプチャにて取得したXMLの格納先
		                                                        // OEMDSR_HTTP_SetXMLData()関数にて設定

	int						XMLDataSize;						// 音声キャプチャにて取得したXMLデータのサイズの格納先

	char				*	BodyData;							// 音声キャプチャにて取得したHTMLのBodyデータの格納先
		                                                        // OEMDSR_HTTP_SetBodyData()関数にて設定

	int						BodyDataSize;						// 音声キャプチャにて取得したHTMLのBodyデータサイズの格納先

	char				*	PostData;							// IWEB_GetResponse()にてPOSTするデータの格納先

	int						PostDataSize;						// POSTするデータサイズの格納先

	void (* func1_cb)(void * UsrData, int status);								// HTTP通信中の状態が変化したときに呼ばれるコールバック関数ポインタ

	void (* func2_cb)(void * UsrData, int status, char * data, int length);		// HTTP通信完了時に呼ばれるコールバック関数ポインタ

	AEECallback				GetResponseCB;						// IWEB_GetResponseの完了時に呼ばれるコールバック

	char				*    ResultXMLData;						// HTTP通信の結果を格納するバッファ

	int					     ResultXMLDataSize;					// HTTP通信の結果を格納するバッファのサイズ											/*** PTX-805 BREW004 ***/

	int					     ReadOffset;						// 結果取得時のオフセット															/*** PTX-805 BREW004 ***/

	void				*    RetUsrData;						// HTTP通信終了時に返却するUsrData

	char				*    WebHeader;							// Webヘッダ情報を格納する。														/*** PTX-805 BREW001 ***/		

	char					strUrl[1024 + 1];					// サーバURL格納																	/*** PTX-805 BREW001 ***/

	AEECallback				ReadableCB;																												/*** PTX-805 BREW002 ***/

	WebRespInfo			*	resp;

	KDDIDSRNetInfo		    DSRNetInfo;							// PPP接続ネットワーク（ドメイン）情報												/*** PTX-805 BREW003 ***/
};


// DSRのHTTP通信ステータス
typedef enum
{
  DSRHTTP_CONNECT,
  DSRHTTP_DATA_SEND,
  DSRHTTP_HEADER_RECEIVE,
  DSRHTTP_BODY_RECEIVE,
} DSRHTTP_STATE;


// DSRのHTTP通信結果ステータス
typedef enum
{
  DSRHTTP_SUCCESS,
  DSRHTTP_FAIL_OTHER,
  DSRHTTP_FAIL_PPP_CONNECT,
  DSRHTTP_FAIL_TCP_CONNECT,
  DSRHTTP_FAIL_SEND,
  DSRHTTP_FAIL_RECEIVE,
  DSRHTTP_CANCEL,
} DSRHTTP_RESULT_STATE;


// プロトタイプ宣言
int	OEMDSR_HTTP_Init(ST_DSRHTTP * pHttp);															
int	OEMDSR_HTTP_SetServer(ST_DSRHTTP * pHttp, KDDIDSRServer * Server);								
int OEMDSR_HTTP_GetResponse(ST_DSRHTTP * pHttp, void (* func1)(void *, int), void (* func2)(void *, int, char *, int), void * UsrData );		
int	OEMDSR_HTTP_Cancel(ST_DSRHTTP * pHttp);															
int	OEMDSR_HTTP_Release(ST_DSRHTTP * pHttp);														
int	OEMDSR_HTTP_SetXMLData(ST_DSRHTTP * pHttp, char * XMLData);										
//int	OEMDSR_HTTP_SetBodyData(ST_DSRHTTP * pHttp, char * BodyData);																			/*** PTX-805 BREW001 ***/					
int	OEMDSR_HTTP_SetBodyData(ST_DSRHTTP * pHttp, char * BodyData, int iBodyDataSize);															/*** PTX-805 BREW001 ***/
char *	OEMDSR_HTTP_GetXML(ST_DSRHTTP * pHttp);														
int	OEMDSR_HTTP_GetBodySize(ST_DSRHTTP * pHttp);													
int	OEMDSR_HTTP_PostDataSize(ST_DSRHTTP * pHttp);													
char *	OEMDSR_HTTP_GetPostData(ST_DSRHTTP * pHttp);												
int	OEMDSR_HTTP_SelectNetwork(ST_DSRHTTP * pHttp, KDDIDSRNetInfo * NetInfo);					/*** PTX-805 BREW003 ***/

void OEMDSR_HTTP_CreatePostData(ST_DSRHTTP * pHttp);										// HTTPリクエストにてPOSTするデータを作成
void OEMDSR_HTTP_ResultCB(void *p);															// IWEB_GetResponse()の終了通知CB
void OEMDSR_HTTP_StatusHandler(ST_DSRHTTP * pHttp, WebStatus status, void * pData);			// HTTP通信中にステータスの変化が発生した場合にコールされるCB関数
void OEMDSR_HTTP_HeaderHandler(ST_DSRHTTP * pHttp, const char * pszName, GetLine * pgl);	// HTTP通信終了時にコールされるCB関数

void OEMDSR_HTTP_ReadableCB(void *p);															/*** PTX-805 BREW001 ***/

#endif		// _INCLUDE_OEMDSR_HTTP]

