------------------------------------------- Notes on phonebook changes between versions ------------------------------------------- Notes on phonebook changes for NT5/Connections ---------------------------------------------- PBK.LIB is a private static library shared by RASDLG.DLL, RASAPI32.DLL, and RASMON.EXE. It's purpose is to encapsulate phonebook file manipulation, presenting an easy to handle linked-list-of-phonebook-entry structures to the caller along with appropriate helper routines. The library provides a finer granularity of control than the public Win32 RasGetEntryProperties API which depends on this library. PBK.LIB has existed for several versions of the product. It includes code to automatically upgrade entries from previous versions on the fly. Converting them to the current format when read, and writing them in the current format when written. This will carry forward to Connections. Following is a summary of conversions from NT4 to NT5/Connections: * "Guid" is generated and assigned to each entry on creation. Upgrade adds the Guid if it doesn't exist. * AreaCode, CountryCode, CountryID, and UseDialingRules are now associated with each individual phone number instead of one for the set. This requires changes to the separate phonenum.lib and possibly to RASAPI32. Upgrade will duplicate any existing single setting for each alternate number. * Comments are now associated with each individual phone number instead of one Description for the entry. Upgrade will associate any existing Description with the first phone number. * New "SharedPhoneNumbers" flag identifies whether phone number for first link is same as all subsequent links. For RASAPI32's convenience, the phone numbers will be written to subsequent links anyway, but this flag eliminates the need to compare lists of phone numbers each time the entry is read, and returns user to what he entered in a case where he explicitly enters the same phone numbers for each device. Upgrade will calculate the value of the flag once and it will be maintained by the UI. * New "ShowMonitorIconInTaskbar", "PreviewUserPw", "PreviewPhoneNumber" and "DisplayProgress" flags per UI prototype. Upgrade will set the flags according to the corresponding global user preference settings. They will thereafter have fixed defaults. * New "TryNextAlternateOnFail" flags per device. RASAPI must provide the functionality. * AR_Custom bit added to AuthRestrictions for EAP. * DE_Ipsec* codes added. Old 'DE_Weak' renamed DE_Mppe40bit. Old 'DE_Strong' renamed 'DE_Mppe128bit'. * dwScriptMode is replaced with fScriptXxx and fScriptXxxTerminal flags. This is because the UI now gives user control over whether the terminal window appears with the script running. This used to occur always on "after" scripts and never on "before" scripts. * New "PrerequisiteEntry" key storing name of WAN entry VPN depends on for double dialing. * On upgrade of old entries, "OverridePref" bits for redial attepts/seconds, idle disconnect seconds, and redial on link failure are set, if clear, and the field value set to the user preference settings. * Port/Device TAPI tries to be a device-centric model, while RASMAN is a port-centric model. In NT4 the phonebook in port-centric. While the NT5/Connections UI is device-centric, i.e. port names are no longer displayed *sigh*, the phonebook will remain as in NT4 with regard to port/device handling EXCEPT that the lookup of the PBPORT associated with a pair of Port/Device keys will be by Device, rather than by Port. Regarding ISDN B-channel naming, the NT5/Connections UI will not distinguish between two B-channels by port name as was done in the past. All B-channels on the same adapter will have the same device name. RASMAN is the one responsible for mapping ISDN B-channel ports to any available ISDN B-channel, i.e. ignoring the explicit ISDNx port written in the phonebook. * MXS modems are retired. Any MXS modem entries are assigned to first Unimodem port. Entry format change details: [ENTRY] ;same Type= ;New Description= ;Deleted, becomes "Comment" of 1st phone# AutoLogon=<1/0> ;same DialParamsUID= ;same, or need upgrade to GUID? Guid= ;New, for use by ShaunCo across systems UsePwForNetwork=<1/0> ;Deleted, unused ServerType= ;Deleted, unused BaseProtocol= ;same Authentication= ;same ExcludedProtocols= ;same LcpExtensions=<1/0> ;same DataEncryption= ;same, but new codes for IpSec SkipNwcWarning=<1/0> ;same SkipDownLevelDialog=<1/0> ;same SwCompression=<1/0> ;same UseCountryAndAreaCodes=<1/0> ;Deleted, becomes "UseDRules" of 1st phone# AreaCode= ;Deleted, becomes "AreaCode" of 1st phone# CountryID= ;Deleted, becomes "CountryID" of 1st # CountryCode= ;Deleted, becomes "CountryCode" of 1st # ShowMonitorIconInTaskBar=<1/0> ;New CustomAuthKey= ;New, an option read from registry CustomAuthData= ;New, blob returned by custom auth DLL AuthRestrictions= ;same, but AR_Custom added for EAP OverridePref= ;same, but all existing bits set by default DialMode= ;same, but RASEDM_DialFirstAvailable added DialPercent=<0-100> ;same DialSeconds=<1-n> ;same HangUpPercent=<0-100> ;same HangUpSeconds=<1-n> ;same RedialAttempts= ;same RedialSeconds= ;same IdleDisconnectSeconds=<-1,0-n> ;same RedialOnLinkFailure=<1/0> ;same CallbackMode=<1/0> ;same CustomDialDll= ;same, i.e. NYI CustomDialFunc= ;same, i.e. NYI AuthenticateServer=<1/0> ;same SecureLocalFiles=<1/0> ;Deleted, replaced with... ShareMsFilePrint=<1/0> ;New BindMsNetClient=<1/0> ;New SharedPhoneNumbers=<1/0> ;New PrerequisiteEntry= ;New PreviewUserPw=<1/0> ;New PreviewDomain=<1/0> ;New PreviewPhoneNumber=<1/0> ;New ShowDialingProgress=<1/0> ;New IpPrioritizeRemote=<1/0> ;same (PPP/SLIP only) IpHeaderCompression=<1/0> ;same (PPP/SLIP only) IpAddress= ;same (PPP/SLIP only) IpAssign= ;same (PPP/SLIP only) IpDnsAddress= ;same (PPP/SLIP only) IpDns2Address= ;same (PPP/SLIP only) IpWinsAddress= ;same (PPP/SLIP only) IpWins2Address= ;same (PPP/SLIP only) IpNameAssign= ;same (PPP/SLIP only) IpFrameSize=<1006/1500> ;same (SLIP only) In general each section contains subsections delimited by MEDIA= and DEVICE= lines. There can be any number of DEVICE subsections. There can be multiple MEDIA/DEVICE sets where the position of the set determines it's sub-entry index, the first being 1, the second 2, etc. For serial media, the program currently expects 1 to 4 DEVICE subsections, representing a preconnect switch, modem, X.25 PAD, and postconnect switch. Following is a full entry: MEDIA=serial ;same Port= ;same Device= ;same ConnectBps= ;same, for old MXS support only DEVICE=switch ;same Type= ;Deleted, converted to 2 fields below Name= ;New, name of switch or empty if none Terminal=<1/0> ;New, terminal is to run with/without above DEVICE=modem ;same PhoneNumber= ;same AreaCode= ;New CountryID= ;New CountryCode= ;New UseDialingRules=<1/0> ;New Comment= ;New, 'Description' from upgrade ... PhoneNumber= ;same AreaCode= ;New CountryID= ;New CountryCode= ;New UseDialingRules=<1/0> ;New Comment= ;New ... PhoneNumber= ;same AreaCode= ;New CountryID= ;New CountryCode= ;New UseDialingRules=<1/0> ;New Comment= ;New LastSelectedPhone= ;New PromoteAlternates=<1/0> ;same TryNextAlternateOnFail=<1/0> ;New TapiBlob= ;same, i.e. #if 0'd out ManualDial=<1/0> ;For old MXS support only HwFlowControl=<1/0> ;For old MXS support only Protocol=<1/0> ;For old MXS support only Compression=<1/0> ;For old MXS support only DEVICE=pad ;same X25Pad= ;same X25Address= ;same UserData= ;same Facilities= ;same DEVICE=switch ;same Type= ;Deleted, converted to 2 fields below Name= ;New, name/path of switch or empty if none Terminal=<1/0> ;New, terminal is to run with/without above For ISDN media, the program expects exactly 1 DEVICE subsection. Note that ISDN is now identical to the "other" case. MEDIA=isdn ;same Port= ;same Device= ;same DEVICE=isdn ;same PhoneNumber= ;same AreaCode= ;New CountryID= ;New CountryCode= ;New UseDialingRules=<1/0> ;New Comment= ;New, 'Description' from upgrade ... PhoneNumber= ;same AreaCode= ;New CountryID= ;New CountryCode= ;New UseDialingRules=<1/0> ;New Comment= ;New ... PhoneNumber= ;same AreaCode= ;New CountryID= ;New CountryCode= ;New UseDialingRules=<1/0> ;New Comment= ;New LastSelectedPhone= ;New PromoteAlternates=<1/0> ;same TryNextPhoneNumberOnFail=<1/0> ;New LineType=<0/1/2> ;same Fallback=<1/0> ;same EnableCompression=<1/0> ;For old protocol only ChannelAggregation= ;For old protocol only For X.25 media, the program expects exactly 1 DEVICE subsection. MEDIA=x25 ;same Port= ;same Device= ;same DEVICE=x25 ;same X25Address= ;same UserData= ;same Facilities= ;same For other media, the program expects exactly one DEVICE subsection with device name matching the media. "Other" media and devices are created for entries assigned to all non-serial medias including ISDN which now matches the rules for "other". MEDIA= ;same Port= ;same Device= ;same DEVICE= ;same PhoneNumber= ;same AreaCode= ;New CountryID= ;New CountryCode= ;New UseDialingRules=<1/0> ;New Comment= ;New, 'Description' from upgrade ... PhoneNumber= ;same AreaCode= ;New CountryID= ;New CountryCode= ;New UseDialingRules=<1/0> ;New Comment= ;New ... PhoneNumber= ;same AreaCode= ;New CountryID= ;New CountryCode= ;New UseDialingRules=<1/0> ;New Comment= ;New LastSelectedPhone= ;New PromoteAlternates=<1/0> ;same TryNextPhoneNumberOnFail=<1/0> ;New The phonebook also supports the concept of "custom" entries, i.e. entries that fit the MEDIA followed by DEVICE subsection rules but which do not include certain expected key fields. A custom entry is not editable with the UI, but may be chosen for connection. This gives us a story for new drivers added by 3rd parties or after release and not yet fully supported in the UI. (NOTE: Support for this may be dropped in RAS API) ------------------------------------------------ Notes on conversion from NT3.51 PBENGINE for NT4 ------------------------------------------------ This library is a reworking of the PBENGINE.LIB shared by the NT 3.51 RASPHONE.EXE and RASAPI32.DLL. It's purpose is to encapsulate phonebook file manipulation, presenting an easy to handle linked-list-of-phonebook-entry structures to the caller along with appropriate helper routines. Conversions: * Becomes strictly Win32 for increased portability. * Replace CRT calls with Win32 where possible. Exceptions: qsort, ltoa * Eliminate CRT string function usage on all non-numeric strings. * Eliminate BLT usage. * Becomes multi-thread-safe. RASDLG can be called from multiple threads in a process so the use of global state information, like 'Pbdata' is eliminated in favor of returned context blocks. Further, index references into global device lists previously read once at initialization are removed, i.e. everything becomes "look up by name" when needed. This will be needed for plug-n-play later anyway. (Callers must make similar adjustment) * Upper level now uses TCHARs rather than CHARs, where UNICODE is built for NT. The actual file is still written out in MB ANSI using RASFIL32.DLL and RASMAN is still ANSI. This change confines UNICODE->ANSI translations to this one thin layer (specifically the StrDupAFromT/TFromA routines) simplifying a possible UI port back to W95. The .PBK file itself could be UNICODE and be editable with notepad.exe, but that would be a change to the shared RASFIL32.DLL and is currently judged "not worth it". * Uses new RTUTIL.DLL tracing instead of old "sdebug" style. * Built in upgrade of NT 3.51 phonebooks. * Explicit "Any " concept is dropped. It's all implicit now based on the type of the selected "preferred" device. This change requested by Gibbs who claims "any port" is extremely expensive in DDM. (This is questionable and will want to watch the reaction carefully. For example, this is a problem for stress scripts?) * VALUE_* changed to prefixes and INDEX_No* changed to *_None to associate these values more clearly with a set of values. * Modem connect response deleted as this is not available from TAPI. * PBENTRY: Now contains a list of PBLINK rather than built-in "single link". See below for old field mappings. * PBPORT: Modem specific fields only used for MXS support as this are part of the new TAPI device blob for Unimodem. * PBLINK contains all multi-linkable information, including the new TAPI device blob. * PBGLOBALS: Global settings are no longer associated with each phonebook file but are stored in the CURRENT_USER registry. They should now be read and written separately from the phonebook using the new Get/SetUserPreferences calls which phonebook-related enough to be provided in pbk.lib. For the most part, PBGLOBALS->PBUSER. Prefix/suffix settings within the phonebook are dropped. These may be implemented in the HKCU preferences. Note the TAPI location settings now optionally handle this functionality. * USERDATA, Get/SetRasUserData calls, and CloseFailedLinkPort call are no longer in the phonebook library. These were in pbengine.lib only so RASPHONE could figure out which connected entries were actually dialed by RASAPI32 to CloseFailedLinkPorts and figure out which ports were disconnected due to "link failure" for redial. These issues must be handled by RASMAN/RASAUTO in new model. If RASAPI engine is moved into RASMAN, the USERDATA info can simply be fields in RASCONNCB. * The BPS lists are dropped, since they are now provided in the TAPI device blob. For MXS, BPS list is moved into the UI which will display an unknown value at the end of it's standard list if encountered. Port/Device TAPI tries to be a device-centric model, while RASMAN is a port-centric model. RASMAN will return the TAPI device ID for each RASMAN port. A device ID of 0xFFFFFFFF indicates an MXS modem port. In this case, the port name is guaranteed to be unique, but the device name is not (old behavior). When the device ID is not 0xFFFFFFFF, the device name is guaranteed to be unique, but the port name is not (because it may not be available). How port and device in a phonebook entry are updated/converted: If the entry has a "Port" key, it is an old format entry or a new format MXS entry. With these entries, an unconfigured port is converted to the first configured port of the same type. If there is no port of the same type the entry is made an "unknown" device with the original port name. Note that "any port" is caught and converted by the above rule. If the entry has a "PreferredDevice" key it is a new format non-MXS entry with no "Port" field. With these entries, an unconfigured device is not converted. This is in anticipation of Plug-n-Play where such conversion is not desirable. The UI must disallow "Configure" on unknown or unconfigured devices. Note that RasDial will search for the selected "port" or "device" first, but if not found will go on and try other ports of the selected ports type. Unimodem and MXS are both tried for "modem" type. The API will apply the blob or the MXS modem settings only to the preferred device, not to alternates. Old phonebook test cases: * Specifies configured MXS port - Shows "device (port)" and works as before except tries other modems on open failure * Specifies "any modem" port - Shows "1st-modem-device (first-modem-port)" and works as before. - If no modem ports, shows "unavailable device (Any modem)" and dial attempt fails with "PORT_NOT_FOUND", which is essentially also working as before. * Specifies existing unimodem port - Shows "device (port)" or "device" and dials the port first trying other unimodem ports on open failure. Organization: The files are organized similar to pbengine.lib where... \ui\common\inc\pbengine.h->\ui\inc\pbk.h Upper level routines and general utilities: pbengine.c->pbk.c pbengin2.c->pbk.c RasMan packaging routines: pbrasman.c->rasman.c = pbrasma2.c->rasman.c Convert list<->file routines and utilities: pbfile.c->file.c pbfile2.c->file.c pbkp.h is added for private library definitions. The "2" files were the basic routines needed by only RASAPI32. With the inclusion of the phonebook editing APIs this distinction is much less significant and has been dropped. Entry format change details: [ENTRY] ;Max raised to 256 Description= ;Same AutoLogon=<1/0> ;same User= ;Deleted, now LSA secret Domain= ;Deleted, now LSA secret DialParamsUID= ;Post NT 3.51 UsePwForNetwork=<1/0> ;New ServerType= ;New, not used by RASAPI BaseProtocol= ;same* Authentication= ;same* ExcludedProtocols= ;same* LcpExtensions=<1/0> ;same DataEncryption=<1/0> ;same SkipNwcWarning=<1/0> ;same SwCompression=<1/0> ;New UseCountryAndAreaCodes=<1/0> ;Post NT 3.51 AreaCode= ;Post NT 3.51 CountryID= ;Post NT 3.51 CountryCode= ;Post NT 3.51 AuthRestrictions= ;New, used by SLIP also SkipDownLevelDialog=<1/0> ;same DialMode= ;Post NT 3.51 DialPercent=<0-100> ;Post NT 3.51 DialSeconds=<1-n> ;Post NT 3.51 HangUpPercent=<0-100> ;Post NT 3.51 HangUpSeconds=<1-n> ;Post NT 3.51 IdleDisconnectSeconds=<-1,0-n> ;Post NT 3.51 SecureLocalFiles=<1/0> ;Post NT 3.51 CustomDialDll= ;Post NT 3.51 CustomDialFunc= ;Post NT 3.51 PppTextAuthentication= ;Deleted, becomes AuthRestrictions above. The following single set of IP parameters appear in place of the equivalent separate sets of PppXxx or SlipXxx parameters in the previous phonebook. IpPrioritizeRemote=<1/0> ;Was PPP specific IpHeaderCompression=<1/0> ;Was PPP specific IpAddress= ;Was PPP specific IpAssign= ;Was PPP specific IpDnsAddress= ;Was PPP specific IpDns2Address= ;Was PPP specific IpWinsAddress= ;Was PPP specific IpWins2Address= ;Was PPP specific IpNameAssign= ;Was PPP specific IpFrameSize=<1006/1500> ;Still SLIP specific In general each section contains subsections delimited by MEDIA= and DEVICE= lines. In pbengine.lib, there MUST be exactly one MEDIA subsection and it must be the first subsection of the section. There can be any number of DEVICE subsections. In pbk.lib, there can be multiple MEDIA/DEVICE sets where the position of the set determines it's sub-entry index, the first being 1, the second 2, etc. For serial media, the program currently expects 1 to 4 DEVICE subsections, representing a preconnect switch, modem, X.25 PAD, and postconnect switch. Following is a full entry: MEDIA=serial ;same Port= ;No longer set to "Any modem" Device= ;New, not passed to RASMAN ConnectBps= ;For old MXS support only DEVICE=switch ;same Type= ;same DEVICE=modem ;same PhoneNumber= ;same PhoneNumber= ;same PhoneNumber= ;same PromoteAlternates=<1/0> ;New, not passed to RASMAN TapiBlob= ;New ManualDial=<1/0> ;For old MXS support only HwFlowControl=<1/0> ;For old MXS support only Protocol=<1/0> ;For old MXS support only Compression=<1/0> ;For old MXS support only DEVICE=pad ;same X25Pad= ;same X25Address= ;same UserData= ;same Facilities= ;same DEVICE=switch ;same Type= ;Switchname can be path For ISDN media, the program expects exactly 1 DEVICE subsection. Note that ISDN is now identical to the "other" case. MEDIA=isdn ;same Port= ;No longer set to "Any ISDN" Device= ;New, not passed to RASMAN DEVICE=isdn ;same PhoneNumber= ;same PhoneNumber= ;same PhoneNumber= ;same PromoteAlternates=<1/0> ;New, not passed to RASMAN LineType=<0/1/2> ;same Fallback=<1/0> ;same EnableCompression=<1/0> ;For old protocol only ChannelAggregation= ;For old protocol only For X.25 media, the program expects exactly 1 DEVICE subsection. MEDIA=x25 ;same Port= ;No longer set to "Any X25" Device= ;New, not passed to RASMAN DEVICE=x25 ;same X25Address= ;same UserData= ;same Facilities= ;same For other media, the program expects exactly one DEVICE subsection with device name matching the media. "Other" media and devices are created for entries assigned to all non-serial medias including ISDN which now matches the rules for "other". MEDIA= ;same Port= ;same Device= ;New, not passed to RASMAN DEVICE= ;same PhoneNumber= ;same PhoneNumber= ;same PhoneNumber= ;same PromoteAlternates=<1/0> ;New, not passed to RASMAN The phonebook also supports the concept of "custom" entries, i.e. entries that fit the MEDIA followed by DEVICE subsection rules but which do not include certain expected key fields. A custom entry is not editable with the UI, but may be chosen for connection. This gives us a story for new drivers added by 3rd parties or after release and not yet fully supported in the UI. (NOTE: This may be dropped in RAS API) (*) Parameter changes internally to use new set-descriptive constants rather than VALUE_*.