290 lines
7.5 KiB
C
290 lines
7.5 KiB
C
|
#ifndef _T120_APPLET_SAP_
|
||
|
#define _T120_APPLET_SAP_
|
||
|
|
||
|
/*
|
||
|
* include files
|
||
|
*/
|
||
|
#include "it120app.h"
|
||
|
#include "appsap.h"
|
||
|
|
||
|
class CApplet;
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
APPSESS_INITIALIZED,
|
||
|
APPSESS_ATTACH_USER_REQ,
|
||
|
APPSESS_ATTACH_USER_CON,
|
||
|
APPSESS_JOIN_MY_CHANNEL_REQ,
|
||
|
APPSESS_JOIN_MY_CHANNEL_CON,
|
||
|
APPSESS_JOIN_STATIC_CHANNEL_REQ,
|
||
|
APPSESS_JOIN_STATIC_CHANNEL_CON, // may go back to APPSESS_JOIN_STATIC_CHANNEL_REQ
|
||
|
APPSESS_INACTIVELY_ENROLL_REQ,
|
||
|
APPSESS_INACTIVELY_ENROLL_CON,
|
||
|
APPSESS_RESOURCE_REQ,
|
||
|
APPSESS_RESOURCE_CON, // may go back to APPSESS_RESOURCE_REQ
|
||
|
APPSESS_ACTIVELY_ENROLL_REQ,
|
||
|
APPSESS_ACTIVELY_ENROLL_CON,
|
||
|
APPSESS_JOINED,
|
||
|
APPSESS_LEAVING,
|
||
|
APPSESS_LEFT,
|
||
|
}
|
||
|
APPLET_SESSION_STATE;
|
||
|
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
NONE_CHOSEN,
|
||
|
ERROR_CHOSEN,
|
||
|
RESULT_CHOSEN,
|
||
|
}
|
||
|
SESSION_ERROR_TYPE;
|
||
|
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
DCJS_INITIALIZED,
|
||
|
DCJS_RETRIEVE_ENTRY_REQ,
|
||
|
DCJS_RETRIEVE_ENTRY_CON,
|
||
|
DCJS_EXISTING_CHANNEL_JOIN_REQ,
|
||
|
DCJS_EXISTING_CHANNEL_JOIN_CON,
|
||
|
DCJS_NEW_CHANNEL_JOIN_REQ,
|
||
|
DCJS_NEW_CHANNEL_JOIN_CON,
|
||
|
DCJS_REGISTER_CHANNEL_REQ,
|
||
|
DCJS_REGISTER_CHANNEL_CON,
|
||
|
}
|
||
|
DYNCHNL_JOIN_STATE;
|
||
|
|
||
|
|
||
|
class CAppletSession : public IT120AppletSession, public CRefCount
|
||
|
{
|
||
|
friend class CApplet;
|
||
|
friend void CALLBACK MCS_SapCallback(UINT, LPARAM, LPVOID);
|
||
|
friend void CALLBACK GCC_SapCallback(GCCAppSapMsg *);
|
||
|
|
||
|
public:
|
||
|
|
||
|
CAppletSession(CApplet *, T120ConfID);
|
||
|
~CAppletSession(void);
|
||
|
|
||
|
/* exit the conference */
|
||
|
|
||
|
STDMETHOD_(void, ReleaseInterface) (THIS);
|
||
|
|
||
|
STDMETHOD_(void, Advise) (THIS_
|
||
|
IN LPFN_APPLET_SESSION_CB pfnCallback,
|
||
|
IN LPVOID pAppletContext,
|
||
|
IN LPVOID pSessionContext);
|
||
|
|
||
|
STDMETHOD_(void, Unadvise) (THIS);
|
||
|
|
||
|
/* basic info */
|
||
|
|
||
|
STDMETHOD_(T120ConfID, GetConfID) (THIS) { return m_nConfID; }
|
||
|
|
||
|
STDMETHOD_(BOOL, IsThisNodeTopProvider) (THIS);
|
||
|
|
||
|
STDMETHOD_(T120NodeID, GetTopProvider) (THIS);
|
||
|
|
||
|
/* join/leave */
|
||
|
|
||
|
STDMETHOD_(T120Error, Join) (THIS_
|
||
|
IN T120JoinSessionRequest *);
|
||
|
|
||
|
STDMETHOD_(void, Leave) (THIS);
|
||
|
|
||
|
/* send data */
|
||
|
|
||
|
STDMETHOD_(T120Error, AllocateSendDataBuffer) (THIS_
|
||
|
IN ULONG,
|
||
|
OUT void **);
|
||
|
|
||
|
STDMETHOD_(void, FreeSendDataBuffer) (THIS_
|
||
|
IN void *);
|
||
|
|
||
|
STDMETHOD_(T120Error, SendData) (THIS_
|
||
|
IN DataRequestType,
|
||
|
IN T120ChannelID,
|
||
|
IN T120Priority,
|
||
|
IN LPBYTE,
|
||
|
IN ULONG,
|
||
|
IN SendDataFlags);
|
||
|
|
||
|
/* ------ ADVANCED METHODS ---- */
|
||
|
|
||
|
STDMETHOD_(T120Error, InvokeApplet) (THIS_
|
||
|
IN GCCAppProtEntityList *,
|
||
|
IN GCCSimpleNodeList *,
|
||
|
OUT T120RequestTag *);
|
||
|
|
||
|
STDMETHOD_(T120Error, InquireRoster) (THIS_
|
||
|
IN GCCSessionKey *);
|
||
|
|
||
|
/* ------ registry services ------ */
|
||
|
|
||
|
STDMETHOD_(T120Error, RegistryRequest) (THIS_
|
||
|
IN T120RegistryRequest *);
|
||
|
|
||
|
/* ------ channel services ------ */
|
||
|
|
||
|
STDMETHOD_(T120Error, ChannelRequest) (THIS_
|
||
|
IN T120ChannelRequest *);
|
||
|
|
||
|
/* ------ token services ------ */
|
||
|
|
||
|
STDMETHOD_(T120Error, TokenRequest) (THIS_
|
||
|
IN T120TokenRequest *);
|
||
|
|
||
|
protected:
|
||
|
|
||
|
void GCCCallback(T120AppletSessionMsg *);
|
||
|
void MCSCallback(T120AppletSessionMsg *);
|
||
|
|
||
|
BOOL IsJoining(void);
|
||
|
|
||
|
//
|
||
|
// handy functions for the join process
|
||
|
//
|
||
|
void SetTempMsg(T120AppletSessionMsg *pMsg) { m_pTempMsg = pMsg; }
|
||
|
void ClearTempMsg(void) { m_pTempMsg = NULL; }
|
||
|
void HandleAttachUserConfirm(void);
|
||
|
void HandleJoinChannelConfirm(void);
|
||
|
void HandleEnrollConfirm(void);
|
||
|
void HandleRegisterChannelConfirm(void);
|
||
|
void HandleRetrieveEntryConfirm(void);
|
||
|
void HandleTokenGrabConfirm(void);
|
||
|
|
||
|
private:
|
||
|
|
||
|
void ClearError(void) { m_eErrorType = NONE_CHOSEN; }
|
||
|
void SetError(T120Error err) { m_eErrorType = ERROR_CHOSEN; m_Error.eError = err; }
|
||
|
void SetError(T120Result res) { m_eErrorType = RESULT_CHOSEN; m_Error.eResult = res; }
|
||
|
|
||
|
void SetState(APPLET_SESSION_STATE eState);
|
||
|
APPLET_SESSION_STATE GetState(void) { return m_eState; }
|
||
|
|
||
|
void SendMCSMessage(T120AppletSessionMsg *);
|
||
|
void SendCallbackMessage(T120AppletSessionMsg *);
|
||
|
|
||
|
T120Error DoEnroll(BOOL fEnroll, BOOL fEnrollActively = FALSE);
|
||
|
void DoJoinStaticChannels(void);
|
||
|
void DoResourceRequests(void);
|
||
|
void DoJoinDynamicChannels(BOOL fInitState);
|
||
|
void DoJoined(void);
|
||
|
void DoGrabTokenRequest(void);
|
||
|
|
||
|
void AbortJoin(void);
|
||
|
void SendJoinResult(T120Result eResult = T120_RESULT_SUCCESSFUL, T120Error eErrorCode = T120_NO_ERROR);
|
||
|
|
||
|
void FreeJoinRequest(BOOL fZeroOut);
|
||
|
|
||
|
private:
|
||
|
|
||
|
// remmember the context
|
||
|
LPVOID m_pAppletContext;
|
||
|
LPVOID m_pSessionContext;
|
||
|
LPFN_APPLET_SESSION_CB m_pfnCallback;
|
||
|
|
||
|
// parent applet object
|
||
|
CApplet *m_pApplet;
|
||
|
|
||
|
// tentative sap pointers
|
||
|
IMCSSap *m_pMCSAppletSAP;
|
||
|
|
||
|
// information about myself
|
||
|
T120ConfID m_nConfID;
|
||
|
T120UserID m_uidMyself;
|
||
|
T120SessionID m_sidMyself;
|
||
|
T120EntityID m_eidMyself;
|
||
|
T120NodeID m_nidMyself;
|
||
|
|
||
|
// join state
|
||
|
APPLET_SESSION_STATE m_eState;
|
||
|
ULONG m_nArrayIndex;
|
||
|
|
||
|
// error handling
|
||
|
SESSION_ERROR_TYPE m_eErrorType;
|
||
|
union
|
||
|
{
|
||
|
T120Error eError;
|
||
|
T120Result eResult;
|
||
|
} m_Error;
|
||
|
|
||
|
// join conference request copy
|
||
|
T120JoinSessionRequest m_JoinRequest; // valid during join session
|
||
|
BOOL m_fMCSFreeDataIndBuffer;
|
||
|
|
||
|
// dynamic channels join state
|
||
|
BOOL m_fFirstRoster;
|
||
|
DYNCHNL_JOIN_STATE m_eDynamicChannelJoinState;
|
||
|
T120AppletSessionMsg *m_pTempMsg;
|
||
|
};
|
||
|
|
||
|
|
||
|
class CSessionList : public CList
|
||
|
{
|
||
|
DEFINE_CLIST(CSessionList, CAppletSession*)
|
||
|
CAppletSession *FindByConfID(T120ConfID);
|
||
|
};
|
||
|
|
||
|
|
||
|
class CApplet : public IT120Applet, public CRefCount
|
||
|
{
|
||
|
friend void CALLBACK GCC_SapCallback(GCCAppSapMsg *);
|
||
|
|
||
|
public:
|
||
|
|
||
|
CApplet(T120Error *);
|
||
|
~CApplet(void);
|
||
|
|
||
|
STDMETHOD_(void, ReleaseInterface) (THIS);
|
||
|
|
||
|
STDMETHOD_(void, Advise) (THIS_
|
||
|
IN LPFN_APPLET_CB pfnCallback,
|
||
|
IN LPVOID pAppletContext);
|
||
|
|
||
|
STDMETHOD_(void, Unadvise) (THIS);
|
||
|
|
||
|
/* ------ Auto Join ------ */
|
||
|
|
||
|
STDMETHOD_(T120Error, RegisterAutoJoin) (THIS_
|
||
|
IN T120JoinSessionRequest *);
|
||
|
|
||
|
STDMETHOD_(void, UnregisterAutoJoin) (THIS);
|
||
|
|
||
|
/* ------ Session ------ */
|
||
|
|
||
|
STDMETHOD_(T120Error, CreateSession) (THIS_
|
||
|
OUT IT120AppletSession **,
|
||
|
IN T120ConfID);
|
||
|
|
||
|
|
||
|
void SendCallbackMessage(T120AppletMsg *pMsg);
|
||
|
|
||
|
IGCCAppSap *GetAppSap(void) { return m_pAppSap; }
|
||
|
|
||
|
void RegisterSession(CAppletSession *p) { m_SessionList.Append(p); }
|
||
|
void UnregisterSession(CAppletSession *p) { m_SessionList.Remove(p); }
|
||
|
|
||
|
CAppletSession *FindSessionByConfID(T120ConfID nConfID) { return m_SessionList.FindByConfID(nConfID); }
|
||
|
|
||
|
protected:
|
||
|
|
||
|
void GCCCallback(T120AppletSessionMsg *);
|
||
|
void HandleAutoJoin(T120ConfID);
|
||
|
|
||
|
private:
|
||
|
|
||
|
LPFN_APPLET_CB m_pfnCallback;
|
||
|
LPVOID m_pAppletContext;
|
||
|
IGCCAppSap *m_pAppSap;
|
||
|
CSessionList m_SessionList;
|
||
|
|
||
|
// for auto join
|
||
|
T120JoinSessionRequest *m_pAutoJoinReq;
|
||
|
CAppletSession *m_pAutoAppletSession;
|
||
|
};
|
||
|
|
||
|
|
||
|
#endif // _T120_APPLET_SAP_
|
||
|
|