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