#if !defined(AFX_LeashVIEW_H__6F45AD99_561B_11D0_8FCF_00C04FC2A0C2__INCLUDED_)
#define AFX_LeashVIEW_H__6F45AD99_561B_11D0_8FCF_00C04FC2A0C2__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif
#define GOOD_TICKETS 1
#define EXPIRED_TICKETS 2
#define TICKETS_LOW 3
#define ONE_SECOND 1000
#define SMALL_ICONS 16
#define LARGE_ICONS 32
#define UPDATE_DISPLAY_TIME 60
#define ACTIVE_CLOCK 0
#define LOW_CLOCK 1
#define EXPIRED_CLOCK 2
#define ACTIVE_TICKET 3
#define LOW_TICKET 4
#define EXPIRED_TICKET 5
#define TICKET_NOT_INSTALLED 6
#define ACTIVE_PARENT_NODE 7
#define LOW_PARENT_NODE 8
#define EXPIRED_PARENT_NODE 9
#define NONE_PARENT_NODE 10
#define LOW_TRAY_ICON 11
#define EXPIRED_TRAY_ICON 12
#define ACTIVE_TRAY_ICON 13
#define NONE_TRAY_ICON 14
#define TKT_ADDRESS 15
#define TKT_SESSION 16
#define TKT_ENCRYPTION 17
#define IMAGE_COUNT 18
#define NODE_IS_EXPANDED 2
#define CX_BORDER 1
#define CY_BORDER 1
#ifdef NO_TICKETS
#undef NO_TICKETS
#endif
#define WM_TRAYICON (WM_USER+100)
#define WM_WARNINGPOPUP (WM_USER+101)
enum ticketTimeLeft{NO_TICKETS, ZERO_MINUTES_LEFT, FIVE_MINUTES_LEFT, TEN_MINUTES_LEFT,
FIFTEEN_MINUTES_LEFT, TWENTY_MINUTES_LEFT, PLENTY_OF_TIME,
NOT_INSTALLED};
class CLeashDebugWindow;
class ViewColumnInfo
{
public:
const char * m_name;
int m_enabled;
int m_id;
int m_columnWidth;
};
enum eViewColumn {
PRINCIPAL,
TIME_ISSUED,
RENEWABLE_UNTIL,
VALID_UNTIL,
ENCRYPTION_TYPE,
TICKET_FLAGS,
CACHE_NAME,
NUM_VIEW_COLUMNS
};
class CCacheDisplayData
{
public:
CCacheDisplayData(const char *ccache_name) :
m_next(NULL),
m_ccacheName(strdup(ccache_name)),
m_index(-1),
m_focus(-1),
m_expanded(0),
m_selected(0),
m_isRenewable(0),
m_isDefault(0)
{
}
~CCacheDisplayData()
{
if (m_ccacheName)
free(m_ccacheName);
}
CCacheDisplayData *m_next;
char *m_ccacheName;
int m_index;
int m_focus;
unsigned int m_expanded;
unsigned int m_selected;
unsigned int m_isRenewable;
unsigned int m_isDefault;
};
struct ListItemInfo
{
ListItemInfo() : m_font(NULL), m_durationFont(NULL) {}
HFONT m_durationFont;
HFONT m_font;
};
class CLeashView : public CListView
{
private:
CLeashDebugWindow* m_pDebugWindow;
CCacheDisplayData* m_ccacheDisplay;
CImageList m_imageList;
CWinApp* m_pApp;
HTREEITEM m_hPrincipal;
HTREEITEM m_hKerb5;
HTREEITEM m_hk5tkt;
TV_INSERTSTRUCT m_tvinsert;
HMENU m_hMenu;
BOOL m_startup;
BOOL m_isMinimum;
BOOL m_debugStartUp;
BOOL m_alreadyPlayed;
INT m_upperCaseRealm;
INT m_destroyTicketsOnExit;
INT m_debugWindow;
INT m_largeIcons;
INT m_lowTicketAlarm;
INT m_hPrincipalState;
INT m_hKerb5State;
CString* m_pWarningMessage;
BOOL m_bIconAdded;
BOOL m_bIconDeleted;
HFONT m_BaseFont;
HFONT m_BoldFont;
HFONT m_ItalicFont;
HFONT m_BoldItalicFont;
ListItemInfo* m_aListItemInfo;
static ViewColumnInfo sm_viewColumns[NUM_VIEW_COLUMNS];
static INT m_autoRenewTickets;
static INT m_ticketStatusKrb5;
static INT m_autoRenewalAttempted;
static INT m_warningOfTicketTimeLeftKrb5;
static INT m_warningOfTicketTimeLeftLockKrb5;
static INT m_updateDisplayCount;
static INT m_alreadyPlayedDisplayCount;
static time_t m_ticketTimeLeft;
static BOOL m_lowTicketAlarmSound;
static LONG m_timerMsgNotInProgress;
void ToggleViewColumn(eViewColumn viewOption);
VOID ResetTreeNodes();
VOID ApplicationInfoMissingMsg();
VOID GetScrollBarState(CSize sizeClient, CSize& needSb,
CSize& sizeRange, CPoint& ptMove,
BOOL bInsideClient);
VOID UpdateBars();
VOID GetScrollBarSizes(CSize& sizeSb);
BOOL GetTrueClientSize(CSize& size, CSize& sizeSb);
HFONT GetSubItemFont(int iItem, int iSubItem);
static VOID AlarmBeep();
static VOID CALLBACK EXPORT TimerProc(HWND hWnd, UINT nMsg, UINT_PTR nIDEvent,
DWORD dwTime);
static VOID UpdateTicketTime(TICKETINFO& ticketinfo);
static INT GetLowTicketStatus(int);
static time_t LeashTime();
static BOOL IsExpired(TicketList *ticket);
static BOOL IsExpired(TICKETINFO *info);
static VOID AddDisplayItem(CListCtrl &list,
CCacheDisplayData *elem,
int iItem,
char *principal,
time_t issued,
time_t valid_until,
time_t renew_until,
char *encTypes,
unsigned long flags,
char *cache_name);
void SetTrayIcon(int nim, int state=0);
void SetTrayText(int nim, CString tip);
BOOL UpdateDisplay();
static UINT InitTicket(void *);
static UINT RenewTicket(void *);
static UINT ImportTicket(void *);
BOOL PostWarningMessage(const CString& message);
afx_msg LRESULT OnWarningPopup(WPARAM wParam, LPARAM lParam);
BOOL IsExpanded(TICKETINFO *);
protected:
DECLARE_DYNCREATE(CLeashView)
public:
CLeashView();
enum { IDD = IDD_DIALOG1 };
public:
public:
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
virtual VOID OnInitialUpdate();
virtual BOOL PreTranslateMessage(MSG* pMsg);
protected:
virtual VOID OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView);
public:
virtual ~CLeashView();
#ifdef _DEBUG
virtual VOID AssertValid() const;
virtual VOID Dump(CDumpContext& dc) const;
#endif
protected:
afx_msg VOID OnItemexpandedTreeview(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg INT OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg VOID OnShowWindow(BOOL bShow, UINT nStatus);
afx_msg VOID OnClose(void);
afx_msg VOID OnInitTicket();
afx_msg VOID OnRenewTicket();
afx_msg VOID OnDestroyTicket();
afx_msg VOID OnMakeDefault();
afx_msg VOID OnChangePassword();
afx_msg VOID OnUpdateDisplay();
afx_msg VOID OnSynTime();
afx_msg VOID OnDebugMode();
afx_msg VOID OnLargeIcons();
afx_msg VOID OnTimeIssued();
afx_msg VOID OnValidUntil();
afx_msg VOID OnRenewableUntil();
afx_msg VOID OnShowTicketFlags();
afx_msg VOID OnEncryptionType();
afx_msg VOID OnCcacheName();
afx_msg VOID OnUppercaseRealm();
afx_msg VOID OnKillTixOnExit();
afx_msg VOID OnDestroy();
afx_msg VOID OnUpdateDestroyTicket(CCmdUI* pCmdUI);
afx_msg VOID OnUpdateInitTicket(CCmdUI* pCmdUI);
afx_msg VOID OnUpdateRenewTicket(CCmdUI* pCmdUI);
afx_msg VOID OnUpdateTimeIssued(CCmdUI* pCmdUI);
afx_msg VOID OnUpdateValidUntil(CCmdUI* pCmdUI);
afx_msg VOID OnUpdateRenewableUntil(CCmdUI* pCmdUI);
afx_msg VOID OnUpdateShowTicketFlags(CCmdUI* pCmdUI);
afx_msg VOID OnUpdateEncryptionType(CCmdUI* pCmdUI);
afx_msg VOID OnUpdateCcacheName(CCmdUI* pCmdUI);
afx_msg VOID OnUpdateUppercaseRealm(CCmdUI* pCmdUI);
afx_msg VOID OnUpdateKillTixOnExit(CCmdUI* pCmdUI);
afx_msg VOID OnUpdateLowTicketAlarm(CCmdUI* pCmdUI);
afx_msg VOID OnUpdateAutoRenew(CCmdUI* pCmdUI);
afx_msg VOID OnUpdateMakeDefault(CCmdUI* pCmdUI);
afx_msg VOID OnAppAbout();
afx_msg VOID OnUpdateDebugMode(CCmdUI* pCmdUI);
afx_msg VOID OnUpdateCfgFiles(CCmdUI* pCmdUI);
afx_msg VOID OnKrb5Properties();
afx_msg void OnLeashProperties();
afx_msg void OnLeashRestore();
afx_msg void OnLeashMinimize();
afx_msg void OnLowTicketAlarm();
afx_msg void OnUpdateKrb5Properties(CCmdUI* pCmdUI);
afx_msg void OnKrbProperties();
afx_msg void OnUpdateProperties(CCmdUI* pCmdUI);
afx_msg void OnHelpKerberos();
afx_msg void OnHelpLeash32();
afx_msg void OnHelpWhyuseleash32();
afx_msg void OnSysColorChange();
afx_msg void OnAutoRenew();
afx_msg LRESULT OnGoodbye(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnTrayIcon(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnObtainTGTWithParam(WPARAM wParam, LPARAM lParam);
afx_msg void OnItemChanged(NMHDR* pNmHdr, LRESULT* pResult);
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnLvnItemchanging(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnLvnItemActivate(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnLvnKeydown(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult);
};
#endif