⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 remconn.cxx

📁 pwlib源码库
💻 CXX
📖 第 1 页 / 共 2 页
字号:
{  if (rasConnection != NULL) {    Ras.HangUp(rasConnection);    rasConnection = NULL;  }}static int GetRasStatus(HRASCONN rasConnection, DWORD & rasError){  RASCONNSTATUS status;  status.dwSize = IsWinVer401() ? sizeof(status) : SizeWin400_RASCONNSTATUS;  rasError = Ras.GetConnectStatus(rasConnection, &status);  if (rasError == ERROR_INVALID_HANDLE) {    PError << "RAS Connection Status invalid handle, retrying.";    rasError = Ras.GetConnectStatus(rasConnection, &status);  }  if (rasError == 0) {    rasError = status.dwError;    SetLastError(rasError);    return status.rasconnstate;  }  PError << "RAS Connection Status failed (" << rasError << "), retrying.";  rasError = Ras.GetConnectStatus(rasConnection, &status);  if (rasError == 0)    rasError = status.dwError;  SetLastError(rasError);  return -1;}PRemoteConnection::Status PRemoteConnection::GetStatus() const{  if (!Ras.IsLoaded())    return NotInstalled;  if (rasConnection == NULL) {    switch (osError) {      case SUCCESS :        return Idle;      case ERROR_CANNOT_FIND_PHONEBOOK_ENTRY :        return NoNameOrNumber;      case ERROR_LINE_BUSY :        return LineBusy;      case ERROR_NO_DIALTONE :        return NoDialTone;      case ERROR_NO_ANSWER :      case ERROR_NO_CARRIER :        return NoAnswer;      case ERROR_PORT_ALREADY_OPEN :      case ERROR_PORT_NOT_AVAILABLE :        return PortInUse;      case ERROR_ACCESS_DENIED :      case ERROR_NO_DIALIN_PERMISSION :      case ERROR_AUTHENTICATION_FAILURE :        return AccessDenied;      case ERROR_HARDWARE_FAILURE :      case ERROR_PORT_OR_DEVICE :        return HardwareFailure;    }    return GeneralFailure;  }  switch (GetRasStatus(rasConnection, ((PRemoteConnection*)this)->osError)) {    case RASCS_Connected :      return Connected;    case RASCS_Disconnected :      break;    case -1 :      return ConnectionLost;    default :      return InProgress;  }  PError << "RAS Connection Status disconnected, retrying.";  switch (GetRasStatus(rasConnection, ((PRemoteConnection*)this)->osError)) {    case RASCS_Connected :      return Connected;    case RASCS_Disconnected :      return Idle;    case -1 :      return ConnectionLost;  }  return InProgress;}PString PRemoteConnection::GetAddress(){  if (Ras.GetProjectionInfo == NULL) {    osError = ERROR_CALL_NOT_IMPLEMENTED;    return PString();  }  if (rasConnection == NULL) {    osError = ERROR_INVALID_HANDLE;    return PString();  }  RASPPPIP ip;  ip.dwSize = sizeof(ip);  DWORD size = sizeof(ip);  osError = Ras.GetProjectionInfo(rasConnection, RASP_PppIp, &ip, &size);  if (osError != ERROR_SUCCESS)    return PString();  osError = ip.dwError;  if (osError != ERROR_SUCCESS)    return PString();  return ip.szIpAddress;}PStringArray PRemoteConnection::GetAvailableNames(){  PStringArray array;  if (!Ras.IsLoaded())    return array;  RASENTRYNAME entry;  entry.dwSize = sizeof(RASENTRYNAME);  LPRASENTRYNAME entries = &entry;  DWORD size = sizeof(entry);  DWORD numEntries;  DWORD rasError = Ras.EnumEntries(NULL, NULL, entries, &size, &numEntries);  if (rasError == ERROR_BUFFER_TOO_SMALL) {    entries = new RASENTRYNAME[size/sizeof(RASENTRYNAME)];    entries[0].dwSize = sizeof(RASENTRYNAME);    rasError = Ras.EnumEntries(NULL, NULL, entries, &size, &numEntries);  }  if (rasError == 0) {    array.SetSize(numEntries);    for (DWORD i = 0; i < numEntries; i++)      array[i] = entries[i].szEntryName;  }  if (entries != &entry)    delete [] entries;  return array;}PRemoteConnection::Status      PRemoteConnection::GetConfiguration(Configuration & config){  return GetConfiguration(remoteName, config);}static DWORD MyRasGetEntryProperties(const char * name, PBYTEArray & entrybuf){  LPRASENTRY entry = (LPRASENTRY)entrybuf.GetPointer(sizeof(RASENTRY));  entry->dwSize = sizeof(RASENTRY);  DWORD entrySize = sizeof(RASENTRY);  DWORD error = Ras.GetEntryProperties(NULL, (char *)name, entry, &entrySize, NULL, 0);  if (error == ERROR_BUFFER_TOO_SMALL) {    entry = (LPRASENTRY)entrybuf.GetPointer(entrySize);    error = Ras.GetEntryProperties(NULL, (char *)name, entry, &entrySize, NULL, 0);  }  return error;}PRemoteConnection::Status      PRemoteConnection::GetConfiguration(const PString & name,                                          Configuration & config){  if (!Ras.IsLoaded() || Ras.GetEntryProperties == NULL)    return NotInstalled;  PBYTEArray entrybuf;  switch (MyRasGetEntryProperties(name, entrybuf)) {    case 0 :      break;    case ERROR_CANNOT_FIND_PHONEBOOK_ENTRY :      return NoNameOrNumber;    default :      return GeneralFailure;  }  LPRASENTRY entry = (LPRASENTRY)(const BYTE *)entrybuf;  config.device = entry->szDeviceType + PString("/") + entry->szDeviceName;  if ((entry->dwfOptions&RASEO_UseCountryAndAreaCodes) == 0)    config.phoneNumber = entry->szLocalPhoneNumber;  else    config.phoneNumber = psprintf("+%u %s %s",                       entry->dwCountryCode, entry->szAreaCode, entry->szLocalPhoneNumber);  if ((entry->dwfOptions&RASEO_SpecificIpAddr) == 0)    config.ipAddress = "";  else    config.ipAddress = psprintf("%u.%u.%u.%u",                                entry->ipaddr.a, entry->ipaddr.b,                                entry->ipaddr.c, entry->ipaddr.d);  if ((entry->dwfOptions&RASEO_SpecificNameServers) == 0)    config.dnsAddress = "";  else    config.dnsAddress = psprintf("%u.%u.%u.%u",                                 entry->ipaddrDns.a, entry->ipaddrDns.b,                                 entry->ipaddrDns.c, entry->ipaddrDns.d);  config.script = entry->szScript;    config.subEntries = entry->dwSubEntries;  config.dialAllSubEntries = entry->dwDialMode == RASEDM_DialAll;  return Connected;}PRemoteConnection::Status      PRemoteConnection::SetConfiguration(const Configuration & config, BOOL create){  return SetConfiguration(remoteName, config, create);}PRemoteConnection::Status      PRemoteConnection::SetConfiguration(const PString & name,                                          const Configuration & config,                                          BOOL create){  if (!Ras.IsLoaded() || Ras.SetEntryProperties == NULL || Ras.ValidateEntryName == NULL)    return NotInstalled;  PBYTEArray entrybuf;  switch (MyRasGetEntryProperties(name, entrybuf)) {    case 0 :      break;    case ERROR_CANNOT_FIND_PHONEBOOK_ENTRY :      if (!create)        return NoNameOrNumber;      if (Ras.ValidateEntryName(NULL, (char *)(const char *)name) != 0)        return GeneralFailure;      break;    default :      return GeneralFailure;  }  LPRASENTRY entry = (LPRASENTRY)(const BYTE *)entrybuf;  PINDEX barpos = config.device.Find('/');  if (barpos == P_MAX_INDEX)    strncpy(entry->szDeviceName, config.device, sizeof(entry->szDeviceName)-1);  else {    strncpy(entry->szDeviceType, config.device.Left(barpos),  sizeof(entry->szDeviceType)-1);    strncpy(entry->szDeviceName, config.device.Mid(barpos+1), sizeof(entry->szDeviceName)-1);  }  strncpy(entry->szLocalPhoneNumber, config.phoneNumber, sizeof(entry->szLocalPhoneNumber)-1);  PStringArray dots = config.ipAddress.Tokenise('.');  if (dots.GetSize() != 4)    entry->dwfOptions &= ~RASEO_SpecificIpAddr;  else {    entry->dwfOptions |= RASEO_SpecificIpAddr;    entry->ipaddr.a = (BYTE)dots[0].AsInteger();    entry->ipaddr.b = (BYTE)dots[1].AsInteger();    entry->ipaddr.c = (BYTE)dots[2].AsInteger();    entry->ipaddr.d = (BYTE)dots[3].AsInteger();  }  dots = config.dnsAddress.Tokenise('.');  if (dots.GetSize() != 4)    entry->dwfOptions &= ~RASEO_SpecificNameServers;  else {    entry->dwfOptions |= RASEO_SpecificNameServers;    entry->ipaddrDns.a = (BYTE)dots[0].AsInteger();    entry->ipaddrDns.b = (BYTE)dots[1].AsInteger();    entry->ipaddrDns.c = (BYTE)dots[2].AsInteger();    entry->ipaddrDns.d = (BYTE)dots[3].AsInteger();  }  strncpy(entry->szScript, config.script, sizeof(entry->szScript-1));  entry->dwDialMode = config.dialAllSubEntries ? RASEDM_DialAll : RASEDM_DialAsNeeded;  if (Ras.SetEntryProperties(NULL, (char *)(const char *)name,                             entry, entrybuf.GetSize(), NULL, 0) != 0)    return GeneralFailure;  return Connected;}PRemoteConnection::Status                  PRemoteConnection::RemoveConfiguration(const PString & name){  if (!Ras.IsLoaded() || Ras.SetEntryProperties == NULL || Ras.ValidateEntryName == NULL)    return NotInstalled;  switch (Ras.DeleteEntry(NULL, (char *)(const char *)name)) {    case 0 :      return Connected;    case ERROR_INVALID_NAME :      return NoNameOrNumber;  }  return GeneralFailure;}// End of File ////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -