1// DomainUsers.cpp : implementation file
2//
3
4#include "stdafx.h"
5
6#include "beCompat.h"
7#include "betalk.h"
8#include "FileSharing.h"
9#include "DomainUsers.h"
10#include "rpc.h"
11
12#ifdef _DEBUG
13#define new DEBUG_NEW
14#undef THIS_FILE
15static char THIS_FILE[] = __FILE__;
16#endif
17
18/////////////////////////////////////////////////////////////////////////////
19// CDomainUsers dialog
20
21
22CDomainUsers::CDomainUsers(CWnd* pParent /*=NULL*/)
23	: CDialog(CDomainUsers::IDD, pParent)
24{
25	//{{AFX_DATA_INIT(CDomainUsers)
26		// NOTE: the ClassWizard will add member initialization here
27	//}}AFX_DATA_INIT
28
29	m_nRights = 0;
30	m_user.Empty();
31	m_bGroup = false;
32	m_bPrinting = false;
33}
34
35
36void CDomainUsers::DoDataExchange(CDataExchange* pDX)
37{
38	CDialog::DoDataExchange(pDX);
39	//{{AFX_DATA_MAP(CDomainUsers)
40	DDX_Control(pDX, IDOK, m_okayBtn);
41	DDX_Control(pDX, IDC_DOMAIN_USERS, m_userList);
42	DDX_Control(pDX, IDC_DOMAIN_RIGHTS, m_rights);
43	//}}AFX_DATA_MAP
44}
45
46
47BEGIN_MESSAGE_MAP(CDomainUsers, CDialog)
48	//{{AFX_MSG_MAP(CDomainUsers)
49	ON_NOTIFY(NM_CLICK, IDC_DOMAIN_USERS, OnClickDomainUsers)
50	//}}AFX_MSG_MAP
51END_MESSAGE_MAP()
52
53/////////////////////////////////////////////////////////////////////////////
54// CDomainUsers message handlers
55
56int CDomainUsers::ShowUsers(bool bPrinting)
57{
58	SetPrinting(bPrinting);
59	return DoModal();
60}
61
62BOOL CDomainUsers::OnInitDialog()
63{
64	CDialog::OnInitDialog();
65
66	m_userList.SetExtendedStyle(LVS_EX_FULLROWSELECT);
67	m_userList.InsertColumn(0, "User or Group", LVCFMT_LEFT, 175);
68	m_userList.InsertColumn(1, "Full Name", LVCFMT_LEFT, 185);
69
70	CBitmap user, group;
71	user.LoadBitmap(IDB_USER);
72	group.LoadBitmap(IDB_GROUP);
73
74	m_images.Create(16, 16, FALSE, 2, 0);
75	m_images.Add(&user, (COLORREF) 0);
76	m_images.Add(&group, (COLORREF) 0);
77	m_userList.SetImageList(&m_images, LVSIL_SMALL);
78
79	if (m_bPrinting)
80	{
81		m_rights.ResetContent();
82		m_rights.AddString("Print");
83	}
84
85	AddUserList();
86	AddGroupList();
87
88	return TRUE;
89}
90
91void CDomainUsers::OnClickDomainUsers(NMHDR* pNMHDR, LRESULT* pResult)
92{
93	int nIndex;
94	*pResult = 0;
95	nIndex = GetSelectedListItem(&m_userList);
96	if (nIndex >= 0)
97	{
98		m_rights.EnableWindow(TRUE);
99		m_rights.SelectString(-1, m_bPrinting ? "Print" : "Read-only");
100		m_okayBtn.EnableWindow(TRUE);
101	}
102	else
103	{
104		m_rights.EnableWindow(FALSE);
105		m_okayBtn.EnableWindow(FALSE);
106	}
107}
108
109void CDomainUsers::OnOK()
110{
111	CString rights;
112	int nItem = GetSelectedListItem(&m_userList);
113	m_user = m_userList.GetItemText(nItem, 0);
114
115	m_bGroup = m_userList.GetItemData(nItem) ? true : false;
116
117	m_nRights = m_bPrinting ? BT_RIGHTS_PRINT : BT_RIGHTS_READ;
118	nItem = m_rights.GetCurSel();
119	m_rights.GetLBText(nItem, rights);
120	if (rights.CompareNoCase("Read-write") == 0)
121		m_nRights |= BT_RIGHTS_WRITE;
122
123	CDialog::OnOK();
124}
125
126void CDomainUsers::AddUserList()
127{
128	extern unsigned int authServerIP;
129	int32 *dir = NULL;
130	char user[MAX_USERNAME_LENGTH], fullName[MAX_DESC_LENGTH];
131	int nIndex;
132
133	bt_outPacket *outPacket = btRPCPutHeader(BT_CMD_READUSERS, 1, 4);
134	btRPCPutArg(outPacket, B_INT32_TYPE, &dir, sizeof(int32));
135	bt_inPacket *inPacket = btRPCSimpleCall(authServerIP, BT_BESURE_PORT, outPacket);
136	if (inPacket)
137	{
138		int error, count = 0;
139
140		do
141		{
142			error = btRPCGetInt32(inPacket);
143			if (error == B_OK)
144			{
145				memset(user, 0, sizeof(user));
146				memset(fullName, 0, sizeof(fullName));
147				btRPCGetString(inPacket, user, sizeof(user));
148				btRPCGetString(inPacket, fullName, sizeof(fullName));
149
150				nIndex = m_userList.InsertItem(0, user, 0);
151				m_userList.SetItemText(nIndex, 1, fullName);
152				m_userList.SetItemData(nIndex, 0);
153			}
154			else break;
155		} while (++count < 80);
156
157		free(inPacket->buffer);
158		free(inPacket);
159	}
160}
161
162void CDomainUsers::AddGroupList()
163{
164	extern unsigned int authServerIP;
165	int32 *dir = NULL;
166	char group[MAX_USERNAME_LENGTH];
167	int nIndex;
168
169	bt_outPacket *outPacket = btRPCPutHeader(BT_CMD_READGROUPS, 1, 4);
170	btRPCPutArg(outPacket, B_INT32_TYPE, &dir, sizeof(int32));
171	bt_inPacket *inPacket = btRPCSimpleCall(authServerIP, BT_BESURE_PORT, outPacket);
172	if (inPacket)
173	{
174		int error, count = 0;
175
176		do
177		{
178			error = btRPCGetInt32(inPacket);
179			if (error == B_OK)
180			{
181				memset(group, 0, sizeof(group));
182				btRPCGetString(inPacket, group, sizeof(group));
183				nIndex = m_userList.InsertItem(0, group, 1);
184				m_userList.SetItemData(nIndex, 1);
185			}
186			else break;
187		} while (++count < 80);
188
189		free(inPacket->buffer);
190		free(inPacket);
191	}
192}
193