source: trunk/src/kernel32/hmnpipe.cpp@ 7029

Last change on this file since 7029 was 5587, checked in by sandervl, 24 years ago

added mailslot implemenation, named pipe fixes + FreeLibraryAndExitThread

File size: 10.9 KB
Line 
1/* $Id: hmnpipe.cpp,v 1.2 2001-04-26 13:22:46 sandervl Exp $ */
2/*
3 * Project Odin Software License can be found in LICENSE.TXT
4 *
5 * Win32 Named Pipes device access class
6 *
7 * Copyright 2000 Przemyslaw Dobrowolski <dobrawka@asua.org.pl>
8 *
9 * TODO: OVERLAPPED results!!!!
10 *
11 * PD: All my work for Odin I dedicate to my deceased mother.
12 *
13 */
14#include <odin.h>
15#include <os2win.h>
16#include <misc.h>
17#include "HMDevice.h"
18#include "HMFile.h"
19#include "HMNPipe.h"
20#include "oslibdos.h"
21#include <string.h>
22
23#define DBG_LOCALLOG DBG_hmnpipe
24#include "dbglocal.h"
25
26#undef DEBUG_LOCAL
27//#define DEBUG_LOCAL
28
29#ifdef DEBUG_LOCAL
30# define dprintfl(a) dprintf(a)
31#else
32inline void ignore_dprintf(...){}
33# define dprintfl(a) ignore_dprintf(a)
34#endif
35
36//******************************************************************************
37//******************************************************************************
38BOOL HMDeviceNamedPipeClass::PeekNamedPipe(PHMHANDLEDATA pHMHandleData,
39 LPVOID lpvBuffer,
40 DWORD cbBuffer,
41 LPDWORD lpcbRead,
42 LPDWORD lpcbAvail,
43 LPDWORD lpcbMessage)
44{
45 dprintfl(("KERNEL32: HMDeviceNamedPipeClass::PeekNamedPipe %s(%08x)\n",
46 lpHMDeviceName, pHMHandleData));
47
48 return OSLibDosPeekNamedPipe(pHMHandleData->hHMHandle,
49 lpvBuffer,
50 cbBuffer,
51 lpcbRead,
52 lpcbAvail,
53 lpcbMessage);
54}
55
56//******************************************************************************
57//******************************************************************************
58DWORD HMDeviceNamedPipeClass::CreateNamedPipe(PHMHANDLEDATA pHMHandleData,
59 LPCTSTR lpName,
60 DWORD dwOpenMode,
61 DWORD dwPipeMode,
62 DWORD nMaxInstances,
63 DWORD nOutBufferSize,
64 DWORD nInBufferSize,
65 DWORD nDefaultTimeOut,
66 LPSECURITY_ATTRIBUTES lpSecurityAttributes)
67{
68 pHMHandleData->dwInternalType = HMTYPE_PIPE;
69
70 dprintfl(("KERNEL32: HMDeviceNamedPipeClass::CreateNamedPipe %s\n",
71 lpName));
72
73
74 pHMHandleData->hHMHandle = OSLibDosCreateNamedPipe( lpName,
75 dwOpenMode,
76 dwPipeMode,
77 nMaxInstances,
78 nOutBufferSize,
79 nInBufferSize,
80 nDefaultTimeOut,
81 lpSecurityAttributes );
82
83
84 return (pHMHandleData->hHMHandle);
85}
86/*****************************************************************************
87 * Name : DWORD HMDeviceNamedPipeClass::CreateFile
88 * Purpose : this is called from the handle manager if a CreateFile() is
89 * performed on a handle
90 * Parameters: LPCSTR lpFileName name of the file / device
91 * PHMHANDLEDATA pHMHandleData data of the NEW handle
92 * PVOID lpSecurityAttributes ignored
93 * PHMHANDLEDATA pHMHandleDataTemplate data of the template handle
94 * Variables :
95 * Result :
96 * Remark :
97 * Status : NO_ERROR - API succeeded
98 * other - what is to be set in SetLastError
99 *
100 * Author : SvL
101 *****************************************************************************/
102
103DWORD HMDeviceNamedPipeClass::CreateFile (LPCSTR lpFileName,
104 PHMHANDLEDATA pHMHandleData,
105 PVOID lpSecurityAttributes,
106 PHMHANDLEDATA pHMHandleDataTemplate)
107{
108 pHMHandleData->hHMHandle = OSLibDosOpenPipe(lpFileName,
109 pHMHandleData->dwAccess,
110 pHMHandleData->dwShare,
111 (LPSECURITY_ATTRIBUTES)lpSecurityAttributes,
112 pHMHandleData->dwCreation,
113 pHMHandleData->dwFlags);
114 if(pHMHandleData->hHMHandle == -1) {
115 return GetLastError();
116 }
117 return ERROR_SUCCESS;
118}
119
120/*****************************************************************************
121 * Name : DWORD HMDeviceNamedPipeClass::CloseHandle
122 * Purpose : close the handle
123 * Parameters: PHMHANDLEDATA pHMHandleData
124 * Variables :
125 * Result : API returncode
126 * Remark :
127 * Status :
128 *
129 * Author : SvL
130 *****************************************************************************/
131
132BOOL HMDeviceNamedPipeClass::CloseHandle(PHMHANDLEDATA pHMHandleData)
133{
134 dprintf(("KERNEL32: HMDeviceNamedPipeClass::CloseHandle(%08x)", pHMHandleData->hHMHandle));
135
136 return OSLibDosClose(pHMHandleData->hHMHandle);
137}
138//******************************************************************************
139//******************************************************************************
140BOOL HMDeviceNamedPipeClass::CreatePipe(PHMHANDLEDATA pHMHandleDataRead,
141 PHMHANDLEDATA pHMHandleDataWrite,
142 LPSECURITY_ATTRIBUTES lpsa,
143 DWORD cbPipe)
144{
145 pHMHandleDataRead->dwInternalType = HMTYPE_PIPE;
146 pHMHandleDataWrite->dwInternalType = HMTYPE_PIPE;
147
148 dprintfl(("KERNEL32: HMDeviceNamedPipeClass::CreatePipe"));
149
150 if(!OSLibDosCreatePipe(&pHMHandleDataRead->hHMHandle,
151 &pHMHandleDataWrite->hHMHandle,
152 lpsa,
153 cbPipe))
154 return TRUE;
155 else
156 return(FALSE);
157}
158
159
160//******************************************************************************
161//******************************************************************************
162BOOL HMDeviceNamedPipeClass::ConnectNamedPipe( PHMHANDLEDATA pHMHandleData,
163 LPOVERLAPPED lpOverlapped)
164{
165 dprintfl(("KERNEL32: HMDeviceNamedPipeClass::ConnectNamedPipe %s(%08x) [%08x]\n",
166 lpHMDeviceName, pHMHandleData,lpOverlapped));
167
168 return OSLibDosConnectNamedPipe(pHMHandleData->hHMHandle,lpOverlapped);
169}
170
171//******************************************************************************
172//******************************************************************************
173BOOL HMDeviceNamedPipeClass::DisconnectNamedPipe(PHMHANDLEDATA pHMHandleData)
174{
175 dprintfl(("KERNEL32: HMDeviceNamedPipeClass::DisconnectNamedPipe %s(%08x)\n",
176 lpHMDeviceName, pHMHandleData));
177
178 return OSLibDosDisconnectNamedPipe(pHMHandleData->hHMHandle);
179}
180
181//******************************************************************************
182//******************************************************************************
183BOOL HMDeviceNamedPipeClass::GetNamedPipeHandleState(PHMHANDLEDATA pHMHandleData,
184 LPDWORD lpState,
185 LPDWORD lpCurInstances,
186 LPDWORD lpMaxCollectionCount,
187 LPDWORD lpCollectDataTimeout,
188 LPTSTR lpUserName,
189 DWORD nMaxUserNameSize)
190{
191 dprintf(("KERNEL32: HMDeviceNamedPipeClass::GetNamedPipeHandleStateA (%s) (%08xh,%08xh,%08xh,%08xh,%08xh,%08xh) NIY\n",
192 lpHMDeviceName,
193 lpState,
194 lpCurInstances,
195 lpMaxCollectionCount,
196 lpCollectDataTimeout,
197 lpUserName,
198 nMaxUserNameSize));
199
200 return (FALSE);
201}
202
203//******************************************************************************
204//******************************************************************************
205BOOL HMDeviceNamedPipeClass::GetNamedPipeInfo(PHMHANDLEDATA pHMHandleData,
206 LPDWORD lpFlags,
207 LPDWORD lpOutBufferSize,
208 LPDWORD lpInBufferSize,
209 LPDWORD lpMaxInstances)
210{
211
212 dprintf(("KERNEL32: HMDeviceNamedPipeClass::GetNamedPipeInfo (%s) (%08xh,%08xh,%08xh,%08xh) NIY\n",
213 lpHMDeviceName,
214 lpFlags,
215 lpOutBufferSize,
216 lpInBufferSize,
217 lpMaxInstances));
218
219 return (FALSE);
220}
221
222//******************************************************************************
223//******************************************************************************
224DWORD HMDeviceNamedPipeClass::TransactNamedPipe(PHMHANDLEDATA pHMHandleData,
225 LPVOID lpvWriteBuf,
226 DWORD cbWriteBuf,
227 LPVOID lpvReadBuf,
228 DWORD cbReadBuf,
229 LPDWORD lpcbRead,
230 LPOVERLAPPED lpo)
231{
232
233 dprintfl(("KERNEL32: HMDeviceNamedPipeClass::TransactNamedPipe %s(%08x) - [%08x,%08x,%08x,%08x,%08x,%08x]\n",
234 lpHMDeviceName, pHMHandleData,lpvWriteBuf,cbWriteBuf,lpvReadBuf,cbReadBuf,lpcbRead,lpo));
235
236 return(OSLibDosTransactNamedPipe( pHMHandleData->hHMHandle,
237 lpvWriteBuf,
238 cbWriteBuf,
239 lpvReadBuf,
240 cbReadBuf,
241 lpcbRead,
242 lpo));
243}
244
245BOOL HMDeviceNamedPipeClass::SetNamedPipeHandleState(PHMHANDLEDATA pHMHandleData,
246 LPDWORD lpdwMode,
247 LPDWORD lpcbMaxCollect,
248 LPDWORD lpdwCollectDataTimeout)
249{
250 BOOL ret;
251
252 dprintf(("KERNEL32: HMDeviceNamedPipeClass::SetNamedPipeInfo (%s) (%08xh,%08xh,%08xh)",
253 lpdwMode,lpcbMaxCollect,lpdwCollectDataTimeout));
254
255 if(lpdwMode) {
256 ret = OSLibSetNamedPipeState(pHMHandleData->hHMHandle, *lpdwMode);
257 }
258 if(lpcbMaxCollect || lpdwCollectDataTimeout) {
259 dprintf(("WARNING: Not supported -> lpcbMaxCollect & lpdwCollectDataTimeout"));
260 }
261 return ret;
262}
263
264
265BOOL HMDeviceNamedPipeClass::GetOverlappedResult(PHMHANDLEDATA pHMHandleData,
266 LPOVERLAPPED arg2,
267 LPDWORD arg3,
268 BOOL arg4)
269{
270 return (FALSE);
271}
Note: See TracBrowser for help on using the repository browser.