Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenimaptransport.c
Go to the documentation of this file.
00001 /* 00002 * IMAP Transport 00003 * 00004 * Copyright 2008 Hans Leidekker for CodeWeavers 00005 * 00006 * This library is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU Lesser General Public 00008 * License as published by the Free Software Foundation; either 00009 * version 2.1 of the License, or (at your option) any later version. 00010 * 00011 * This library is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 * Lesser General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU Lesser General Public 00017 * License along with this library; if not, write to the Free Software 00018 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 00019 */ 00020 00021 #define COBJMACROS 00022 00023 #include <stdarg.h> 00024 #include <stdio.h> 00025 00026 #include "windef.h" 00027 #include "winbase.h" 00028 #include "winnt.h" 00029 #include "winuser.h" 00030 #include "objbase.h" 00031 #include "mimeole.h" 00032 #include "wine/debug.h" 00033 00034 #include "inetcomm_private.h" 00035 00036 WINE_DEFAULT_DEBUG_CHANNEL(inetcomm); 00037 00038 typedef struct 00039 { 00040 InternetTransport InetTransport; 00041 ULONG refs; 00042 } IMAPTransport; 00043 00044 static HRESULT WINAPI IMAPTransport_QueryInterface(IIMAPTransport *iface, REFIID riid, void **ppv) 00045 { 00046 TRACE("(%s, %p)\n", debugstr_guid(riid), ppv); 00047 00048 if (IsEqualIID(riid, &IID_IUnknown) || 00049 IsEqualIID(riid, &IID_IInternetTransport) || 00050 IsEqualIID(riid, &IID_IIMAPTransport)) 00051 { 00052 *ppv = iface; 00053 IUnknown_AddRef(iface); 00054 return S_OK; 00055 } 00056 *ppv = NULL; 00057 FIXME("no interface for %s\n", debugstr_guid(riid)); 00058 return E_NOINTERFACE; 00059 } 00060 00061 static ULONG WINAPI IMAPTransport_AddRef(IIMAPTransport *iface) 00062 { 00063 IMAPTransport *This = (IMAPTransport *)iface; 00064 return InterlockedIncrement((LONG *)&This->refs); 00065 } 00066 00067 static ULONG WINAPI IMAPTransport_Release(IIMAPTransport *iface) 00068 { 00069 IMAPTransport *This = (IMAPTransport *)iface; 00070 ULONG refs = InterlockedDecrement((LONG *)&This->refs); 00071 if (!refs) 00072 { 00073 TRACE("destroying %p\n", This); 00074 if (This->InetTransport.Status != IXP_DISCONNECTED) 00075 InternetTransport_DropConnection(&This->InetTransport); 00076 if (This->InetTransport.pCallback) ITransportCallback_Release(This->InetTransport.pCallback); 00077 HeapFree(GetProcessHeap(), 0, This); 00078 } 00079 return refs; 00080 } 00081 00082 static HRESULT WINAPI IMAPTransport_GetServerInfo(IIMAPTransport *iface, 00083 LPINETSERVER pInetServer) 00084 { 00085 IMAPTransport *This = (IMAPTransport *)iface; 00086 00087 TRACE("(%p)\n", pInetServer); 00088 return InternetTransport_GetServerInfo(&This->InetTransport, pInetServer); 00089 } 00090 00091 static IXPTYPE WINAPI IMAPTransport_GetIXPType(IIMAPTransport *iface) 00092 { 00093 TRACE("()\n"); 00094 return IXP_IMAP; 00095 } 00096 00097 static HRESULT WINAPI IMAPTransport_IsState(IIMAPTransport *iface, 00098 IXPISSTATE isstate) 00099 { 00100 FIXME("(%d): stub\n", isstate); 00101 return E_NOTIMPL; 00102 } 00103 00104 static HRESULT WINAPI IMAPTransport_InetServerFromAccount( 00105 IIMAPTransport *iface, IImnAccount *pAccount, LPINETSERVER pInetServer) 00106 { 00107 IMAPTransport *This = (IMAPTransport *)iface; 00108 00109 TRACE("(%p, %p)\n", pAccount, pInetServer); 00110 return InternetTransport_InetServerFromAccount(&This->InetTransport, pAccount, pInetServer); 00111 } 00112 00113 static HRESULT WINAPI IMAPTransport_Connect(IIMAPTransport *iface, 00114 LPINETSERVER pInetServer, boolean fAuthenticate, boolean fCommandLogging) 00115 { 00116 IMAPTransport *This = (IMAPTransport *)iface; 00117 HRESULT hr; 00118 00119 TRACE("(%p, %s, %s)\n", pInetServer, fAuthenticate ? "TRUE" : "FALSE", fCommandLogging ? "TRUE" : "FALSE"); 00120 00121 hr = InternetTransport_Connect(&This->InetTransport, pInetServer, fAuthenticate, fCommandLogging); 00122 return hr; 00123 } 00124 00125 static HRESULT WINAPI IMAPTransport_HandsOffCallback(IIMAPTransport *iface) 00126 { 00127 IMAPTransport *This = (IMAPTransport *)iface; 00128 00129 TRACE("()\n"); 00130 return InternetTransport_HandsOffCallback(&This->InetTransport); 00131 } 00132 00133 static HRESULT WINAPI IMAPTransport_Disconnect(IIMAPTransport *iface) 00134 { 00135 FIXME("(): stub\n"); 00136 return E_NOTIMPL; 00137 } 00138 00139 static HRESULT WINAPI IMAPTransport_DropConnection(IIMAPTransport *iface) 00140 { 00141 IMAPTransport *This = (IMAPTransport *)iface; 00142 00143 TRACE("()\n"); 00144 return InternetTransport_DropConnection(&This->InetTransport); 00145 } 00146 00147 static HRESULT WINAPI IMAPTransport_GetStatus(IIMAPTransport *iface, 00148 IXPSTATUS *pCurrentStatus) 00149 { 00150 IMAPTransport *This = (IMAPTransport *)iface; 00151 00152 TRACE("()\n"); 00153 return InternetTransport_GetStatus(&This->InetTransport, pCurrentStatus); 00154 } 00155 00156 static HRESULT WINAPI IMAPTransport_InitNew(IIMAPTransport *iface, 00157 LPSTR pszLogFilePath, IIMAPCallback *pCallback) 00158 { 00159 IMAPTransport *This = (IMAPTransport *)iface; 00160 00161 TRACE("(%s, %p)\n", debugstr_a(pszLogFilePath), pCallback); 00162 00163 if (!pCallback) 00164 return E_INVALIDARG; 00165 00166 if (pszLogFilePath) 00167 FIXME("not using log file of %s, use Wine debug logging instead\n", 00168 debugstr_a(pszLogFilePath)); 00169 00170 IIMAPCallback_AddRef(pCallback); 00171 This->InetTransport.pCallback = (ITransportCallback *)pCallback; 00172 This->InetTransport.fInitialised = TRUE; 00173 00174 return S_OK; 00175 } 00176 00177 static HRESULT WINAPI IMAPTransport_NewIRangeList(IIMAPTransport *iface, 00178 IRangeList **pprlNewRangeList) 00179 { 00180 FIXME("(%p): stub\n", pprlNewRangeList); 00181 return E_NOTIMPL; 00182 } 00183 00184 static HRESULT WINAPI IMAPTransport_Capability(IIMAPTransport *iface, 00185 DWORD *pdwCapabilityFlags) 00186 { 00187 FIXME("(%p): stub\n", pdwCapabilityFlags); 00188 return E_NOTIMPL; 00189 } 00190 00191 static HRESULT WINAPI IMAPTransport_Select(IIMAPTransport *iface, 00192 WPARAM wParam, LPARAM lParam, IIMAPCallback *pCBHandler, LPSTR lpszMailboxName) 00193 { 00194 FIXME("(%ld, %ld, %p, %s): stub\n", wParam, lParam, pCBHandler, debugstr_a(lpszMailboxName)); 00195 return E_NOTIMPL; 00196 } 00197 00198 static HRESULT WINAPI IMAPTransport_Examine(IIMAPTransport *iface, 00199 WPARAM wParam, LPARAM lParam, IIMAPCallback *pCBHandler, LPSTR lpszMailboxName) 00200 { 00201 FIXME("(%ld, %ld, %p, %s): stub\n", wParam, lParam, pCBHandler, debugstr_a(lpszMailboxName)); 00202 return E_NOTIMPL; 00203 } 00204 00205 static HRESULT WINAPI IMAPTransport_Create(IIMAPTransport *iface, 00206 WPARAM wParam, LPARAM lParam, IIMAPCallback *pCBHandler, LPSTR lpszMailboxName) 00207 { 00208 FIXME("(%ld, %ld, %p, %s): stub\n", wParam, lParam, pCBHandler, debugstr_a(lpszMailboxName)); 00209 return E_NOTIMPL; 00210 } 00211 00212 static HRESULT WINAPI IMAPTransport_Delete(IIMAPTransport *iface, 00213 WPARAM wParam, LPARAM lParam, IIMAPCallback *pCBHandler, LPSTR lpszMailboxName) 00214 { 00215 FIXME("(%ld, %ld, %p, %s): stub\n", wParam, lParam, pCBHandler, debugstr_a(lpszMailboxName)); 00216 return E_NOTIMPL; 00217 } 00218 00219 static HRESULT WINAPI IMAPTransport_Rename(IIMAPTransport *iface, WPARAM wParam, LPARAM lParam, 00220 IIMAPCallback *pCBHandler, LPSTR lpszMailboxName, LPSTR lpszNewMailboxName) 00221 { 00222 FIXME("(%ld, %ld, %p, %s, %s): stub\n", wParam, lParam, pCBHandler, 00223 debugstr_a(lpszMailboxName), debugstr_a(lpszNewMailboxName)); 00224 return E_NOTIMPL; 00225 } 00226 00227 static HRESULT WINAPI IMAPTransport_Subscribe(IIMAPTransport *iface, 00228 WPARAM wParam, LPARAM lParam, IIMAPCallback *pCBHandler, LPSTR lpszMailboxName) 00229 { 00230 FIXME("(%ld, %ld, %p, %s): stub\n", wParam, lParam, pCBHandler, debugstr_a(lpszMailboxName)); 00231 return E_NOTIMPL; 00232 } 00233 00234 static HRESULT WINAPI IMAPTransport_Unsubscribe(IIMAPTransport *iface, 00235 WPARAM wParam, LPARAM lParam, IIMAPCallback *pCBHandler, LPSTR lpszMailboxName) 00236 { 00237 FIXME("(%ld, %ld, %p, %s): stub\n", wParam, lParam, pCBHandler, debugstr_a(lpszMailboxName)); 00238 return E_NOTIMPL; 00239 } 00240 00241 static HRESULT WINAPI IMAPTransport_List(IIMAPTransport *iface, WPARAM wParam, LPARAM lParam, 00242 IIMAPCallback *pCBHandler, LPSTR lpszMailboxNameReference, LPSTR lpszMailboxNamePattern) 00243 { 00244 FIXME("(%ld, %ld, %p, %s, %s): stub\n", wParam, lParam, pCBHandler, 00245 debugstr_a(lpszMailboxNameReference), debugstr_a(lpszMailboxNamePattern)); 00246 return E_NOTIMPL; 00247 } 00248 00249 static HRESULT WINAPI IMAPTransport_Lsub(IIMAPTransport *iface, WPARAM wParam, LPARAM lParam, 00250 IIMAPCallback *pCBHandler, LPSTR lpszMailboxNameReference, LPSTR lpszMailboxNamePattern) 00251 { 00252 FIXME("(%ld, %ld, %p, %s, %s): stub\n", wParam, lParam, pCBHandler, 00253 debugstr_a(lpszMailboxNameReference), debugstr_a(lpszMailboxNamePattern)); 00254 return E_NOTIMPL; 00255 } 00256 00257 static HRESULT WINAPI IMAPTransport_Append(IIMAPTransport *iface, 00258 WPARAM wParam, LPARAM lParam, IIMAPCallback *pCBHandler, LPSTR lpszMailboxName, 00259 LPSTR lpszMessageFlags, FILETIME ftMessageDateTime, LPSTREAM lpstmMessageToSave) 00260 { 00261 FIXME("(%ld, %ld, %p, %s, %s, %p): stub\n", wParam, lParam, pCBHandler, 00262 debugstr_a(lpszMailboxName), debugstr_a(lpszMessageFlags), lpstmMessageToSave); 00263 return E_NOTIMPL; 00264 } 00265 00266 static HRESULT WINAPI IMAPTransport_Close(IIMAPTransport *iface, 00267 WPARAM wParam, LPARAM lParam, IIMAPCallback *pCBHandler) 00268 { 00269 FIXME("(%ld, %ld, %p): stub\n", wParam, lParam, pCBHandler); 00270 return E_NOTIMPL; 00271 } 00272 00273 static HRESULT WINAPI IMAPTransport_Expunge(IIMAPTransport *iface, 00274 WPARAM wParam, LPARAM lParam, IIMAPCallback *pCBHandler) 00275 { 00276 FIXME("(%ld, %ld, %p): stub\n", wParam, lParam, pCBHandler); 00277 return E_NOTIMPL; 00278 } 00279 00280 static HRESULT WINAPI IMAPTransport_Search(IIMAPTransport *iface, 00281 WPARAM wParam, LPARAM lParam, IIMAPCallback *pCBHandler, LPSTR lpszSearchCriteria, 00282 boolean bReturnUIDs, IRangeList *pMsgRange, boolean bUIDRangeList) 00283 { 00284 FIXME("(%ld, %ld, %p, %s, %d, %p, %d): stub\n", wParam, lParam, pCBHandler, 00285 debugstr_a(lpszSearchCriteria), bReturnUIDs, pMsgRange, bUIDRangeList); 00286 return E_NOTIMPL; 00287 } 00288 00289 static HRESULT WINAPI IMAPTransport_Fetch(IIMAPTransport *iface, WPARAM wParam, LPARAM lParam, 00290 IIMAPCallback *pCBHandler, IRangeList *pMsgRange, boolean bUIDMsgRange, LPSTR lpszFetchArgs) 00291 { 00292 FIXME("(%ld, %ld, %p, %p, %d, %s): stub\n", wParam, lParam, pCBHandler, pMsgRange, 00293 bUIDMsgRange, debugstr_a(lpszFetchArgs)); 00294 return E_NOTIMPL; 00295 } 00296 00297 static HRESULT WINAPI IMAPTransport_Store(IIMAPTransport *iface, WPARAM wParam, LPARAM lParam, 00298 IIMAPCallback *pCBHandler, IRangeList *pMsgRange, boolean bUIDRangeList, LPSTR lpszStoreArgs) 00299 { 00300 FIXME("(%ld, %ld, %p, %p, %d, %s): stub\n", wParam, lParam, pCBHandler, pMsgRange, 00301 bUIDRangeList, debugstr_a(lpszStoreArgs)); 00302 return E_NOTIMPL; 00303 } 00304 00305 static HRESULT WINAPI IMAPTransport_Copy(IIMAPTransport *iface, WPARAM wParam, LPARAM lParam, 00306 IIMAPCallback *pCBHandler, IRangeList *pMsgRange, boolean bUIDRangeList, LPSTR lpszMailboxName) 00307 { 00308 FIXME("(%ld, %ld, %p, %p, %d, %s): stub\n", wParam, lParam, pCBHandler, pMsgRange, 00309 bUIDRangeList, debugstr_a(lpszMailboxName)); 00310 return E_NOTIMPL; 00311 } 00312 00313 static HRESULT WINAPI IMAPTransport_Noop(IIMAPTransport *iface, 00314 WPARAM wParam, LPARAM lParam, IIMAPCallback *pCBHandler) 00315 { 00316 FIXME("(%ld, %ld, %p): stub\n", wParam, lParam, pCBHandler); 00317 return E_NOTIMPL; 00318 } 00319 00320 static HRESULT WINAPI IMAPTransport_ResizeMsgSeqNumTable(IIMAPTransport *iface, DWORD dwSizeOfMbox) 00321 { 00322 FIXME("(%u): stub\n", dwSizeOfMbox); 00323 return E_NOTIMPL; 00324 } 00325 00326 static HRESULT WINAPI IMAPTransport_UpdateSeqNumToUID(IIMAPTransport *iface, 00327 DWORD dwMsgSeqNum, DWORD dwUID) 00328 { 00329 FIXME("(%u, %u): stub\n", dwMsgSeqNum, dwUID); 00330 return E_NOTIMPL; 00331 } 00332 00333 static HRESULT WINAPI IMAPTransport_RemoveSequenceNum(IIMAPTransport *iface, DWORD dwDeletedMsgSeqNum) 00334 { 00335 FIXME("(%u): stub\n", dwDeletedMsgSeqNum); 00336 return E_NOTIMPL; 00337 } 00338 00339 static HRESULT WINAPI IMAPTransport_MsgSeqNumToUID(IIMAPTransport *iface, DWORD dwMsgSeqNum, 00340 DWORD *pdwUID) 00341 { 00342 FIXME("(%u, %p): stub\n", dwMsgSeqNum, pdwUID); 00343 return E_NOTIMPL; 00344 } 00345 00346 static HRESULT WINAPI IMAPTransport_GetMsgSeqNumToUIDArray(IIMAPTransport *iface, 00347 DWORD **ppdwMsgSeqNumToUIDArray, DWORD *pdwNumberOfElements) 00348 { 00349 FIXME("(%p, %p): stub\n", ppdwMsgSeqNumToUIDArray, pdwNumberOfElements); 00350 return E_NOTIMPL; 00351 } 00352 00353 static HRESULT WINAPI IMAPTransport_GetHighestMsgSeqNum(IIMAPTransport *iface, DWORD *pdwHighestMSN) 00354 { 00355 FIXME("(%p): stub\n", pdwHighestMSN); 00356 return E_NOTIMPL; 00357 } 00358 00359 static HRESULT WINAPI IMAPTransport_ResetMsgSeqNumToUID(IIMAPTransport *iface) 00360 { 00361 FIXME("(): stub\n"); 00362 return E_NOTIMPL; 00363 } 00364 00365 static HRESULT WINAPI IMAPTransport_SetDefaultCBHandler(IIMAPTransport *iface, IIMAPCallback *pCBHandler) 00366 { 00367 FIXME("(%p): stub\n", pCBHandler); 00368 return E_NOTIMPL; 00369 } 00370 00371 static HRESULT WINAPI IMAPTransport_Status(IIMAPTransport *iface, WPARAM wParam, LPARAM lParam, 00372 IIMAPCallback *pCBHandler, LPSTR pszMailboxName, LPSTR pszStatusCmdArgs) 00373 { 00374 FIXME("(%ld, %ld, %p, %s, %s): stub\n", wParam, lParam, pCBHandler, 00375 debugstr_a(pszMailboxName), debugstr_a(pszStatusCmdArgs)); 00376 return E_NOTIMPL; 00377 } 00378 00379 static const IIMAPTransportVtbl IMAPTransportVtbl = 00380 { 00381 IMAPTransport_QueryInterface, 00382 IMAPTransport_AddRef, 00383 IMAPTransport_Release, 00384 IMAPTransport_GetServerInfo, 00385 IMAPTransport_GetIXPType, 00386 IMAPTransport_IsState, 00387 IMAPTransport_InetServerFromAccount, 00388 IMAPTransport_Connect, 00389 IMAPTransport_HandsOffCallback, 00390 IMAPTransport_Disconnect, 00391 IMAPTransport_DropConnection, 00392 IMAPTransport_GetStatus, 00393 IMAPTransport_InitNew, 00394 IMAPTransport_NewIRangeList, 00395 IMAPTransport_Capability, 00396 IMAPTransport_Select, 00397 IMAPTransport_Examine, 00398 IMAPTransport_Create, 00399 IMAPTransport_Delete, 00400 IMAPTransport_Rename, 00401 IMAPTransport_Subscribe, 00402 IMAPTransport_Unsubscribe, 00403 IMAPTransport_List, 00404 IMAPTransport_Lsub, 00405 IMAPTransport_Append, 00406 IMAPTransport_Close, 00407 IMAPTransport_Expunge, 00408 IMAPTransport_Search, 00409 IMAPTransport_Fetch, 00410 IMAPTransport_Store, 00411 IMAPTransport_Copy, 00412 IMAPTransport_Noop, 00413 IMAPTransport_ResizeMsgSeqNumTable, 00414 IMAPTransport_UpdateSeqNumToUID, 00415 IMAPTransport_RemoveSequenceNum, 00416 IMAPTransport_MsgSeqNumToUID, 00417 IMAPTransport_GetMsgSeqNumToUIDArray, 00418 IMAPTransport_GetHighestMsgSeqNum, 00419 IMAPTransport_ResetMsgSeqNumToUID, 00420 IMAPTransport_SetDefaultCBHandler, 00421 IMAPTransport_Status 00422 }; 00423 00424 HRESULT WINAPI CreateIMAPTransport(IIMAPTransport **ppTransport) 00425 { 00426 HRESULT hr; 00427 IMAPTransport *This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This)); 00428 if (!This) 00429 return E_OUTOFMEMORY; 00430 00431 This->InetTransport.u.vtblIMAP = &IMAPTransportVtbl; 00432 This->refs = 0; 00433 hr = InternetTransport_Init(&This->InetTransport); 00434 if (FAILED(hr)) 00435 { 00436 HeapFree(GetProcessHeap(), 0, This); 00437 return hr; 00438 } 00439 00440 *ppTransport = (IIMAPTransport *)&This->InetTransport.u.vtblIMAP; 00441 IIMAPTransport_AddRef(*ppTransport); 00442 00443 return S_OK; 00444 } 00445 00446 static HRESULT WINAPI IMAPTransportCF_QueryInterface(LPCLASSFACTORY iface, 00447 REFIID riid, LPVOID *ppv) 00448 { 00449 *ppv = NULL; 00450 if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IClassFactory)) 00451 { 00452 *ppv = iface; 00453 IUnknown_AddRef(iface); 00454 return S_OK; 00455 } 00456 return E_NOINTERFACE; 00457 } 00458 00459 static ULONG WINAPI IMAPTransportCF_AddRef(LPCLASSFACTORY iface) 00460 { 00461 return 2; /* non-heap based object */ 00462 } 00463 00464 static ULONG WINAPI IMAPTransportCF_Release(LPCLASSFACTORY iface) 00465 { 00466 return 1; /* non-heap based object */ 00467 } 00468 00469 static HRESULT WINAPI IMAPTransportCF_CreateInstance(LPCLASSFACTORY iface, 00470 LPUNKNOWN pUnk, REFIID riid, LPVOID *ppv) 00471 { 00472 HRESULT hr; 00473 IIMAPTransport *pImapTransport; 00474 00475 TRACE("(%p, %s, %p)\n", pUnk, debugstr_guid(riid), ppv); 00476 00477 *ppv = NULL; 00478 00479 if (pUnk) 00480 return CLASS_E_NOAGGREGATION; 00481 00482 hr = CreateIMAPTransport(&pImapTransport); 00483 if (FAILED(hr)) 00484 return hr; 00485 00486 hr = IIMAPTransport_QueryInterface(pImapTransport, riid, ppv); 00487 IIMAPTransport_Release(pImapTransport); 00488 00489 return hr; 00490 } 00491 00492 static HRESULT WINAPI IMAPTransportCF_LockServer(LPCLASSFACTORY iface, BOOL fLock) 00493 { 00494 FIXME("(%d), stub!\n",fLock); 00495 return S_OK; 00496 } 00497 00498 static const IClassFactoryVtbl IMAPTransportCFVtbl = 00499 { 00500 IMAPTransportCF_QueryInterface, 00501 IMAPTransportCF_AddRef, 00502 IMAPTransportCF_Release, 00503 IMAPTransportCF_CreateInstance, 00504 IMAPTransportCF_LockServer 00505 }; 00506 static const IClassFactoryVtbl *IMAPTransportCF = &IMAPTransportCFVtbl; 00507 00508 HRESULT IMAPTransportCF_Create(REFIID riid, LPVOID *ppv) 00509 { 00510 return IClassFactory_QueryInterface((IClassFactory *)&IMAPTransportCF, riid, ppv); 00511 } Generated on Sun May 27 2012 04:24:04 for ReactOS by
1.7.6.1
|