Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenline.c
Go to the documentation of this file.
00001 /* 00002 * TAPI32 line services 00003 * 00004 * Copyright 1999 Andreas Mohr 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 #include <string.h> 00022 #include <stdlib.h> 00023 #include <stdarg.h> 00024 #include <stdio.h> 00025 #include "windef.h" 00026 #include "winbase.h" 00027 #include "wingdi.h" 00028 #include "winreg.h" 00029 #include "winnls.h" 00030 #include "winerror.h" 00031 #include "objbase.h" 00032 #include "tapi.h" 00033 #include "wine/debug.h" 00034 00035 WINE_DEFAULT_DEBUG_CHANNEL(tapi); 00036 00037 /* registry keys */ 00038 static const char szCountrylistKey[] = 00039 "Software\\Microsoft\\Windows\\CurrentVersion\\Telephony\\Country List"; 00040 static const char szLocationsKey[] = 00041 "Software\\Microsoft\\Windows\\CurrentVersion\\Telephony\\Locations"; 00042 static const char szCardsKey[] = 00043 "Software\\Microsoft\\Windows\\CurrentVersion\\Telephony\\Cards"; 00044 00045 00046 /*********************************************************************** 00047 * lineAccept (TAPI32.@) 00048 */ 00049 DWORD WINAPI lineAccept(HCALL hCall, LPCSTR lpsUserUserInfo, DWORD dwSize) 00050 { 00051 FIXME("(%p, %s, %d): stub.\n", hCall, lpsUserUserInfo, dwSize); 00052 return 1; 00053 } 00054 00055 /*********************************************************************** 00056 * lineAddProviderA (TAPI32.@) 00057 */ 00058 DWORD WINAPI lineAddProviderA(LPCSTR lpszProviderName, HWND hwndOwner, LPDWORD lpdwPermanentProviderID) 00059 { 00060 FIXME("(%s, %p, %p): stub.\n", lpszProviderName, hwndOwner, lpdwPermanentProviderID); 00061 return LINEERR_OPERATIONFAILED; 00062 } 00063 00064 /*********************************************************************** 00065 * lineAddProviderW (TAPI32.@) 00066 */ 00067 DWORD WINAPI lineAddProviderW(LPCWSTR lpszProviderName, HWND hwndOwner, LPDWORD lpdwPermanentProviderID) 00068 { 00069 FIXME("(%s, %p, %p): stub.\n", wine_dbgstr_w(lpszProviderName), hwndOwner, lpdwPermanentProviderID); 00070 return LINEERR_OPERATIONFAILED; 00071 } 00072 00073 /*********************************************************************** 00074 * lineAddToConference (TAPI32.@) 00075 */ 00076 DWORD WINAPI lineAddToConference(HCALL hConfCall, HCALL hConsultCall) 00077 { 00078 FIXME("(%p, %p): stub.\n", hConfCall, hConsultCall); 00079 return 1; 00080 } 00081 00082 /*********************************************************************** 00083 * lineAnswer (TAPI32.@) 00084 */ 00085 DWORD WINAPI lineAnswer(HCALL hCall, LPCSTR lpsUserUserInfo, DWORD dwSize) 00086 { 00087 FIXME("(%p, %s, %d): stub.\n", hCall, lpsUserUserInfo, dwSize); 00088 return 1; 00089 } 00090 00091 /*********************************************************************** 00092 * lineBlindTransfer (TAPI32.@) 00093 */ 00094 DWORD WINAPI lineBlindTransferA(HCALL hCall, LPCSTR lpszDestAddress, DWORD dwCountryCode) 00095 { 00096 FIXME("(%p, %s, %08x): stub.\n", hCall, lpszDestAddress, dwCountryCode); 00097 return 1; 00098 } 00099 00100 /*********************************************************************** 00101 * lineClose (TAPI32.@) 00102 */ 00103 DWORD WINAPI lineClose(HLINE hLine) 00104 { 00105 FIXME("(%p): stub.\n", hLine); 00106 return 0; 00107 } 00108 00109 /*********************************************************************** 00110 * lineCompleteCall (TAPI32.@) 00111 */ 00112 DWORD WINAPI lineCompleteCall(HCALL hCall, LPDWORD lpdwCompletionID, DWORD dwCompletionMode, DWORD dwMessageID) 00113 { 00114 FIXME("(%p, %p, %08x, %08x): stub.\n", hCall, lpdwCompletionID, dwCompletionMode, dwMessageID); 00115 return 1; 00116 } 00117 00118 /*********************************************************************** 00119 * lineCompleteTransfer (TAPI32.@) 00120 */ 00121 DWORD WINAPI lineCompleteTransfer(HCALL hCall, HCALL hConsultCall, LPHCALL lphConfCall, DWORD dwTransferMode) 00122 { 00123 FIXME("(%p, %p, %p, %08x): stub.\n", hCall, hConsultCall, lphConfCall, dwTransferMode); 00124 return 1; 00125 } 00126 00127 /*********************************************************************** 00128 * lineConfigDialog (TAPI32.@) 00129 */ 00130 DWORD WINAPI lineConfigDialogA(DWORD dwDeviceID, HWND hwndOwner, LPCSTR lpszDeviceClass) 00131 { 00132 FIXME("(%08x, %p, %s): stub.\n", dwDeviceID, hwndOwner, lpszDeviceClass); 00133 return 0; 00134 } 00135 00136 /*********************************************************************** 00137 * lineConfigDialogEdit (TAPI32.@) 00138 */ 00139 DWORD WINAPI lineConfigDialogEditA(DWORD dwDeviceID, HWND hwndOwner, LPCSTR lpszDeviceClass, LPVOID const lpDeviceConfigIn, DWORD dwSize, LPVARSTRING lpDeviceConfigOut) 00140 { 00141 FIXME("stub.\n"); 00142 return 0; 00143 } 00144 00145 /*********************************************************************** 00146 * lineConfigProvider (TAPI32.@) 00147 */ 00148 DWORD WINAPI lineConfigProvider(HWND hwndOwner, DWORD dwPermanentProviderID) 00149 { 00150 FIXME("(%p, %08x): stub.\n", hwndOwner, dwPermanentProviderID); 00151 return 0; 00152 } 00153 00154 /*********************************************************************** 00155 * lineDeallocateCall (TAPI32.@) 00156 */ 00157 DWORD WINAPI lineDeallocateCall(HCALL hCall) 00158 { 00159 FIXME("(%p): stub.\n", hCall); 00160 return 0; 00161 } 00162 00163 /*********************************************************************** 00164 * lineDevSpecific (TAPI32.@) 00165 */ 00166 DWORD WINAPI lineDevSpecific(HLINE hLine, DWORD dwAddressId, HCALL hCall, LPVOID lpParams, DWORD dwSize) 00167 { 00168 FIXME("(%p, %08x, %p, %p, %d): stub.\n", hLine, dwAddressId, hCall, lpParams, dwSize); 00169 return 1; 00170 } 00171 00172 /*********************************************************************** 00173 * lineDevSpecificFeature (TAPI32.@) 00174 */ 00175 DWORD WINAPI lineDevSpecificFeature(HLINE hLine, DWORD dwFeature, LPVOID lpParams, DWORD dwSize) 00176 { 00177 FIXME("(%p, %08x, %p, %d): stub.\n", hLine, dwFeature, lpParams, dwSize); 00178 return 1; 00179 } 00180 00181 /*********************************************************************** 00182 * lineDial (TAPI32.@) 00183 */ 00184 DWORD WINAPI lineDialA(HCALL hCall, LPCSTR lpszDestAddress, DWORD dwCountryCode) 00185 { 00186 FIXME("(%p, %s, %08x): stub.\n", hCall, lpszDestAddress, dwCountryCode); 00187 return 1; 00188 } 00189 00190 /*********************************************************************** 00191 * lineDrop (TAPI32.@) 00192 */ 00193 DWORD WINAPI lineDrop(HCALL hCall, LPCSTR lpsUserUserInfo, DWORD dwSize) 00194 { 00195 FIXME("(%p, %s, %08x): stub.\n", hCall, lpsUserUserInfo, dwSize); 00196 return 1; 00197 } 00198 00199 /*********************************************************************** 00200 * lineForward (TAPI32.@) 00201 */ 00202 DWORD WINAPI lineForwardA(HLINE hLine, DWORD bAllAddress, DWORD dwAddressID, LPLINEFORWARDLIST lpForwardList, DWORD dwNumRingsNoAnswer, LPHCALL lphConsultCall, LPLINECALLPARAMS lpCallParams) 00203 { 00204 FIXME("stub.\n"); 00205 return 1; 00206 } 00207 00208 /*********************************************************************** 00209 * lineGatherDigits (TAPI32.@) 00210 */ 00211 DWORD WINAPI lineGatherDigitsA(HCALL hCall, DWORD dwDigitModes, LPSTR lpsDigits, DWORD dwNumDigits, LPCSTR lpszTerminationDigits, DWORD dwFirstDigitTimeout, DWORD dwInterDigitTimeout) 00212 { 00213 FIXME("stub.\n"); 00214 return 0; 00215 } 00216 00217 /*********************************************************************** 00218 * lineGenerateDigits (TAPI32.@) 00219 */ 00220 DWORD WINAPI lineGenerateDigitsA(HCALL hCall, DWORD dwDigitModes, LPCSTR lpszDigits, DWORD dwDuration) 00221 { 00222 FIXME("(%p, %08x, %s, %d): stub.\n", hCall, dwDigitModes, lpszDigits, dwDuration); 00223 return 0; 00224 } 00225 00226 /*********************************************************************** 00227 * lineGenerateTone (TAPI32.@) 00228 */ 00229 DWORD WINAPI lineGenerateTone(HCALL hCall, DWORD dwToneMode, DWORD dwDuration, DWORD dwNumTones, LPLINEGENERATETONE lpTones) 00230 { 00231 FIXME("(%p, %08x, %d, %d, %p): stub.\n", hCall, dwToneMode, dwDuration, dwNumTones, lpTones); 00232 return 0; 00233 } 00234 00235 /*********************************************************************** 00236 * lineGetAddressCaps (TAPI32.@) 00237 */ 00238 DWORD WINAPI lineGetAddressCapsA(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAddressID, DWORD dwAPIVersion, DWORD dwExtVersion, LPLINEADDRESSCAPS lpAddressCaps) 00239 { 00240 FIXME("(%p, %08x, %08x, %08x, %08x, %p): stub.\n", hLineApp, dwDeviceID, dwAddressID, dwAPIVersion, dwExtVersion, lpAddressCaps); 00241 return 0; 00242 } 00243 00244 /*********************************************************************** 00245 * lineGetAddressID (TAPI32.@) 00246 */ 00247 DWORD WINAPI lineGetAddressIDA(HLINE hLine, LPDWORD lpdwAddressID, DWORD dwAddressMode, LPCSTR lpsAddress, DWORD dwSize) 00248 { 00249 FIXME("%p, %p, %08x, %s, %d): stub.\n", hLine, lpdwAddressID, dwAddressMode, lpsAddress, dwSize); 00250 return 0; 00251 } 00252 00253 /*********************************************************************** 00254 * lineGetAddressStatus (TAPI32.@) 00255 */ 00256 DWORD WINAPI lineGetAddressStatusA(HLINE hLine, DWORD dwAddressID, LPLINEADDRESSSTATUS lpAddressStatus) 00257 { 00258 FIXME("(%p, %08x, %p): stub.\n", hLine, dwAddressID, lpAddressStatus); 00259 return 0; 00260 } 00261 00262 /*********************************************************************** 00263 * lineGetAppPriority (TAPI32.@) 00264 */ 00265 DWORD WINAPI lineGetAppPriorityA(LPCSTR lpszAppFilename, DWORD dwMediaMode, LPLINEEXTENSIONID const lpExtensionID, DWORD dwRequestMode, LPVARSTRING lpExtensionName, LPDWORD lpdwPriority) 00266 { 00267 FIXME("(%s, %08x, %p, %08x, %p, %p): stub.\n", lpszAppFilename, dwMediaMode, lpExtensionID, dwRequestMode, lpExtensionName, lpdwPriority); 00268 return 0; 00269 } 00270 00271 /*********************************************************************** 00272 * lineGetCallInfo (TAPI32.@) 00273 */ 00274 DWORD WINAPI lineGetCallInfoA(HCALL hCall, LPLINECALLINFO lpCallInfo) 00275 { 00276 FIXME("(%p, %p): stub.\n", hCall, lpCallInfo); 00277 return 0; 00278 } 00279 00280 /*********************************************************************** 00281 * lineGetCallStatus (TAPI32.@) 00282 */ 00283 DWORD WINAPI lineGetCallStatus(HCALL hCall, LPLINECALLSTATUS lpCallStatus) 00284 { 00285 FIXME("(%p, %p): stub.\n", hCall, lpCallStatus); 00286 return 0; 00287 } 00288 00289 /*********************************************************************** 00290 * lineGetConfRelatedCalls (TAPI32.@) 00291 */ 00292 DWORD WINAPI lineGetConfRelatedCalls(HCALL hCall, LPLINECALLLIST lpCallList) 00293 { 00294 FIXME("(%p, %p): stub.\n", hCall, lpCallList); 00295 return 0; 00296 } 00297 00298 typedef struct tagTAPI_CountryInfo 00299 { 00300 DWORD dwCountryID; 00301 DWORD dwCountryCode; 00302 LPSTR lpCountryName; 00303 LPSTR lpSameAreaRule; 00304 LPSTR lpLongDistanceRule; 00305 LPSTR lpInternationalRule; 00306 } TAPI_CountryInfo; 00307 00308 /*********************************************************************** 00309 * lineGetCountry (TAPI32.@) 00310 */ 00311 DWORD WINAPI lineGetCountryA(DWORD dwCountryID, DWORD dwAPIVersion, LPLINECOUNTRYLIST lpLineCountryList) 00312 { 00313 DWORD dwAvailSize, dwOffset, i, num_countries, max_subkey_len; 00314 LPLINECOUNTRYENTRY lpLCE; 00315 HKEY hkey; 00316 char *subkey_name; 00317 00318 if(!lpLineCountryList) { 00319 TRACE("(%08x, %08x, %p): stub. Returning LINEERR_INVALPOINTER\n", 00320 dwCountryID, dwAPIVersion, lpLineCountryList); 00321 return LINEERR_INVALPOINTER; 00322 } 00323 00324 TRACE("(%08x, %08x, %p(%d)): stub.\n", 00325 dwCountryID, dwAPIVersion, lpLineCountryList, 00326 lpLineCountryList->dwTotalSize); 00327 00328 if(RegOpenKeyA(HKEY_LOCAL_MACHINE, szCountrylistKey, &hkey) 00329 != ERROR_SUCCESS) 00330 return LINEERR_INIFILECORRUPT; 00331 00332 00333 dwAvailSize = lpLineCountryList->dwTotalSize; 00334 dwOffset = sizeof (LINECOUNTRYLIST); 00335 00336 if(dwAvailSize<dwOffset) 00337 return LINEERR_STRUCTURETOOSMALL; 00338 00339 memset(lpLineCountryList, 0, dwAvailSize); 00340 00341 lpLineCountryList->dwTotalSize = dwAvailSize; 00342 lpLineCountryList->dwUsedSize = dwOffset; 00343 lpLineCountryList->dwNumCountries = 0; 00344 lpLineCountryList->dwCountryListSize = 0; 00345 lpLineCountryList->dwCountryListOffset = dwOffset; 00346 00347 lpLCE = (LPLINECOUNTRYENTRY)(&lpLineCountryList[1]); 00348 00349 if(RegQueryInfoKeyA(hkey, NULL, NULL, NULL, &num_countries, &max_subkey_len, 00350 NULL, NULL, NULL, NULL, NULL, NULL) != ERROR_SUCCESS) { 00351 RegCloseKey(hkey); 00352 return LINEERR_STRUCTURETOOSMALL; 00353 } 00354 00355 if(dwCountryID) 00356 dwOffset = sizeof (LINECOUNTRYENTRY); 00357 else 00358 dwOffset += num_countries * sizeof (LINECOUNTRYENTRY); 00359 00360 max_subkey_len++; 00361 subkey_name = HeapAlloc(GetProcessHeap(), 0, max_subkey_len); 00362 for(i = 0; i < num_countries; i++) 00363 { 00364 DWORD len, size, size_int, size_long, size_name, size_same; 00365 HKEY hsubkey; 00366 00367 if(RegEnumKeyA(hkey, i, subkey_name, max_subkey_len) != 00368 ERROR_SUCCESS) 00369 continue; 00370 00371 if(dwCountryID && (atoi(subkey_name) != dwCountryID)) 00372 continue; 00373 00374 if(RegOpenKeyA(hkey, subkey_name, &hsubkey) != ERROR_SUCCESS) 00375 continue; 00376 00377 RegQueryValueExA(hsubkey, "InternationalRule", NULL, NULL, 00378 NULL, &size_int); 00379 len = size_int; 00380 00381 RegQueryValueExA(hsubkey, "LongDistanceRule", NULL, NULL, 00382 NULL, &size_long); 00383 len += size_long; 00384 00385 RegQueryValueExA(hsubkey, "Name", NULL, NULL, 00386 NULL, &size_name); 00387 len += size_name; 00388 00389 RegQueryValueExA(hsubkey, "SameAreaRule", NULL, NULL, 00390 NULL, &size_same); 00391 len += size_same; 00392 00393 if(dwAvailSize < (dwOffset+len)) 00394 { 00395 dwOffset += len; 00396 RegCloseKey(hsubkey); 00397 if(dwCountryID) 00398 break; 00399 continue; 00400 } 00401 00402 lpLineCountryList->dwNumCountries++; 00403 lpLineCountryList->dwCountryListSize += sizeof (LINECOUNTRYENTRY); 00404 lpLineCountryList->dwUsedSize += len + sizeof (LINECOUNTRYENTRY); 00405 00406 if(dwCountryID) 00407 i = 0; 00408 00409 lpLCE[i].dwCountryID = atoi(subkey_name); 00410 size = sizeof(DWORD); 00411 RegQueryValueExA(hsubkey, "CountryCode", NULL, NULL, 00412 (BYTE*)&lpLCE[i].dwCountryCode, &size); 00413 00414 lpLCE[i].dwNextCountryID = 0; 00415 00416 if(i > 0) 00417 lpLCE[i-1].dwNextCountryID = lpLCE[i].dwCountryID; 00418 00419 /* add country name */ 00420 lpLCE[i].dwCountryNameSize = size_name; 00421 lpLCE[i].dwCountryNameOffset = dwOffset; 00422 RegQueryValueExA(hsubkey, "Name", NULL, NULL, 00423 ((LPBYTE)lpLineCountryList)+dwOffset, 00424 &size_name); 00425 dwOffset += size_name; 00426 00427 /* add Same Area Rule */ 00428 lpLCE[i].dwSameAreaRuleSize = size_same; 00429 lpLCE[i].dwSameAreaRuleOffset = dwOffset; 00430 RegQueryValueExA(hsubkey, "SameAreaRule", NULL, NULL, 00431 ((LPBYTE)lpLineCountryList)+dwOffset, 00432 &size_same); 00433 dwOffset += size_same; 00434 00435 /* add Long Distance Rule */ 00436 lpLCE[i].dwLongDistanceRuleSize = size_long; 00437 lpLCE[i].dwLongDistanceRuleOffset = dwOffset; 00438 RegQueryValueExA(hsubkey, "LongDistanceRule", NULL, NULL, 00439 ((LPBYTE)lpLineCountryList)+dwOffset, 00440 &size_long); 00441 dwOffset += size_long; 00442 00443 /* add Long Distance Rule */ 00444 lpLCE[i].dwInternationalRuleSize = size_int; 00445 lpLCE[i].dwInternationalRuleOffset = dwOffset; 00446 RegQueryValueExA(hsubkey, "InternationalRule", NULL, NULL, 00447 ((LPBYTE)lpLineCountryList)+dwOffset, 00448 &size_int); 00449 dwOffset += size_int; 00450 RegCloseKey(hsubkey); 00451 00452 TRACE("Added country %s at %p\n", (LPSTR)lpLineCountryList + lpLCE[i].dwCountryNameOffset, 00453 &lpLCE[i]); 00454 00455 if(dwCountryID) break; 00456 } 00457 00458 lpLineCountryList->dwNeededSize = dwOffset; 00459 00460 TRACE("%d available %d required\n", dwAvailSize, dwOffset); 00461 00462 HeapFree(GetProcessHeap(), 0, subkey_name); 00463 RegCloseKey(hkey); 00464 00465 return 0; 00466 } 00467 00468 /*********************************************************************** 00469 * lineGetDevCapsW (TAPI32.@) 00470 */ 00471 DWORD WINAPI lineGetDevCapsW(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, 00472 DWORD dwExtVersion, LPLINEDEVCAPS lpLineDevCaps) 00473 { 00474 FIXME("(%p, %08x, %08x, %08x, %p): stub.\n", hLineApp, dwDeviceID, dwAPIVersion, 00475 dwExtVersion, lpLineDevCaps); 00476 return LINEERR_OPERATIONFAILED; 00477 } 00478 00479 /*********************************************************************** 00480 * lineGetDevCapsA (TAPI32.@) 00481 */ 00482 DWORD WINAPI lineGetDevCapsA(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, 00483 DWORD dwExtVersion, LPLINEDEVCAPS lpLineDevCaps) 00484 { 00485 FIXME("(%p, %08x, %08x, %08x, %p): stub.\n", hLineApp, dwDeviceID, dwAPIVersion, 00486 dwExtVersion, lpLineDevCaps); 00487 return LINEERR_OPERATIONFAILED; 00488 } 00489 00490 /*********************************************************************** 00491 * lineGetDevConfig (TAPI32.@) 00492 */ 00493 DWORD WINAPI lineGetDevConfigA(DWORD dwDeviceID, LPVARSTRING lpDeviceConfig, LPCSTR lpszDeviceClass) 00494 { 00495 FIXME("(%08x, %p, %s): stub.\n", dwDeviceID, lpDeviceConfig, lpszDeviceClass); 00496 return 0; 00497 } 00498 00499 /*********************************************************************** 00500 * lineGetIDW (TAPI32.@) 00501 */ 00502 DWORD WINAPI lineGetIDW(HLINE hLine, DWORD dwAddressID, HCALL hCall, DWORD dwSelect, 00503 LPVARSTRING lpDeviceID, LPCWSTR lpszDeviceClass) 00504 { 00505 FIXME("(%p, %08x, %p, %08x, %p, %s): stub.\n", hLine, dwAddressID, hCall, 00506 dwSelect, lpDeviceID, 00507 debugstr_w(lpszDeviceClass)); 00508 return LINEERR_OPERATIONFAILED; 00509 } 00510 00511 /*********************************************************************** 00512 * lineGetIDA (TAPI32.@) 00513 */ 00514 DWORD WINAPI lineGetIDA(HLINE hLine, DWORD dwAddressID, HCALL hCall, DWORD dwSelect, 00515 LPVARSTRING lpDeviceID, LPCSTR lpszDeviceClass) 00516 { 00517 FIXME("(%p, %08x, %p, %08x, %p, %s): stub.\n", hLine, dwAddressID, hCall, 00518 dwSelect, lpDeviceID, lpszDeviceClass); 00519 return LINEERR_OPERATIONFAILED; 00520 } 00521 00522 /*********************************************************************** 00523 * lineGetIcon (TAPI32.@) 00524 */ 00525 DWORD WINAPI lineGetIconA(DWORD dwDeviceID, LPCSTR lpszDeviceClass, HICON *lphIcon) 00526 { 00527 FIXME("(%08x, %s, %p): stub.\n", dwDeviceID, lpszDeviceClass, lphIcon); 00528 return 0; 00529 } 00530 00531 /*********************************************************************** 00532 * lineGetLineDevStatus (TAPI32.@) 00533 */ 00534 DWORD WINAPI lineGetLineDevStatusA(HLINE hLine, LPLINEDEVSTATUS lpLineDevStatus) 00535 { 00536 FIXME("(%p, %p): stub.\n", hLine, lpLineDevStatus); 00537 return 0; 00538 } 00539 00540 /*********************************************************************** 00541 * lineGetNewCalls (TAPI32.@) 00542 */ 00543 DWORD WINAPI lineGetNewCalls(HLINE hLine, DWORD dwAddressID, DWORD dwSelect, LPLINECALLLIST lpCallList) 00544 { 00545 FIXME("(%p, %08x, %08x, %p): stub.\n", hLine, dwAddressID, dwSelect, lpCallList); 00546 return 0; 00547 } 00548 00549 /*********************************************************************** 00550 * lineGetNumRings (TAPI32.@) 00551 */ 00552 DWORD WINAPI lineGetNumRings(HLINE hLine, DWORD dwAddressID, LPDWORD lpdwNumRings) 00553 { 00554 FIXME("(%p, %08x, %p): stub.\n", hLine, dwAddressID, lpdwNumRings); 00555 return 0; 00556 } 00557 00558 /*********************************************************************** 00559 * lineGetProviderListA (TAPI32.@) 00560 */ 00561 DWORD WINAPI lineGetProviderListA(DWORD dwAPIVersion, LPLINEPROVIDERLIST lpProviderList) 00562 { 00563 FIXME("(%08x, %p): stub.\n", dwAPIVersion, lpProviderList); 00564 return LINEERR_OPERATIONFAILED; 00565 } 00566 00567 /*********************************************************************** 00568 * lineGetProviderListW (TAPI32.@) 00569 */ 00570 DWORD WINAPI lineGetProviderListW(DWORD dwAPIVersion, LPLINEPROVIDERLIST lpProviderList) 00571 { 00572 FIXME("(%08x, %p): stub.\n", dwAPIVersion, lpProviderList); 00573 return LINEERR_OPERATIONFAILED; 00574 } 00575 00576 /*********************************************************************** 00577 * lineGetRequest (TAPI32.@) 00578 */ 00579 DWORD WINAPI lineGetRequestA(HLINEAPP hLineApp, DWORD dwRequestMode, LPVOID lpRequestBuffer) 00580 { 00581 FIXME("%p, %08x, %p): stub.\n", hLineApp, dwRequestMode, lpRequestBuffer); 00582 return 0; 00583 } 00584 00585 /*********************************************************************** 00586 * lineGetStatusMessages (TAPI32.@) 00587 */ 00588 DWORD WINAPI lineGetStatusMessages(HLINE hLine, LPDWORD lpdwLineStatus, LPDWORD lpdwAddressStates) 00589 { 00590 FIXME("(%p, %p, %p): stub.\n", hLine, lpdwLineStatus, lpdwAddressStates); 00591 return 0; 00592 } 00593 00594 /*********************************************************************** 00595 * lineGetTranslateCaps (TAPI32.@) 00596 * 00597 * get address translate capabilities. Returns a LINETRANSLATECAPS 00598 * structure: 00599 * 00600 * +-----------------------+ 00601 * |TotalSize | 00602 * |NeededSize | 00603 * |UsedSize | 00604 * +-----------------------+ 00605 * |NumLocations | 00606 * |LocationsListSize | 00607 * |LocationsListOffset | -+ 00608 * |CurrentLocationID | | 00609 * +-----------------------+ | 00610 * |NumCards | | 00611 * |CardListSize | | 00612 * |CardListOffset | -|--+ 00613 * |CurrentPreferredCardID | | | 00614 * +-----------------------+ | | 00615 * | | <+ | 00616 * |LINELOCATIONENTRY #1 | | 00617 * | | | 00618 * +-----------------------+ | 00619 * ~ ~ | 00620 * +-----------------------+ | 00621 * | | | 00622 * |LINELOCATIONENTRY | | 00623 * | #NumLocations| | 00624 * +-----------------------+ | 00625 * | | <---+ 00626 * |LINECARDENTRY #1 | 00627 * | | 00628 * +-----------------------+ 00629 * ~ ~ 00630 * +-----------------------+ 00631 * | | 00632 * |LINECARDENTRY #NumCards| 00633 * | | 00634 * +-----------------------+ 00635 * | room for strings named| 00636 * | in the structures | 00637 * | above. | 00638 * +-----------------------+ 00639 */ 00640 DWORD WINAPI lineGetTranslateCapsA(HLINEAPP hLineApp, DWORD dwAPIVersion, 00641 LPLINETRANSLATECAPS lpTranslateCaps) 00642 { 00643 HKEY hkLocations, hkCards, hkCardLocations, hsubkey; 00644 int numlocations, numcards; 00645 DWORD maxlockeylen, 00646 maxcardkeylen; 00647 char *loc_key_name = NULL; 00648 char *card_key_name = NULL; 00649 LPBYTE strptr; 00650 int length; 00651 int i; 00652 DWORD lendword; 00653 DWORD currentid; 00654 LPLINELOCATIONENTRY pLocEntry; 00655 LPLINECARDENTRY pCardEntry; 00656 00657 TRACE("(%p, %08x, %p (tot. size %d)\n", hLineApp, dwAPIVersion, 00658 lpTranslateCaps, lpTranslateCaps->dwTotalSize ); 00659 if( lpTranslateCaps->dwTotalSize < sizeof(LINETRANSLATECAPS)) 00660 return LINEERR_STRUCTURETOOSMALL; 00661 if( RegCreateKeyA(HKEY_LOCAL_MACHINE, szLocationsKey, &hkLocations) 00662 != ERROR_SUCCESS ) { 00663 ERR("unexpected registry error 1.\n"); 00664 return LINEERR_INIFILECORRUPT; 00665 } 00666 lendword = sizeof( DWORD); 00667 if( RegQueryValueExA( hkLocations, "CurrentID", NULL, NULL, 00668 (LPBYTE) ¤tid, &lendword) != ERROR_SUCCESS ) 00669 currentid = -1; /* change this later */ 00670 if(RegQueryInfoKeyA(hkLocations, NULL, NULL, NULL, NULL, &maxlockeylen, 00671 NULL, NULL, NULL, NULL, NULL, NULL) != ERROR_SUCCESS) { 00672 RegCloseKey(hkLocations); 00673 ERR("unexpected registry error 2.\n"); 00674 return LINEERR_INIFILECORRUPT; 00675 } 00676 maxlockeylen++; 00677 if( maxlockeylen < 10) 00678 maxlockeylen = 10; /* need this also if there is no key */ 00679 loc_key_name = HeapAlloc( GetProcessHeap(), 0, maxlockeylen); 00680 /* first time through: calculate needed space */ 00681 length=0; 00682 i=0; 00683 numlocations=0; 00684 while( RegEnumKeyA(hkLocations, i, loc_key_name, maxlockeylen) 00685 == ERROR_SUCCESS){ 00686 DWORD size_val; 00687 i++; 00688 if( strncasecmp(loc_key_name, "location", 8) || 00689 (RegOpenKeyA(hkLocations, loc_key_name, &hsubkey) 00690 != ERROR_SUCCESS)) 00691 continue; 00692 numlocations++; 00693 length += sizeof(LINELOCATIONENTRY); 00694 RegQueryValueExA(hsubkey, "Name",NULL,NULL,NULL,&size_val); 00695 length += size_val; 00696 RegQueryValueExA(hsubkey, "AreaCode",NULL,NULL,NULL,&size_val); 00697 length += size_val; 00698 RegQueryValueExA(hsubkey, "OutsideAccess",NULL,NULL,NULL,&size_val); 00699 length += size_val; 00700 RegQueryValueExA(hsubkey, "LongDistanceAccess",NULL,NULL,NULL,&size_val); 00701 length += size_val; 00702 RegQueryValueExA(hsubkey, "DisableCallWaiting",NULL,NULL,NULL,&size_val); 00703 length += size_val; 00704 /* fixme: what about TollPrefixList???? */ 00705 RegCloseKey(hsubkey); 00706 } 00707 if(numlocations == 0) { 00708 /* add one location */ 00709 if( RegCreateKeyA( hkLocations, "Location1", &hsubkey) 00710 == ERROR_SUCCESS) { 00711 DWORD dwval; 00712 char buf[10]; 00713 numlocations = 1; 00714 length += sizeof(LINELOCATIONENTRY) + 20 ; 00715 RegSetValueExA( hsubkey, "AreaCode", 0, REG_SZ, (const BYTE *)"010", 4); 00716 GetLocaleInfoA( LOCALE_SYSTEM_DEFAULT, LOCALE_ICOUNTRY, buf, 8); 00717 dwval = atoi(buf); 00718 RegSetValueExA( hsubkey, "Country", 0, REG_DWORD, (LPBYTE)&dwval, 00719 sizeof(DWORD)); 00720 RegSetValueExA( hsubkey, "DisableCallWaiting", 0, REG_SZ, (const BYTE *)"", 1); 00721 dwval = 1; 00722 RegSetValueExA( hsubkey, "Flags", 0, REG_DWORD, (LPBYTE)&dwval, 00723 sizeof(DWORD)); 00724 RegSetValueExA( hsubkey, "LongDistanceAccess", 0, REG_SZ, (const BYTE *)"", 1); 00725 RegSetValueExA( hsubkey, "Name", 0, REG_SZ, (const BYTE *)"New Location", 13); 00726 RegSetValueExA( hsubkey, "OutsideAccess", 0, REG_SZ, (const BYTE *)"", 1); 00727 RegCloseKey(hsubkey); 00728 dwval = 1; 00729 RegSetValueExA( hkLocations, "CurrentID", 0, REG_DWORD, 00730 (LPBYTE)&dwval, sizeof(DWORD)); 00731 dwval = 2; 00732 RegSetValueExA( hkLocations, "NextID", 0, REG_DWORD, (LPBYTE)&dwval, 00733 sizeof(DWORD)); 00734 } 00735 } 00736 /* do the card list */ 00737 numcards=0; 00738 if( RegCreateKeyA(HKEY_CURRENT_USER, szCardsKey, &hkCards) 00739 == ERROR_SUCCESS ) { 00740 if(RegQueryInfoKeyA(hkCards, NULL, NULL, NULL, NULL, &maxcardkeylen, 00741 NULL, NULL, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) { 00742 maxcardkeylen++; 00743 if( maxcardkeylen < 6) maxcardkeylen = 6; 00744 card_key_name = HeapAlloc(GetProcessHeap(), 0, maxcardkeylen); 00745 i=0; 00746 while( RegEnumKeyA(hkCards, i, card_key_name, maxcardkeylen) == 00747 ERROR_SUCCESS){ 00748 DWORD size_val; 00749 i++; 00750 if( strncasecmp(card_key_name, "card", 4) || ERROR_SUCCESS != 00751 (RegOpenKeyA(hkCards, card_key_name, &hsubkey) )) 00752 continue; 00753 numcards++; 00754 length += sizeof(LINECARDENTRY); 00755 RegQueryValueExA(hsubkey, "Name",NULL,NULL,NULL,&size_val); 00756 length += size_val; 00757 RegQueryValueExA(hsubkey, "LocalRule",NULL,NULL,NULL,&size_val); 00758 length += size_val; 00759 RegQueryValueExA(hsubkey, "LDRule",NULL,NULL,NULL,&size_val); 00760 length += size_val; 00761 RegQueryValueExA(hsubkey, "InternationalRule",NULL,NULL,NULL, 00762 &size_val); 00763 length += size_val; 00764 RegCloseKey(hsubkey); 00765 } 00766 } 00767 /* add one card (direct call) */ 00768 if (numcards == 0 && 00769 ERROR_SUCCESS == RegCreateKeyA( hkCards, "Card1", &hsubkey)) { 00770 DWORD dwval; 00771 numcards = 1; 00772 length += sizeof(LINECARDENTRY) + 22 ; 00773 RegSetValueExA( hsubkey, "Name", 0, REG_SZ, (const BYTE *)"None (Direct Call)", 19); 00774 dwval = 1; 00775 RegSetValueExA( hsubkey, "Flags", 0, REG_DWORD, (LPBYTE)&dwval, 00776 sizeof(DWORD)); 00777 RegSetValueExA( hsubkey, "InternationalRule", 0, REG_SZ, (const BYTE *)"", 1); 00778 RegSetValueExA( hsubkey, "LDRule", 0, REG_SZ, (const BYTE *)"", 1); 00779 RegSetValueExA( hsubkey, "LocalRule", 0, REG_SZ, (const BYTE *)"", 1); 00780 RegCloseKey(hsubkey); 00781 dwval = 2; 00782 RegSetValueExA( hkCards, "NextID", 0, REG_DWORD, (LPBYTE)&dwval, 00783 sizeof(DWORD)); 00784 } 00785 } else hkCards = 0; /* should really fail */ 00786 /* check if sufficient room is available */ 00787 lpTranslateCaps->dwNeededSize = sizeof(LINETRANSLATECAPS) + length; 00788 if ( lpTranslateCaps->dwNeededSize > lpTranslateCaps->dwTotalSize ) { 00789 RegCloseKey( hkLocations); 00790 if( hkCards) RegCloseKey( hkCards); 00791 HeapFree(GetProcessHeap(), 0, loc_key_name); 00792 HeapFree(GetProcessHeap(), 0, card_key_name); 00793 lpTranslateCaps->dwUsedSize = sizeof(LINETRANSLATECAPS); 00794 TRACE("Insufficient space: total %d needed %d used %d\n", 00795 lpTranslateCaps->dwTotalSize, 00796 lpTranslateCaps->dwNeededSize, 00797 lpTranslateCaps->dwUsedSize); 00798 return 0; 00799 } 00800 /* fill in the LINETRANSLATECAPS structure */ 00801 lpTranslateCaps->dwUsedSize = lpTranslateCaps->dwNeededSize; 00802 lpTranslateCaps->dwNumLocations = numlocations; 00803 lpTranslateCaps->dwLocationListSize = sizeof(LINELOCATIONENTRY) * 00804 lpTranslateCaps->dwNumLocations; 00805 lpTranslateCaps->dwLocationListOffset = sizeof(LINETRANSLATECAPS); 00806 lpTranslateCaps->dwCurrentLocationID = currentid; 00807 lpTranslateCaps->dwNumCards = numcards; 00808 lpTranslateCaps->dwCardListSize = sizeof(LINECARDENTRY) * 00809 lpTranslateCaps->dwNumCards; 00810 lpTranslateCaps->dwCardListOffset = lpTranslateCaps->dwLocationListOffset + 00811 lpTranslateCaps->dwLocationListSize; 00812 lpTranslateCaps->dwCurrentPreferredCardID = 0; 00813 /* this is where the strings will be stored */ 00814 strptr = ((LPBYTE) lpTranslateCaps) + 00815 lpTranslateCaps->dwCardListOffset + lpTranslateCaps->dwCardListSize; 00816 pLocEntry = (LPLINELOCATIONENTRY) (lpTranslateCaps + 1); 00817 /* key with Preferred CardID's */ 00818 if( RegOpenKeyA(HKEY_CURRENT_USER, szLocationsKey, &hkCardLocations) 00819 != ERROR_SUCCESS ) 00820 hkCardLocations = 0; 00821 /* second time through all locations */ 00822 i=0; 00823 while(RegEnumKeyA(hkLocations, i, loc_key_name, maxlockeylen) 00824 == ERROR_SUCCESS){ 00825 DWORD size_val; 00826 i++; 00827 if( strncasecmp(loc_key_name, "location", 8) || 00828 (RegOpenKeyA(hkLocations, loc_key_name, &hsubkey) 00829 != ERROR_SUCCESS)) 00830 continue; 00831 size_val=sizeof(DWORD); 00832 if( RegQueryValueExA(hsubkey, "ID",NULL, NULL, 00833 (LPBYTE) &(pLocEntry->dwPermanentLocationID), &size_val) != 00834 ERROR_SUCCESS) 00835 pLocEntry->dwPermanentLocationID = atoi( loc_key_name + 8); 00836 size_val=2048; 00837 RegQueryValueExA(hsubkey, "Name",NULL,NULL, strptr, &size_val); 00838 pLocEntry->dwLocationNameSize = size_val; 00839 pLocEntry->dwLocationNameOffset = strptr - (LPBYTE) lpTranslateCaps; 00840 strptr += size_val; 00841 00842 size_val=2048; 00843 RegQueryValueExA(hsubkey, "AreaCode",NULL,NULL, strptr, &size_val); 00844 pLocEntry->dwCityCodeSize = size_val; 00845 pLocEntry->dwCityCodeOffset = strptr - (LPBYTE) lpTranslateCaps; 00846 strptr += size_val; 00847 00848 size_val=2048; 00849 RegQueryValueExA(hsubkey, "OutsideAccess",NULL,NULL, strptr, &size_val); 00850 pLocEntry->dwLocalAccessCodeSize = size_val; 00851 pLocEntry->dwLocalAccessCodeOffset = strptr - (LPBYTE) lpTranslateCaps; 00852 strptr += size_val; 00853 size_val=2048; 00854 RegQueryValueExA(hsubkey, "LongDistanceAccess",NULL,NULL, strptr, 00855 &size_val); 00856 pLocEntry->dwLongDistanceAccessCodeSize= size_val; 00857 pLocEntry->dwLongDistanceAccessCodeOffset= strptr - 00858 (LPBYTE) lpTranslateCaps; 00859 strptr += size_val; 00860 size_val=2048; 00861 RegQueryValueExA(hsubkey, "DisableCallWaiting",NULL,NULL, strptr, 00862 &size_val); 00863 pLocEntry->dwCancelCallWaitingSize= size_val; 00864 pLocEntry->dwCancelCallWaitingOffset= strptr - (LPBYTE) lpTranslateCaps; 00865 strptr += size_val; 00866 00867 pLocEntry->dwTollPrefixListSize = 0; /* FIXME */ 00868 pLocEntry->dwTollPrefixListOffset = 0; /* FIXME */ 00869 00870 size_val=sizeof(DWORD); 00871 RegQueryValueExA(hsubkey, "Country",NULL,NULL, 00872 (LPBYTE) &(pLocEntry->dwCountryCode), &size_val); 00873 pLocEntry->dwCountryID = pLocEntry->dwCountryCode; /* FIXME */ 00874 RegQueryValueExA(hsubkey, "Flags",NULL,NULL, 00875 (LPBYTE) &(pLocEntry->dwOptions), &size_val); 00876 RegCloseKey(hsubkey); 00877 /* get preferred cardid */ 00878 pLocEntry->dwPreferredCardID = 0; 00879 if ( hkCardLocations) { 00880 size_val=sizeof(DWORD); 00881 if(RegOpenKeyA(hkCardLocations, loc_key_name, &hsubkey) == 00882 ERROR_SUCCESS) { 00883 RegQueryValueExA(hsubkey, "CallingCard",NULL,NULL, 00884 (LPBYTE) &(pLocEntry->dwPreferredCardID), &size_val); 00885 RegCloseKey(hsubkey); 00886 } 00887 00888 } 00889 /* make sure there is a currentID */ 00890 if(currentid == -1){ 00891 currentid = pLocEntry->dwPermanentLocationID; 00892 lpTranslateCaps->dwCurrentLocationID = currentid; 00893 } 00894 if(pLocEntry->dwPermanentLocationID == currentid ) 00895 lpTranslateCaps->dwCurrentPreferredCardID = 00896 pLocEntry->dwPreferredCardID; 00897 TRACE("added: ID %d %s CountryCode %d CityCode %s CardID %d " 00898 "LocalAccess: %s LongDistanceAccess: %s CountryID %d " 00899 "Options %d CancelCallWait %s\n", 00900 pLocEntry->dwPermanentLocationID, 00901 debugstr_a( (char*)lpTranslateCaps + pLocEntry->dwLocationNameOffset), 00902 pLocEntry->dwCountryCode, 00903 debugstr_a( (char*)lpTranslateCaps + pLocEntry->dwCityCodeOffset), 00904 pLocEntry->dwPreferredCardID, 00905 debugstr_a( (char*)lpTranslateCaps + pLocEntry->dwLocalAccessCodeOffset), 00906 debugstr_a( (char*)lpTranslateCaps + pLocEntry->dwLongDistanceAccessCodeOffset), 00907 pLocEntry->dwCountryID, 00908 pLocEntry->dwOptions, 00909 debugstr_a( (char*)lpTranslateCaps + pLocEntry->dwCancelCallWaitingOffset)); 00910 pLocEntry++; 00911 } 00912 pCardEntry= (LPLINECARDENTRY) pLocEntry; 00913 /* do the card list */ 00914 if( hkCards) { 00915 i=0; 00916 while( RegEnumKeyA(hkCards, i, card_key_name, maxcardkeylen) == 00917 ERROR_SUCCESS){ 00918 DWORD size_val; 00919 i++; 00920 if( strncasecmp(card_key_name, "card", 4) || 00921 (RegOpenKeyA(hkCards, card_key_name, &hsubkey) != ERROR_SUCCESS)) 00922 continue; 00923 size_val=sizeof(DWORD); 00924 if( RegQueryValueExA(hsubkey, "ID",NULL, NULL, 00925 (LPBYTE) &(pCardEntry->dwPermanentCardID), &size_val) != 00926 ERROR_SUCCESS) 00927 pCardEntry->dwPermanentCardID= atoi( card_key_name + 4); 00928 size_val=2048; 00929 RegQueryValueExA(hsubkey, "Name",NULL,NULL, strptr, &size_val); 00930 pCardEntry->dwCardNameSize = size_val; 00931 pCardEntry->dwCardNameOffset = strptr - (LPBYTE) lpTranslateCaps; 00932 strptr += size_val; 00933 pCardEntry->dwCardNumberDigits = 1; /* FIXME */ 00934 size_val=2048; 00935 RegQueryValueExA(hsubkey, "LocalRule",NULL,NULL, strptr, &size_val); 00936 pCardEntry->dwSameAreaRuleSize= size_val; 00937 pCardEntry->dwSameAreaRuleOffset= strptr - (LPBYTE) lpTranslateCaps; 00938 strptr += size_val; 00939 size_val=2048; 00940 RegQueryValueExA(hsubkey, "LDRule",NULL,NULL, strptr, &size_val); 00941 pCardEntry->dwLongDistanceRuleSize = size_val; 00942 pCardEntry->dwLongDistanceRuleOffset = strptr - (LPBYTE) lpTranslateCaps; 00943 strptr += size_val; 00944 size_val=2048; 00945 RegQueryValueExA(hsubkey, "InternationalRule",NULL,NULL, strptr, 00946 &size_val); 00947 pCardEntry->dwInternationalRuleSize = size_val; 00948 pCardEntry->dwInternationalRuleOffset = strptr - 00949 (LPBYTE) lpTranslateCaps; 00950 strptr += size_val; 00951 size_val=sizeof(DWORD); 00952 RegQueryValueExA(hsubkey, "Flags",NULL, NULL, 00953 (LPBYTE) &(pCardEntry->dwOptions), &size_val); 00954 TRACE( "added card: ID %d name %s SameArea %s LongDistance %s International %s Options 0x%x\n", 00955 pCardEntry->dwPermanentCardID, 00956 debugstr_a( (char*)lpTranslateCaps + pCardEntry->dwCardNameOffset), 00957 debugstr_a( (char*)lpTranslateCaps + pCardEntry->dwSameAreaRuleOffset), 00958 debugstr_a( (char*)lpTranslateCaps + pCardEntry->dwLongDistanceRuleOffset), 00959 debugstr_a( (char*)lpTranslateCaps + pCardEntry->dwInternationalRuleOffset), 00960 pCardEntry->dwOptions); 00961 00962 pCardEntry++; 00963 } 00964 } 00965 00966 if(hkLocations) RegCloseKey(hkLocations); 00967 if(hkCards) RegCloseKey(hkCards); 00968 if(hkCardLocations) RegCloseKey(hkCardLocations); 00969 HeapFree(GetProcessHeap(), 0, loc_key_name); 00970 HeapFree(GetProcessHeap(), 0, card_key_name); 00971 TRACE(" returning success tot %d needed %d used %d\n", 00972 lpTranslateCaps->dwTotalSize, 00973 lpTranslateCaps->dwNeededSize, 00974 lpTranslateCaps->dwUsedSize ); 00975 return 0; /* success */ 00976 } 00977 00978 /*********************************************************************** 00979 * lineHandoff (TAPI32.@) 00980 */ 00981 DWORD WINAPI lineHandoffA(HCALL hCall, LPCSTR lpszFileName, DWORD dwMediaMode) 00982 { 00983 FIXME("(%p, %s, %08x): stub.\n", hCall, lpszFileName, dwMediaMode); 00984 return 0; 00985 } 00986 00987 /*********************************************************************** 00988 * lineHold (TAPI32.@) 00989 */ 00990 DWORD WINAPI lineHold(HCALL hCall) 00991 { 00992 FIXME("(%p): stub.\n", hCall); 00993 return 1; 00994 } 00995 00996 /*********************************************************************** 00997 * lineInitialize (TAPI32.@) 00998 */ 00999 DWORD WINAPI lineInitialize( 01000 LPHLINEAPP lphLineApp, 01001 HINSTANCE hInstance, 01002 LINECALLBACK lpfnCallback, 01003 LPCSTR lpszAppName, 01004 LPDWORD lpdwNumDevs) 01005 { 01006 FIXME("(%p, %p, %p, %s, %p): stub.\n", lphLineApp, hInstance, 01007 lpfnCallback, debugstr_a(lpszAppName), lpdwNumDevs); 01008 return 0; 01009 } 01010 01011 /*********************************************************************** 01012 * lineInitializeExA (TAPI32.@) 01013 */ 01014 LONG WINAPI lineInitializeExA(LPHLINEAPP lphLineApp, HINSTANCE hInstance, LINECALLBACK lpfnCallback, LPCSTR lpszFriendlyAppName, LPDWORD lpdwNumDevs, LPDWORD lpdwAPIVersion, LPLINEINITIALIZEEXPARAMS lpLineInitializeExParams) 01015 { 01016 FIXME("(%p, %p, %p, %s, %p, %p, %p): stub.\n", lphLineApp, hInstance, 01017 lpfnCallback, debugstr_a(lpszFriendlyAppName), lpdwNumDevs, lpdwAPIVersion, lpLineInitializeExParams); 01018 return 0; 01019 } 01020 01021 /*********************************************************************** 01022 * lineMakeCallW (TAPI32.@) 01023 */ 01024 DWORD WINAPI lineMakeCallW(HLINE hLine, LPHCALL lphCall, LPCWSTR lpszDestAddress, 01025 DWORD dwCountryCode, LPLINECALLPARAMS lpCallParams) 01026 { 01027 FIXME("(%p, %p, %s, %08x, %p): stub.\n", hLine, lphCall, debugstr_w(lpszDestAddress), 01028 dwCountryCode, lpCallParams); 01029 return LINEERR_OPERATIONFAILED; 01030 } 01031 01032 /*********************************************************************** 01033 * lineMakeCallA (TAPI32.@) 01034 */ 01035 DWORD WINAPI lineMakeCallA(HLINE hLine, LPHCALL lphCall, LPCSTR lpszDestAddress, 01036 DWORD dwCountryCode, LPLINECALLPARAMS lpCallParams) 01037 { 01038 FIXME("(%p, %p, %s, %08x, %p): stub.\n", hLine, lphCall, lpszDestAddress, 01039 dwCountryCode, lpCallParams); 01040 return LINEERR_OPERATIONFAILED; 01041 } 01042 01043 /*********************************************************************** 01044 * lineMonitorDigits (TAPI32.@) 01045 */ 01046 DWORD WINAPI lineMonitorDigits(HCALL hCall, DWORD dwDigitModes) 01047 { 01048 FIXME("(%p, %08x): stub.\n", hCall, dwDigitModes); 01049 return 0; 01050 } 01051 01052 /*********************************************************************** 01053 * lineMonitorMedia (TAPI32.@) 01054 */ 01055 DWORD WINAPI lineMonitorMedia(HCALL hCall, DWORD dwMediaModes) 01056 { 01057 FIXME("(%p, %08x): stub.\n", hCall, dwMediaModes); 01058 return 0; 01059 } 01060 01061 /*********************************************************************** 01062 * lineMonitorTones (TAPI32.@) 01063 */ 01064 DWORD WINAPI lineMonitorTones(HCALL hCall, LPLINEMONITORTONE lpToneList, DWORD dwNumEntries) 01065 { 01066 FIXME("(%p, %p, %08x): stub.\n", hCall, lpToneList, dwNumEntries); 01067 return 0; 01068 } 01069 01070 /*********************************************************************** 01071 * lineNegotiateAPIVersion (TAPI32.@) 01072 */ 01073 DWORD WINAPI lineNegotiateAPIVersion( 01074 HLINEAPP hLineApp, 01075 DWORD dwDeviceID, 01076 DWORD dwAPILowVersion, 01077 DWORD dwAPIHighVersion, 01078 LPDWORD lpdwAPIVersion, 01079 LPLINEEXTENSIONID lpExtensionID 01080 ) 01081 { 01082 FIXME("(%p, %d, %d, %d, %p, %p): stub.\n", hLineApp, dwDeviceID, 01083 dwAPILowVersion, dwAPIHighVersion, lpdwAPIVersion, lpExtensionID); 01084 *lpdwAPIVersion = dwAPIHighVersion; 01085 return 0; 01086 } 01087 01088 /*********************************************************************** 01089 * lineNegotiateExtVersion (TAPI32.@) 01090 */ 01091 DWORD WINAPI lineNegotiateExtVersion(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, DWORD dwExtLowVersion, DWORD dwExtHighVersion, LPDWORD lpdwExtVersion) 01092 { 01093 FIXME("stub.\n"); 01094 return 0; 01095 } 01096 01097 /*********************************************************************** 01098 * lineOpen (TAPI32.@) 01099 */ 01100 DWORD WINAPI lineOpenA(HLINEAPP hLineApp, DWORD dwDeviceID, LPHLINE lphLine, DWORD dwAPIVersion, DWORD dwExtVersion, DWORD dwCallbackInstance, DWORD dwPrivileges, DWORD dwMediaModes, LPLINECALLPARAMS lpCallParams) 01101 { 01102 FIXME("stub.\n"); 01103 return 0; 01104 } 01105 01106 /*********************************************************************** 01107 * linePark (TAPI32.@) 01108 */ 01109 DWORD WINAPI lineParkA(HCALL hCall, DWORD dwParkMode, LPCSTR lpszDirAddress, LPVARSTRING lpNonDirAddress) 01110 { 01111 FIXME("(%p, %08x, %s, %p): stub.\n", hCall, dwParkMode, lpszDirAddress, lpNonDirAddress); 01112 return 1; 01113 } 01114 01115 /*********************************************************************** 01116 * linePickup (TAPI32.@) 01117 */ 01118 DWORD WINAPI linePickupA(HLINE hLine, DWORD dwAddressID, LPHCALL lphCall, LPCSTR lpszDestAddress, LPCSTR lpszGroupID) 01119 { 01120 FIXME("(%p, %08x, %p, %s, %s): stub.\n", hLine, dwAddressID, lphCall, lpszDestAddress, lpszGroupID); 01121 return 1; 01122 } 01123 01124 /*********************************************************************** 01125 * linePrepareAddToConference (TAPI32.@) 01126 */ 01127 DWORD WINAPI linePrepareAddToConferenceA(HCALL hConfCall, LPHCALL lphConsultCall, LPLINECALLPARAMS lpCallParams) 01128 { 01129 FIXME("(%p, %p, %p): stub.\n", hConfCall, lphConsultCall, lpCallParams); 01130 return 1; 01131 } 01132 01133 /*********************************************************************** 01134 * lineRedirect (TAPI32.@) 01135 */ 01136 DWORD WINAPI lineRedirectA( 01137 HCALL hCall, 01138 LPCSTR lpszDestAddress, 01139 DWORD dwCountryCode) { 01140 01141 FIXME(": stub.\n"); 01142 return 1; 01143 } 01144 01145 /*********************************************************************** 01146 * lineRegisterRequestRecipient (TAPI32.@) 01147 */ 01148 DWORD WINAPI lineRegisterRequestRecipient(HLINEAPP hLineApp, DWORD dwRegistrationInstance, DWORD dwRequestMode, DWORD dwEnable) 01149 { 01150 FIXME("(%p, %08x, %08x, %08x): stub.\n", hLineApp, dwRegistrationInstance, dwRequestMode, dwEnable); 01151 return 1; 01152 } 01153 01154 /*********************************************************************** 01155 * lineReleaseUserUserInfo (TAPI32.@) 01156 */ 01157 DWORD WINAPI lineReleaseUserUserInfo(HCALL hCall) 01158 { 01159 FIXME("(%p): stub.\n", hCall); 01160 return 1; 01161 } 01162 01163 /*********************************************************************** 01164 * lineRemoveFromConference (TAPI32.@) 01165 */ 01166 DWORD WINAPI lineRemoveFromConference(HCALL hCall) 01167 { 01168 FIXME("(%p): stub.\n", hCall); 01169 return 1; 01170 } 01171 01172 /*********************************************************************** 01173 * lineRemoveProvider (TAPI32.@) 01174 */ 01175 DWORD WINAPI lineRemoveProvider(DWORD dwPermanentProviderID, HWND hwndOwner) 01176 { 01177 FIXME("(%08x, %p): stub.\n", dwPermanentProviderID, hwndOwner); 01178 return 1; 01179 } 01180 01181 /*********************************************************************** 01182 * lineSecureCall (TAPI32.@) 01183 */ 01184 DWORD WINAPI lineSecureCall(HCALL hCall) 01185 { 01186 FIXME("(%p): stub.\n", hCall); 01187 return 1; 01188 } 01189 01190 /*********************************************************************** 01191 * lineSendUserUserInfo (TAPI32.@) 01192 */ 01193 DWORD WINAPI lineSendUserUserInfo(HCALL hCall, LPCSTR lpsUserUserInfo, DWORD dwSize) 01194 { 01195 FIXME("(%p, %s, %08x): stub.\n", hCall, lpsUserUserInfo, dwSize); 01196 return 1; 01197 } 01198 01199 /*********************************************************************** 01200 * lineSetAppPriority (TAPI32.@) 01201 */ 01202 DWORD WINAPI lineSetAppPriorityA(LPCSTR lpszAppFilename, DWORD dwMediaMode, LPLINEEXTENSIONID const lpExtensionID, DWORD dwRequestMode, LPCSTR lpszExtensionName, DWORD dwPriority) 01203 { 01204 FIXME("(%s, %08x, %p, %08x, %s, %08x): stub.\n", lpszAppFilename, dwMediaMode, lpExtensionID, dwRequestMode, lpszExtensionName, dwPriority); 01205 return 0; 01206 } 01207 01208 /*********************************************************************** 01209 * lineSetAppSpecific (TAPI32.@) 01210 */ 01211 DWORD WINAPI lineSetAppSpecific(HCALL hCall, DWORD dwAppSpecific) 01212 { 01213 FIXME("(%p, %08x): stub.\n", hCall, dwAppSpecific); 01214 return 0; 01215 } 01216 01217 /*********************************************************************** 01218 * lineSetCallParams (TAPI32.@) 01219 */ 01220 DWORD WINAPI lineSetCallParams(HCALL hCall, DWORD dwBearerMode, DWORD dwMinRate, DWORD dwMaxRate, LPLINEDIALPARAMS lpDialParams) 01221 { 01222 FIXME("(%p, %08x, %08x, %08x, %p): stub.\n", hCall, dwBearerMode, dwMinRate, dwMaxRate, lpDialParams); 01223 return 1; 01224 } 01225 01226 /*********************************************************************** 01227 * lineSetCallPrivilege (TAPI32.@) 01228 */ 01229 DWORD WINAPI lineSetCallPrivilege(HCALL hCall, DWORD dwCallPrivilege) 01230 { 01231 FIXME("(%p, %08x): stub.\n", hCall, dwCallPrivilege); 01232 return 0; 01233 } 01234 01235 /*********************************************************************** 01236 * lineSetCurrentLocation (TAPI32.@) 01237 */ 01238 DWORD WINAPI lineSetCurrentLocation(HLINEAPP hLineApp, DWORD dwLocation) 01239 { 01240 FIXME("(%p, %08x): stub.\n", hLineApp, dwLocation); 01241 return 0; 01242 } 01243 01244 /*********************************************************************** 01245 * lineSetDevConfig (TAPI32.@) 01246 */ 01247 DWORD WINAPI lineSetDevConfigA(DWORD dwDeviceID, LPVOID lpDeviceConfig, DWORD dwSize, LPCSTR lpszDeviceClass) 01248 { 01249 FIXME("(%08x, %p, %08x, %s): stub.\n", dwDeviceID, lpDeviceConfig, dwSize, lpszDeviceClass); 01250 return 0; 01251 } 01252 01253 /*********************************************************************** 01254 * lineSetMediaControl (TAPI32.@) 01255 */ 01256 DWORD WINAPI lineSetMediaControl( 01257 HLINE hLine, 01258 DWORD dwAddressID, 01259 HCALL hCall, 01260 DWORD dwSelect, 01261 LPLINEMEDIACONTROLDIGIT const lpDigitList, 01262 DWORD dwDigitNumEntries, 01263 LPLINEMEDIACONTROLMEDIA const lpMediaList, 01264 DWORD dwMediaNumEntries, 01265 LPLINEMEDIACONTROLTONE const lpToneList, 01266 DWORD dwToneNumEntries, 01267 LPLINEMEDIACONTROLCALLSTATE const lpCallStateList, 01268 DWORD dwCallStateNumEntries) 01269 { 01270 FIXME(": stub.\n"); 01271 return 0; 01272 } 01273 01274 /*********************************************************************** 01275 * lineSetMediaMode (TAPI32.@) 01276 */ 01277 DWORD WINAPI lineSetMediaMode(HCALL hCall, DWORD dwMediaModes) 01278 { 01279 FIXME("(%p, %08x): stub.\n", hCall, dwMediaModes); 01280 return 0; 01281 } 01282 01283 /*********************************************************************** 01284 * lineSetNumRings (TAPI32.@) 01285 */ 01286 DWORD WINAPI lineSetNumRings(HLINE hLine, DWORD dwAddressID, DWORD dwNumRings) 01287 { 01288 FIXME("(%p, %08x, %08x): stub.\n", hLine, dwAddressID, dwNumRings); 01289 return 0; 01290 } 01291 01292 /*********************************************************************** 01293 * lineSetStatusMessages (TAPI32.@) 01294 */ 01295 DWORD WINAPI lineSetStatusMessages(HLINE hLine, DWORD dwLineStates, DWORD dwAddressStates) 01296 { 01297 FIXME("(%p, %08x, %08x): stub.\n", hLine, dwLineStates, dwAddressStates); 01298 return 0; 01299 } 01300 01301 /*********************************************************************** 01302 * lineSetTerminal (TAPI32.@) 01303 */ 01304 DWORD WINAPI lineSetTerminal(HLINE hLine, DWORD dwAddressID, HCALL hCall, DWORD dwSelect, DWORD dwTerminalModes, DWORD dwTerminalID, DWORD bEnable) 01305 { 01306 FIXME("(%p, %08x, %p, %08x, %08x, %08x, %08x): stub.\n", hLine, dwAddressID, hCall, dwSelect, dwTerminalModes, dwTerminalID, bEnable); 01307 return 1; 01308 } 01309 01310 /*********************************************************************** 01311 * lineSetTollList (TAPI32.@) 01312 */ 01313 DWORD WINAPI lineSetTollListA(HLINEAPP hLineApp, DWORD dwDeviceID, LPCSTR lpszAddressIn, DWORD dwTollListOption) 01314 { 01315 FIXME("(%p, %08x, %s, %08x): stub.\n", hLineApp, dwDeviceID, lpszAddressIn, dwTollListOption); 01316 return 0; 01317 } 01318 01319 /*********************************************************************** 01320 * lineSetupConference (TAPI32.@) 01321 */ 01322 DWORD WINAPI lineSetupConferenceA(HCALL hCall, HLINE hLine, LPHCALL lphConfCall, LPHCALL lphConsultCall, DWORD dwNumParties, LPLINECALLPARAMS lpCallParams) 01323 { 01324 FIXME("(%p, %p, %p, %p, %08x, %p): stub.\n", hCall, hLine, lphConfCall, lphConsultCall, dwNumParties, lpCallParams); 01325 return 1; 01326 } 01327 01328 /*********************************************************************** 01329 * lineSetupTransfer (TAPI32.@) 01330 */ 01331 DWORD WINAPI lineSetupTransferA(HCALL hCall, LPHCALL lphConsultCall, LPLINECALLPARAMS lpCallParams) 01332 { 01333 FIXME("(%p, %p, %p): stub.\n", hCall, lphConsultCall, lpCallParams); 01334 return 1; 01335 } 01336 01337 /*********************************************************************** 01338 * lineShutdown (TAPI32.@) 01339 */ 01340 DWORD WINAPI lineShutdown(HLINEAPP hLineApp) 01341 { 01342 FIXME("(%p): stub.\n", hLineApp); 01343 return 0; 01344 } 01345 01346 /*********************************************************************** 01347 * lineSwapHold (TAPI32.@) 01348 */ 01349 DWORD WINAPI lineSwapHold(HCALL hActiveCall, HCALL hHeldCall) 01350 { 01351 FIXME("(active: %p, held: %p): stub.\n", hActiveCall, hHeldCall); 01352 return 1; 01353 } 01354 01355 /*********************************************************************** 01356 * lineTranslateAddress (TAPI32.@) 01357 */ 01358 DWORD WINAPI lineTranslateAddressA(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, LPCSTR lpszAddressIn, DWORD dwCard, DWORD dwTranslateOptions, LPLINETRANSLATEOUTPUT lpTranslateOutput) 01359 { 01360 FIXME("(%p, %08x, %08x, %s, %08x, %08x, %p): stub.\n", hLineApp, dwDeviceID, dwAPIVersion, lpszAddressIn, dwCard, dwTranslateOptions, lpTranslateOutput); 01361 return 0; 01362 } 01363 01364 /*********************************************************************** 01365 * lineTranslateDialog (TAPI32.@) 01366 */ 01367 DWORD WINAPI lineTranslateDialogA(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, HWND hwndOwner, LPCSTR lpszAddressIn) 01368 { 01369 FIXME("(%p, %08x, %08x, %p, %s): stub.\n", hLineApp, dwDeviceID, dwAPIVersion, hwndOwner, lpszAddressIn); 01370 return 0; 01371 } 01372 01373 /*********************************************************************** 01374 * lineUncompleteCall (TAPI32.@) 01375 */ 01376 DWORD WINAPI lineUncompleteCall(HLINE hLine, DWORD dwCompletionID) 01377 { 01378 FIXME("(%p, %08x): stub.\n", hLine, dwCompletionID); 01379 return 1; 01380 } 01381 01382 /*********************************************************************** 01383 * lineUnhold (TAPI32.@) 01384 */ 01385 DWORD WINAPI lineUnhold(HCALL hCall) 01386 { 01387 FIXME("(%p): stub.\n", hCall); 01388 return 1; 01389 } 01390 01391 /*********************************************************************** 01392 * lineUnpark (TAPI32.@) 01393 */ 01394 DWORD WINAPI lineUnparkA(HLINE hLine, DWORD dwAddressID, LPHCALL lphCall, LPCSTR lpszDestAddress) 01395 { 01396 FIXME("(%p, %08x, %p, %s): stub.\n", hLine, dwAddressID, lphCall, lpszDestAddress); 01397 return 1; 01398 } Generated on Sun May 27 2012 04:26:35 for ReactOS by
1.7.6.1
|